Created
November 20, 2015 05:10
-
-
Save rayedchan/9145cb5391e8c23f075e to your computer and use it in GitHub Desktop.
OIM API: Calling Process Task Instance On User Resource Account
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.blogspot.oraclestack.testdriver; | |
import Thor.API.Exceptions.tcAPIException; | |
import Thor.API.Exceptions.tcColumnNotFoundException; | |
import Thor.API.Operations.TaskDefinitionOperationsIntf; | |
import Thor.API.Operations.tcProvisioningOperationsIntf; | |
import Thor.API.tcResultSet; | |
import java.util.HashMap; | |
import java.util.HashSet; | |
import java.util.Hashtable; | |
import java.util.List; | |
import oracle.core.ojdl.logging.ODLLevel; | |
import oracle.core.ojdl.logging.ODLLogger; | |
import oracle.iam.identity.usermgmt.api.UserManager; | |
import oracle.iam.identity.usermgmt.api.UserManagerConstants; | |
import oracle.iam.identity.usermgmt.vo.User; | |
import oracle.iam.platform.OIMClient; | |
import oracle.iam.platform.entitymgr.vo.SearchCriteria; | |
import oracle.iam.provisioning.api.ProvisioningConstants; | |
import oracle.iam.provisioning.api.ProvisioningService; | |
import oracle.iam.provisioning.vo.Account; | |
/** | |
* Uses OIM APIs to manually call a process task instance on a given application | |
* instance on a user. | |
* @author rayedchan | |
*/ | |
public class CallProvisioningTaskTestDriver | |
{ | |
// Logger | |
private static final ODLLogger LOG = ODLLogger.getODLLogger(CallProvisioningTaskTestDriver.class.getName()); | |
// Change variables accordingly | |
public static final String OIM_HOSTNAME = "localhost"; | |
public static final String OIM_PORT = "14000"; // For SSL, use 14001; For non-SSL, use 14000 | |
public static final String OIM_PROVIDER_URL = "t3://"+ OIM_HOSTNAME + ":" + OIM_PORT; // For SSL, use t3s protocol; For non-SSL, use t3 protocol | |
public static final String AUTHWL_PATH = "lib/config/authwl.conf"; | |
public static final String APPSERVER_TYPE = "wls"; // WebLogic Server | |
public static final String FACTORY_INITIAL_TYPE = "weblogic.jndi.WLInitialContextFactory"; | |
public static final String OIM_ADMIN_USERNAME = "xelsysadm"; | |
public static final String OIM_ADMIN_PASSWORD = "Password1"; | |
public static void main(String[] args) | |
{ | |
// OIM Client | |
OIMClient oimClient = null; | |
tcProvisioningOperationsIntf provOps = null; | |
TaskDefinitionOperationsIntf taskDefOps =null; | |
try | |
{ | |
// Set system properties required for OIMClient | |
System.setProperty("java.security.auth.login.config", AUTHWL_PATH); | |
System.setProperty("APPSERVER_TYPE", APPSERVER_TYPE); | |
// Create an instance of OIMClient with OIM environment information | |
Hashtable<String, String> env = new Hashtable<String, String>(); | |
env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL, FACTORY_INITIAL_TYPE); | |
env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, OIM_PROVIDER_URL); | |
// Establish an OIM Client | |
oimClient = new OIMClient(env); | |
// Login to OIM with System Administrator Credentials | |
oimClient.login(OIM_ADMIN_USERNAME, OIM_ADMIN_PASSWORD.toCharArray()); | |
// Get API Service | |
UserManager usrMgr = oimClient.getService(UserManager.class); | |
ProvisioningService provService = oimClient.getService(ProvisioningService.class); | |
provOps = oimClient.getService(tcProvisioningOperationsIntf.class); | |
taskDefOps = oimClient.getService(TaskDefinitionOperationsIntf.class); | |
// Change variables accordingly | |
String userLogin = "LSTILLMAN"; // OIM User Login | |
String resourceObjectName = "LDAP User"; // Resource Object Name | |
String procTaskName = "Set Department To Some Value"; | |
// Get user's details | |
boolean useUserLogin = true; | |
HashSet<String> retAttrs = new HashSet<String>(); | |
retAttrs.add(UserManagerConstants.AttributeName.USER_KEY.getId()); // usr_key | |
User user = usrMgr.getDetails(userLogin, retAttrs, useUserLogin); | |
LOG.log(ODLLevel.INFO, "User: {0}", new Object[]{user}); | |
String userKey = user.getId(); // Get usr_key | |
// Get user's resource accounts for a specific resource object | |
SearchCriteria criteria = new SearchCriteria(ProvisioningConstants.AccountSearchAttribute.OBJ_NAME.getId(), resourceObjectName, SearchCriteria.Operator.EQUAL); | |
List<Account> accounts = provService.getAccountsProvisionedToUser(userKey, criteria, null, useUserLogin); | |
LOG.log(ODLLevel.INFO, "Total Accounts: {0}", new Object[]{accounts.size()}); | |
// Iterate User's accounts of a specific resource object | |
for(Account resourceAcct: accounts) | |
{ | |
String accountId = resourceAcct.getAccountID(); // OIU_KEY | |
String procInstFormKey = resourceAcct.getProcessInstanceKey(); // (ORC_KEY) Process Form Instance Key | |
String appInstName = resourceAcct.getAppInstance().getApplicationInstanceName(); // Application Instance Name | |
LOG.log(ODLLevel.INFO, "Account Id: {0}", new Object[]{accountId}); | |
LOG.log(ODLLevel.INFO, "Process Instance Form Key: {0}", new Object[]{procInstFormKey}); | |
LOG.log(ODLLevel.INFO, "Application Instance Name: {0}", new Object[]{appInstName}); | |
// Get a specific process task | |
HashMap<String,String> filter = new HashMap<String,String>(); | |
filter.put("Process Definition.Tasks.Task Name", procTaskName); | |
tcResultSet results = taskDefOps.getTaskDetail(Long.valueOf(procInstFormKey), filter); | |
int rows = results.getTotalRowCount(); | |
String procDefTaskKey = null; | |
// Should only be one since Process Task Name is unique | |
for(int i = 0; i < rows; i++) | |
{ | |
results.goToRow(i); | |
procDefTaskKey = results.getStringValue("Process Definition.Tasks.Key"); // MIL_KEY | |
} | |
LOG.log(ODLLevel.INFO, "Process Definition Task Key: {0}", new Object[]{procDefTaskKey}); | |
if(procDefTaskKey != null) | |
{ | |
// Call a process task directly on an application instance | |
long schKey = provOps.addProcessTaskInstance(Long.valueOf(procDefTaskKey), Long.valueOf(procInstFormKey)); | |
LOG.log(ODLLevel.INFO, "Process Task Instance Key: {0}", new Object[]{schKey}); | |
} | |
} | |
} | |
catch (Exception ex) | |
{ | |
LOG.log(ODLLevel.SEVERE, "", ex); | |
} | |
finally | |
{ | |
// Close tc* service | |
if(provOps != null) | |
{ | |
provOps.close(); | |
} | |
if(taskDefOps != null) | |
{ | |
taskDefOps.close(); | |
} | |
// Logout user from OIM client | |
if( oimClient != null) | |
{ | |
oimClient.logout(); | |
} | |
} | |
} | |
/** | |
* Prints the records of a tcResultSet. | |
* @param tcResultSetObj tcResultSetObject | |
* @throws tcAPIException | |
* @throws tcColumnNotFoundException | |
*/ | |
public static void printTcResultSetRecords(tcResultSet tcResultSetObj) throws tcAPIException, tcColumnNotFoundException | |
{ | |
String[] columnNames = tcResultSetObj.getColumnNames(); | |
int numRows = tcResultSetObj.getTotalRowCount(); | |
for(int i = 0; i < numRows; i++) | |
{ | |
HashMap<String,String> record = new HashMap<String,String>(); | |
tcResultSetObj.goToRow(i); | |
for(String columnName: columnNames) | |
{ | |
record.put(columnName, tcResultSetObj.getStringValue(columnName)); | |
} | |
LOG.log(ODLLevel.INFO, "{0}", new Object[]{record}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment