Ladies_Man

#sonic 819_fri_stable2 autorunRefinement

Aug 29th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.23 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.utils.BOHelper;
  20.  
  21. import com.jcom1.api.dto.init.InitProcessInstanceData;
  22. import com.jcom1.api.dto.interfaces.IProcessInstanceBean;
  23. import com.jcom1.api.dto.interfaces.IStorageInstanceBean;
  24. import com.jcom1.api.dto.interfaces.ISubjectInstanceBean;
  25. import com.jcom1.api.exceptions.ConnectionException;
  26. import com.jcom1.api.interfaces.IAuthorizationAdministrationApi;
  27. import com.jcom1.api.interfaces.IAuthorizationApi;
  28. import com.jcom1.api.interfaces.IBo20AccessApi;
  29. import com.jcom1.api.interfaces.ICommonApi;
  30. import com.jcom1.api.interfaces.IInstanceAdministrationApi;
  31. import com.jcom1.runtime.refinement.AbstractRefinement;
  32. import com.jcom1.runtime.refinement.FunctionStateRequest;
  33. import com.jcom1.runtime.refinement.FunctionStateResponse;
  34. import com.jcom1.runtime.refinement.RefinementGenerator;
  35.  
  36. import de.metasonic.businessobjects.model.interfaces.IView;
  37. import de.metasonic.refinement.global.api.ApiUtils;
  38.  
  39. @RefinementGenerator(id = "InternalSubjectDescription_rhsOwWRXEeaW6tb5t7D8Ag")
  40. public class Оператор_по_контролю_ОПС_ГИПRefinement extends AbstractRefinement {
  41.  
  42.     @Autowired
  43.     ICommonApi commonApi;
  44.  
  45.     @Autowired
  46.     IBo20AccessApi accessApi;
  47.  
  48.     @Autowired
  49.     IAuthorizationApi authApi;
  50.  
  51.     @Autowired
  52.     IAuthorizationAdministrationApi administrationApi;
  53.  
  54.     private final String opsControlDescriptionId = "ProcessDescription_pn9a4VMdEeaL5PGyiwnPkA";
  55.     private final String opsControlFirstStateDescrId = "FunctionStateDescription_5mLyIVMdEeaL5PGyiwnPkA";
  56.  
  57.     private final String DB_URL = "jdbc:hsqldb:hsql://localhost/jcom1";
  58.     private final String DB_USER = "sa";
  59.     private final String DB_PSW = "";
  60.  
  61.     private final String UFPS_INDEX = "UFPS_INDEX";
  62.     private final String UFPS_NAME = "UFPS_NAME";
  63.     private final String POSTAMT_INDEX = "POSTAMT_INDEX";
  64.     private final String POSTAMT_NAME = "POSTAMT_NAME";
  65.     private final String UM_GROUP = "UM_GROUP";
  66.     private final String UM_USER = "UM_USER";
  67.     private final String UM_GROUP_AS_INDEX = "INDX";
  68.     private final String UM_GROUP_AS_ROLE = "ROLE";
  69.     private final String ID_AS_GIP_ID = "GIP_ID";
  70.     private final String CONTROLLER_GIP = "CONTROLLER-GIP";
  71.  
  72.     private final String COMMON_INFO = "commonInfo";
  73.     private final String POSTAMT = "postamt";
  74.     private final String METADATA = "metaData";
  75.  
  76.     private int controllerGipId;
  77.     /**
  78.      * @generated
  79.      */
  80.     private final static Log log = LogFactory
  81.             .getLog("com.jcom1.refinement.автозапуск_автоформирования_плана.оператор_по_контролю_опс_гипrefinement");
  82.  
  83.     /**
  84.      * This method is called when the named function state is reached State:
  85.      * автозапуск формирования StateType: FUNCTION
  86.      *
  87.      * Return values "FunctionTransitionDescription_WZGO8WRYEeaW6tb5t7D8Ag" when
  88.      * result is "" to go to state Ожидание запуска
  89.      *
  90.      * @return return the id of the transition to follow e.g. // return new
  91.      *         FunctionStateResponse("transitionXXXXXXXX");
  92.      */
  93.     @RefinementGenerator(id = "FunctionStateDescription_G_53Y2RYEeaW6tb5t7D8Ag")
  94.     public FunctionStateResponse functionавтозапуск_формирования(
  95.             FunctionStateRequest functionStateRequest) {
  96.         log.error("\n");
  97.  
  98.         IInstanceAdministrationApi instanceAdminApi = null;
  99.         try {
  100.             instanceAdminApi = ApiUtils.lookupInstanceAdministrationApi();
  101.         } catch (ConnectionException e1) {
  102.             log.error("error retrieving instanceAdministrationApi");
  103.         }
  104.  
  105.         String ufpsQuery = String.format(
  106.                 "SELECT DISTINCT %s, %s FROM POSTAMT_VIEW",
  107.                
  108.                 UFPS_INDEX, UFPS_NAME);
  109.  
  110.         String postamtQueryTemplate = String.format(
  111.                 "SELECT %s, %s FROM POSTAMT_VIEW " +
  112.                         "WHERE %s = %s",
  113.  
  114.                 POSTAMT_INDEX, POSTAMT_NAME,
  115.                 UFPS_INDEX, "%s");
  116.  
  117.         String controllerGipIdQuery = String.format(
  118.                 "SELECT ID AS %s FROM UM_GROUP " +
  119.                         "WHERE NAME = '%s'",
  120.  
  121.                 ID_AS_GIP_ID, CONTROLLER_GIP);
  122.  
  123.         String potentialOwnerQueryTemplate = String.format(
  124.                 "SELECT A.UM_GROUP AS %s, A.%s, B.UM_GROUP AS %s "+
  125.                         "FROM UM_GROUP_UM_USER AS A "+
  126.                         "LEFT JOIN UM_GROUP_UM_USER AS B " +
  127.                             "ON A.%s = B.%s "+
  128.                         "WHERE A.UM_GROUP = %s AND B.UM_GROUP = %s",
  129.  
  130.                 UM_GROUP_AS_INDEX, UM_USER, UM_GROUP_AS_ROLE,
  131.                 UM_USER, UM_USER,
  132.                 "%s", "%s");
  133.  
  134.         // //Caused by: java.lang.NoClassDefFoundError:
  135.         // com/mchange/v2/c3p0/PooledDataSource
  136.  
  137.         Connection connection = null;
  138.         try {// (final Connection connection =
  139.                 // DbHelper.getConnection(DbHelper.PROP_DB_INT);){
  140.             connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PSW);
  141.             log.error("connection has been set");
  142.  
  143.             // form query as SELECT TOP 1 ID AS ...
  144.             controllerGipId = getControllerGipId(connection, controllerGipIdQuery);
  145.             log.error(CONTROLLER_GIP + "'s ID: " + controllerGipId);
  146.  
  147.             Statement ufpses = connection.createStatement();
  148.             //ufpses.setMaxRows(1);
  149.             ResultSet ufpsResult = ufpses.executeQuery(ufpsQuery);
  150.             log.error("executing: " + ufpsQuery);
  151.  
  152.             while (ufpsResult.next()) {
  153.  
  154.                 String ufpsIndex = ufpsResult.getString(UFPS_INDEX);
  155.                 String ufpsName = ufpsResult.getString(UFPS_NAME);
  156.                 log.error("     ufps: " + ufpsIndex + " / " + ufpsName);
  157.  
  158.                 // retrieve potential owners as:
  159.                 // users from current Ufps group that also belong to controller-gip group
  160.                 // form query as ... WHERE a.UM_GROUP = 249030 AND b.UM_GROUP = 13
  161.                 String potentialOwnersQuery = String.format(potentialOwnerQueryTemplate, ufpsIndex,controllerGipId);
  162.                 String[] potentialOwners = getPotentialOwners(connection,potentialOwnersQuery);
  163.  
  164.                 // form query as ... WHERE UFPS_INDEX = 249030
  165.                 String postamtByUfpsQuery = String.format(postamtQueryTemplate,
  166.                         ufpsIndex);
  167.  
  168.                 ResultSet postamtByUfpsResult = connection.createStatement().executeQuery(postamtByUfpsQuery);
  169.                 log.error("executing: " + postamtByUfpsQuery);
  170.  
  171.                 while (postamtByUfpsResult.next()) {
  172.  
  173.                     String postamtIndex = postamtByUfpsResult.getString(POSTAMT_INDEX);
  174.                     String postamtName = postamtByUfpsResult.getString(POSTAMT_NAME);
  175.                     log.error("     postamt: " + postamtIndex + " / "+ postamtName);
  176.  
  177.                     // ============================================================================================================
  178.                     log.error("launching process");
  179.                     IProcessInstanceBean processInstanceBean = null;
  180.                     String procName = null;
  181.                     try {
  182.                         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
  183.                         procName = postamtName + " Контроль ОПС ["+ sdf.format(new Date()) + "]";
  184.                         String creatorId = commonApi.getSubjectInstanceBean(functionStateRequest.getSubjectInstanceId()).getEditor();
  185.                         int priority = 3;
  186.  
  187.                         processInstanceBean = createProcessInstance(opsControlDescriptionId, procName, creatorId,priority);
  188.  
  189.                         log.error("process '" + procName+ "' has been launched");
  190.                     } catch (Exception e) {
  191.                         log.error("error creating process instance with name: "+ procName);
  192.                     }
  193.                    
  194.                    
  195.                     // ============================================================================================================
  196.                     if (null != processInstanceBean) {
  197.                         log.error("retrieving prime BO ad setting pot :) owners");
  198.                         ISubjectInstanceBean primeSubjectInstanceBean = getPrimeSubject(processInstanceBean);
  199.  
  200.                         // set potential owners as:
  201.                         // users from current Ufps group that also belong tocontroller-gip group
  202.                         commonApi.releaseSubjectInstance(Long.valueOf(primeSubjectInstanceBean.getId()), opsControlFirstStateDescrId);
  203.                         instanceAdminApi.setPotentialOwners(Long.valueOf(primeSubjectInstanceBean.getId()), potentialOwners);
  204.  
  205.                         IView operationPlan = createPrimeBO(primeSubjectInstanceBean);
  206.                         ISubjectInstanceBean newPrimeBean = getPrimeSubject(processInstanceBean);
  207.                        
  208.                         log.error("Editors have been removed. New potential owners["
  209.                                 + newPrimeBean.getPotentialOwners().length + "/" + potentialOwners.length + "]:");
  210.                         for (String o : newPrimeBean.getPotentialOwners()) log.error("-->" + o);
  211.  
  212.                         if (null != operationPlan) {
  213.                             // ============================================================================================================
  214.                             log.error("retrieving opPlanCommonInfo");
  215.  
  216.                             // explicitly create commonInfo BO
  217.                             Class<?> opPlanCommonInfoType = BOHelper.getType(operationPlan, COMMON_INFO);
  218.                             log.error("comInfoTypeClass:"+ opPlanCommonInfoType);
  219.                             Object opPlanCommonInfoImpl = opPlanCommonInfoType.newInstance();
  220.                             BOHelper.setAttribute(operationPlan, COMMON_INFO,opPlanCommonInfoImpl);
  221.  
  222.                             Object commonInfo = BOHelper.getAttribute(operationPlan, COMMON_INFO);
  223.  
  224.                             // retrieve newly created commonInfo and set
  225.                             // it'sattributes
  226.                             if (null != commonInfo) {
  227.                                 log.error("commonInfo retrieved. setting date attributes");
  228.  
  229.                                 Date periodStart = DateTime.now().minusMonths(1).toDate();
  230.                                 Date periodEnd = DateTime.now().toDate();
  231.  
  232.                                 BOHelper.setAttribute(commonInfo,"periodStart", periodStart);
  233.                                 BOHelper.setAttribute(commonInfo, "periodEnd",periodEnd);
  234.                                 log.error("date attribuites has been set");
  235.                             } else {
  236.                                 log.error("error retrieving commonInfo");
  237.                             }
  238.                             // ============================================================================================================
  239.                             log.error("retrieving opPlanPostamt");
  240.  
  241.                             // explicitly create postamt BO
  242.                             Class<?> postamtType = BOHelper.getType(operationPlan, POSTAMT);
  243.                             log.error("postamtTypeCLass: " + postamtType);
  244.                             IView postamtImpl = (IView) (postamtType.newInstance());
  245.                             BOHelper.setAttribute(postamtImpl,"postamtPostamtIndex", postamtIndex);
  246.  
  247.                             // search by set field (postamtIndx) among allobjects from same connector
  248.                             // the first and only elemnt - our goal
  249.                             List<IView> postamtViews = accessApi.getViews(primeSubjectInstanceBean, postamtImpl);
  250.  
  251.                             if (1 == postamtViews.size()) {
  252.                                 BOHelper.setAttribute(operationPlan, "postamt",postamtViews.get(0));
  253.                                 log.error("postamt has been set");
  254.                             } else {
  255.                                 log.error("error retrieving postamt by index: "+ postamtIndex
  256.                                         + " - no postamts at all or more then one postamt exists");
  257.                             }
  258.                             // ============================================================================================================
  259.  
  260.                             log.error("saving BO changes");
  261.                             saveNewPrimeBO(primeSubjectInstanceBean,operationPlan);
  262.  
  263.                         } else {
  264.                             log.error("theres no opPlan BO for process: "+ procName);
  265.                         }
  266.                     } else {
  267.                         log.error("theres no procInstanceBean for process: "+ procName);
  268.                     }
  269.                     log.error("all done");
  270.                     log.error("\n");
  271.                 }
  272.                 postamtByUfpsResult.close();
  273.                 log.error("\n");
  274.             }
  275.             ufpsResult.close();
  276.  
  277.         } catch (Exception e2) {
  278.             e2.printStackTrace();
  279.         } finally {
  280.             try {
  281.                 if (!connection.isClosed()) {
  282.                     connection.close();
  283.                 }
  284.             } catch (SQLException e) {
  285.                 log.error("error closing connection");
  286.             }
  287.         }
  288.  
  289.         return null;
  290.     }
  291.  
  292.     private int getControllerGipId(Connection connection, String query) {
  293.         int gipId = -1;
  294.  
  295.         try {
  296.             log.error("executing: " + query);
  297.             Statement controllerGipIdStmt = connection.createStatement();
  298.             controllerGipIdStmt.setMaxRows(1);
  299.  
  300.             ResultSet cgiSet = controllerGipIdStmt.executeQuery(query);
  301.  
  302.             if (cgiSet.next())
  303.                 gipId = cgiSet.getInt(ID_AS_GIP_ID);
  304.  
  305.             cgiSet.close();
  306.  
  307.         } catch (SQLException e) {
  308.             log.error("error fetching " + CONTROLLER_GIP + "'s ID");
  309.         }
  310.  
  311.         return gipId;
  312.     }
  313.  
  314.     private String[] getPotentialOwners(Connection connection, String query) {
  315.         List<String> ownersList = new ArrayList<String>();
  316.  
  317.         try {
  318.             ResultSet ownersResult = connection.createStatement().executeQuery(query);
  319.             log.error("executing: " + query);
  320.  
  321.             while (ownersResult.next()) {
  322.  
  323.                 int umGroupAsIndex = ownersResult.getInt(UM_GROUP_AS_INDEX);
  324.                 int umUserAsId = ownersResult.getInt(UM_USER);
  325.                 int umGroupAsRole = ownersResult.getInt(UM_GROUP_AS_ROLE);
  326.                 log.error("indx/id/role: " + umGroupAsIndex + " / "+ umUserAsId + " / " + umGroupAsRole);
  327.  
  328.                 ownersList.add(String.valueOf(umUserAsId));
  329.             }
  330.             ownersResult.close();
  331.  
  332.         } catch (SQLException e) {
  333.             e.printStackTrace();
  334.         }
  335.         return ownersList.toArray(new String[0]);
  336.     }
  337.  
  338.     private ISubjectInstanceBean getPrimeSubject( IProcessInstanceBean processInstanceBean) throws Exception {
  339.         ICommonApi commonApi = ApiUtils.lookupCommonApi();
  340.         String subjectInstanceId = processInstanceBean.getSubjectInstances()[0];
  341.         ISubjectInstanceBean subjectInstanceBean = commonApi.getSubjectInstanceBean(subjectInstanceId);
  342.         return subjectInstanceBean;
  343.     }
  344.  
  345.     private IView createPrimeBO(ISubjectInstanceBean subjectInstanceBean) throws Exception {
  346.         IBo20AccessApi bo20AccessApi = ApiUtils.lookupBo20AccessApi();
  347.         Set<IStorageInstanceBean> storages = bo20AccessApi.getStorages(subjectInstanceBean, null);
  348.         IStorageInstanceBean storage = storages.iterator().next();
  349.         IView iView = bo20AccessApi.createIViewOnStorage(subjectInstanceBean,storage);
  350.         return iView;
  351.     }
  352.  
  353.     private void saveNewPrimeBO(ISubjectInstanceBean subjectInstanceBean, IView iView) throws Exception {
  354.         IBo20AccessApi bo20AccessApi = ApiUtils.lookupBo20AccessApi();
  355.         Set<IStorageInstanceBean> storages = bo20AccessApi.getStorages(subjectInstanceBean, null);
  356.         IStorageInstanceBean storage = storages.iterator().next();
  357.         bo20AccessApi.saveNewIViewInStorage(subjectInstanceBean, iView, storage);
  358.     }
  359.  
  360.     private Map<String, String> processVersions = new HashMap<String, String>();
  361.  
  362.     private IProcessInstanceBean createProcessInstance(
  363.             String processDescriptionId, String name, String userId, int priority) throws Exception {
  364.         ICommonApi commonApi = ApiUtils.lookupCommonApi();
  365.  
  366.         String processVersionId = getLatestProcessVersionId(processDescriptionId);
  367.  
  368.         InitProcessInstanceData initProcessInstanceData = new InitProcessInstanceData(
  369.                 processVersionId,com.jcom1.api.constants.Constants.Process.Mode.PRODUCTIVE);
  370.  
  371.         initProcessInstanceData.setName(name);
  372.         initProcessInstanceData.setCreatorId(userId);
  373.         initProcessInstanceData.setPriority(priority);
  374.  
  375.         String processInstanceId = commonApi.createProcessInstance(initProcessInstanceData);
  376.  
  377.         IProcessInstanceBean processInstance = commonApi.getProcessInstanceBean(processInstanceId);
  378.  
  379.         return processInstance;
  380.     }
  381.  
  382.     private String getLatestProcessVersionId(String processDescriptionId)
  383.             throws Exception {
  384.         String processVersion = processVersions.get(processDescriptionId);
  385.  
  386.         if (processVersion == null) {
  387.  
  388.             final String LATEST_VER = "LATEST_VER";
  389.  
  390.             String latestProcVersionQuery = String.format(
  391.                     "SELECT ID AS %s FROM RT_PROCDESC "+
  392.                             "WHERE UPLOADDATE = (SELECT MAX(UPLOADDATE) "+
  393.                                     "FROM RT_PROCDESC " +
  394.                                     "WHERE JPASS_ID = '%s')",
  395.  
  396.                     LATEST_VER,
  397.                     processDescriptionId);
  398.  
  399.             Connection connection = null;
  400.             try {//(final Connection connection = DbHelper
  401.                 //  .getConnection(DbHelper.PROP_DB_INT);) {
  402.                  connection = DriverManager.getConnection(DB_URL, DB_USER,DB_PSW);
  403.  
  404.                 Statement stmt = connection.createStatement();
  405.                 stmt.setMaxRows(1);
  406.                 ResultSet procVersionSet = stmt.executeQuery(latestProcVersionQuery);
  407.  
  408.                 if (procVersionSet.next()) {
  409.  
  410.                     processVersion = String.valueOf(procVersionSet.getInt(LATEST_VER));
  411.                     processVersions.put(processDescriptionId, processVersion);
  412.  
  413.                     log.debug("processDescriptionId: " + processDescriptionId + " / processVersion: " + processVersion);
  414.                 }
  415.                 procVersionSet.close();
  416.  
  417.             } catch (Exception e2) {
  418.                 log.error("error while retrieving latest process version for process: " + processDescriptionId);
  419.             } finally {
  420.                 try {
  421.                     if (!connection.isClosed()) {
  422.                         connection.close();
  423.                     }
  424.                 } catch (SQLException e) {
  425.                     log.error("error closing connection");
  426.                 }
  427.             }
  428.  
  429.             /*
  430.              * try {
  431.              *
  432.              * ICommonApi commonApi = ApiUtils.lookupCommonApi(); // TODO change
  433.              * to direct JDBC select // extremely time consuming method up to 3
  434.              * minutes! IProcessDescriptionBean[] procDescBeans = commonApi
  435.              * .getProcessVersions(processDescriptionId); // get latest version
  436.              * long maxTimeStamp = 0; for (int c = procDescBeans.length; c-- >
  437.              * 0;) { if (procDescBeans[c].isProductive()) { if
  438.              * (procDescBeans[c].getUploadDate() > maxTimeStamp) { maxTimeStamp
  439.              * = procDescBeans[c].getUploadDate(); processVersion =
  440.              * procDescBeans[c].getVersion(); } } }
  441.              * processVersions.put(processDescriptionId, processVersion);
  442.              * log.debug("processDescriptionId: " + processDescriptionId +
  443.              * " / processVersion: " + processVersion);
  444.              *
  445.              *
  446.              * } catch (Exception e) { log.error(e); e.printStackTrace(); }
  447.              */
  448.         }
  449.         log.error("latest ver: " + processVersion);
  450.         return processVersion;
  451.     }
  452.  
  453. }
Advertisement
Add Comment
Please, Sign In to add comment