Saturday, December 6, 2014

Custom Preprocess Event Handler to Set Middle Name

Version: Oracle Identity Manager 11.1.2.2.0
Description:  A preprocess event handler which sets the user's middle name using the first letter of the user's first name if the user does not have a value for middle name. The event handler triggers on the creation of an OIM User.
Referencehttps://docs.oracle.com/cd/E40329_01/dev.1112/e27150/oper.htm#OMDEV4768



Source Code

package com.blogspot.oraclestack.eventhandlers;

import java.io.Serializable;
import java.util.HashMap;
import oracle.core.ojdl.logging.ODLLevel;
import oracle.core.ojdl.logging.ODLLogger;
import oracle.iam.identity.usermgmt.api.UserManagerConstants;
import oracle.iam.platform.context.ContextAware;
import oracle.iam.platform.kernel.spi.PreProcessHandler;
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;

/**
 * A preprocess event handler which sets the user's middle name using the first
 * letter of the user's first name if the user does not have a value for middle name.
 * Triggers on the creation of an OIM User
 * @author  rayedchan
 * @version 1.0
 */
public class SetMiddleNamePreprocessEH implements PreProcessHandler
{
    private ODLLogger logger = ODLLogger.getODLLogger(SetMiddleNamePreprocessEH.class.getName());
    
    /**
     * Execution logic for preprocess event handler to set middle name.
     * @param l                 Process Id
     * @param l1                Event Id
     * @param orchestration     Contains useful user data
     * @return
     */
    public EventResult execute(long l, long l1, Orchestration orchestration) 
    {
        logger.log(ODLLevel.NOTIFICATION, "V1.0 Enter execute() with parameters: [{0}], [{1}], [{2}]", new Object[]{l, l1, orchestration});
        
        // Get changed parameter values (E.g. User attributes) from orchestation
        HashMap<String, Serializable> parameters = orchestration.getParameters();
        logger.log(ODLLevel.NOTIFICATION, "Orchestration paramters: [{0}]", new Object[]{parameters});
        
        // Get USR_KEY of target user
        String usrKey = orchestration.getTarget().getEntityId();
        logger.log(ODLLevel.NOTIFICATION, "Target User Key: {0}", new Object[]{usrKey});
        
        // Get "Middle Name"
        String middleName = getParamaterValue(parameters, UserManagerConstants.AttributeName.MIDDLENAME.getId()); 
             
        // If the middle name is empty set the first letter of the first name as the middle initial
        if ((middleName == null) || middleName.equals("")) 
        {
            String firstName = getParamaterValue(parameters, UserManagerConstants.AttributeName.FIRSTNAME.getId()); // Get "First Name"
            middleName = firstName.substring(0, 1); // Set middleName to first letter of first name
            orchestration.addParameter(UserManagerConstants.AttributeName.MIDDLENAME.getId(), middleName); // Pass data to orchestration so OIM can apply the changes
        }
        
        logger.log(ODLLevel.NOTIFICATION, "Middle Name: {0}", new Object[]{middleName});
        return new EventResult();
    }

    public BulkEventResult execute(long l, long l1, BulkOrchestration bulkOrchestration) 
    {
        return null;
    }

    public void compensate(long l, long l1, AbstractGenericOrchestration abstractGenericOrchestration) 
    {
        
    }

    public boolean cancel(long l, long l1, AbstractGenericOrchestration abstractGenericOrchestration) 
    {
        return false;
    }

    public void initialize(HashMap<String, String> hashMap)
    {
        
    }
    
    /**
     * Get an attribute value based on the attribute name.
     * @param parameters    User's attributes
     * @param key           Name of the attribute API name
     * @return              Value of the attribute to fetch
     */
    private String getParamaterValue(HashMap<String, Serializable> parameters, String key)
    {
        if(parameters.containsKey(key))
        {
            String value = (parameters.get(key) instanceof ContextAware) ? (String) ((ContextAware) parameters.get(key)).getObjectValue() : (String) parameters.get(key);
            return value;
        }
        else
        {
            return null;
        }
    }
}

Plugin XML
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
            <plugin pluginclass="com.blogspot.oraclestack.eventhandlers.SetMiddleNamePreprocessEH" version="1.0" name="SetMiddleNamePreprocessEH"/>    
                </plugins>
                </oimplugins>

Event Handler Metadata
<?xml version="1.0" encoding="UTF-8"?>
<eventhandlers xmlns="http://www.oracle.com/schema/oim/platform/kernel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd"> 
   <action-handler entity-type="User" operation="CREATE" class="com.blogspot.oraclestack.eventhandlers.SetMiddleNamePreprocessEH" name="SetMiddleNamePreprocessEH" stage="preprocess" order="1050" sync="TRUE"/> 
   </eventhandlers>

Logging

<log_handler name='SetMiddleNamePreprocessEH' level='TRACE:32' class='oracle.core.ojdl.logging.ODLHandlerFactory'>
   <property name='path' value='${domain.home}/servers/${weblogic.Name}/logs/SetMiddleNamePreProcessEH.log'/>
      <property name='useThreadName' value='true'/>
         <property name='maxFileSize' value='5242880'/>
            <property name='maxLogSize' value='52428800'/>
               <property name='encoding' value='UTF-8'/>
                </log_handler>

  <logger name="com.blogspot.oraclestack.eventhandlers.SetMiddleNamePreprocessEH" level="TRACE:32" useParentHandlers="false">
      <handler name="SetMiddleNamePreprocessEH"/>
       </logger>
Plugin Zip Structure


mycustomplugin.zip
     |
     |-------- lib/
     |          |
                ---------- JAR FILE
     |
     |--------- plugin.xml
     |
     |--------- META-INF/
                      |
                      ------ METADATA XML

1 comment:

  1. Nice information. Print Custom Event Tickets From PrintMagic and are suitable for all events with the needs of guest identification. It helps in easy identification and control gathering at events that have control access points.

    ReplyDelete