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}