001package org.kuali.ole.sys.context; 002 003import org.kuali.ole.OLEConstants; 004import org.kuali.ole.sys.batch.AbstractStep; 005import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 006import org.kuali.rice.coreservice.api.CoreServiceApiServiceLocator; 007import org.kuali.rice.coreservice.api.parameter.Parameter; 008import org.kuali.rice.coreservice.api.parameter.ParameterKey; 009import org.kuali.rice.coreservice.framework.parameter.ParameterService; 010import org.kuali.rice.kew.api.KewApiServiceLocator; 011import org.kuali.rice.kew.api.action.ActionItem; 012import org.kuali.rice.kew.api.action.DocumentActionParameters; 013import org.kuali.rice.kew.api.action.InvalidActionTakenException; 014import org.kuali.rice.kew.api.action.WorkflowDocumentActionsService; 015import org.kuali.rice.kew.api.actionlist.ActionListService; 016import org.kuali.rice.kew.api.document.InvalidDocumentContentException; 017 018import java.util.ArrayList; 019import java.util.Date; 020import java.util.Iterator; 021import java.util.List; 022 023/** 024 * Created by pvsubrah on 10/28/14. 025 */ 026public class ActionListBatchProcessor extends AbstractStep { 027 private WorkflowDocumentActionsService workflowDocumentActionsService; 028 private ActionListService actionListService; 029 private ParameterService parameterService; 030 031 @Override 032 public boolean execute(String jobName, Date jobRunDate) throws InterruptedException { 033 ParameterKey principalIdParameterKey = ParameterKey.create(OLEConstants.APPL_ID_OLE, OLEConstants.SYS_NMSPC, OLEConstants.BATCH_CMPNT, "ACTN_LIST_BATCH_PRNPL_NM"); 034 Parameter principalId = CoreServiceApiServiceLocator.getParameterRepositoryService().getParameter(principalIdParameterKey); 035 String principal = principalId.getValue(); 036 037 038 ParameterKey requestCodeParameterKey = ParameterKey.create(OLEConstants.APPL_ID_OLE, OLEConstants.SYS_NMSPC, OLEConstants.BATCH_CMPNT,"ACTN_LIST_BATCH_RQST_CD"); 039 Parameter requestCode = CoreServiceApiServiceLocator.getParameterRepositoryService().getParameter(requestCodeParameterKey); 040 String request = requestCode.getValue(); 041 042 ParameterKey docTypeParameterKey = ParameterKey.create(OLEConstants.APPL_ID_OLE, OLEConstants.SYS_NMSPC, OLEConstants.BATCH_CMPNT,"ACTN_LIST_BATCH_DOC_TYP_CD"); 043 Parameter docTypeCode = CoreServiceApiServiceLocator.getParameterRepositoryService().getParameter(docTypeParameterKey); 044 045 List<ActionItem> actionItems = getActionListService().getActionItemsForPrincipal(principal); 046 List<String> docIds = new ArrayList<String>(); 047 List<ActionItem> filteredActionItems = new ArrayList<ActionItem>(); 048 049 if(docTypeCode.getValue().equals("*")){ 050 filteredActionItems = actionItems; 051 } else { 052 for (Iterator<ActionItem> iterator = actionItems.iterator(); iterator.hasNext(); ) { 053 ActionItem actionItem = iterator.next(); 054 if(docTypeCode.getValue().equals(actionItem.getDocName())){ 055 filteredActionItems.add(actionItem); 056 } 057 } 058 } 059 060 for (Iterator<ActionItem> iterator = filteredActionItems.iterator(); iterator.hasNext(); ) { 061 ActionItem actionItem = iterator.next(); 062 if(actionItem.getActionRequestCd().equals(requestCode.getValue())){ 063 docIds.add(actionItem.getDocumentId()); 064 } 065 } 066 067 switch (request){ 068 case "A": 069 approve(docIds, principal); 070 break; 071 case "K": 072 acknowledge(docIds, principal); 073 break; 074 case "F": 075 fyi(docIds, principal); 076 break; 077 case "C": 078 complete(docIds, principal); 079 break; 080 } 081 return true; 082 } 083 084 private void complete(List<String> docIds, String principal) { 085 for (Iterator<String> iterator = docIds.iterator(); iterator.hasNext(); ) { 086 String docId = iterator.next(); 087 try { 088 getWorkflowDocumentActionsService().complete(DocumentActionParameters.create(docId, principal)); 089 } catch (RiceIllegalArgumentException | InvalidDocumentContentException | InvalidActionTakenException e) { 090 System.out.println(docId); 091 e.printStackTrace(); 092 } 093 } 094 } 095 096 private void fyi(List<String> docIds, String principal) { 097 for (Iterator<String> iterator = docIds.iterator(); iterator.hasNext(); ) { 098 String docId = iterator.next(); 099 try { 100 getWorkflowDocumentActionsService().clearFyi(DocumentActionParameters.create(docId, principal)); 101 } catch (RiceIllegalArgumentException | InvalidDocumentContentException | InvalidActionTakenException e) { 102 System.out.println(docId); 103 e.printStackTrace(); 104 } 105 } 106 } 107 108 private void acknowledge(List<String> docIds, String principal) { 109 for (Iterator<String> iterator = docIds.iterator(); iterator.hasNext(); ) { 110 String docId = iterator.next(); 111 try { 112 getWorkflowDocumentActionsService().acknowledge(DocumentActionParameters.create(docId, principal)); 113 } catch (RiceIllegalArgumentException | InvalidDocumentContentException | InvalidActionTakenException e) { 114 System.out.println(docId); 115 e.printStackTrace(); 116 } 117 } 118 } 119 120 private void approve(List<String> docIds, String principal) { 121 for (Iterator<String> iterator = docIds.iterator(); iterator.hasNext(); ) { 122 String docId = iterator.next(); 123 try { 124 getWorkflowDocumentActionsService().approve(DocumentActionParameters.create(docId, principal)); 125 } catch (RiceIllegalArgumentException | InvalidDocumentContentException | InvalidActionTakenException e) { 126 e.printStackTrace(); 127 } 128 } 129 } 130 131 private WorkflowDocumentActionsService getWorkflowDocumentActionsService() { 132 if (null == workflowDocumentActionsService) { 133 workflowDocumentActionsService = KewApiServiceLocator.getWorkflowDocumentActionsService(); 134 } 135 return workflowDocumentActionsService; 136 } 137 138 public org.kuali.rice.kew.api.actionlist.ActionListService getActionListService() { 139 if (null == actionListService) { 140 actionListService = KewApiServiceLocator.getActionListService(); 141 } 142 return actionListService; 143 } 144 145 @Override 146 public ParameterService getParameterService() { 147 if(null == parameterService){ 148 parameterService = (ParameterService) SpringContext.getService("parameterService"); 149 } 150 return parameterService; 151 } 152}