Sunday 21 August 2016

Scheduler- Create Organisation and Assign Membership Rule to Organization in OIM11gR2

In this post I am creating the Organisation and Assigning the Membership Rule through Client Code.
I am reading the Organisation Details and Membership Rule from CSV File.
---------------------------------------------bulkOrg.csv------------------------------------------------------


Once Organisation-TestOrg4 will be created I'll assign the membershipRule as- Property ID="1314" .
============================OIM Client Code============================
package com.oim.scheduler;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Hashtable;
import javax.security.auth.login.LoginException;
import com.csvreader.CsvReader;
import Thor.API.Operations.tcOrganizationOperationsIntf;
import oracle.iam.identity.exception.OrganizationManagerException;
import oracle.iam.identity.orgmgmt.api.OrganizationManager;
import oracle.iam.identity.orgmgmt.vo.Organization;
import oracle.iam.identity.usermgmt.api.UserManager;
import oracle.iam.identity.usermgmt.api.UserManagerConstants;
import oracle.iam.platform.OIMClient;
import oracle.iam.platform.Platform;
import oracle.iam.platform.authz.exception.AccessDeniedException;
import oracle.iam.platform.entitymgr.vo.SearchCriteria.Operator;
import oracle.iam.platform.entitymgr.vo.SearchCriteria;
import oracle.iam.platform.entitymgr.vo.SearchRule;

public class OrgOperation {
public static OIMClient oimClient;
OrganizationManager organizationmanager;
UserManagerConstants usrmgconst;
public static void getOIMConnection()  throws LoginException{
    System.out.println("INSIDE getOIMConnection");
    String PROVIDER_URL = "t3://OIMHost.nssd.star:14000";
  String USERNAME = "xelsysadm";
  String PASSWORD = "Password";
  System.setProperty("java.security.auth.login.config", "C:\\CB\\authwlConfig\\authwl.conf");
  System.setProperty("APPSERVER_TYPE", "wls");
  Hashtable env = new Hashtable();
  env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, PROVIDER_URL);
  env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL,OIMClient.WLS_CONTEXT_FACTORY);
  oimClient = new OIMClient(env);
  oimClient.login(USERNAME, PASSWORD);
  System.out.println("<<<<<<<<<<<<<<<connection established>>>>>>>>>>>>>>>>>");

}

void readCSV(String csvFileLoc,String csvSeparator) throws IOException{
System.out.println("<<<<<<<<<<<<Read CSV Method>>>>>>>>>>>>>>>>");
System.out.println("CSV File Loc:"+csvFileLoc+"CSV Separator:"+csvSeparator);
CsvReader dataValue;
char c[]=csvSeparator.toCharArray();
System.out.println("value of c[0]----> "+c[0]);
dataValue = new CsvReader(csvFileLoc,c[0]);
dataValue.readHeaders();
String s[] = dataValue.getHeaders();
for(int i=0;i<s.length;i++){
System.out.println("Header name: ----> "+s[i]);
}
try {
while (dataValue.readRecord()){
String OrgName = dataValue.get("Organization Name");
String parOrgeKey = dataValue.get("Parent Organization Key");
    String OrgType = dataValue.get("Organization Type");
    String propertyID=dataValue.get("Property ID");
    System.out.println("OrgName-->"+OrgName+"parOrgeKey----->"+parOrgeKey+"OrgType---->"+OrgType+"Property ID---->"+propertyID);
    System.out.println("<<<<<<<<<<<<Before  Calling Create Organization  Method>>>>>>>>>>>>>>>>");
    createOrg(OrgName,parOrgeKey,OrgType,propertyID);
}
} catch (IOException e) {
e.printStackTrace();
}

}
public String createOrg(String orgName,String parorgKey, String orgType, String PropertyID){
System.out.println("<<<<<<<<<<<<Create Organization Method>>>>>>>>>>>>>>>>");
organizationmanager = oimClient.getService(OrganizationManager.class);
//usrmgconst = oimClient.getService(UserManagerConstants.class);
System.out.println("<<<<<<<<<<<<Before Search rule>>>>>>>>>>>>>>>>");
SearchRule sc = new SearchRule("PropertyID",propertyID,Operator.EQUAL); System.out.println("<<<<<<<<<<<<After Search Rule>>>>>>>>>>>>>>>>");
System.out.println("Search Rule is: "+sc);
Organization organization = new Organization("Test");
        organization.setAttribute("Organization Name", orgName);
        organization.setAttribute("parent_key", parorgKey);
        organization.setAttribute("Organization Customer Type", orgType);
        System.out.println("<<<<<<<<<<<<Organization is: "+organization);
      /*****After org creation it returns orgKey as return value. This is org key for newly created organization.*****/
        String orgKey = null;
        try {
        System.out.println("<<<<<<<<<<<<Before Create Organization  Method>>>>>>>>>>>>>>>>");
//orgKey = organizationmanager.create(organization);
System.out.println("Organization Key is: "+orgKey);
System.out.println("<<<<<<<<<<<<Before Assigning membersigip>>>>>>>>>>>>>>>>");
organizationmanager.setUserMembershipRule(orgKey, sc);
System.out.println("<<<<<<<<<<<<After Assigning membersigip>>>>>>>>>>>>>>>>");
} catch (OrganizationManagerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AccessDeniedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return orgKey;

}

public static void main(String[] arg) throws LoginException, IOException {
OrgOperation op=new OrgOperation();
op.getOIMConnection();
op.readCSV("C:/CB/CsvLoc/OrgCSV/bulkOrg.csv", ",");
}



}

Scheduler -Assign Admin Role To User in OIM11GR2

=========================Assign Admin Role To User=========================
In this Post fetching User Login and Admin Role from CSV File and assigning Admin Role to User. We cannot assign Admin Role through Client Code so need to Deploy Code as Scheduler the it will work.
--------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
=========================Java Code Put in lib folder============================
package com.oim.scheduler.AssignAdminRole;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.csvreader.CsvReader;
import Thor.API.tcResultSet;
import Thor.API.Exceptions.tcAPIException;
import Thor.API.Exceptions.tcColumnNotFoundException;
import Thor.API.Operations.tcGroupOperationsIntf;
import Thor.API.Operations.tcLookupOperationsIntf;
import Thor.API.Operations.tcUserOperationsIntf;
import oracle.core.ojdl.logging.ODLLogger;
import oracle.iam.identity.rolemgmt.api.RoleManager;
import oracle.iam.platform.Platform;
import oracle.iam.platform.authopss.api.AdminRoleService;
import oracle.iam.platform.authopss.vo.AdminRole;
import oracle.iam.platform.authopss.vo.AdminRoleMembership;
import oracle.iam.scheduler.vo.TaskSupport;

public class AssignAdminRole extends TaskSupport{
String _className = "com.oim.scheduler.AssignAdminRole.java-";
private static final ODLLogger logger = ODLLogger.getODLLogger("SCH_SUBORGANIZATIONCREATION.LOGGER");
AdminRoleService arsi;
String usrLogin = null;
String roleName = null;
public void execute(HashMap hashMap)
{

String _methodName = "execute()-";
logger.log(java.util.logging.Level.FINE, "****** Start Scheduler ******");
String csvFileLoc = (String) hashMap.get("CSV File Location");
String csvSeparator = ",";
logger.log(java.util.logging.Level.FINE, "Got Scheduler Attributes : [CSV File Location:"+csvFileLoc+"] [CSV Separator:"+csvSeparator+"]");

logger.log(java.util.logging.Level.FINE, ">>>>>>>>>>>>>>>>>>>>>>> Start - Admin Role Assignment <<<<<<<<<<<<<<<<<<<<<<<<<<");
try {
assignAdminRoleToUser(csvFileLoc, csvSeparator);
} catch (IOException e) {
String _errorMessage = "Exception-Exception-Message : " + e.getMessage();
       logger.log(java.util.logging.Level.INFO, _className + _methodName + _errorMessage);    
       java.io.StringWriter sw = new java.io.StringWriter();
       java.io.PrintWriter pw = new java.io.PrintWriter(sw);
       e.printStackTrace(pw);                                                                                        
       logger.log(java.util.logging.Level.SEVERE, _className + _methodName + _errorMessage + "- Complete Error Stack : " + sw.toString());
}
logger.log(java.util.logging.Level.FINE, ">>>>>>>>>>>>>>>>>>>>>>> End - Admin Role Assignment <<<<<<<<<<<<<<<<<<<<<<<<<<");
}
private void assignAdminRoleToUser(String csvFileLoc,String csvSeparator) throws IOException{

logger.log(java.util.logging.Level.FINE,"<<<<<<<<<<<<Read CSV Method>>>>>>>>>>>>>>>>");
String _methodName = "assignAdminRoleToUser()-";
logger.log(java.util.logging.Level.FINE,"CSV File Loc:"+csvFileLoc+"CSV Separator:"+csvSeparator);
tcUserOperationsIntf userintf = Platform.getService(tcUserOperationsIntf.class);
tcGroupOperationsIntf roleintf=Platform.getService(tcGroupOperationsIntf.class);
RoleManager rolemgr=Platform.getService(RoleManager.class);
CsvReader dataValue;
String usrKey=null;
Long orgKey=(long) 4;
char c[]=csvSeparator.toCharArray();
logger.log(java.util.logging.Level.FINE,"value of c[0]----> "+c[0]);
dataValue = new CsvReader(csvFileLoc,c[0]);
dataValue.readHeaders();
String s[] = dataValue.getHeaders();
for(int i=0;i<s.length;i++){
logger.log(java.util.logging.Level.FINE,"Header name: ----> "+s[i]);
}
try {
while (dataValue.readRecord()){
usrLogin = dataValue.get("User Login");
roleName = dataValue.get("Role Name");
logger.log(java.util.logging.Level.FINE,"User Login-->"+usrLogin+"Role Name----->"+roleName);
    HashMap userMap = new HashMap();
    userMap.put("Users.User ID", usrLogin);
            tcResultSet userResultSet = null;
            HashMap roleMap = new HashMap();
roleMap.put("Groups.Group Name", roleName);
            tcResultSet roleResultSet = null;
try {
userResultSet = userintf.findUsers(userMap);
String[] CNameforUser=userResultSet.getColumnNames();
usrKey=userResultSet.getStringValue("Users.Key");
logger.log(java.util.logging.Level.FINE,"User Key is --->"+usrKey);
logger.log(java.util.logging.Level.FINE,"<<<<<<<<<<<<<<<Start Processing Admin Role Assignment>>>>>>>>>>>>>>>>>");
arsi = Platform.getService(AdminRoleService.class);
AdminRole admrole= arsi.getAdminRole(roleName);
       AdminRoleMembership arm = new AdminRoleMembership(usrKey, admrole, orgKey, true);
       arsi.addAdminRoleMembership(arm);
       logger.log(java.util.logging.Level.FINE,"<<<<<<<<<<<<<<<Admin Role Assigned Successfully>>>>>>>>>>>>>>>>>");
     
} catch (tcColumnNotFoundException e) {
String _errorMessage = "Exception-Exception-Message : " + e.getMessage();
       logger.log(java.util.logging.Level.INFO, _className + _methodName + _errorMessage);    
       java.io.StringWriter sw = new java.io.StringWriter();
       java.io.PrintWriter pw = new java.io.PrintWriter(sw);
       e.printStackTrace(pw);                                                                                        
       logger.log(java.util.logging.Level.SEVERE, _className + _methodName + _errorMessage + "- Complete Error Stack : " + sw.toString());
}
catch (tcAPIException e) {
String _errorMessage = "Exception-Exception-Message : " + e.getMessage();
       logger.log(java.util.logging.Level.INFO, _className + _methodName + _errorMessage);    
       java.io.StringWriter sw = new java.io.StringWriter();
       java.io.PrintWriter pw = new java.io.PrintWriter(sw);
       e.printStackTrace(pw);                                                                                        
       logger.log(java.util.logging.Level.SEVERE, _className + _methodName + _errorMessage + "- Complete Error Stack : " + sw.toString());
}
catch (Exception e) {
String _errorMessage = "Exception-Exception-Message : " + e.getMessage();
       logger.log(java.util.logging.Level.INFO, _className + _methodName + _errorMessage);    
       java.io.StringWriter sw = new java.io.StringWriter();
       java.io.PrintWriter pw = new java.io.PrintWriter(sw);
       e.printStackTrace(pw);                                                                                        
       logger.log(java.util.logging.Level.SEVERE, _className + _methodName + _errorMessage + "- Complete Error Stack : " + sw.toString());
}
}
} catch (IOException e) {
String _errorMessage = "Exception-Exception-Message : " + e.getMessage();
       logger.log(java.util.logging.Level.INFO, _className + _methodName + _errorMessage);    
       java.io.StringWriter sw = new java.io.StringWriter();
       java.io.PrintWriter pw = new java.io.PrintWriter(sw);
       e.printStackTrace(pw);                                                                                        
       logger.log(java.util.logging.Level.SEVERE, _className + _methodName + _errorMessage + "- Complete Error Stack : " + sw.toString());

}

}

@Override
public HashMap getAttributes() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setAttributes() {
// TODO Auto-generated method stub

}
}

=========================plugins.xml=================================
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance/oim/scheduler">
<plugins pluginpoint="oracle.iam.scheduler.vo.TaskSupport">
<plugin pluginclass= "com.oim.scheduler.AssignAdminRole" version="1.0.0" name="AssignAdminRole">
</plugin>
</plugins>
</oimplugins>

===========================AssignAdminMetadata.xml========================
Put below content in  "META-INF" Folder in XML File "metaDataAssignAdminRole.xml"

<?xml version="1.0" encoding="UTF-8"?>
<scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler">
<task>
<name>AssignAdminRole</name>
<class>com.oim.scheduler.AssignAdminRole</class>
<description>AssignAdminRole</description>
<retry>5</retry>
<parameters>
<string-param required="true" encrypted="false" helpText="CSV File Location">CSV File Location</string-param>
</parameters>
</task>
</scheduledTasks>