I have implemented a post-process event handler for updating the display name when the user modifies their first, middle or last name. created and registered successfully but when I am modifying the user detail display name not updated. below are the code please help me out.
package abc;
import java.io.Serializable;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import oim.client.config.Configration;
import oracle.core.ojdl.logging.ODLLogger;
import oracle.iam.identity.usermgmt.vo.User;
import oracle.iam.platform.context.ContextAware;
import oracle.iam.platform.kernel.spi.PostProcessHandler;
import oracle.iam.platform.kernel.vo.AbstractGenericOrchestration;
import oracle.iam.platform.kernel.vo.BulkEventResult;
import oracle.iam.platform.kernel.vo.BulkOrchestration;
import oracle.iam.platform.kernel.vo.EventResult;
import oracle.iam.platform.kernel.vo.Orchestration;
/**
* Event Handler Type: Post-Process
* Triggers: Whenever a first name, last name, middle name is changed. Operation Type is defined
* in the meta-data XML file for this event handler.
* Action: Set the new display name when user's first name,last name, middle name changed.
*
*
*/
public class ModifyDisplayNameInProfile implements PostProcessHandler
{
public static final Logger logger = ODLLogger.getLogger("CUSTOM.COMMON.EVENTHANDLERS");
static private String OIM_URL = Configration.OIM_URL;
@Override
public EventResult execute(long processId, long eventId, Orchestration orchestration)
{
logger.info("================Start ModifyDisplayNameInProfile execute method: =====================");
try
{
logger.info(String.format("Start execute() with ProcessId: %s and EventId %s",processId, eventId));
HashMap<String, Serializable> newParameters = orchestration.getParameters(); //contains only the new values
HashMap<String, Serializable> interParameters = orchestration.getInterEventData(); //contains old and new values of user
//logger.info(String.format("Inter Parameters: %s ", interParameters));
logger.info(String.format("New Parameters: %s ", newParameters));
String operation = orchestration.getOperation();
logger.info("================OPERATION IS ====================="+operation);
//Check if the user's password is being modified
//If it is, it should be in the newParameters object
if((newParameters.get("First Name") != null || newParameters.get("Last Name") != null || newParameters.get("Middle Name") != null) && operation.equalsIgnoreCase("modify")) {
//User currentUserState = (User) interParameters.get("CURRENT_USER"); //Get target user's current (old) info state
User newUserState = (User) interParameters.get("NEW_USER_STATE"); //Get target user's current (new) info state
logger.info(String.format("Inter Parameters New User State: %s ", newUserState));
String userKey = orchestration.getTarget().getEntityId(); //Get the target user's key
//String userLogin = currentUserState.getLogin(); //Get target user's login
String oldFirstName = (newUserState.getAttribute("First Name") instanceof ContextAware)
? (String) ((ContextAware) newUserState.getAttribute("First Name")).getObjectValue()
: (String) newUserState.getAttribute("First Name");
String oldMiddleName = (newUserState.getAttribute("Middle Name") instanceof ContextAware)
? (String) ((ContextAware) newUserState.getAttribute("Middle Name")).getObjectValue()
: (String) newUserState.getAttribute("Middle Name");
String oldLastName = (newUserState.getAttribute("Last Name") instanceof ContextAware)
? (String) ((ContextAware) newUserState.getAttribute("Last Name")).getObjectValue()
: (String) newUserState.getAttribute("Last Name");
logger.info(String.format("New First Name: %s , New Middle Name %s , New Last Name %s",oldFirstName, oldMiddleName, oldLastName));
//String newFirstName = getParamaterValue(newParameters, "First Name");
//String newMiddleName = getParamaterValue(newParameters, "Middle Name");
//String newLastName = getParamaterValue(newParameters, "Last Name");
//logger.info(String.format("New First Name: %s and New Last Name %s",newFirstName, newLastName));
//String dfname = (newFirstName != null)?newFirstName:oldFirstName;
//String dmname = (newMiddleName != null)?newMiddleName:oldMiddleName;
//if(!(dmname != null))
// dmname = "";
//String dlname = (newLastName != null)?newLastName:oldLastName;
String newDisplayName = "";
String dfname = oldFirstName;
String dlname = oldLastName;
String dmname = oldMiddleName;
if((dmname == null)){
newDisplayName = dfname +" "+ dlname;
} else {
newDisplayName = dfname+ " "+ dmname +" "+ dlname;
}
// dmname = "";
logger.info(String.format("New Display Name: %s",newDisplayName));
/*UserManager usrOps = Platform.getService(UserManager.class); //Get services from UserManager class
HashMap modParams = new HashMap(); //contains the attaributes to modify
modParams.put("Display Name", newDisplayName); //set Display Name attribute value to Display Name
User modUser = new User(userKey, modParams);
usrOps.modify("usr_key", userKey, modUser); //modify the target user
logger.info("Display name of user is modified sucessfully.");*/
}
}
/* catch (ValidationFailedException ex) {logger.log(Level.SEVERE,"",ex);}
catch (AccessDeniedException ex) {logger.log(Level.SEVERE,"",ex);}
catch (UserModifyException ex) {logger.log(Level.SEVERE,"",ex);}
catch (NoSuchUserException ex) {logger.log(Level.SEVERE,"",ex);}
catch (SearchKeyNotUniqueException ex) {logger.log(Level.SEVERE,"",ex);}
catch (tcCryptoException ex) {logger.log(Level.SEVERE,"",ex);}*/
catch (Exception ex) {logger.log(Level.SEVERE,"",ex);}
return new EventResult();
}
/**
* ContextAware object is obtained when the actor is a regular user.
* If the actor is an administrator, the exact value of the attribute is obtained.
* @param parameters parameters from the orchestration object
* @param key name of User Attribute in OIM Profile or column in USR table
* @return value of the corresponding key in parameters
*/
private String getParamaterValue(HashMap<String, Serializable> parameters, String key)
{
String value = (parameters.get(key) instanceof ContextAware)
? (String) ((ContextAware) parameters.get(key)).getObjectValue()
: (String) parameters.get(key);
return value;
}
@Override
public BulkEventResult execute(long l, long l1, BulkOrchestration bo)
{
return null;
}
@Override
public void compensate(long l, long l1, AbstractGenericOrchestration ago)
{
}
@Override
public boolean cancel(long l, long l1, AbstractGenericOrchestration ago)
{
return false;
}
@Override
public void initialize(HashMap<String, String> hm)
{
}
}
Process that i have followed-:
created a jar file.
put in lib folder
created plugin.xml file where define about operation and class,
created zip containing above two
put a zip in plugin_utility folder and run register command
Event handler registered successfully with OIM, but not working please help me out .
@Kevin Pinsky @"Srinath Menon-Oracle" @"vanantha komara-Oracle"