Advertisement
Guest User

Untitled

a guest
Jul 24th, 2014
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.77 KB | None | 0 0
  1. package com.arisant.oim.ad.groups;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.security.auth.login.LoginException;
  8.  
  9. import Thor.API.tcResultSet;
  10. import Thor.API.Exceptions.tcAPIException;
  11. import Thor.API.Exceptions.tcColumnNotFoundException;
  12. import Thor.API.Exceptions.tcFormNotFoundException;
  13. import Thor.API.Exceptions.tcInvalidValueException;
  14. import Thor.API.Exceptions.tcNotAtomicProcessException;
  15. import Thor.API.Exceptions.tcProcessNotFoundException;
  16. import Thor.API.Exceptions.tcRequiredDataMissingException;
  17. import Thor.API.Exceptions.tcVersionNotDefinedException;
  18. import Thor.API.Operations.tcFormInstanceOperationsIntf;
  19.  
  20. import com.arisant.identity.oim.APIManager;
  21. import com.arisant.identity.oim.LocalOIMClientManager;
  22. import com.arisant.identity.oim.LocalOIMClientManager.Environments;
  23. import com.thortech.xl.dataaccess.tcDataProvider;
  24. import com.thortech.xl.dataaccess.tcDataSet;
  25. import com.thortech.xl.dataaccess.tcDataSetException;
  26.  
  27. public class GroupMembershipProcessor {
  28.  
  29.     public String determineAndAddGroups(String siteCode, String empType,
  30.             Long processInstanceKey) {
  31.  
  32.         List<String> groups;
  33.         try {
  34.             groups = getGroups(siteCode, empType);
  35.         } catch (tcDataSetException e) {
  36.             // TODO Log error instead of print stack trace
  37.             e.printStackTrace();
  38.             return "GET_GROUPS_ERROR";
  39.         }
  40.         try {
  41.             addGroups(groups, processInstanceKey);
  42.         } catch (tcProcessNotFoundException e) {
  43.             return "PROCESS_NOT_FOUND";
  44.         } catch (Exception e) {
  45.             // TODO Log error instead of print stack trace
  46.             e.printStackTrace();
  47.             return "ADD_GROUPS_ERROR";
  48.         }
  49.         return "SUCCESS";
  50.     }
  51.  
  52.     private void addGroups(List<String> groups, Long processInstanceKey)
  53.             throws tcAPIException, tcProcessNotFoundException,
  54.             tcFormNotFoundException, tcVersionNotDefinedException,
  55.             tcColumnNotFoundException, tcRequiredDataMissingException,
  56.             tcInvalidValueException, tcNotAtomicProcessException {
  57.         // Local load for OIMClient
  58.         tcFormInstanceOperationsIntf formInstanceIntf = APIManager.getService(tcFormInstanceOperationsIntf.class);
  59.  
  60.         // Remote load for OIMClient
  61.         // tcFormInstanceOperationsIntf formInstanceIntf =
  62.         // oimClient.getService(tcFormInstanceOperationsIntf.class);
  63.  
  64.         // Retrieve process form definition key
  65.         long processDefKey = 0;
  66.  
  67.         processDefKey = formInstanceIntf.getProcessFormDefinitionKey(processInstanceKey);
  68.  
  69.         // Retrieving the process form active version
  70.         int formActiveVersion = 0;
  71.  
  72.         formActiveVersion = formInstanceIntf.getActiveVersion(processDefKey);
  73.  
  74.         // Retrieving the Process Form Child Definition Key
  75.         String childFormName = "UD_ADUSRC";
  76.         tcResultSet childTrsDef = null;
  77.         childTrsDef = formInstanceIntf.getChildFormDefinition(processDefKey, formActiveVersion);
  78.  
  79.         int childCount = 0;
  80.         try {
  81.             childCount = childTrsDef.getRowCount();
  82.         } catch (tcAPIException e) {
  83.             e.printStackTrace();
  84.         }
  85.         long childDefKey = -1;
  86.         for (int i = 0; i < childCount; i++) {
  87.             // Retreiving the Child Table Name and Child Table Definition Key
  88.             try {
  89.                 childTrsDef.goToRow(i);
  90.             } catch (tcAPIException e) {
  91.                 e.printStackTrace();
  92.             }
  93.             String tableName = null;
  94.  
  95.             tableName = childTrsDef.getStringValue("Structure Utility.Table Name");
  96.  
  97.             childDefKey = childTrsDef.getLongValue("Structure Utility.Child Tables.Child Key");
  98.  
  99.             if (tableName.equalsIgnoreCase(childFormName)) {
  100.                 break;
  101.             }
  102.         }
  103.         String childColumnName = "UD_ADUSRC_GROUPNAME";
  104.         Map<String, String> childData = new HashMap<String, String>();
  105.  
  106.         for (String group : groups) {
  107.             try {
  108.                 System.out.println("Adding group to child data: " + group);
  109.                 childData.put(childColumnName, group);
  110.                 formInstanceIntf.addProcessFormChildData(childDefKey, processInstanceKey, childData);
  111.             } catch (tcAPIException e) {
  112.                 if (e.getMessage().contains("The entered form data already exists.")) {
  113.                     // group already exists. Great! Do nothing!
  114.                 } else {
  115.                     throw e;
  116.                 }
  117.             }
  118.         }
  119.  
  120.  
  121.  
  122.     }
  123.  
  124.     public List<String> getGroups(String siteCode, String empType)
  125.             throws tcDataSetException {
  126.  
  127.         tcDataProvider dbProvider = null; // OIM Schema Database Client
  128.         List<String> groups = new ArrayList<String>();
  129.  
  130.         dbProvider = APIManager.getDb();
  131.  
  132.         String effectiveSite = siteCode;
  133.  
  134.         SiteProcessor sp = new SiteProcessor();
  135.         SiteOverride override = sp.lookupSiteCodeOverride(siteCode, empType);
  136.  
  137.         if (override != null) {
  138.             effectiveSite = override.getOverrideSiteCode();// override.getSite
  139.                                                             // in your code
  140.             if (override.getUserGroup() != null) {
  141.                 String overrideGroup = getOverrideGroup(dbProvider, effectiveSite, override.getUserGroup());// override
  142.                                                                                                             // group
  143.                                                                                                             // in
  144.                                                                                                             // your
  145.                                                                                                             // code
  146.  
  147.                 if (overrideGroup != null && overrideGroup.length() > 0) {
  148.                     groups.add(overrideGroup);
  149.                 }
  150.             }
  151.  
  152.         }
  153.  
  154.         String siteGroup = getDefaultGroup(dbProvider, effectiveSite, empType);
  155.         if (siteGroup != null && siteGroup.length() > 0) {
  156.             groups.add(siteGroup);
  157.         }
  158.  
  159.         return groups;
  160.     }
  161.  
  162.     private String getDefaultGroup(tcDataProvider dbProvider, String siteCode,
  163.             String empType) throws tcDataSetException {
  164.  
  165.         String decodedEmpType = decodeEmpType(empType);
  166.  
  167.         String defaultGroup = null;
  168.         String standardQuery = "select * from lku l "
  169.                 + "join lkv v on v.lku_key = l.lku_key "
  170.                 + "where l.LKU_TYPE_STRING_KEY ='Lookup.ActiveDirectory.Groups'"
  171.                 + "and upper(v.LKV_DECODED) like upper('%" + siteCode + "-"
  172.                 + decodedEmpType + "%') "
  173.                 + "and upper(v.LKV_DECODED) like upper('%OU=" + siteCode
  174.                 + "%') " + "and upper(v.LKV_ENCODED) like upper('183~CN=GG-%')";
  175.  
  176.         tcDataSet usersDataSetTwo = new tcDataSet(); // store result set of
  177.                                                         // query
  178.         usersDataSetTwo.setQuery(dbProvider, standardQuery);
  179.         usersDataSetTwo.executeQuery();
  180.         defaultGroup = usersDataSetTwo.getString("LKV_ENCODED");
  181.         System.out.println("Default group determined as: " + defaultGroup);
  182.         return defaultGroup;
  183.     }
  184.  
  185.     private String decodeEmpType(String empType) {
  186.         String decodedEmpType = "Staff";
  187.         if (empType.compareTo("C") == 0) {
  188.             decodedEmpType = "Teacher";
  189.         }
  190.  
  191.         return decodedEmpType;
  192.     }
  193.  
  194.     private String getOverrideGroup(tcDataProvider dbProvider,
  195.             String siteOverride, String group) throws tcDataSetException {
  196.         String overrideGroup;
  197.         String overrideQuery = "select * from lku l "
  198.                 + "join lkv v on v.lku_key = l.lku_key "
  199.                 + "where l.LKU_TYPE_STRING_KEY ='Lookup.ActiveDirectory.Groups'"
  200.                 + "and upper(v.LKV_DECODED) like upper('%" + group + "%') "
  201.                 + "and upper(v.LKV_DECODED) like upper('%OU=" + siteOverride
  202.                 + "%') " + "and upper(v.LKV_ENCODED) like upper('183~CN=GG-%')";
  203.  
  204.         tcDataSet usersDataSet = new tcDataSet(); // store result set of query
  205.         usersDataSet.setQuery(dbProvider, overrideQuery);
  206.         usersDataSet.executeQuery();
  207.         overrideGroup = usersDataSet.getString("LKV_ENCODED");
  208.         System.out.println("Override group determined as: " + overrideGroup);
  209.         return overrideGroup;
  210.     }
  211.  
  212.     /*public static void main(String[] args) {
  213.         try {
  214.             LocalOIMClientManager mgr = new LocalOIMClientManager(Environments.CCSD_OIM_Dev);
  215.             APIManager.setClient(mgr.getNewOIMClientInstance());
  216.             GroupMembershipProcessor gmp = new GroupMembershipProcessor();
  217.  
  218.             // List<String> groups = gmp.getGroups("0001", "F");
  219.             // System.out.println("Returned " + groups.size() + " group(s).");
  220.             //
  221.             // for (String string : groups) {
  222.             // System.out.println("Group: " + string);
  223.             // }
  224.  
  225.             String result = gmp.determineAndAddGroups("0001", "F", 184072L);
  226.             System.out.println("Return Value = " + result);
  227.  
  228.         } catch (LoginException e) {
  229.             // TODO Auto-generated catch block
  230.             e.printStackTrace();
  231.         }
  232.  
  233.     }
  234.         */
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement