Ladies_Man

#sonic Re:Zero autorun

Sep 7th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 25.63 KB | None | 0 0
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Set;
  13.  
  14. import org.apache.commons.logging.Log;
  15. import org.apache.commons.logging.LogFactory;
  16. import org.joda.time.DateTime;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18.  
  19. import ru.it.metasonic.ruspost.infopoint.commons.utils.MetasonicApi;
  20. import ru.it.metasonic.ruspost.infopoint.utils.BOHelper;
  21. import ru.lbpm.metasonic.businessobjects.DbHelper;
  22. import ru.lbpm.metasonic.businessobjects.DbHelper.ValueWrapper;
  23.  
  24. import com.jcom1.api.dto.init.InitProcessInstanceData;
  25. import com.jcom1.api.dto.interfaces.IProcessInstanceBean;
  26. import com.jcom1.api.dto.interfaces.IStorageInstanceBean;
  27. import com.jcom1.api.dto.interfaces.ISubjectInstanceBean;
  28. import com.jcom1.api.exceptions.ConnectionException;
  29. import com.jcom1.api.interfaces.IAuthorizationAdministrationApi;
  30. import com.jcom1.api.interfaces.IAuthorizationApi;
  31. import com.jcom1.api.interfaces.IBo20AccessApi;
  32. import com.jcom1.api.interfaces.ICommonApi;
  33. import com.jcom1.api.interfaces.IInstanceAdministrationApi;
  34. import com.jcom1.api.util.Pair;
  35. import com.jcom1.runtime.refinement.AbstractRefinement;
  36. import com.jcom1.runtime.refinement.FunctionStateRequest;
  37. import com.jcom1.runtime.refinement.FunctionStateResponse;
  38. import com.jcom1.runtime.refinement.RefinementGenerator;
  39.  
  40. import de.metasonic.businessobjects.model.interfaces.IView;
  41. import de.metasonic.refinement.global.api.ApiUtils;
  42.  
  43. @RefinementGenerator(id = "InternalSubjectDescription_rhsOwWRXEeaW6tb5t7D8Ag")
  44. public class Оператор_по_контролю_ОПС_ГИПRefinement extends AbstractRefinement {
  45.  
  46.  
  47.     @Autowired
  48.     ICommonApi commonApi;
  49.  
  50.     @Autowired
  51.     IBo20AccessApi accessApi;
  52.  
  53.     @Autowired
  54.     IAuthorizationApi authApi;
  55.  
  56.     @Autowired
  57.     IAuthorizationAdministrationApi administrationApi;
  58.  
  59.     private final String opsControlDescriptionId = "ProcessDescription_pn9a4VMdEeaL5PGyiwnPkA";
  60.     private final String opsControlFirstStateDescrId = "FunctionStateDescription_5mLyIVMdEeaL5PGyiwnPkA";
  61.  
  62.     private final String DB_URL = "jdbc:hsqldb:hsql://localhost/jcom1";
  63.     private final String DB_USER = "sa";
  64.     private final String DB_PSW = "";
  65.  
  66.     private final String UFPS_INDEX = "UFPS_INDEX";
  67.     private final String UFPS_NAME = "UFPS_NAME";
  68.     private final String POSTAMT_INDEX = "POSTAMT_INDEX";
  69.     private final String POSTAMT_NAME = "POSTAMT_NAME";
  70.     private final String UM_GROUP = "UM_GROUP";
  71.     private final String UM_USER = "UM_USER";
  72.     private final String UM_GROUP_AS_INDEX = "INDX";
  73.     private final String UM_GROUP_AS_ROLE = "ROLE";
  74.     private final String RUSPOST_DEPARTMENT_CONTROLLER = "RUSPOST-DEPARTMENT-CONTROLLER";
  75.     private final String DEPARTMENT_CONTROLLER_GROUP_ID = "DEPARTMENT_CONTROLLER_GROUP_ID";
  76.  
  77.     private final String COMMON_INFO = "commonInfo";
  78.     private final String POSTAMT = "postamt";
  79.     private final String METADATA = "metaData";
  80.  
  81.     private int departmentControllerGroupId;
  82.     /**
  83.      * @generated
  84.      */
  85.     private final static Log log = LogFactory
  86.             .getLog("com.jcom1.refinement.автозапуск_автоформирования_плана.оператор_по_контролю_опс_гипrefinement");
  87.  
  88.     /**
  89.      * This method is called when the named function state is reached State:
  90.      * автозапуск формирования StateType: FUNCTION
  91.      *
  92.      * Return values "FunctionTransitionDescription_WZGO8WRYEeaW6tb5t7D8Ag" when
  93.      * result is "" to go to state Ожидание запуска
  94.      *
  95.      * @return return the id of the transition to follow e.g. // return new
  96.      *         FunctionStateResponse("transitionXXXXXXXX");
  97.      */
  98.     @RefinementGenerator(id = "FunctionStateDescription_G_53Y2RYEeaW6tb5t7D8Ag")
  99.     public FunctionStateResponse functionавтозапуск_формирования(
  100.             FunctionStateRequest functionStateRequest) {
  101.         log.error("\n");
  102.  
  103.         IInstanceAdministrationApi instanceAdminApi = null;
  104.         try {
  105.             instanceAdminApi = ApiUtils.lookupInstanceAdministrationApi();
  106.         } catch (ConnectionException e1) {
  107.             log.error("error retrieving instanceAdministrationApi");
  108.         }
  109.  
  110.         String departmentControllerGroupIdQuery =
  111.                 "SELECT ID AS DEPARTMENT_CONTROLLER_GROUP_ID FROM UM_GROUP WHERE NAME = ?";
  112.        
  113.         String ufpsQuery =
  114.                 "SELECT DISTINCT UFPS_INDEX, UFPS_NAME FROM POSTAMT_VIEW";
  115.        
  116.         String potentialOwnersQuery =
  117.                 "SELECT A.UM_GROUP AS UFPS_INDEX, A.UM_USER, B.UM_GROUP AS DEPARTMENT_CONTROLLER_GROUP_ID " +
  118.                 "FROM UM_GROUP_UM_USER A " +
  119.                 "LEFT JOIN UM_GROUP_UM_USER B " +
  120.                 "ON A.UM_USER = B.UM_USER " +
  121.                 "WHERE A.UM_GROUP = ? AND B.UM_GROUP = ?";
  122.        
  123.         String postamtQuery =
  124.                 "SELECT POSTAMT_INDEX, POSTAMT_NAME FROM POSTAMT_VIEW WHERE UFPS_INDEX = ?";
  125.  
  126.        
  127.        
  128.         try (final Connection connection = DbHelper
  129.                 .getConnection(DbHelper.PROP_DB_INT);) {
  130.             log.error("connection has been set");
  131.  
  132.            
  133.            
  134.            
  135.             // form query as SELECT TOP 1 ID AS ...
  136.             departmentControllerGroupId = getDepartmentControllerGroupId(connection, departmentControllerGroupIdQuery, DEPARTMENT_CONTROLLER_GROUP_ID);
  137.             log.error(DEPARTMENT_CONTROLLER_GROUP_ID + ": " + departmentControllerGroupId);
  138.  
  139.            
  140.            
  141.            
  142.             List<Pair> ufpsIndexNamePairs = getUfpsIndexNamePairs(connection, ufpsQuery);
  143.            
  144.             for (Pair ufpsIndexNamePair : ufpsIndexNamePairs) {
  145.                
  146.                 String ufpsIndex = ufpsIndexNamePair.getFirstElement();
  147.                 String ufpsName = ufpsIndexNamePair.getSecondElement();
  148.                 log.error("     ufps: " + ufpsIndex + " / " + ufpsName);
  149.                
  150.                
  151.                
  152.                 // retrieve potential owners as:
  153.                 // users from current Ufps group that also belong to controller-gip group
  154.                 // form query as ... WHERE a.UM_GROUP = 249030 AND b.UM_GROUP = 13
  155.                 List<String> potentialOwners = getPotentialOwners(connection, potentialOwnersQuery, ufpsIndex, departmentControllerGroupId);
  156.            
  157.                 if (0 == potentialOwners.size()) {
  158.                     log.error("Skipping process creation for Ufps: " + ufpsIndex+ "/" + ufpsName);
  159.                     log.error("Reason: no potential owners were found for this Ufps");
  160.                     continue;
  161.                 }
  162.                
  163.                
  164.                
  165.                 //now as we got potOwners list
  166.                 //lets iterate over all postamts of current ufps
  167.                 List<Pair> postamtIndexNamePairs = getPostamtIndexNamePairs(connection, postamtQuery, ufpsIndex);
  168.                
  169.                 for (Pair postamtIndexNamePair : postamtIndexNamePairs) {
  170.                    
  171.                     String postamtIndex = postamtIndexNamePair.getFirstElement();
  172.                     String postamtName = postamtIndexNamePair.getSecondElement();
  173.                     log.error("     postamt: " + postamtIndex + " / " + postamtName);
  174.                    
  175.                    
  176.                    
  177.                     // ============================================================================================================
  178.                     //now as we got single postamt
  179.                     //lets create a process for it
  180.                     log.error("launching process");
  181.                     IProcessInstanceBean processInstanceBean = null;
  182.                     String procName = null;
  183.                     try {
  184.                         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
  185.                         procName = postamtName + " Контроль ОПС [" + sdf.format(new Date()) + "]";
  186.                         String creatorId = commonApi.getSubjectInstanceBean(functionStateRequest.getSubjectInstanceId()).getEditor();
  187.                         int priority = 3;
  188.  
  189.                         processInstanceBean = createProcessInstance(opsControlDescriptionId, procName, creatorId, priority);
  190.  
  191.                         log.error("process '" + procName + "' has been created");
  192.                     } catch (Exception e) {
  193.                         log.error("error creating process instance with name: " + procName);
  194.                     }
  195.  
  196.                    
  197.                    
  198.                    
  199.                     if (null != processInstanceBean) {
  200.                         log.error("retrieving prime BO ad setting pot :) owners");
  201.                         ISubjectInstanceBean primeSubjectInstanceBean = getPrimeSubject(processInstanceBean);
  202.  
  203.                        
  204.                        
  205.                         //setting potential owners
  206.                         commonApi.releaseSubjectInstance(Long.valueOf(primeSubjectInstanceBean.getId()),opsControlFirstStateDescrId);
  207.                         instanceAdminApi.setPotentialOwners(Long.valueOf(primeSubjectInstanceBean.getId()),potentialOwners.toArray(new String[0]));
  208.  
  209.                        
  210.                        
  211.                         //retrieve prime BO to preset it's attributes
  212.                         IView operationPlan = createPrimeBO(primeSubjectInstanceBean);
  213.                         ISubjectInstanceBean newPrimeBean = getPrimeSubject(processInstanceBean);
  214.  
  215.                         log.error("Editor has been removed. Potential owners["
  216.                                 + newPrimeBean.getPotentialOwners().length
  217.                                 + "/" + potentialOwners.size() + "]:");
  218.                         for (String o : newPrimeBean.getPotentialOwners())
  219.                             log.error("-->" + o);
  220.  
  221.                        
  222.                        
  223.                        
  224.                         if (null != operationPlan) {
  225.                             // ============================================================================================================
  226.                             log.error("retrieving opPlanCommonInfo");
  227.  
  228.                             // explicitly create commonInfo BO
  229.                             Class<?> opPlanCommonInfoType = BOHelper.getType(
  230.                                     operationPlan, COMMON_INFO);
  231.                             log.error("comInfoTypeClass:"
  232.                                     + opPlanCommonInfoType);
  233.                             Object opPlanCommonInfoImpl = opPlanCommonInfoType
  234.                                     .newInstance();
  235.                             BOHelper.setAttribute(operationPlan, COMMON_INFO,
  236.                                     opPlanCommonInfoImpl);
  237.  
  238.                             Object commonInfo = BOHelper.getAttribute(
  239.                                     operationPlan, COMMON_INFO);
  240.  
  241.                            
  242.                            
  243.                             // retrieve newly created commonInfo and set it'sattributes
  244.                             if (null != commonInfo) {
  245.                                 log.error("commonInfo retrieved. setting date attributes");
  246.  
  247.                                 Date periodStart = DateTime.now()
  248.                                         .minusMonths(1).toDate();
  249.                                 Date periodEnd = DateTime.now().toDate();
  250.  
  251.                                 BOHelper.setAttribute(commonInfo,
  252.                                         "periodStart", periodStart);
  253.                                 BOHelper.setAttribute(commonInfo, "periodEnd",
  254.                                         periodEnd);
  255.                                 log.error("date attribuites has been set");
  256.                             } else {
  257.                                 log.error("error retrieving commonInfo");
  258.                             }
  259.                            
  260.                            
  261.                            
  262.                             // ============================================================================================================
  263.                             log.error("retrieving opPlanPostamt");
  264.  
  265.                             // explicitly create postamt BO
  266.                             Class<?> postamtType = BOHelper.getType(
  267.                                     operationPlan, POSTAMT);
  268.                             log.error("postamtTypeCLass: " + postamtType);
  269.                             IView postamtImpl = (IView) (postamtType
  270.                                     .newInstance());
  271.                             BOHelper.setAttribute(postamtImpl,
  272.                                     "postamtPostamtIndex", postamtIndex);
  273.  
  274.                             List<IView> postamtViews = accessApi.getViews(
  275.                                     primeSubjectInstanceBean, postamtImpl);
  276.  
  277.                             if (1 == postamtViews.size()) {
  278.                                 BOHelper.setAttribute(operationPlan, "postamt", postamtViews.get(0));
  279.                                 log.error("postamt has been set");
  280.                             } else {
  281.                                 log.error("error retrieving postamt by index: "
  282.                                         + postamtIndex
  283.                                         + " - no postamts at all or more than one postamt exists");
  284.                             }
  285.                            
  286.                            
  287.                            
  288.                             // ============================================================================================================
  289.                             log.error("saving BO changes");
  290.                             saveNewPrimeBO(primeSubjectInstanceBean, operationPlan);
  291.  
  292.                         } else {
  293.                             log.error("theres no opPlan BO for process: "
  294.                                     + procName);
  295.                         }
  296.                     } else {
  297.                         log.error("theres no procInstanceBean for process: "
  298.                                 + procName);
  299.                     }
  300.                     log.error("all done");
  301.                     log.error("\n");
  302.                    
  303.                    
  304.                 }
  305.             }
  306.             /*
  307.             while (ufpsResult.next()) {
  308.  
  309.                 String ufpsIndex = ufpsResult.getString(UFPS_INDEX);
  310.                 String ufpsName = ufpsResult.getString(UFPS_NAME);
  311.                 log.error("     ufps: " + ufpsIndex + " / " + ufpsName);
  312.  
  313.                 // retrieve potential owners as:
  314.                 // users from current Ufps group that also belong to controller-gip group
  315.                 // form query as ... WHERE a.UM_GROUP = 249030 AND b.UM_GROUP = 13
  316.                 String potentialOwnersQuery = String
  317.                         .format(potentialOwnerQueryTemplate, ufpsIndex,
  318.                                 controllerGipId);
  319.                 String[] potentialOwners = getPotentialOwners(connection,
  320.                         potentialOwnersQuery);
  321.  
  322.                 if (0 == potentialOwners.length) {
  323.                     log.error("Skipping process creation for Ufps " + ufpsIndex
  324.                             + "/" + ufpsName);
  325.                     log.error("Reason: no potential owners were found for this Ufps");
  326.                     log.error("*pot.Owners - users from ufps that also belong to group "
  327.                             + DEPARTMENT_CONTROLLER);
  328.                     continue;
  329.                 }
  330.                 // form query as ... WHERE UFPS_INDEX = 249030
  331.                 String postamtByUfpsQuery = String.format(postamtQueryTemplate,
  332.                         ufpsIndex);
  333.  
  334.                 ResultSet postamtByUfpsResult = connection.createStatement()
  335.                         .executeQuery(postamtByUfpsQuery);
  336.                 log.error("executing: " + postamtByUfpsQuery);
  337.  
  338.                 while (postamtByUfpsResult.next()) {
  339.  
  340.                     String postamtIndex = postamtByUfpsResult
  341.                             .getString(POSTAMT_INDEX);
  342.                     String postamtName = postamtByUfpsResult
  343.                             .getString(POSTAMT_NAME);
  344.                     log.error("     postamt: " + postamtIndex + " / "
  345.                             + postamtName);
  346.  
  347.                     // ============================================================================================================
  348.                     log.error("launching process");
  349.                     IProcessInstanceBean processInstanceBean = null;
  350.                     String procName = null;
  351.                     try {
  352.                         SimpleDateFormat sdf = new SimpleDateFormat(
  353.                                 "dd/MM/yyyy HH:mm:ss");
  354.                         procName = postamtName + " Контроль ОПС ["
  355.                                 + sdf.format(new Date()) + "]";
  356.                         String creatorId = commonApi.getSubjectInstanceBean(
  357.                                 functionStateRequest.getSubjectInstanceId())
  358.                                 .getEditor();
  359.                         int priority = 3;
  360.  
  361.                         processInstanceBean = createProcessInstance(
  362.                                 opsControlDescriptionId, procName, creatorId,
  363.                                 priority);
  364.  
  365.                         log.error("process '" + procName
  366.                                 + "' has been launched");
  367.                     } catch (Exception e) {
  368.                         log.error("error creating process instance with name: "
  369.                                 + procName);
  370.                     }
  371.  
  372.                     if (null != processInstanceBean) {
  373.                         log.error("retrieving prime BO ad setting pot :) owners");
  374.                         ISubjectInstanceBean primeSubjectInstanceBean = getPrimeSubject(processInstanceBean);
  375.  
  376.                         // set potential owners as:
  377.                         // users from current Ufps group that also belong to
  378.                         // controller-gip group
  379.                         commonApi.releaseSubjectInstance(
  380.                                 Long.valueOf(primeSubjectInstanceBean.getId()),
  381.                                 opsControlFirstStateDescrId);
  382.                         instanceAdminApi.setPotentialOwners(
  383.                                 Long.valueOf(primeSubjectInstanceBean.getId()),
  384.                                 potentialOwners);
  385.  
  386.                         IView operationPlan = createPrimeBO(primeSubjectInstanceBean);
  387.                         ISubjectInstanceBean newPrimeBean = getPrimeSubject(processInstanceBean);
  388.  
  389.                         log.error("Editors have been removed. New potential owners["
  390.                                 + newPrimeBean.getPotentialOwners().length
  391.                                 + "/" + potentialOwners.length + "]:");
  392.                         for (String o : newPrimeBean.getPotentialOwners())
  393.                             log.error("-->" + o);
  394.  
  395.                         if (null != operationPlan) {
  396.                             // ============================================================================================================
  397.                             log.error("retrieving opPlanCommonInfo");
  398.  
  399.                             // explicitly create commonInfo BO
  400.                             Class<?> opPlanCommonInfoType = BOHelper.getType(
  401.                                     operationPlan, COMMON_INFO);
  402.                             log.error("comInfoTypeClass:"
  403.                                     + opPlanCommonInfoType);
  404.                             Object opPlanCommonInfoImpl = opPlanCommonInfoType
  405.                                     .newInstance();
  406.                             BOHelper.setAttribute(operationPlan, COMMON_INFO,
  407.                                     opPlanCommonInfoImpl);
  408.  
  409.                             Object commonInfo = BOHelper.getAttribute(
  410.                                     operationPlan, COMMON_INFO);
  411.  
  412.                             // retrieve newly created commonInfo and set
  413.                             // it'sattributes
  414.                             if (null != commonInfo) {
  415.                                 log.error("commonInfo retrieved. setting date attributes");
  416.  
  417.                                 Date periodStart = DateTime.now()
  418.                                         .minusMonths(1).toDate();
  419.                                 Date periodEnd = DateTime.now().toDate();
  420.  
  421.                                 BOHelper.setAttribute(commonInfo,
  422.                                         "periodStart", periodStart);
  423.                                 BOHelper.setAttribute(commonInfo, "periodEnd",
  424.                                         periodEnd);
  425.                                 log.error("date attribuites has been set");
  426.                             } else {
  427.                                 log.error("error retrieving commonInfo");
  428.                             }
  429.                             // ============================================================================================================
  430.                             log.error("retrieving opPlanPostamt");
  431.  
  432.                             // explicitly create postamt BO
  433.                             Class<?> postamtType = BOHelper.getType(
  434.                                     operationPlan, POSTAMT);
  435.                             log.error("postamtTypeCLass: " + postamtType);
  436.                             IView postamtImpl = (IView) (postamtType
  437.                                     .newInstance());
  438.                             // BOHelper.setAttribute(operationPlan,
  439.                             // POSTAMT,postamtImpl);
  440.                             BOHelper.setAttribute(postamtImpl,
  441.                                     "postamtPostamtIndex", postamtIndex);
  442.  
  443.                             List<IView> postamtViews = accessApi.getViews(
  444.                                     primeSubjectInstanceBean, postamtImpl);
  445.  
  446.                             if (1 == postamtViews.size()) {
  447.                                 BOHelper.setAttribute(operationPlan, "postamt",
  448.                                         postamtViews.get(0));
  449.                                 log.error("postamt has been set");
  450.                             } else {
  451.                                 log.error("error retrieving postamt by index: "
  452.                                         + postamtIndex
  453.                                         + " - no postamts at all or more then one postamt exists");
  454.                             }
  455.                             // ============================================================================================================
  456.  
  457.                             log.error("saving BO changes");
  458.                             saveNewPrimeBO(primeSubjectInstanceBean,
  459.                                     operationPlan);
  460.  
  461.                         } else {
  462.                             log.error("theres no opPlan BO for process: "
  463.                                     + procName);
  464.                         }
  465.                     } else {
  466.                         log.error("theres no procInstanceBean for process: "
  467.                                 + procName);
  468.                     }
  469.                     log.error("all done");
  470.                     log.error("\n");
  471.                 }
  472.                 postamtByUfpsResult.close();
  473.                 log.error("\n");
  474.             }
  475.             //ufpsResult.close();
  476.  
  477.             */
  478.         } catch (Exception e2) {
  479.             e2.printStackTrace();
  480.         }
  481.  
  482.         return null;
  483.     }
  484.    
  485.    
  486.    
  487.     private int getDepartmentControllerGroupId(Connection connection, String query, String departmentControllerGroupId) throws Exception {
  488.         log.error("getRuspostDepartmentControllerGroupId begin");
  489.  
  490.         List<ValueWrapper> valueWrappers = new ArrayList<ValueWrapper>();
  491.        
  492.         valueWrappers.add(new ValueWrapper(departmentControllerGroupId, String.class));
  493.  
  494.         int id = (int) DbHelper.executeQuery(connection, query, valueWrappers,
  495.                 true, new DbHelper.ResulSetHandler() {
  496.                     @Override
  497.                     public Object processResultSet(ResultSet rerSet)
  498.                             throws Exception {
  499.  
  500.                         if (rerSet.next())
  501.                             return rerSet.getInt(DEPARTMENT_CONTROLLER_GROUP_ID);
  502.  
  503.                         return -1;
  504.                     }
  505.                 });
  506.  
  507.         log.error("getRuspostDepartmentControllerGroupId end");
  508.         return id;
  509.     }
  510.    
  511.    
  512.  
  513.     private List<Pair> getUfpsIndexNamePairs(Connection connection, String query) throws Exception {
  514.         log.error("getUfpsIndexNamePairs begin");
  515.  
  516.         List<ValueWrapper> valueWrappers = new ArrayList<ValueWrapper>();
  517.  
  518.         List<Pair> ufpsIndexNamePairs = (List<Pair>) DbHelper.executeQuery(connection,
  519.                 query, valueWrappers, true, new DbHelper.ResulSetHandler() {
  520.                     @Override
  521.                     public Object processResultSet(ResultSet result)
  522.                             throws Exception {
  523.                         List<Pair> ufpsIndexNamePairs = new ArrayList<Pair>();
  524.  
  525.                         while (result.next()) {
  526.  
  527.                             int ufpsIndex = result.getInt(UFPS_INDEX);
  528.                             String ufpsName = result.getString(UFPS_NAME);
  529.                             log.error("  ufps: " + ufpsIndex + " / " + ufpsName);
  530.  
  531.                             ufpsIndexNamePairs.add(new Pair(String.valueOf(ufpsIndex), ufpsName));
  532.                         }
  533.  
  534.                         return ufpsIndexNamePairs;
  535.                     }
  536.                 });
  537.  
  538.         log.error("getUfpsIndexNamePairs end");
  539.         return ufpsIndexNamePairs;
  540.     }
  541.    
  542.    
  543.     private List<Pair> getPostamtIndexNamePairs(Connection connection, String query, String ufpsIndex) throws Exception {
  544.         log.error("getPostamtIndexNamePairs begin");
  545.  
  546.         List<ValueWrapper> valueWrappers = new ArrayList<ValueWrapper>();
  547.        
  548.         valueWrappers.add(new ValueWrapper(ufpsIndex, String.class));
  549.  
  550.         List<Pair> postamtIndexNamePairs = (List<Pair>) DbHelper.executeQuery(connection,
  551.                 query, valueWrappers, true, new DbHelper.ResulSetHandler() {
  552.                     @Override
  553.                     public Object processResultSet(ResultSet result)
  554.                             throws Exception {
  555.                         List<Pair> postamtIndexNamePairs = new ArrayList<Pair>();
  556.  
  557.                         while (result.next()) {
  558.  
  559.                             int postamtIndex = result.getInt(POSTAMT_INDEX);
  560.                             String postamtName = result.getString(POSTAMT_NAME);
  561.                             log.error("  postamt: " + postamtIndex + " / " + postamtName);
  562.  
  563.                             postamtIndexNamePairs.add(new Pair(String.valueOf(postamtIndex), postamtName));
  564.                         }
  565.  
  566.                         return postamtIndexNamePairs;
  567.                     }
  568.                 });
  569.  
  570.         log.error("getPostamtIndexNamePairs end");
  571.         return postamtIndexNamePairs;
  572.     }
  573.    
  574.    
  575.    
  576.  
  577.     private List<String> getPotentialOwners(Connection connection, String query, String ufpsIndex, int departmentControllerGroupId) throws Exception {
  578.         log.error("getPotentialOwners begin");
  579.        
  580.         List<ValueWrapper> valueWrappers = new ArrayList<ValueWrapper>();
  581.        
  582.         valueWrappers.add(new ValueWrapper(ufpsIndex, Integer.class));
  583.         valueWrappers.add(new ValueWrapper(departmentControllerGroupId, Integer.class));
  584.  
  585.         List<String> potOwnersIds = (List<String>) DbHelper.executeQuery(connection,
  586.                 query, valueWrappers, true, new DbHelper.ResulSetHandler() {
  587.                     @Override
  588.                     public Object processResultSet(ResultSet result)
  589.                             throws Exception {
  590.                         List<String> potOwnersIds = new ArrayList<String>();
  591.  
  592.                         while (result.next()) {
  593.  
  594.                             int ufpsIndex = result.getInt(UFPS_INDEX);
  595.                             int userId = result.getInt(UFPS_INDEX);
  596.                             int departmentControllerGroupId = result.getInt(UFPS_INDEX);
  597.  
  598.                             log.error("  user: " + ufpsIndex + " / [" + userId  + "] / " + departmentControllerGroupId);
  599.  
  600.                             potOwnersIds.add(String.valueOf(userId));
  601.                         }
  602.  
  603.                         return potOwnersIds;
  604.                     }
  605.                 });
  606.  
  607.         log.error("getPotentialOwners end");
  608.         return potOwnersIds;
  609.     }
  610.  
  611.     private ISubjectInstanceBean getPrimeSubject(
  612.             IProcessInstanceBean processInstanceBean) throws Exception {
  613.         ICommonApi commonApi = ApiUtils.lookupCommonApi();
  614.         String subjectInstanceId = processInstanceBean.getSubjectInstances()[0];
  615.         ISubjectInstanceBean subjectInstanceBean = commonApi
  616.                 .getSubjectInstanceBean(subjectInstanceId);
  617.         return subjectInstanceBean;
  618.     }
  619.  
  620.     private IView createPrimeBO(ISubjectInstanceBean subjectInstanceBean)
  621.             throws Exception {
  622.         IBo20AccessApi bo20AccessApi = ApiUtils.lookupBo20AccessApi();
  623.         Set<IStorageInstanceBean> storages = bo20AccessApi.getStorages(
  624.                 subjectInstanceBean, null);
  625.         IStorageInstanceBean storage = storages.iterator().next();
  626.         IView iView = bo20AccessApi.createIViewOnStorage(subjectInstanceBean,
  627.                 storage);
  628.         return iView;
  629.     }
  630.  
  631.     private void saveNewPrimeBO(ISubjectInstanceBean subjectInstanceBean,
  632.             IView iView) throws Exception {
  633.         IBo20AccessApi bo20AccessApi = ApiUtils.lookupBo20AccessApi();
  634.         Set<IStorageInstanceBean> storages = bo20AccessApi.getStorages(
  635.                 subjectInstanceBean, null);
  636.         IStorageInstanceBean storage = storages.iterator().next();
  637.         bo20AccessApi
  638.                 .saveNewIViewInStorage(subjectInstanceBean, iView, storage);
  639.     }
  640.  
  641.     private Map<String, String> processVersions = new HashMap<String, String>();
  642.  
  643.     private IProcessInstanceBean createProcessInstance(
  644.             String processDescriptionId, String name, String userId,
  645.             int priority) throws Exception {
  646.         ICommonApi commonApi = ApiUtils.lookupCommonApi();
  647.  
  648.         String processVersionId = getLatestProcessVersionId(processDescriptionId);
  649.  
  650.         InitProcessInstanceData initProcessInstanceData = new InitProcessInstanceData(
  651.                 processVersionId,
  652.                 com.jcom1.api.constants.Constants.Process.Mode.PRODUCTIVE);
  653.  
  654.         initProcessInstanceData.setName(name);
  655.         initProcessInstanceData.setCreatorId(userId);
  656.         initProcessInstanceData.setPriority(priority);
  657.  
  658.         String processInstanceId = commonApi
  659.                 .createProcessInstance(initProcessInstanceData);
  660.  
  661.         IProcessInstanceBean processInstance = commonApi
  662.                 .getProcessInstanceBean(processInstanceId);
  663.  
  664.         return processInstance;
  665.     }
  666.  
  667.    
  668.     private String getLatestProcessVersionIdFromDB(Connection connection, String query, String processDescriptionId) throws Exception {
  669.         log.error("getLatestProcessVersionIdFromDB begin");
  670.         final String LATEST_VER_ID = "LATEST_VER_ID";
  671.        
  672.         List<ValueWrapper> valueWrappers = new ArrayList<ValueWrapper>();
  673.        
  674.         valueWrappers.add(new ValueWrapper(processDescriptionId, Integer.class));
  675.  
  676.         String lastestVerId = (String) DbHelper.executeQuery(connection, query, valueWrappers,
  677.                 true, new DbHelper.ResulSetHandler() {
  678.                     @Override
  679.                     public Object processResultSet(ResultSet rerSet)
  680.                             throws Exception {
  681.  
  682.                         if (rerSet.next())
  683.                             return rerSet.getString(LATEST_VER_ID);
  684.  
  685.                         return String.valueOf(-1);
  686.                     }
  687.                 });
  688.  
  689.         return lastestVerId;
  690.     }
  691.    
  692.    
  693.     private String getLatestProcessVersionId(String processDescriptionId) throws Exception {
  694.         log.error("getLatestProcessVersionId begin");
  695.         String processVersion = processVersions.get(processDescriptionId);
  696.  
  697.         if (processVersion == null) {
  698.  
  699.             String latestProcVersionQuery =
  700.                     "SELECT ID AS LATEST_VER_ID " +
  701.                     "FROM RT_PROCDESC " +
  702.                     "WHERE UPLOADDATE = ( " +
  703.                     "       SELECT MAX(UPLOADDATE) " +
  704.                     "       FROM RT_PROCDESC " +
  705.                     "       WHERE JPASS_ID = ?)";
  706.  
  707.             try (final Connection connection = DbHelper.getConnection(DbHelper.PROP_DB_INT);) {
  708.                
  709.                 processVersion = getLatestProcessVersionIdFromDB(connection, latestProcVersionQuery, processDescriptionId);
  710.                 processVersions.put(processDescriptionId, processVersion);
  711.  
  712.             } catch (Exception e2) {
  713.                 log.error("error while retrieving latest process version for process: "
  714.                         + processDescriptionId);
  715.             }
  716.         }
  717.         log.debug("latest ver: " + processVersion);
  718.         log.error("getLatestProcessVersionId end");
  719.         return processVersion;
  720.     }
  721.  
  722. }
Advertisement
Add Comment
Please, Sign In to add comment