OIM 11g Custom ADF Application Development

In this post , I will cover the steps required to create a custom ADF web application.
What this application does is facilitate Account Claim Process.

Users has been migrated from some other IAM product to OIM and exist in disabled state and hence cannot login to perform Self Service operations.

User needs to identify themselves by providing their personal details like personal identification number, zip code and dob etc.
After successfully Identifying themselves they will be able to set a new password and set their challenge questions and answers.

During this process the application will activate their account and set the new password and QnA.

At the end of the process, they will be able to login OIM with their new password set.

The application has been developed using JDeveloper using ADF technology to render user interfaces and MVC design pattern to keep the concerns separate.

Application Structure











































                                                                                                                                                                    
                                                                                                                                                                   
                                                                                                                                                                    
                                                                                                                                                                   
                                                                                                                                                                    



web.xml


  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  3    <context-param>
  4       <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  5       <param-value>client</param-value>
  6    </context-param>
  7    <context-param>
  8       <description>If this parameter is true, there will be an automatic check of the modification date of your JSPs, and saved state will be discarded when JSP's change. It will also automatically check if your skinning css files have changed without you having to restart the server. This makes development easier, but adds overhead. For this reason this parameter should be set to false when your application is deployed.</description>
  9       <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
 10       <param-value>false</param-value>
 11    </context-param>
 12    <context-param>
 13       <description>Whether the 'Generated by...' comment at the bottom of ADF Faces HTML pages should contain version number information.</description>
 14       <param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name>
 15       <param-value>false</param-value>
 16    </context-param>
 17    <filter>
 18       <filter-name>trinidad</filter-name>
 19       <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
 20    </filter>
 21    <filter>
 22       <filter-name>ServletADFFilter</filter-name>
 23       <filter-class>oracle.adf.share.http.ServletADFFilter</filter-class>
 24    </filter>
 25    <filter>
 26       <filter-name>ADFLibraryFilter</filter-name>
 27       <filter-class>oracle.adf.library.webapp.LibraryFilter</filter-class>
 28    </filter>
 29    <filter-mapping>
 30       <filter-name>trinidad</filter-name>
 31       <servlet-name>Faces Servlet</servlet-name>
 32       <dispatcher>FORWARD</dispatcher>
 33       <dispatcher>REQUEST</dispatcher>
 34    </filter-mapping>
 35    <filter-mapping>
 36       <filter-name>ServletADFFilter</filter-name>
 37       <servlet-name>Faces Servlet</servlet-name>
 38       <dispatcher>FORWARD</dispatcher>
 39       <dispatcher>REQUEST</dispatcher>
 40    </filter-mapping>
 41    <filter-mapping>
 42       <filter-name>ADFLibraryFilter</filter-name>
 43       <url-pattern>/*</url-pattern>
 44       <dispatcher>FORWARD</dispatcher>
 45       <dispatcher>REQUEST</dispatcher>
 46    </filter-mapping>
 47    <servlet>
 48       <servlet-name>Faces Servlet</servlet-name>
 49       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
 50       <load-on-startup>1</load-on-startup>
 51    </servlet>
 52    <servlet>
 53       <servlet-name>resources</servlet-name>
 54       <servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class>
 55    </servlet>
 56    <servlet>
 57       <servlet-name>BIGRAPHSERVLET</servlet-name>
 58       <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.graph.GraphServlet</servlet-class>
 59    </servlet>
 60    <servlet>
 61       <servlet-name>BIGAUGESERVLET</servlet-name>
 62       <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.gauge.GaugeServlet</servlet-class>
 63    </servlet>
 64    <servlet>
 65       <servlet-name>MapProxyServlet</servlet-name>
 66       <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.geoMap.servlet.MapProxyServlet</servlet-class>
 67    </servlet>
 68    <servlet>
 69       <servlet-name>GatewayServlet</servlet-name>
 70       <servlet-class>oracle.adfinternal.view.faces.bi.renderkit.graph.FlashBridgeServlet</servlet-class>
 71    </servlet>
 72    <servlet>
 73       <servlet-name>adflibResources</servlet-name>
 74       <servlet-class>oracle.adf.library.webapp.ResourceServlet</servlet-class>
 75    </servlet>
 76    <servlet-mapping>
 77       <servlet-name>Faces Servlet</servlet-name>
 78       <url-pattern>/faces/*</url-pattern>
 79    </servlet-mapping>
 80    <servlet-mapping>
 81       <servlet-name>resources</servlet-name>
 82       <url-pattern>/adf/*</url-pattern>
 83    </servlet-mapping>
 84    <servlet-mapping>
 85       <servlet-name>resources</servlet-name>
 86       <url-pattern>/afr/*</url-pattern>
 87    </servlet-mapping>
 88    <servlet-mapping>
 89       <servlet-name>BIGRAPHSERVLET</servlet-name>
 90       <url-pattern>/servlet/GraphServlet/*</url-pattern>
 91    </servlet-mapping>
 92    <servlet-mapping>
 93       <servlet-name>BIGAUGESERVLET</servlet-name>
 94       <url-pattern>/servlet/GaugeServlet/*</url-pattern>
 95    </servlet-mapping>
 96    <servlet-mapping>
 97       <servlet-name>MapProxyServlet</servlet-name>
 98       <url-pattern>/mapproxy/*</url-pattern>
 99    </servlet-mapping>
100    <servlet-mapping>
101       <servlet-name>resources</servlet-name>
102       <url-pattern>/bi/*</url-pattern>
103    </servlet-mapping>
104    <servlet-mapping>
105       <servlet-name>GatewayServlet</servlet-name>
106       <url-pattern>/flashbridge/*</url-pattern>
107    </servlet-mapping>
108    <servlet-mapping>
109       <servlet-name>adflibResources</servlet-name>
110       <url-pattern>/adflib/*</url-pattern>
111    </servlet-mapping>
112    <mime-mapping>
113       <extension>swf</extension>
114       <mime-type>application/x-shockwave-flash</mime-type>
115    </mime-mapping>
116    <welcome-file-list>
117       <welcome-file>/index.jsp</welcome-file>
118    </welcome-file-list>
119 </web-app>
 
 
 
 

adfc-config.xml






                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
adfc-config.xml Source


  1 <?xml version="1.0" encoding="windows-1252" ?>
  2 <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
  3   <view id="AccountClaim">
  4     <page>/view1.jspx</page>
  5   </view>
  6   <view id="view2">
  7     <page>/view2.jspx</page>
  8   </view>
  9   <view id="view3">
 10     <page>/view3.jspx</page>
 11   </view>
 12   <view id="view4">
 13     <page>/view4.jspx</page>
 14   </view>
 15   <view id="view5">
 16     <page>/view5.jspx</page>
 17   </view>
 18   <view id="ChangePassword">
 19     <page>/ChangePassword.jspx</page>
 20   </view>
 21   <view id="ClaimSuccess">
 22     <page>/ClaimSuccess.jspx</page>
 23   </view>
 24   <control-flow-rule id="__5">
 25     <from-activity-id id="__6">AccountClaim</from-activity-id>
 26     <control-flow-case id="__15">
 27       <from-outcome id="__20">false</from-outcome>
 28       <to-activity-id id="__14">AccountClaim</to-activity-id>
 29     </control-flow-case>
 30     <control-flow-case id="__22">
 31       <from-outcome id="__23">cancel</from-outcome>
 32       <to-activity-id id="__21">view3</to-activity-id>
 33     </control-flow-case>
 34     <control-flow-case id="__7">
 35       <from-outcome id="__9">true</from-outcome>
 36       <to-activity-id id="__8">ChangePassword</to-activity-id>
 37     </control-flow-case>
 38   </control-flow-rule>
 39   <control-flow-rule id="__17">
 40     <from-activity-id id="__16">*</from-activity-id>
 41     <control-flow-case id="__19">
 42       <to-activity-id id="__18">AccountClaim</to-activity-id>
 43     </control-flow-case>
 44   </control-flow-rule>
 45   <control-flow-rule id="__53">
 46     <from-activity-id id="__54">ChangePassword</from-activity-id>
 47     <control-flow-case id="__55">
 48       <from-outcome id="__57">true</from-outcome>
 49       <to-activity-id id="__56">ClaimSuccess</to-activity-id>
 50     </control-flow-case>
 51     <control-flow-case id="__59">
 52       <from-outcome id="__60">false</from-outcome>
 53       <to-activity-id id="__58">view3</to-activity-id>
 54     </control-flow-case>
 55     <control-flow-case id="__62">
 56       <from-outcome id="__63">NO_USER_FOUND</from-outcome>
 57       <to-activity-id id="__61">view4</to-activity-id>
 58     </control-flow-case>
 59     <control-flow-case id="__64">
 60       <from-outcome id="__66">CLAIMED_EARLIER</from-outcome>
 61       <to-activity-id id="__65">view2</to-activity-id>
 62     </control-flow-case>
 63     <control-flow-case id="__68">
 64       <from-outcome id="__69">MULTIPLE_USER_FOUND</from-outcome>
 65       <to-activity-id id="__67">view5</to-activity-id>
 66     </control-flow-case>
 67   </control-flow-rule>
 68   <managed-bean id="__1">
 69     <managed-bean-name id="__2">backing_view1</managed-bean-name>
 70     <managed-bean-class id="__4">view.resources.backing.View1</managed-bean-class>
 71     <managed-bean-scope id="__3">backingBean</managed-bean-scope>
 72     <!--oracle-jdev-comment:managed-bean-jsp-link:1view1.jspx-->
 73   </managed-bean>
 74   <managed-bean id="__10">
 75     <managed-bean-name id="__12">backing_view2</managed-bean-name>
 76     <managed-bean-class id="__11">view.resources.backing.View2</managed-bean-class>
 77     <managed-bean-scope id="__13">backingBean</managed-bean-scope>
 78     <!--oracle-jdev-comment:managed-bean-jsp-link:1view2.jspx-->
 79   </managed-bean>
 80   <managed-bean id="__35">
 81     <managed-bean-name id="__37">backing_view4</managed-bean-name>
 82     <managed-bean-class id="__34">view.resources.backing.View4</managed-bean-class>
 83     <managed-bean-scope id="__36">backingBean</managed-bean-scope>
 84     <!--oracle-jdev-comment:managed-bean-jsp-link:1view4.jspx-->
 85   </managed-bean>
 86   <managed-bean id="__44">
 87     <managed-bean-name id="__41">backing_view5</managed-bean-name>
 88     <managed-bean-class id="__43">view.resources.backing.View5</managed-bean-class>
 89     <managed-bean-scope id="__42">backingBean</managed-bean-scope>
 90     <!--oracle-jdev-comment:managed-bean-jsp-link:1view5.jspx-->
 91   </managed-bean>
 92   <managed-bean id="__46">
 93     <managed-bean-name id="__47">backing_ChangePassword</managed-bean-name>
 94     <managed-bean-class id="__45">view.resources.backing.ChangePassword</managed-bean-class>
 95     <managed-bean-scope id="__48">backingBean</managed-bean-scope>
 96     <!--oracle-jdev-comment:managed-bean-jsp-link:1ChangePassword.jspx-->
 97   </managed-bean>
 98   <managed-bean id="__51">
 99     <managed-bean-name id="__50">challengeQnABean</managed-bean-name>
100     <managed-bean-class id="__49">view.resources.backing.ChallengeQnABean</managed-bean-class>
101     <managed-bean-scope id="__52">none</managed-bean-scope>
102   </managed-bean>
103 </adfc-config>
104 

Screen 1 - view1.jspx






                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
Source 



  1 <?xml version='1.0' encoding='windows-1252'?>
  2 <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
  3           xmlns:f="http://java.sun.com/jsf/core"
  4           xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
  5           xmlns:c="http://java.sun.com/jsp/jstl/core">
  6   <c:set var="viewcontrollerBundle"
  7          value="#{adfBundle['view.resources.ViewControllerBundle']}"/>    
  8     <jsp:directive.page contentType="text/html;charset=windows-1252"/>
  9   <f:view>
 10     <af:document id="d1" binding="#{backingBeanScope.backing_view1.d1}"
 11                  title="#{viewcontrollerBundle.ACCOUNT_CLAIM_VALIDATION}">
 12       <af:form id="f1" binding="#{backingBeanScope.backing_view1.f1}">
 13         <af:pageTemplate viewId="/oracle/templates/threeColumnTemplate.jspx"
 14                          id="pt1">
 15           <f:facet name="center">
 16             <af:panelFormLayout binding="#{backingBeanScope.backing_view1.pfl1}"
 17                                 id="pfl1" rows="10">    
 18          <af:panelLabelAndMessage label="#{viewcontrollerBundle.ACCOUNT_INFORMATION}"
 19                                          binding="#{backingBeanScope.backing_view1.plam1}"
 20                                          id="plam1"/>
 21                 <af:inputText label="#{viewcontrollerBundle.UID}"
 22                               binding="#{backingBeanScope.backing_view1.it1}"
 23                               id="it1" showRequired="true" required="true"
 24                               validator="#{backingBeanScope.backing_view1.it1_validator}"/>
 25                 <af:inputText label="#{viewcontrollerBundle.PIN}"
 26                               binding="#{backingBeanScope.backing_view1.it2}"
 27                               id="it2" secret="true" showRequired="true"
 28                               required="true"
 29                               validator="#{backingBeanScope.backing_view1.it2_validator}"/>
 30                 <af:inputText
 31                               binding="#{backingBeanScope.backing_view1.it3}"
 32                               id="it3" showRequired="true" required="true"
 33                               validator="#{backingBeanScope.backing_view1.it3_validator}"
 34                               label="#{viewcontrollerBundle.ZIP_CODE}"/>
 35                 <af:inputDate
 36                               binding="#{backingBeanScope.backing_view1.id2}"
 37                               id="id2" showRequired="true" required="true"
 38                               label="#{viewcontrollerBundle.DATE_OF_BIRTH}"
 39                               validator="#{backingBeanScope.backing_view1.id2_validator2}"/>
 40               
 41               <af:panelGroupLayout binding="#{backingBeanScope.backing_view1.pgl1}"
 42                                    id="pgl1">
 43                 <af:commandButton text="#{viewcontrollerBundle.NEXT}"
 44                                   binding="#{backingBeanScope.backing_view1.cb1}"
 45                                   id="cb1"
 46                                   action="#{backingBeanScope.backing_view1.cb1_action}"/>
 47                 <af:commandButton text="#{viewcontrollerBundle.CANCEL}"
 48                                   binding="#{backingBeanScope.backing_view1.cb2}"
 49                                   id="cb2" action="cancel"/>                                   
 50               </af:panelGroupLayout>               
 51             </af:panelFormLayout>           
 52           </f:facet>
 53           <f:facet name="header"/>
 54           <f:facet name="end"/>
 55           <f:facet name="start"/>
 56           <f:facet name="branding"/>
 57           <f:facet name="copyright"/>
 58           <f:facet name="status"/>
 59         </af:pageTemplate>
 60       </af:form>
 61     </af:document>
 62   </f:view>
 63   <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_view1-->
 64 </jsp:root>
 65 


Backing Bean of view1.jspx : View1.java



  1 package view.resources.backing;
  2 
  3 import java.text.SimpleDateFormat;
  4 
  5 import javax.faces.application.FacesMessage;
  6 
  7 import java.util.Date;
  8 import java.util.List;
  9 import java.util.Map;
 10 import java.util.ResourceBundle;
 11 
 12 import java.util.regex.Matcher;
 13 import java.util.regex.Pattern;
 14 
 15 import javax.faces.component.UIComponent;
 16 import javax.faces.context.FacesContext;
 17 
 18 import javax.faces.validator.ValidatorException;
 19 
 20 import oracle.adf.share.ADFContext;
 21 import oracle.adf.view.rich.component.rich.RichDocument;
 22 import oracle.adf.view.rich.component.rich.RichForm;
 23 import oracle.adf.view.rich.component.rich.input.RichInputDate;
 24 import oracle.adf.view.rich.component.rich.input.RichInputText;
 25 import oracle.adf.view.rich.component.rich.layout.RichPanelFormLayout;
 26 import oracle.adf.view.rich.component.rich.layout.RichPanelGroupLayout;
 27 import oracle.adf.view.rich.component.rich.layout.RichPanelHeader;
 28 import oracle.adf.view.rich.component.rich.layout.RichPanelLabelAndMessage;
 29 import oracle.adf.view.rich.component.rich.nav.RichCommandButton;
 30 
 31 import oracle.iam.identity.exception.NoSuchUserException;
 32 import oracle.iam.identity.exception.UserLookupException;
 33 import oracle.iam.identity.exception.UserModifyException;
 34 import oracle.iam.identity.exception.UserSearchException;
 35 import oracle.iam.identity.exception.ValidationFailedException;
 36 import oracle.iam.identity.usermgmt.api.UserManager;
 37 import oracle.iam.identity.usermgmt.vo.User;
 38 import oracle.iam.identity.usermgmt.vo.UserManagerResult;
 39 import oracle.iam.platform.OIMClient;
 40 import oracle.iam.platform.Role;
 41 
 42 import oracle.iam.platform.authz.exception.AccessDeniedException;
 43 
 44 import oracle.iam.platform.entitymgr.vo.SearchCriteria;
 45 
 46 import org.apache.myfaces.trinidad.component.UIXGroup;
 47 
 48 import static view.resources.backing.PropertyLoader.admin;
 49 import static view.resources.backing.PropertyLoader.password;
 50 import static view.resources.backing.PropertyLoader.GRACE_DAYS;
 51 
 52 
 53 
 54 public class View1 {
 55  private RichForm f1;
 56  private RichDocument d1;
 57  private RichCommandButton cb1;
 58  private UIXGroup g1;
 59  private RichInputText it1;
 60  private RichInputText it2;
 61  private RichInputText it3;
 62  private RichCommandButton cb2;
 63  private String className = this.getClass().getSimpleName();
 64  private RichPanelFormLayout pfl1;
 65  private RichPanelGroupLayout pgl1;
 66  private RichPanelLabelAndMessage plam1;
 67  private RichPanelFormLayout pfl2;
 68  private RichPanelGroupLayout pgl2;
 69 
 70  private UIXGroup g2;
 71  private RichInputDate id2;
 72  private RichPanelHeader ph1;
 73  
 74 
 75  public void setF1(RichForm f1) {
 76   this.f1 = f1;
 77  }
 78 
 79  public RichForm getF1() {
 80   return f1;
 81  }
 82 
 83  public void setD1(RichDocument d1) {
 84   this.d1 = d1;
 85  }
 86 
 87  public RichDocument getD1() {
 88   return d1;
 89  }
 90 
 91  public void setCb1(RichCommandButton cb1) {
 92   this.cb1 = cb1;
 93  }
 94 
 95  public RichCommandButton getCb1() {
 96   return cb1;
 97  }
 98 
 99  private String getResourceBundleName() {
100   String method = Thread.currentThread().getStackTrace()[1]
101     .getMethodName();
102   enter(method);
103   String wpf = "";
104   try {
105    wpf = ResourceBundle.getBundle("view.backing.whichpropfile")
106      .getString("whichpropfile");
107    System.out.println("wpf  ->" + wpf);
108   } catch (Exception e) {
109    e.printStackTrace();
110    System.out.println("e.getMessage ->" + e.getMessage());
111   }
112   exit(method);
113   return wpf;
114  }
115 
116  private void enter(String method) {
117   System.out.println("Entering  " + method + " of class " + className);
118  }
119 
120  private void exit(String method) {
121   System.out.println("Exiting  " + method + " of class " + className);
122  }
123 
124  public String cb1_action() {
125   String response = "false";
126   String method = Thread.currentThread().getStackTrace()[1]
127     .getMethodName();
128   enter(method);
129   try {
130 
131    String oimUserName = it1.getValue().toString();
132    System.out.println("oimUserName ->" + oimUserName);
133    setInSession("username", oimUserName);
134    OIMOperator oim = new OIMOperator(admin, password);
135    UserManager usersvc = oim.getUserManager();
136    User user = usersvc.getDetails(oimUserName, null, true);
137    // make all the checks
138    // boolean otherValuesMatch = otherValuesMatch(user);
139    boolean isUserDisabled = isUserDisabled(user);
140    boolean isPinExpired = isPinExpired(user);
141    if (isUserDisabled && (!isPinExpired)) {
142     oim.logout();
143     System.out.println("all conditions satisfied");
144     response = "true";
145    }
146   } catch (Exception e) {
147    e.printStackTrace();
148    System.out.println("e.toString() ->" + e.toString());
149    System.out.println("e.getMessage() ->" + e.getMessage());
150   }
151   exit(method);
152   return response;
153  }
154 
155  private boolean isUserDisabled(User user) {
156   String method = Thread.currentThread().getStackTrace()[1]
157     .getMethodName();
158   enter(method);
159   boolean isDisabled = false;
160   String isDis = "";
161   try {
162    isDis = user.getUserDisabled();
163    System.out.println("isDis ->" + isDis);
164    if (isDis.equalsIgnoreCase("1")) {
165     isDisabled = true;
166    }
167   } catch (Exception e) {
168 
169    e.printStackTrace();
170   }
171   exit(method);
172   return isDisabled;
173  }
174 
175  private boolean isEndDateInFuture(User user) {
176   String method = Thread.currentThread().getStackTrace()[1]
177     .getMethodName();
178   enter(method);
179   boolean isEndInFuture = false;
180   Date endDate;
181   try {
182    endDate = user.getEndDate();
183    System.out.println("endDate ->" + endDate);
184    Date currentDate = new Date();
185    System.out.println("currentDate ->" + currentDate);
186    int dateComp = currentDate.compareTo(endDate);
187    if ((dateComp == 0) || (dateComp < 0)) {
188     isEndInFuture = true;
189    }
190   } catch (Exception e) {
191    System.out.println("e.getMessage() ->" + e.getMessage());
192    e.printStackTrace();
193   }
194   exit(method);
195   return isEndInFuture;
196  }
197 
198  private boolean isPinExpired(User user) {
199   String method = Thread.currentThread().getStackTrace()[1]
200     .getMethodName();
201   enter(method);
202   boolean isPinExpired = false;
203   Date startDate;
204   try {
205    startDate = (Date) user.getAttribute("PIN Start Date");
206    System.out.println("startDate ->" + startDate);
207    long startTime = startDate.getTime();
208    System.out.println("startTime -> " + startTime);
209    long oneday = 24 * 60 * 60 * 1000;
210    long totalGraceTime = Integer.parseInt(GRACE_DAYS) * oneday;
211    System.out.println("totalGraceTime -> " + totalGraceTime);
212    Date currentDate = new Date();
213    long currentTime = currentDate.getTime();
214    System.out.println("currentTime -> " + currentTime);
215    if (currentTime - startTime <= totalGraceTime) {
216     System.out.println("Within the Grace Period");
217     isPinExpired = false;
218    } else {
219     System.out.println("Grace Period Exceeded");
220     isPinExpired = true;
221    }
222   } catch (Exception e) {
223    System.out.println("e.getMessage() ->" + e.getMessage());
224    e.printStackTrace();
225   }
226   exit(method);
227   return isPinExpired;
228  }
229 
230  private void setInSession(String attr, String value) {
231   String method = Thread.currentThread().getStackTrace()[1]
232     .getMethodName();
233   enter(method);
234   try {
235    ADFContext adfCtx = ADFContext.getCurrent();
236    Map session = adfCtx.getSessionScope();
237    session.put(attr, value);
238    System.out.println("Added in session -> " + attr);
239   } catch (Exception e) {
240    e.printStackTrace();
241   }
242  }
243 
244  private boolean pinMatch(String uid, String tempPIN) {
245   String method = Thread.currentThread().getStackTrace()[1]
246     .getMethodName();
247   enter(method);
248   boolean flag = false;
249 
250   try {
251    OIMOperator oim = new OIMOperator(admin, password);
252    UserManager usersvc = oim.getUserManager();
253    User user = usersvc.getDetails(uid, null, true);
254 
255    String tPin = "";
256    tPin = (String) user.getAttribute("Temp PIN");
257    System.out.println("tPin ->" + tPin);
258    boolean tPinMatches = tPin.equalsIgnoreCase(tempPIN);
259    System.out.println("tPinMatches ->" + tPinMatches);
260    if (tPinMatches) {
261     flag = true;
262     setInSession("pin", tPin);
263    } else {
264     System.out
265       .println("set the logic to set OIM UDF ACP Counter to three or more");
266    }
267    oim.logout();
268   } catch (Exception e) {
269 
270    e.printStackTrace();
271   }
272   exit(method);
273   return flag;
274  }
275 
276  private boolean zipMatch(String uid, String zip) {
277   String method = Thread.currentThread().getStackTrace()[1]
278     .getMethodName();
279   enter(method);
280   boolean flag = false;
281 
282   try {
283    OIMOperator oim = new OIMOperator(admin, password);
284    UserManager usersvc = oim.getUserManager();
285    User user = usersvc.getDetails(uid, null, true);
286 
287    String zipCode = "";
288    zipCode = (String) user.getAttribute("Zip Code");
289    System.out.println("zipCode ->" + zipCode);
290    boolean zipMatches = zip.equalsIgnoreCase(zip);
291    System.out.println("zipMatches ->" + zipMatches);
292    if (zipMatches) {
293     flag = true;
294     setInSession("zip", zipCode);
295    }
296    oim.logout();
297   } catch (Exception e) {
298    e.printStackTrace();
299   }
300   exit(method);
301   return flag;
302  }
303 
304  private boolean dobMatch(String uid, Date dob) {
305   String method = Thread.currentThread().getStackTrace()[1]
306     .getMethodName();
307   enter(method);
308   boolean flag = false;
309 
310   try {
311    OIMOperator oim = new OIMOperator(admin, password);
312    UserManager usersvc = oim.getUserManager();
313    User user = usersvc.getDetails(uid, null, true);
314 
315    Date dobOIM = null;
316    dobOIM = (Date) user.getAttribute("Date of Birth");
317    System.out.println("dobOIM ->" + dobOIM);
318    boolean dobMatches = dob.equals(dobOIM);
319    System.out.println("dobMatches ->" + dobMatches);
320    if (dobMatches) {
321     flag = true;
322    }
323    oim.logout();
324   } catch (Exception e) {
325 
326    e.printStackTrace();
327   }
328   exit(method);
329   return flag;
330  }
331 
332  private boolean otherValuesMatch(User user) {
333   String method = Thread.currentThread().getStackTrace()[1]
334     .getMethodName();
335   enter(method);
336   boolean flag = false;
337 
338   try {
339 
340    String zip = it3.getValue().toString();
341    System.out.println("zip ->" + zip);
342    Date dob = (Date) id2.getValue();
343    System.out.println("dob -> " + dob);
344 
345    String z = "";
346    z = (String) user.getAttribute("Zip Code");
347    System.out.println("z ->" + z);
348 
349    Date d = null;
350    d = (Date) user.getAttribute("Date of Birth");
351    System.out.println("d ->" + d);
352 
353    boolean zipMatches = zip.equalsIgnoreCase(z);
354    System.out.println("zipMatches ->" + zipMatches);
355    boolean dobMatches = dob.equals(d);
356    System.out.println("dobMatches ->" + dobMatches);
357 
358    if (zipMatches && dobMatches) {
359     flag = true;
360 
361     setInSession("zip", z);
362     // setInSession("dob", d);
363 
364    }
365   } catch (Exception e) {
366 
367    e.printStackTrace();
368   }
369   exit(method);
370   return flag;
371  }
372 
373  public void setG1(UIXGroup g1) {
374   this.g1 = g1;
375  }
376 
377  public UIXGroup getG1() {
378   return g1;
379  }
380 
381  public void setIt1(RichInputText it1) {
382   this.it1 = it1;
383  }
384 
385  public RichInputText getIt1() {
386   return it1;
387  }
388 
389  public void setIt2(RichInputText it2) {
390   this.it2 = it2;
391  }
392 
393  public RichInputText getIt2() {
394   return it2;
395  }
396 
397  public void setIt3(RichInputText it3) {
398   this.it3 = it3;
399  }
400 
401  public RichInputText getIt3() {
402   return it3;
403  }
404 
405  public void setCb2(RichCommandButton cb2) {
406   this.cb2 = cb2;
407  }
408 
409  public RichCommandButton getCb2() {
410   return cb2;
411  }
412 
413  public void setPfl1(RichPanelFormLayout pfl1) {
414   this.pfl1 = pfl1;
415  }
416 
417  public RichPanelFormLayout getPfl1() {
418   return pfl1;
419  }
420 
421  public void setPgl1(RichPanelGroupLayout pgl1) {
422   this.pgl1 = pgl1;
423  }
424 
425  public RichPanelGroupLayout getPgl1() {
426   return pgl1;
427  }
428 
429  public void setPlam1(RichPanelLabelAndMessage plam1) {
430   this.plam1 = plam1;
431  }
432 
433  public RichPanelLabelAndMessage getPlam1() {
434   return plam1;
435  }
436 
437  public void setPfl2(RichPanelFormLayout pfl2) {
438   this.pfl2 = pfl2;
439  }
440 
441  public RichPanelFormLayout getPfl2() {
442   return pfl2;
443  }
444 
445  public void setPgl2(RichPanelGroupLayout pgl2) {
446   this.pgl2 = pgl2;
447  }
448 
449  public RichPanelGroupLayout getPgl2() {
450   return pgl2;
451  }
452 
453  public void setG2(UIXGroup g2) {
454   this.g2 = g2;
455  }
456 
457  public UIXGroup getG2() {
458   return g2;
459  }
460 
461  public void it3_validator(FacesContext facesContext,
462    UIComponent uIComponent, Object object) {
463 
464   FacesContext fc = FacesContext.getCurrentInstance();
465   String zipCode = (String) object;
466   System.out.println("zipCode -> " + zipCode);
467 
468   if (!isNumeric(zipCode)) {
469    throw new ValidatorException(new FacesMessage(
470      FacesMessage.SEVERITY_ERROR,
471      "Zip Code should be all numeric", null));
472   }
473 
474   if (!zipMatch((String) getIt1().getValue(), zipCode)) {
475    throw new ValidatorException(new FacesMessage(
476      FacesMessage.SEVERITY_ERROR, "Zip Code is not correct",
477      null));
478   }
479 
480  }
481 
482  private boolean isNumeric(String str) {
483   String method = Thread.currentThread().getStackTrace()[1]
484     .getMethodName();
485   enter(method);
486   boolean flag = true;
487   try {
488 
489    int d = Integer.parseInt(str);
490    System.out.println("d -> " + d);
491   } catch (NumberFormatException nfe) {
492    nfe.printStackTrace();
493    flag = false;
494   }
495   exit(method);
496   return flag;
497  }
498 
499  public void setId2(RichInputDate id2) {
500   this.id2 = id2;
501  }
502 
503  public RichInputDate getId2() {
504   return id2;
505  }
506 
507  public void setPh1(RichPanelHeader ph1) {
508   this.ph1 = ph1;
509  }
510 
511  public RichPanelHeader getPh1() {
512   return ph1;
513  }
514 
515  private boolean checkAlphaNumeric(String s) {
516   Pattern ALPHA = Pattern.compile("[A-Za-z]+");
517   Pattern NUMERIC = Pattern.compile("[0-9]+");
518   if (s == null) {
519    return false;
520   } else {
521    Matcher m = ALPHA.matcher(s);
522    Matcher m2 = NUMERIC.matcher(s);
523    return (m.matches() || m2.matches());
524   }
525  }
526 
527  private boolean isUserExist(String userid) {
528   boolean flag = false;
529   String method = Thread.currentThread().getStackTrace()[1]
530     .getMethodName();
531   enter(method);
532   try {
533 
534   } catch (Exception e) {
535    e.printStackTrace();
536   }
537   exit(method);
538   return flag;
539  }
540 
541  public void it1_validator(FacesContext facesContext,
542    UIComponent uIComponent, Object object) {
543   String oimUserName = (String) object;
544   System.out.println("oimUserName -> " + oimUserName);
545   if (checkAlphaNumeric(oimUserName)) {
546    System.out.println("Alphanumeric");
547   } else {
548    System.out.println("Not alphanumeric");
549    throw new ValidatorException(new FacesMessage(
550      FacesMessage.SEVERITY_ERROR, "UID should be AlphaNumeric",
551      null));
552   }
553   OIMOperator oim = new OIMOperator(admin, password);
554   UserManager usersvc = oim.getUserManager();
555   SearchCriteria criteria = new SearchCriteria("User Login", oimUserName,
556     SearchCriteria.Operator.EQUAL);
557   List<User> result = null;
558 
559   try {
560    result = usersvc.search(criteria, null, null);
561   } catch (AccessDeniedException e) {
562    e.printStackTrace();
563   } catch (UserSearchException e) {
564    e.printStackTrace();
565   }
566   oim.logout();
567   if (result.size() == 0) {
568    System.out.println("UID does not exist");
569    throw new ValidatorException(new FacesMessage(
570      FacesMessage.SEVERITY_ERROR, "UID does not exist", null));
571   }
572 
573  }
574 
575  private int pinValidCount = 0;
576 
577  private boolean fetchPinValidCount(User user) {
578   String method = Thread.currentThread().getStackTrace()[1]
579     .getMethodName();
580   enter(method);
581   boolean pinValidCount = true;
582   try {
583    String pinAttempt = "";
584    pinAttempt = (String) user.getAttribute("PINAttempt");
585    System.out.println("pinAttempt ->" + pinAttempt);
586    int pinAttemptCount = Integer.parseInt(pinAttempt);
587 
588    if (pinAttemptCount >= 3) {
589     System.out.println("pinAttempt limit exceeded");
590     pinValidCount = false;
591    }
592   } catch (Exception e) {
593    e.printStackTrace();
594   }
595   exit(method);
596   return pinValidCount;
597  }
598 
599  private int getWrongPinAttempt(User user) {
600   String method = Thread.currentThread().getStackTrace()[1]
601     .getMethodName();
602   enter(method);
603   int pinAttemptCount = 0;
604   try {
605    String pinAttempt = (String) user.getAttribute("PINAttempt");
606    pinAttemptCount = Integer.parseInt(pinAttempt);
607    System.out.println("pinAttemptCount -> " + pinAttemptCount);
608    if (pinAttemptCount >= 3) {
609     System.out.println(" pinAttemptCount is 3 or more");
610     // call pinInValidate
611    } else {
612     pinAttemptCount = pinAttemptCount + 1;
613    }
614   } catch (Exception e) {
615    e.printStackTrace();
616   }
617   exit(method);
618   return pinAttemptCount;
619  }
620 
621  public void it2_validator(FacesContext facesContext,
622    UIComponent uIComponent, Object object) {
623   String method = Thread.currentThread().getStackTrace()[1]
624     .getMethodName();
625   enter(method);
626 
627   String pin = (String) object;
628   System.out.println("pin -> " + pin);
629   String uid = (String) getIt1().getValue();
630   System.out.println("uid ->" + uid);
631   OIMOperator oim = new OIMOperator(admin, password);
632   UserManager usersvc = oim.getUserManager();
633   User user;
634   try {
635    user = usersvc.getDetails(uid, null, true);
636   } catch (AccessDeniedException e) {
637    e.printStackTrace();
638   } catch (NoSuchUserException e) {
639    e.printStackTrace();
640   } catch (UserLookupException e) {
641    e.printStackTrace();
642   }
643   boolean fetchPinValidCount = fetchPinValidCount(user);
644   System.out.println("fetchPinValidCount -> " + fetchPinValidCount);
645   if (!fetchPinValidCount) {
646    Date pinVAlidityDate = (Date) user.getAttribute("PINVAlidityDate");
647 
648    throw new ValidatorException(new FacesMessage(
649      FacesMessage.SEVERITY_ERROR,
650      "PIN Attempt Limit is Reached", null));
651   }
652   boolean isPinValid = pinMatch(uid, pin);
653   if (!isPinValid) {
654    System.out.println("PIN is not valid");
655    int pinAttemptCount = getWrongPinAttempt(user);
656    String pinAttempt = String.valueOf(pinAttemptCount);
657    System.out.println("pinAttempt -> " + pinAttempt);
658    user.setAttribute("PINAttempt", pinAttempt);
659    try {
660     usersvc.modify(user);
661    } catch (ValidationFailedException e) {
662     e.printStackTrace();
663    } catch (AccessDeniedException e) {
664     e.printStackTrace();
665    } catch (UserModifyException e) {
666     e.printStackTrace();
667    } catch (NoSuchUserException e) {
668     e.printStackTrace();
669    }
670    throw new ValidatorException(new FacesMessage(
671      FacesMessage.SEVERITY_ERROR, "PIN is not valid", null));
672   }
673   oim.logout();
674   exit(method);
675 
676  }
677 
678  public void id2_validator2(FacesContext facesContext,
679    UIComponent uIComponent, Object object) {
680   Date dob = (Date) object;
681   System.out.println("dob -> " + dob);
682   if (!dobMatch((String) getIt1().getValue(), dob)) {
683    throw new ValidatorException(new FacesMessage(
684      FacesMessage.SEVERITY_ERROR,
685      "Date of Birth is not correct", null));
686   }
687  }
688 }
689 

Screen 2 : ChangePassword.jspx







                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                    Source
  1 <?xml version='1.0' encoding='windows-1252'?>
  2 <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
  3           xmlns:f="http://java.sun.com/jsf/core"
  4           xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
  5            xmlns:c="http://java.sun.com/jsp/jstl/core">
  6           <c:set var="viewcontrollerBundle"
  7          value="#{adfBundle['view.resources.ViewControllerBundle']}"/>    
  8     <jsp:directive.page contentType="text/html;charset=windows-1252"/>
  9   <f:view>
 10     <af:document id="d1" title="Change Password Page"
 11                  binding="#{backingBeanScope.backing_ChangePassword.d1}">
 12       <af:form id="f1" binding="#{backingBeanScope.backing_ChangePassword.f1}">
 13         <af:pageTemplate viewId="/oracle/templates/threeColumnTemplate.jspx"
 14                          id="pt1">
 15           <f:facet name="center">
 16           
 17             <af:panelFormLayout binding="#{backingBeanScope.backing_ChangePassword.pfl1}"
 18                                 id="pfl1" rows="99" maxColumns="1">
 19               
 20                 <af:panelLabelAndMessage label="Password Information"
 21                                          binding="#{backingBeanScope.backing_ChangePassword.plam1}"
 22                                          id="plam1"/>
 23                 <af:inputText label="Password            "
 24                               binding="#{backingBeanScope.backing_ChangePassword.it1}"
 25                               id="it1" showRequired="true" secret="true"
 26                               required="true"/>
 27                 <af:inputText label="New Password        "
 28                               binding="#{backingBeanScope.backing_ChangePassword.it2}"
 29                               id="it2" secret="true" showRequired="true"
 30                               required="true"/>
 31                 <af:inputText label="Confirm New Password"
 32                               binding="#{backingBeanScope.backing_ChangePassword.it3}"
 33                               id="it3" secret="true" showRequired="true"
 34                               validator="#{backingBeanScope.backing_ChangePassword.it3_validator}"
 35                               required="true"/>
 36               
 37                 <af:panelLabelAndMessage label="Challenge Question and Answers"
 38                                          binding="#{backingBeanScope.backing_ChangePassword.plam2}"
 39                                          id="plam2"/>
 40 
 41               <af:panelGroupLayout id="pgl1" layout="horizontal">
 42                 <af:selectOneChoice label="Question 1 : "
 43                                     binding="#{backingBeanScope.backing_ChangePassword.soc1}"
 44                                     id="soc1" showRequired="true"
 45                                     required="true">
 46                   <f:selectItems value="#{challengeQnABean.selectItems}"
 47                                  id="si1"/>
 48                 </af:selectOneChoice>
 49                 <af:inputText label="Answer 1 : "
 50                               binding="#{backingBeanScope.backing_ChangePassword.it5}"
 51                               id="it5" showRequired="true" required="true"/>
 52               </af:panelGroupLayout>
 53               <af:panelGroupLayout id="pgl2" layout="horizontal">
 54                 <af:selectOneChoice label="Question 2 : "
 55                                     binding="#{backingBeanScope.backing_ChangePassword.soc2}"
 56                                     id="soc2" showRequired="true"
 57                                     required="true">
 58                   <f:selectItems value="#{challengeQnABean.selectItems}"
 59                                  id="si2"/>
 60                 </af:selectOneChoice>
 61                 <af:inputText label="Answer 2 : "
 62                               binding="#{backingBeanScope.backing_ChangePassword.it6}"
 63                               id="it6" showRequired="true" required="true"/>
 64               </af:panelGroupLayout>
 65               <af:panelGroupLayout id="pgl3" layout="horizontal">
 66                 <af:selectOneChoice label="Question 3 : "
 67                                     binding="#{backingBeanScope.backing_ChangePassword.soc3}"
 68                                     id="soc3" showRequired="true"
 69                                     validator="#{backingBeanScope.backing_ChangePassword.soc3_validator}"
 70                                     required="true">
 71                   <f:selectItems value="#{challengeQnABean.selectItems}"
 72                                  id="si3"/>
 73                 </af:selectOneChoice>
 74                 <af:inputText label="Answer 3 : "
 75                               binding="#{backingBeanScope.backing_ChangePassword.it7}"
 76                               id="it7" showRequired="true"
 77                               validator="#{backingBeanScope.backing_ChangePassword.it7_validator}"
 78                               required="true"/>
 79               </af:panelGroupLayout>
 80              
 81                 <af:panelGroupLayout binding="#{backingBeanScope.backing_ChangePassword.pgl4}"
 82                                      id="pgl4">
 83                 <af:commandButton text="Submit"
 84                                   binding="#{backingBeanScope.backing_ChangePassword.cb1}"
 85                                   id="cb1"
 86                                   action="#{backingBeanScope.backing_ChangePassword.cb1_action}"/>
 87                 <af:commandButton text="Cancel"
 88                                   binding="#{backingBeanScope.backing_ChangePassword.cb2}"
 89                                   id="cb2"
 90                                   action="#{backingBeanScope.backing_ChangePassword.cb2_action}"/>
 91                                   </af:panelGroupLayout>
 92              
 93             </af:panelFormLayout>
 94           </f:facet>
 95           <f:facet name="header"/>
 96           <f:facet name="end"/>
 97           <f:facet name="start"/>
 98           <f:facet name="branding"/>
 99           <f:facet name="copyright"/>
100           <f:facet name="status"/>
101         </af:pageTemplate>
102       </af:form>
103     </af:document>
104   </f:view>
105   <!--oracle-jdev-comment:auto-binding-backing-bean-name:backing_ChangePassword-->
106 </jsp:root>
107 

Backing Bean for ChangePassword.jspx : ChangePassword.java


  1 package view.resources.backing;
  2 
  3 import java.util.Date;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 import javax.faces.application.FacesMessage;
  9 import javax.faces.component.UIComponent;
 10 import javax.faces.component.UISelectItems;
 11 import javax.faces.context.ExternalContext;
 12 import javax.faces.context.FacesContext;
 13 import javax.faces.validator.ValidatorException;
 14 
 15 import javax.servlet.http.HttpServletResponse;
 16 
 17 import javax.servlet.http.HttpSession;
 18 
 19 import model.UpdateDb;
 20 
 21 import oracle.adf.share.ADFContext;
 22 import oracle.adf.view.rich.component.rich.RichDocument;
 23 import oracle.adf.view.rich.component.rich.RichForm;
 24 import oracle.adf.view.rich.component.rich.input.RichInputListOfValues;
 25 import oracle.adf.view.rich.component.rich.input.RichInputText;
 26 import oracle.adf.view.rich.component.rich.input.RichSelectItem;
 27 import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;
 28 import oracle.adf.view.rich.component.rich.layout.RichPanelFormLayout;
 29 import oracle.adf.view.rich.component.rich.layout.RichPanelGroupLayout;
 30 import oracle.adf.view.rich.component.rich.layout.RichPanelHeader;
 31 import oracle.adf.view.rich.component.rich.layout.RichPanelLabelAndMessage;
 32 import oracle.adf.view.rich.component.rich.nav.RichCommandButton;
 33 import oracle.adf.view.rich.component.rich.output.RichOutputLabel;
 34 import oracle.adf.view.rich.component.rich.output.RichSeparator;
 35 
 36 import oracle.iam.identity.usermgmt.api.UserManager;
 37 import oracle.iam.identity.usermgmt.vo.User;
 38 import oracle.iam.identity.usermgmt.vo.UserManagerResult;
 39 
 40 import org.apache.myfaces.trinidad.component.UIXGroup;
 41 
 42 import static view.resources.backing.PropertyLoader.admin;
 43 import static view.resources.backing.PropertyLoader.password;
 44 import static view.resources.backing.PropertyLoader.oimLogin;
 45 
 46 public class ChangePassword {
 47  private RichForm f1;
 48  private RichDocument d1;
 49  private RichInputText it1;
 50  private UIXGroup g1;
 51  private RichInputText it2;
 52  private RichInputText it3;
 53  private RichSeparator s1;
 54  private RichOutputLabel ol1;
 55  private RichInputListOfValues ilov1;
 56  private RichSelectOneChoice soc1;
 57  private RichSelectItem si1;
 58  private List challengeQnA;
 59  private RichSelectOneChoice soc2;
 60  private UISelectItems si2;
 61  private RichSelectOneChoice soc3;
 62  private UISelectItems si3;
 63  private RichCommandButton cb1;
 64  private RichCommandButton cb2;
 65  private RichInputText it5;
 66  private RichInputText it6;
 67  private RichInputText it7;
 68  private String className = this.getClass().getSimpleName();
 69  private RichPanelFormLayout pfl1;
 70  private RichPanelLabelAndMessage plam1;
 71  private RichPanelFormLayout pfl2;
 72  private UIXGroup g2;
 73 
 74  private RichPanelLabelAndMessage plam2;
 75  private UIXGroup g3;
 76 
 77  private RichPanelGroupLayout pgl4;
 78  // private UIXGroup g1;
 79  private RichPanelHeader ph1;
 80  private RichPanelLabelAndMessage plam3;
 81  private RichInputText it4;
 82  private RichInputText it8;
 83  private RichInputText it9;
 84  private UIXGroup g4;
 85  private RichPanelLabelAndMessage plam4;
 86  private RichPanelGroupLayout pgl1;
 87  private RichSelectOneChoice soc4;
 88  private UISelectItems si4;
 89  private RichInputText it10;
 90  private RichPanelGroupLayout pgl2;
 91  private RichSelectOneChoice soc5;
 92  private UISelectItems si5;
 93  private RichInputText it11;
 94  private RichPanelGroupLayout pgl3;
 95  private RichSelectOneChoice soc6;
 96  private UISelectItems si6;
 97  private RichInputText it12;
 98  private UIXGroup g5;
 99  private RichPanelGroupLayout pgl5;
100  private RichCommandButton cb3;
101  private RichCommandButton cb4;
102  private RichPanelHeader ph2;
103  // private RichPanelFormLayout pfl2;
104  private RichPanelFormLayout pfl3;
105 
106  // private RichGoImageLink gil1;
107 
108  public void setF1(RichForm f1) {
109   this.f1 = f1;
110  }
111 
112  public RichForm getF1() {
113   return f1;
114  }
115 
116  public void setD1(RichDocument d1) {
117   this.d1 = d1;
118  }
119 
120  public RichDocument getD1() {
121   return d1;
122  }
123 
124  public void setIt1(RichInputText it1) {
125   this.it1 = it1;
126  }
127 
128  public RichInputText getIt1() {
129   return it1;
130  }
131 
132  public void setG1(UIXGroup g1) {
133   this.g1 = g1;
134  }
135 
136  public UIXGroup getG1() {
137   return g1;
138  }
139 
140  public void setIt2(RichInputText it2) {
141   this.it2 = it2;
142  }
143 
144  public RichInputText getIt2() {
145   return it2;
146  }
147 
148  public void setIt3(RichInputText it3) {
149   this.it3 = it3;
150  }
151 
152  public RichInputText getIt3() {
153   return it3;
154  }
155 
156  public void setS1(RichSeparator s1) {
157   this.s1 = s1;
158  }
159 
160  public RichSeparator getS1() {
161   return s1;
162  }
163 
164  public void setOl1(RichOutputLabel ol1) {
165   this.ol1 = ol1;
166  }
167 
168  public RichOutputLabel getOl1() {
169   return ol1;
170  }
171 
172  public void setIlov1(RichInputListOfValues ilov1) {
173   this.ilov1 = ilov1;
174  }
175 
176  public RichInputListOfValues getIlov1() {
177   return ilov1;
178  }
179 
180  public void setSoc1(RichSelectOneChoice soc1) {
181   this.soc1 = soc1;
182  }
183 
184  public RichSelectOneChoice getSoc1() {
185   return soc1;
186  }
187 
188  public void setSi1(RichSelectItem si1) {
189   this.si1 = si1;
190  }
191 
192  public RichSelectItem getSi1() {
193   return si1;
194  }
195 
196  public void setChallengeQnA(List challengeQnA) {
197   this.challengeQnA = challengeQnA;
198  }
199 
200  public List getChallengeQnA() {
201   OIMOperator oim = new OIMOperator(admin, password);
202   return oim.getChallengeAnswersAsList();
203   // return challengeQnA;
204  }
205 
206  public void setSoc2(RichSelectOneChoice soc2) {
207   this.soc2 = soc2;
208  }
209 
210  public RichSelectOneChoice getSoc2() {
211   return soc2;
212  }
213 
214  public void setSi2(UISelectItems si2) {
215   this.si2 = si2;
216  }
217 
218  public UISelectItems getSi2() {
219   return si2;
220  }
221 
222  public void setSoc3(RichSelectOneChoice soc3) {
223   this.soc3 = soc3;
224  }
225 
226  public RichSelectOneChoice getSoc3() {
227   return soc3;
228  }
229 
230  public void setSi3(UISelectItems si3) {
231   this.si3 = si3;
232  }
233 
234  public UISelectItems getSi3() {
235   return si3;
236  }
237 
238  public void setCb1(RichCommandButton cb1) {
239   this.cb1 = cb1;
240  }
241 
242  public RichCommandButton getCb1() {
243   return cb1;
244  }
245 
246  public void setCb2(RichCommandButton cb2) {
247   this.cb2 = cb2;
248  }
249 
250  public RichCommandButton getCb2() {
251   return cb2;
252  }
253 
254  private void enter(String method) {
255   System.out.println("Entering  " + method + " of class " + className);
256  }
257 
258  private void exit(String method) {
259   System.out.println("Exiting  " + method + " of class " + className);
260  }
261 
262  private String getFromSession(String attr) {
263   String method = Thread.currentThread().getStackTrace()[1]
264     .getMethodName();
265   enter(method);
266   String value = "";
267   try {
268    ADFContext adfCtx = ADFContext.getCurrent();
269    Map session = adfCtx.getSessionScope();
270    value = (String) session.get(attr);
271    System.out.println("retrived from session -> " + value);
272   } catch (Exception e) {
273    e.printStackTrace();
274   }
275   exit(method);
276   return value;
277  }
278 
279  public String cb1_action() {
280   String response = "false";
281   String method = Thread.currentThread().getStackTrace()[1]
282     .getMethodName();
283   enter(method);
284   try {
285    String oimUserName = getFromSession("username");
286    System.out.println("oimUserName ->" + oimUserName);
287    String mail = getFromSession("email");
288    System.out.println("mail ->" + mail);
289    String oldPassword = it1.getValue().toString();
290    System.out.println("oldPassword ->" + oldPassword);
291    String newPassword = it2.getValue().toString();
292    System.out.println("newPassword ->" + newPassword);
293 
294    // Update the user in DB first and then proceed
295    UpdateDb updateDB = new UpdateDb();
296 
297    String dbResult = updateDB.updateClaimTable(oimUserName, mail);
298    System.out.println("dbResult -> " + dbResult);
299 
300    if (dbResult.equalsIgnoreCase("CLAIMED")) {
301     String q1 = soc1.getValue().toString();
302     System.out.println("q1 ->" + q1);
303     String q2 = soc2.getValue().toString();
304     System.out.println("q2 ->" + q2);
305     String q3 = soc3.getValue().toString();
306     System.out.println("q3 ->" + q3);
307 
308     Object a1 = it5.getValue();
309     System.out.println("a1 ->" + a1);
310     Object a2 = it6.getValue();
311     System.out.println("a2 ->" + a2);
312     Object a3 = it7.getValue();
313     System.out.println("a3 ->" + a3);
314     System.out
315     .println("enable the user first so that he can login");
316     boolean isEnabledNow = enableUser(oimUserName); // Enable the
317     // user first
318     System.out.println(" isEnabledNow-> Modifed the flow -> "
319       + isEnabledNow);
320 
321     OIMOperator useroim = new OIMOperator(oimUserName, oldPassword);
322     Map<String, Object> quesAnsMap = new HashMap<String, Object>();
323     quesAnsMap.put(q1, a1);
324     quesAnsMap.put(q2, a2);
325     quesAnsMap.put(q3, a3);
326 
327     if (isEnabledNow) {
328      boolean chgPass, chgQnA = false;
329      chgPass = useroim.changePassword(oldPassword, newPassword,
330        newPassword);
331      System.out.println("chgPass -> " + chgPass);
332      if (chgPass) {
333       chgQnA = useroim.setChallengeValues(quesAnsMap);
334       System.out.println("chgQnA -> " + chgQnA);
335       boolean isErrorInOIM = useroim.isError();
336       System.out.println(" isErrorInOIM -> " + isErrorInOIM);
337      }
338      if (chgPass && chgQnA) {
339       System.out
340       .println(" Both Password Changed as well as Challenge QnA set-> ");
341       response = "true";
342      }
343     }
344     boolean isUserOimError = useroim.isError();
345     if (isUserOimError) {
346      disableUser(oimUserName);
347     }
348     useroim.logout();
349 
350     FacesContext ctx = FacesContext.getCurrentInstance();
351     System.out.println("ctx ->" + ctx);
352     ExternalContext ectx = ctx.getExternalContext();
353     System.out.println("ectx ->" + ectx);
354 
355     HttpServletResponse hresponse;
356     hresponse = (HttpServletResponse) ectx.getResponse();
357     HttpSession session = (HttpSession) ectx.getSession(false);
358     session.invalidate();
359     hresponse.sendRedirect(oimLogin);
360     ctx.responseComplete();
361     System.out.println("Exiting  cb1_action () Aug 08->");
362    } else {
363     response = dbResult;
364    }
365    System.out.println("Exiting  cb1_action () Aug 08->");
366 
367   } catch (Exception e) {
368    e.printStackTrace();
369   }
370   exit(method);
371   return response;
372  }
373 
374  private boolean setEndDate(String oimUserName) {
375   String method = Thread.currentThread().getStackTrace()[1]
376     .getMethodName();
377   enter(method);
378   boolean isEndSet = false;
379 
380   try {
381    OIMOperator systemoim = new OIMOperator(admin, password);
382    UserManager usersvc = systemoim.getUserManager();
383    User user = usersvc.getDetails(oimUserName, null, true);
384    user.setEndDate(null);
385    UserManagerResult umr = usersvc.modify(user);
386    String status = umr.getStatus();
387    if (status.equalsIgnoreCase("COMPLETED")) {
388     System.out.println("endDate set successfully");
389     isEndSet = true;
390    } else {
391     System.out.println("endDate not set  -> ");
392    }
393 
394    systemoim.logout();
395   } catch (Exception e) {
396    System.out.println("e.getMessage() ->" + e.getMessage());
397    e.printStackTrace();
398   }
399   exit(method);
400   return isEndSet;
401  }
402 
403  private boolean disableUser(String uid) {
404   String method = Thread.currentThread().getStackTrace()[1]
405     .getMethodName();
406   enter(method);
407   boolean flag = false;
408   try {
409    OIMOperator oim = new OIMOperator(admin, password);
410    UserManagerResult umr = null;
411    UserManager usersvc = oim.getUserManager();
412    User user = usersvc.getDetails(uid, null, true);
413    if (user.getUserDisabled().equalsIgnoreCase("0")) {
414     umr = usersvc.disable(uid, true);
415    }
416    String status = "";
417    if (umr != null)
418     status = umr.getStatus();
419    System.out.println("status ->" + status);
420    if (status.equalsIgnoreCase("COMPLETED")) {
421     flag = true;
422    }
423    oim.logout();
424   } catch (Exception e) {
425    e.printStackTrace();
426    System.out.println("e.toString() ->" + e.toString());
427    System.out.println("e.getMessage() ->" + e.getMessage());
428   }
429   exit(method);
430   return flag;
431  }
432 
433  private boolean enableUser(String uid) {
434   String method = Thread.currentThread().getStackTrace()[1]
435     .getMethodName();
436   enter(method);
437   boolean flag = false;
438   try {
439    OIMOperator oim = new OIMOperator(admin, password);
440    UserManagerResult umr = null;
441    UserManager usersvc = oim.getUserManager();
442    User user = usersvc.getDetails(uid, null, true);
443    if (user.getUserDisabled().equalsIgnoreCase("1")) {
444     umr = usersvc.enable(uid, true);
445    }
446    String status = "";
447    if (umr != null)
448     status = umr.getStatus();
449    System.out.println("status ->" + status);
450    if (status.equalsIgnoreCase("COMPLETED")) {
451     flag = true;
452    }
453    oim.logout();
454   } catch (Exception e) {
455    e.printStackTrace();
456    System.out.println("e.toString() ->" + e.toString());
457    System.out.println("e.getMessage() ->" + e.getMessage());
458   }
459   exit(method);
460   return flag;
461  }
462 
463  public String cb2_action() {
464   // Add event code here...
465   return null;
466  }
467 
468  public void setIt5(RichInputText it5) {
469   this.it5 = it5;
470  }
471 
472  public RichInputText getIt5() {
473   return it5;
474  }
475 
476  public void setIt6(RichInputText it6) {
477   this.it6 = it6;
478  }
479 
480  public RichInputText getIt6() {
481   return it6;
482  }
483 
484  public void setIt7(RichInputText it7) {
485   this.it7 = it7;
486  }
487 
488  public RichInputText getIt7() {
489   return it7;
490  }
491 
492  public void it3_validator(FacesContext facesContext,
493    UIComponent uIComponent, Object object) {
494 
495   String rit3 = (String) object;
496   System.out.println("rit3 ->" + rit3);
497   RichInputText rit2 = getIt2();
498   String rit2_s = (String) rit2.getValue();
499   System.out.println(" rit2_s ->" + rit2_s);
500   if (!(rit3.equalsIgnoreCase(rit2_s))) {
501    throw new ValidatorException(
502      new FacesMessage(
503        FacesMessage.SEVERITY_ERROR,
504        "New Password and Confirm New Password do not match.",
505        null));
506   }
507  }
508 
509  public void it7_validator(FacesContext facesContext,
510    UIComponent uIComponent, Object object) {
511   String rit7 = (String) object;
512   System.out.println("rit7 ->" + rit7);
513 
514   RichInputText rit5 = getIt5();
515   String rit5_s = (String) rit5.getValue();
516   System.out.println(" rit5_s ->" + rit5_s);
517 
518   RichInputText rit6 = getIt6();
519   String rit6_s = (String) rit6.getValue();
520   System.out.println(" rit6_s ->" + rit6_s);
521 
522   boolean a = rit7.equalsIgnoreCase(rit5_s);
523   boolean b = rit7.equalsIgnoreCase(rit6_s);
524   boolean c = rit5_s.equalsIgnoreCase(rit6_s);
525   if (a || b || c) {
526    throw new ValidatorException(new FacesMessage(
527      FacesMessage.SEVERITY_ERROR,
528      "All Answers should be uniquely set.", null));
529   }
530  }
531 
532  public void setPfl1(RichPanelFormLayout pfl1) {
533   this.pfl1 = pfl1;
534  }
535 
536  public RichPanelFormLayout getPfl1() {
537   return pfl1;
538  }
539 
540  public void setPlam1(RichPanelLabelAndMessage plam1) {
541   this.plam1 = plam1;
542  }
543 
544  public RichPanelLabelAndMessage getPlam1() {
545   return plam1;
546  }
547 
548  public void setPfl2(RichPanelFormLayout pfl2) {
549   this.pfl2 = pfl2;
550  }
551 
552  public RichPanelFormLayout getPfl2() {
553   return pfl2;
554  }
555 
556  public void setG2(UIXGroup g2) {
557   this.g2 = g2;
558  }
559 
560  public UIXGroup getG2() {
561   return g2;
562  }
563 
564  public void setPlam2(RichPanelLabelAndMessage plam2) {
565   this.plam2 = plam2;
566  }
567 
568  public RichPanelLabelAndMessage getPlam2() {
569   return plam2;
570  }
571 
572  public void setG3(UIXGroup g3) {
573   this.g3 = g3;
574  }
575 
576  public UIXGroup getG3() {
577   return g3;
578  }
579 
580  public void setPgl4(RichPanelGroupLayout pgl4) {
581   this.pgl4 = pgl4;
582  }
583 
584  public RichPanelGroupLayout getPgl4() {
585   return pgl4;
586  }
587 
588  public void soc3_validator(FacesContext facesContext,
589    UIComponent uIComponent, Object object) {
590 
591   String soc3 = (String) object;
592   System.out.println(" soc3 -> " + soc3);
593 
594   RichSelectOneChoice soc1 = getSoc1();
595   String soc1_s = (String) soc1.getValue();
596   System.out.println(" soc1_s ->" + soc1_s);
597 
598   RichSelectOneChoice soc2 = getSoc2();
599   String soc2_s = (String) soc2.getValue();
600   System.out.println(" soc2_s ->" + soc2_s);
601 
602   boolean a = soc3.equalsIgnoreCase(soc1_s);
603   boolean b = soc3.equalsIgnoreCase(soc2_s);
604   boolean c = soc1_s.equalsIgnoreCase(soc2_s);
605   if (a || b || c) {
606    throw new ValidatorException(new FacesMessage(
607      FacesMessage.SEVERITY_ERROR,
608      "All Questions should be uniquely set.", null));
609   }
610 
611  }
612 
613  public void setPh1(RichPanelHeader ph1) {
614   this.ph1 = ph1;
615  }
616 
617  public RichPanelHeader getPh1() {
618   return ph1;
619  }
620 
621  public void setPlam3(RichPanelLabelAndMessage plam3) {
622   this.plam3 = plam3;
623  }
624 
625  public RichPanelLabelAndMessage getPlam3() {
626   return plam3;
627  }
628 
629  public void setIt4(RichInputText it4) {
630   this.it4 = it4;
631  }
632 
633  public RichInputText getIt4() {
634   return it4;
635  }
636 
637  public void setIt8(RichInputText it8) {
638   this.it8 = it8;
639  }
640 
641  public RichInputText getIt8() {
642   return it8;
643  }
644 
645  public void setIt9(RichInputText it9) {
646   this.it9 = it9;
647  }
648 
649  public RichInputText getIt9() {
650   return it9;
651  }
652 
653  public void setG4(UIXGroup g4) {
654   this.g4 = g4;
655  }
656 
657  public UIXGroup getG4() {
658   return g4;
659  }
660 
661  public void setPlam4(RichPanelLabelAndMessage plam4) {
662   this.plam4 = plam4;
663  }
664 
665  public RichPanelLabelAndMessage getPlam4() {
666   return plam4;
667  }
668 
669  public void setPgl1(RichPanelGroupLayout pgl1) {
670   this.pgl1 = pgl1;
671  }
672 
673  public RichPanelGroupLayout getPgl1() {
674   return pgl1;
675  }
676 
677  public void setSoc4(RichSelectOneChoice soc4) {
678   this.soc4 = soc4;
679  }
680 
681  public RichSelectOneChoice getSoc4() {
682   return soc4;
683  }
684 
685  public void setSi4(UISelectItems si4) {
686   this.si4 = si4;
687  }
688 
689  public UISelectItems getSi4() {
690   return si4;
691  }
692 
693  public void setIt10(RichInputText it10) {
694   this.it10 = it10;
695  }
696 
697  public RichInputText getIt10() {
698   return it10;
699  }
700 
701  public void setPgl2(RichPanelGroupLayout pgl2) {
702   this.pgl2 = pgl2;
703  }
704 
705  public RichPanelGroupLayout getPgl2() {
706   return pgl2;
707  }
708 
709  public void setSoc5(RichSelectOneChoice soc5) {
710   this.soc5 = soc5;
711  }
712 
713  public RichSelectOneChoice getSoc5() {
714   return soc5;
715  }
716 
717  public void setSi5(UISelectItems si5) {
718   this.si5 = si5;
719  }
720 
721  public UISelectItems getSi5() {
722   return si5;
723  }
724 
725  public void setIt11(RichInputText it11) {
726   this.it11 = it11;
727  }
728 
729  public RichInputText getIt11() {
730   return it11;
731  }
732 
733  public void setPgl3(RichPanelGroupLayout pgl3) {
734   this.pgl3 = pgl3;
735  }
736 
737  public RichPanelGroupLayout getPgl3() {
738   return pgl3;
739  }
740 
741  public void setSoc6(RichSelectOneChoice soc6) {
742   this.soc6 = soc6;
743  }
744 
745  public RichSelectOneChoice getSoc6() {
746   return soc6;
747  }
748 
749  public void setSi6(UISelectItems si6) {
750   this.si6 = si6;
751  }
752 
753  public UISelectItems getSi6() {
754   return si6;
755  }
756 
757  public void setIt12(RichInputText it12) {
758   this.it12 = it12;
759  }
760 
761  public RichInputText getIt12() {
762   return it12;
763  }
764 
765  public void setG5(UIXGroup g5) {
766   this.g5 = g5;
767  }
768 
769  public UIXGroup getG5() {
770   return g5;
771  }
772 
773  public void setPgl5(RichPanelGroupLayout pgl5) {
774   this.pgl5 = pgl5;
775  }
776 
777  public RichPanelGroupLayout getPgl5() {
778   return pgl5;
779  }
780 
781  public void setCb3(RichCommandButton cb3) {
782   this.cb3 = cb3;
783  }
784 
785  public RichCommandButton getCb3() {
786   return cb3;
787  }
788 
789  public void setCb4(RichCommandButton cb4) {
790   this.cb4 = cb4;
791  }
792 
793  public RichCommandButton getCb4() {
794   return cb4;
795  }
796 
797  public void setPh2(RichPanelHeader ph2) {
798   this.ph2 = ph2;
799  }
800 
801  public RichPanelHeader getPh2() {
802   return ph2;
803  }
804 
805  public void setPfl3(RichPanelFormLayout pfl3) {
806   this.pfl3 = pfl3;
807  }
808 
809  public RichPanelFormLayout getPfl3() {
810   return pfl3;
811  }
812 }
813 


Other Screen Pages just display the final result












                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                   
                                                                                                                                                                    ChallengeQnABean.java loads the questions from the OIM and saves it for the user session page ChangePassword.jspx



  1 package view.resources.backing;
  2 
  3 import javax.faces.model.SelectItem;
  4 
  5 import static view.resources.backing.PropertyLoader.admin;
  6 import static view.resources.backing.PropertyLoader.password;
  7 
  8 public class ChallengeQnABean {
  9  public ChallengeQnABean() {
 10   super();
 11  }
 12 
 13  private SelectItem[] selectItems;
 14 
 15  private String className = this.getClass().getSimpleName();
 16 
 17  private void enter(String method) {
 18   System.out.println("Entering  " + method + " of class " + className);
 19  }
 20 
 21  private void exit(String method) {
 22   System.out.println("Exiting  " + method + " of class " + className);
 23  }
 24 
 25  private String[] loadQnA() {
 26   String method = Thread.currentThread().getStackTrace()[1]
 27     .getMethodName();
 28   enter(method);
 29   boolean flag = false;
 30   String[] cNa = null;
 31   try {
 32    OIMOperator oim = new OIMOperator(admin, password);
 33    cNa = oim.getChallengeQnA();
 34    oim.logout();
 35   } catch (Exception e) {
 36    e.printStackTrace();
 37    System.out.println("e.toString() ->" + e.toString());
 38    System.out.println("e.getMessage() ->" + e.getMessage());
 39   }
 40   exit(method);
 41   return cNa;
 42  }
 43 
 44  public SelectItem[] getSelectItems() {
 45   String[] cNa = loadQnA();
 46   if (selectItems == null) {
 47    selectItems = new SelectItem[cNa.length];
 48    for (int i = 0; i < cNa.length; i++) {
 49     selectItems[i] = new SelectItem(cNa[i], cNa[i], null, false);
 50    }
 51   }
 52 
 53   return selectItems;
 54  }
 55 
 56 }
 57 


OIMOperator.java : it uses the OIM 11g api to perform all oim operations like reads global questions, update user, set QnA etc.


  1 package view.resources.backing;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Arrays;
  5 
  6 import oracle.iam.platform.OIMClient;
  7 
  8 import java.util.Hashtable;
  9 import java.util.List;
 10 
 11 import java.util.Map;
 12 
 13 import javax.security.auth.login.LoginException;
 14 
 15 import oracle.iam.identity.usermgmt.api.UserManager;
 16 import oracle.iam.selfservice.self.selfmgmt.api.AuthenticatedSelfService;
 17 import oracle.iam.identity.usermgmt.api.UserManager;
 18 import oracle.iam.identity.usermgmt.vo.User;
 19 import oracle.iam.identity.usermgmt.vo.UserManagerResult;
 20 import oracle.iam.platform.OIMClient;
 21 import oracle.iam.platform.Role;
 22 import oracle.iam.selfservice.exception.AuthSelfServiceException;
 23 
 24 import oracle.iam.selfservice.uself.uselfmgmt.api.UnauthenticatedSelfService;
 25 
 26 import static view.resources.backing.PropertyLoader.oimURL;
 27 
 28 public class OIMOperator {
 29 
 30  private OIMClient client = null;
 31  private String className = this.getClass().getSimpleName();
 32  private boolean error = false;
 33 
 34  OIMOperator(String user, String password) {
 35   setOIMClient(oimURL);
 36   login(user, password);
 37  }
 38 
 39  private void enter(String method) {
 40   System.out.println("Entering  " + method + " of class " + className);
 41  }
 42 
 43  private void exit(String method) {
 44   System.out.println("Exiting  " + method + " of class " + className);
 45  }
 46 
 47  AuthenticatedSelfService getAuthenticatedSelfService() {
 48   String method = Thread.currentThread().getStackTrace()[1]
 49     .getMethodName();
 50   enter(method);
 51   AuthenticatedSelfService service = null;
 52   try {
 53    service = client.getService(AuthenticatedSelfService.class);
 54   } catch (Exception e) {
 55    e.printStackTrace();
 56    System.out.println("e.toString() ->" + e.toString());
 57    System.out.println("e.getMessage() ->" + e.getMessage());
 58    setError(true);
 59   }
 60   exit(method);
 61   return service;
 62  }
 63 
 64  UnauthenticatedSelfService getUnauthenticatedSelfService() {
 65   String method = Thread.currentThread().getStackTrace()[1]
 66     .getMethodName();
 67   enter(method);
 68   UnauthenticatedSelfService service = null;
 69   try {
 70    service = client.getService(UnauthenticatedSelfService.class);
 71   } catch (Exception e) {
 72 
 73    e.printStackTrace();
 74    System.out.println("e.toString() ->" + e.toString());
 75    System.out.println("e.getMessage() ->" + e.getMessage());
 76    setError(true);
 77   }
 78   exit(method);
 79   return service;
 80  }
 81 
 82  UserManager getUserManager() {
 83   String method = Thread.currentThread().getStackTrace()[1]
 84     .getMethodName();
 85   enter(method);
 86   UserManager service = null;
 87   try {
 88    service = client.getService(UserManager.class);
 89   } catch (Exception e) {
 90    e.printStackTrace();
 91    System.out.println("e.toString() ->" + e.toString());
 92    System.out.println("e.getMessage() ->" + e.getMessage());
 93    setError(true);
 94   }
 95   exit(method);
 96   return service;
 97  }
 98 
 99  public List<String> getChallengeAnswersAsList() {
100   return getChallengeQnAasList();
101  }
102 
103  private List<String> getSArrayToList(String[] s_arr) {
104   List<String> list = new ArrayList<String>(Arrays.asList(s_arr));
105   return list;
106  }
107 
108  String[] getChallengeQnA() {
109 
110   String method = Thread.currentThread().getStackTrace()[1]
111     .getMethodName();
112   enter(method);
113   String[] CnA = null;
114   try {
115    AuthenticatedSelfService service = getAuthenticatedSelfService();
116    CnA = service.getSystemChallengeQuestions();
117   } catch (Exception e) {
118    e.printStackTrace();
119    System.out.println("e.toString() ->" + e.toString());
120    System.out.println("e.getMessage() ->" + e.getMessage());
121    setError(true);
122   }
123   exit(method);
124   return CnA;
125  }
126 
127  private List<String> getChallengeQnAasList() {
128   List<String> CnAList = null;
129   String method = "";
130   try {
131    method = Thread.currentThread().getStackTrace()[1].getMethodName();
132    enter(method);
133    AuthenticatedSelfService service = getAuthenticatedSelfService();
134    String[] CnA;
135    CnA = service.getSystemChallengeQuestions();
136    CnAList = getSArrayToList(CnA);
137 
138   } catch (Exception e) {
139    e.printStackTrace();
140    System.out.println("e.toString() ->" + e.toString());
141    System.out.println("e.getMessage() ->" + e.getMessage());
142    setError(true);
143   }
144   exit(method);
145   return CnAList;
146  }
147 
148  private void setOIMClient(String oimURL) {
149   String method = Thread.currentThread().getStackTrace()[1]
150     .getMethodName();
151   enter(method);
152   try {
153    Hashtable env = new Hashtable();
154    env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL,
155      OIMClient.WLS_CONTEXT_FACTORY);
156    env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, oimURL);
157    client = new OIMClient(env);
158   } catch (Exception e) {
159    e.printStackTrace();
160    System.out.println("e.toString() ->" + e.toString());
161    System.out.println("e.getMessage() ->" + e.getMessage());
162    setError(true);
163   }
164   exit(method);
165 
166  }
167 
168  private void login(String user, String password) {
169   String method = Thread.currentThread().getStackTrace()[1]
170     .getMethodName();
171   enter(method);
172   try {
173    System.out.println("Before Login");
174    client.login(user, password.toCharArray());
175    System.out.println("After Login");
176   } catch (Exception e) {
177    e.printStackTrace();
178    System.out.println("e.toString() ->" + e.toString());
179    System.out.println("e.getMessage() ->" + e.getMessage());
180    setError(true);
181   }
182   exit(method);
183  }
184 
185  void logout() {
186   String method = Thread.currentThread().getStackTrace()[1]
187     .getMethodName();
188   enter(method);
189   try {
190    if (client != null)
191     client.logout();
192   } catch (Exception e) {
193    e.printStackTrace();
194    System.out.println("e.toString() ->" + e.toString());
195    System.out.println("e.getMessage() ->" + e.getMessage());
196   }
197   exit(method);
198  }
199 
200  boolean resetPassword(String username, Map<String, Object> quesAnsMap,
201    String password) {
202   String method = Thread.currentThread().getStackTrace()[1]
203     .getMethodName();
204   enter(method);
205   boolean flag = false;
206   try {
207    flag = getUnauthenticatedSelfService().resetPassword(username,
208      quesAnsMap, password.toCharArray());
209   } catch (Exception e) {
210    e.printStackTrace();
211    System.out.println("e.toString() ->" + e.toString());
212    System.out.println("e.getMessage() ->" + e.getMessage());
213    setError(true);
214   }
215   exit(method);
216 
217   return flag;
218 
219  }
220 
221  boolean setChallengeQnAValues(Map<String, Object> quesAnsMap) {
222   String method = Thread.currentThread().getStackTrace()[1]
223     .getMethodName();
224   enter(method);
225   boolean flag = false;
226   try {
227    getAuthenticatedSelfService().setChallengeValues(quesAnsMap);
228    flag = true;
229   } catch (Exception e) {
230    e.printStackTrace();
231    System.out.println("e.toString() ->" + e.toString());
232    System.out.println("e.getMessage() ->" + e.getMessage());
233    setError(true);
234   }
235   exit(method);
236 
237   return flag;
238 
239  }
240 
241  boolean changePassword(String oldPwd, String newPwd, String confirmPwd) {
242   String method = Thread.currentThread().getStackTrace()[1]
243     .getMethodName();
244   enter(method);
245   boolean flag = false;
246   try {
247    getAuthenticatedSelfService().changePassword(oldPwd.toCharArray(),
248      newPwd.toCharArray(), confirmPwd.toCharArray());
249    flag = true;
250   } catch (Exception e) {
251    e.printStackTrace();
252    System.out.println("e.toString() ->" + e.toString());
253    System.out.println("e.getMessage() ->" + e.getMessage());
254    setError(true);
255   }
256   exit(method);
257   return flag;
258  }
259 
260  boolean setChallengeValues(Map<String, Object> quesAnsMap) {
261   String method = Thread.currentThread().getStackTrace()[1]
262     .getMethodName();
263   enter(method);
264   boolean flag = false;
265   try {
266    getAuthenticatedSelfService().setChallengeValues(quesAnsMap);
267    flag = true;
268   } catch (Exception e) {
269    e.printStackTrace();
270    System.out.println("e.toString() ->" + e.toString());
271    System.out.println("e.getMessage() ->" + e.getMessage());
272    setError(true);
273   }
274   exit(method);
275   return flag;
276  }
277 
278  public void setError(boolean error) {
279   this.error = error;
280  }
281 
282  public boolean isError() {
283   return error;
284  }
285 }
286 

PropertyLoader.java : reads the configuratiosn and UI labels and anything else that should not be hard coded


  1 package view.resources.backing;
  2 
  3 import java.util.ResourceBundle;
  4 
  5 public class PropertyLoader {
  6  static String admin = null;
  7  static String password = null;
  8  static String oimURL = null;
  9  static String oimLogin = null;
 10  static String GRACE_DAYS = null;
 11 
 12  static {
 13   try {
 14    ResourceBundle rbe = ResourceBundle.getBundle("view.backing."
 15      + getResourceBundleName());
 16    admin = rbe.getString("admin");
 17    password = rbe.getString("password");
 18    oimURL = rbe.getString("oimURL");
 19    oimLogin = rbe.getString("oimLogin");
 20    GRACE_DAYS = rbe.getString("GRACE_DAYS");
 21    System.out.println(" admin->" + admin);
 22    System.out.println(" oimURL->" + oimURL);
 23    System.out.println(" oimLogin->" + oimLogin);
 24    System.out.println(" GRACE_DAYS->" + GRACE_DAYS);
 25 
 26   } catch (Exception e) {
 27    e.printStackTrace();
 28    System.out.println("e.getMessage ->" + e.getMessage());
 29   }
 30 
 31  }
 32 
 33  public static void main(String[] args) {
 34 
 35  }
 36 
 37  private static String getResourceBundleName() {
 38   String wpf = "";
 39   try {
 40    wpf = ResourceBundle.getBundle("view.backing.whichpropfile")
 41      .getString("whichpropfile");
 42    System.out.println("wpf  ->" + wpf);
 43   } catch (Exception e) {
 44    e.printStackTrace();
 45    System.out.println("e.getMessage ->" + e.getMessage());
 46   }
 47   return wpf;
 48  }
 49 
 50  static void load() {
 51   try {
 52    ResourceBundle rbe = ResourceBundle.getBundle("view.backing."
 53      + getResourceBundleName());
 54    admin = rbe.getString("admin");
 55    password = rbe.getString("password");
 56    oimURL = rbe.getString("oimURL");
 57    oimLogin = rbe.getString("oimLogin");
 58 
 59    System.out.println(" admin->" + admin);
 60    System.out.println(" oimURL->" + oimURL);
 61    System.out.println(" oimLogin->" + oimLogin);
 62 
 63   } catch (Exception e) {
 64    e.printStackTrace();
 65    System.out.println("e.getMessage ->" + e.getMessage());
 66   }
 67 
 68  }
 69 }
 70 


UpdateDb.java : it tracks the account claim process in its internal schema table like whether the account is already claimed or not and few more tables which can be used by external applications


  1 package model;
  2 
  3 import java.util.ResourceBundle;
  4 
  5 import java.sql.Connection;
  6 import java.sql.DatabaseMetaData;
  7 import java.sql.Date;
  8 import java.sql.DriverManager;
  9 import java.sql.PreparedStatement;
 10 import java.sql.ResultSet;
 11 import java.sql.SQLException;
 12 
 13 import javax.naming.InitialContext;
 14 
 15 import javax.sql.DataSource;
 16 
 17 public class UpdateDb {
 18  private String className = this.getClass().getSimpleName();
 19  private static String usedatasource = null;
 20  private static String datasource = null;
 21  private static String username = null;
 22  private static String dbpassword = null;
 23  private static String table = null;
 24  private static String colum = null;
 25  private static String claimcolum = null;
 26  // private Connection con = null;
 27  private static String url = null;
 28  private static String claimSetCheck = null;
 29  private static String updateClaim = null;
 30  private static String selectGobtPac;
 31  private static String updateGobtPac;
 32 
 33  static {
 34   System.out.println("Entering static block of UpdateDB");
 35   String wpf = ResourceBundle.getBundle("view.backing.whichpropfile")
 36     .getString("whichpropfile");
 37   System.out.println("wpf  ->" + wpf);
 38   ResourceBundle rbe = ResourceBundle.getBundle("view.backing." + wpf);
 39   usedatasource = rbe.getString("usedatasource");
 40   System.out.println("usedatasource -> " + usedatasource);
 41   if (usedatasource.equalsIgnoreCase("true")) {
 42    datasource = rbe.getString("datasource");
 43    System.out.println(" datasource->" + datasource);
 44   } else {
 45    username = rbe.getString("username");
 46    System.out.println(" username->" + username);
 47    dbpassword = rbe.getString("dbpassword");
 48    url = rbe.getString("url");
 49    System.out.println(" url->" + url);
 50   }
 51   table = rbe.getString("table");
 52   System.out.println(" table->" + table);
 53   colum = rbe.getString("colum");
 54   System.out.println(" colum->" + colum);
 55   claimcolum = rbe.getString("claimcolum");
 56   System.out.println(" claimcolum->" + claimcolum);
 57   claimSetCheck = "select " + colum + ", " + claimcolum + " from "
 58     + table + " where " + colum + " = ?";
 59   System.out.println(" claimSetCheck->" + claimSetCheck);
 60   updateClaim = "update " + table + " set " + claimcolum + "= ? where "
 61     + colum + " = ?";
 62   System.out.println(" updateClaim->" + updateClaim);
 63 
 64   selectGobtPac = "select GOBTPAC_USER,GOBTPAC_PIN from GOBTPAC where GOBTPAC_USER = ?";
 65   System.out.println(" gobtPacSet->" + selectGobtPac);
 66   updateGobtPac = "update GOBTPAC set GOBTPAC_PIN = ?,GOBTPAC_PIN_EXP_DATE = ? where GOBTPAC_USER = ?";
 67   System.out.println(" updateGobtPac->" + updateGobtPac);
 68 
 69  }
 70 
 71  private void enter(String method) {
 72   System.out.println("Entering  " + method + " of class " + className);
 73  }
 74 
 75  private void exit(String method) {
 76   System.out.println("Exiting  " + method + " of class " + className);
 77  }
 78 
 79  private Connection getConnection() {
 80   String method = Thread.currentThread().getStackTrace()[1]
 81     .getMethodName();
 82   enter(method);
 83   Connection con = null;
 84   try {
 85    if (usedatasource.equalsIgnoreCase("true")) {
 86     InitialContext ctx = null;
 87     ctx = new InitialContext();
 88     DataSource ds = (DataSource) ctx.lookup(datasource);
 89     con = (Connection) ds.getConnection();
 90    } else {
 91 
 92     if ((con == null) || (con.isClosed())) {
 93      Class.forName("oracle.jdbc.driver.OracleDriver");
 94      con = DriverManager
 95        .getConnection(url, username, dbpassword);
 96     }
 97    }
 98    System.out.println("Got the Connection");
 99   } catch (Exception e) {
100    e.printStackTrace();
101    System.out.println("e.toString() ->" + e.toString());
102    System.out.println("e.getMessage() ->" + e.getMessage());
103 
104   }
105 
106   exit(method);
107   return con;
108  }
109 
110  public String updateClaimTable(String userid, String mail) {
111   String method = Thread.currentThread().getStackTrace()[1]
112     .getMethodName();
113   enter(method);
114   String response = "false";
115   Connection con = null;
116   try {
117    boolean isGoremailUpdated = updateGoremalTable(userid, mail);
118    System.out.println("isGoremailUpdated -> " + isGoremailUpdated);
119    // if (isGoremailUpdated == false)
120    // return response;
121    con = getConnection();
122    if (con != null) {
123     con.setAutoCommit(true);
124     PreparedStatement isClaimSet = null;
125     System.out.println("claimSetCheck -> " + claimSetCheck);
126     isClaimSet = con.prepareStatement(claimSetCheck);
127     System.out.println("isClaimSet ->" + isClaimSet);
128     isClaimSet.setString(1, userid);
129     ResultSet rs;
130     rs = isClaimSet.executeQuery();
131     System.out.println("Query Executed ->");
132     Date dt = null;
133     int rowCount = 0;
134     while (rs.next()) {
135      dt = rs.getDate(claimcolum);
136      System.out.println(" dt->" + dt);
137      rowCount = rowCount + 1;
138     }
139     System.out.println("Number of Rows=" + rowCount);
140     if (rowCount == 1) {
141      if (dt == null) {
142       java.util.Date utilDate = new java.util.Date();
143       java.sql.Date sqlDate = new java.sql.Date(
144         utilDate.getTime());
145       System.out.println("utilDate:" + utilDate);
146       System.out.println("sqlDate:" + sqlDate);
147 
148       PreparedStatement updateClaimSet = null;
149       System.out.println("updateClaim -> " + updateClaim);
150       updateClaimSet = con.prepareStatement(updateClaim);
151       System.out.println(" Before updating date-> ");
152       updateClaimSet.setDate(1, sqlDate);
153       System.out.println(" Before updating userid-> ");
154       updateClaimSet.setString(2, userid);
155       System.out.println(" After updating both -> ");
156       int rs2;
157       rs2 = updateClaimSet.executeUpdate();
158       System.out.println("rs2 ->" + rs2);
159       response = "CLAIMED";
160 
161      } else {
162       response = "CLAIMED_EARLIER";
163      }
164     } else if (rowCount == 0) {
165      response = "NO_USER_FOUND";
166     } else {
167      response = "MULTIPLE_USER_FOUND";
168     }
169    }
170 
171   } catch (Exception e) {
172    e.printStackTrace();
173    System.out.println("e.toString() ->" + e.toString());
174    System.out.println("e.getMessage() ->" + e.getMessage());
175 
176   } finally {
177    if (con != null) {
178     try {
179      con.close();
180     } catch (Exception e) {
181      e.printStackTrace();
182      System.out.println("e.toString() ->" + e.toString());
183      System.out.println("e.getMessage() ->" + e.getMessage());
184 
185     }
186    }
187   }
188   System.out.println("response ->" + response);
189   exit(method);
190   return response;
191  }
192 
193  public String updateGobtpacTable(String userid, String pin,
194    java.util.Date pin_exp) {
195   String method = Thread.currentThread().getStackTrace()[1]
196     .getMethodName();
197   enter(method);
198   String response = "false";
199   Connection con = null;
200   try {
201    con = getConnection();
202    if (con != null) {
203     con.setAutoCommit(true);
204     PreparedStatement isClaimSet = null;
205     System.out.println("selectGobtPac -> " + selectGobtPac);
206     isClaimSet = con.prepareStatement(selectGobtPac);
207     System.out.println("isClaimSet ->" + isClaimSet);
208     isClaimSet.setString(1, userid);
209     ResultSet rs;
210     rs = isClaimSet.executeQuery();
211     System.out.println("Query Executed ->");
212     String dt = null;
213     int rowCount = 0;
214     while (rs.next()) {
215      dt = rs.getString("GOBTPAC_PIN");
216      System.out.println(" dt->" + dt);
217      rowCount = rowCount + 1;
218     }
219     System.out.println("Number of Rows=" + rowCount);
220     if (rowCount == 1) {
221      if (dt == null) {
222 
223       PreparedStatement updateClaimSet = null;
224       System.out
225       .println(" updateGobtPac -> " + updateGobtPac);
226       updateClaimSet = con.prepareStatement(updateGobtPac);
227       System.out.println(" Before updating pin-> ");
228       updateClaimSet.setString(1, pin);
229       System.out.println(" Before updating pin expiry -> ");
230       java.sql.Date sqlDate = new java.sql.Date(
231         pin_exp.getTime());
232       System.out.println("utilDate:" + pin_exp);
233       System.out.println("sqlDate:" + sqlDate);
234       updateClaimSet.setDate(2, sqlDate);
235       updateClaimSet.setString(3, userid);
236       System.out.println(" After updating all -> ");
237       int rs2;
238       rs2 = updateClaimSet.executeUpdate();
239       System.out.println("rs2 ->" + rs2);
240       response = "CLAIMED";
241 
242      } else {
243       response = "CLAIMED_EARLIER";
244      }
245     } else if (rowCount == 0) {
246      response = "NO_USER_FOUND";
247     } else {
248      response = "MULTIPLE_USER_FOUND";
249     }
250    }
251 
252   } catch (Exception e) {
253    e.printStackTrace();
254    System.out.println("e.toString() ->" + e.toString());
255    System.out.println("e.getMessage() ->" + e.getMessage());
256 
257   } finally {
258    if (con != null) {
259     try {
260      con.close();
261     } catch (Exception e) {
262      e.printStackTrace();
263      System.out.println("e.toString() ->" + e.toString());
264      System.out.println("e.getMessage() ->" + e.getMessage());
265 
266     }
267    }
268   }
269   System.out.println("response ->" + response);
270   exit(method);
271   return response;
272  }
273 
274  private boolean updateGoremalTable(String userid, String mail) {
275   String method = Thread.currentThread().getStackTrace()[1]
276     .getMethodName();
277   enter(method);
278   boolean response = false;
279   Connection con = null;
280   try {
281    con = getConnection();
282    if (con != null) {
283     con.setAutoCommit(true);
284     PreparedStatement updateGoremalState = null;
285     String updateSt = "UPDATE GOREMAL set GOREMAL_EMAIL_ADDRESS = ? WHERE GOREMAL_USER_ID = ?";
286     System.out.println(" updateSt-> " + updateSt);
287     updateGoremalState = con.prepareStatement(updateSt);
288     System.out.println(" Before updating mail address-> ");
289     updateGoremalState.setString(1, mail);
290     System.out.println(" Before updating userid-> ");
291     updateGoremalState.setString(2, userid);
292     System.out.println(" After updating both -> ");
293     int rs2;
294     rs2 = updateGoremalState.executeUpdate();
295     System.out.println("rs2 ->" + rs2);
296     response = true;
297    }
298   } catch (Exception e) {
299    e.printStackTrace();
300    System.out.println("e.toString() ->" + e.toString());
301    System.out.println("e.getMessage() ->" + e.getMessage());
302 
303   } finally {
304    if (con != null) {
305     try {
306      con.close();
307     } catch (Exception e) {
308      e.printStackTrace();
309      System.out.println("e.toString() ->" + e.toString());
310      System.out.println("e.getMessage() ->" + e.getMessage());
311 
312     }
313    }
314   }
315   System.out.println("response ->" + response);
316   exit(method);
317   return response;
318  }
319 
320 }
321 


Properties Files

ViewControllerBundle.properties: Automtically used for UI labels in adf pages


ACCOUNT_INFORMATION=Account Information
#UID
UID=UID
#PIN
PIN=PIN
#Zip Code
ZIP_CODE=Zip Code
#Date of Birth
DATE_OF_BIRTH=Date of Birth
#Next
NEXT=Next
#Cancel
CANCEL=Cancel
#Account Claim Validation
ACCOUNT_CLAIM_VALIDATION=Account Claim Validation

myApp.properties: Application Specific properties file


admin=xelsysadm
password=password
oimURL=t3://host:14010/oim
oimLogin=http://host:14010/oim/faces/pages/Self.jspx
GRACE_DAYS=3

# DB Properties

#hostname=hostname
#DBservicename=servicename
#DBSIDname=sidname
#DBport=1521
dbuser=dbuser
dbpassword=dbpassword
table=table
colum=colum
claimcolum=claimcolum-date
url=jdbc:oracle:thin:@hostname:1521:sid

#DateSource
usedatasource=true
datasource=jdbc/iamdatasource

Comments

  1. Nice post, very useful blogs with very useful information, thank you for sharing this post custom web application development

    ReplyDelete

Post a Comment

Popular posts from this blog

OIM 11g R2 PS2 : SOA Approval Workflow Sample

OHS 12c (12.1.3) webgate deployment and configuration

Oracle Identity Manager (OIM) Interview Questions