1 package org.kuali.ole.select.rule;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.apache.commons.collections.CollectionUtils;
5 import org.kuali.ole.OLEConstants;
6 import org.kuali.ole.select.bo.OLEAccessActivationConfiguration;
7 import org.kuali.ole.select.bo.OLEAccessActivationWorkFlow;
8 import org.kuali.rice.kim.api.identity.Person;
9 import org.kuali.rice.kim.api.identity.PersonService;
10 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
11 import org.kuali.rice.kim.impl.role.RoleBo;
12 import org.kuali.rice.krad.maintenance.MaintenanceDocument;
13 import org.kuali.rice.krad.rules.MaintenanceDocumentRuleBase;
14 import org.kuali.rice.krad.util.GlobalVariables;
15
16 import java.util.ArrayList;
17 import java.util.HashMap;
18 import java.util.List;
19 import java.util.Map;
20
21
22
23
24
25 public class OLEAccessActivationConfigurationRule extends MaintenanceDocumentRuleBase {
26
27 private PersonService personService;
28
29 public PersonService getPersonService() {
30 if(personService == null){
31 personService = KimApiServiceLocator.getPersonService();
32 }
33 return personService;
34 }
35
36
37 public void setPersonService(PersonService personService) {
38 this.personService = personService;
39 }
40
41 @Override
42 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
43 boolean isValid = true;
44 OLEAccessActivationConfiguration accessConfiguration = (OLEAccessActivationConfiguration) document.getNewMaintainableObject().getDataObject();
45
46 isValid &= validateUniqueAccessName(accessConfiguration);
47 isValid &= validateAccessActivationWorkflows(accessConfiguration);
48 isValid &= validateUniqueStatus(accessConfiguration);
49 return isValid;
50 }
51
52 public boolean validateUniqueAccessName(OLEAccessActivationConfiguration accessConfiguration) {
53 if (StringUtils.isNotBlank(accessConfiguration.getWorkflowName())) {
54 Map<String, String> criteria = new HashMap<String, String>();
55 criteria.put(OLEConstants.ACCESS_NAME, accessConfiguration.getWorkflowName());
56 List<OLEAccessActivationConfiguration> dataSourceNameInDatabaseAccessName = (List<OLEAccessActivationConfiguration>) getBoService().findMatching(OLEAccessActivationConfiguration.class, criteria);
57 if (dataSourceNameInDatabaseAccessName.size() > 0) {
58 for (OLEAccessActivationConfiguration oleConfigurationName : dataSourceNameInDatabaseAccessName) {
59 String accessActivationConfigurationId = oleConfigurationName.getAccessActivationConfigurationId();
60 if (null == accessConfiguration.getAccessActivationConfigurationId() || (!accessConfiguration.getAccessActivationConfigurationId().equalsIgnoreCase(accessActivationConfigurationId))) {
61 GlobalVariables.getMessageMap().putError(OLEConstants.ACCESS_NAME_FIELD, OLEConstants.ERROR_DUPLICATE_WORKFLOW_NAME);
62 return false;
63 }
64 }
65 }
66 }
67 return true;
68 }
69
70 public boolean validateUniqueOrderNo(OLEAccessActivationConfiguration accessConfiguration) {
71 if (accessConfiguration.getAccessActivationWorkflowList() != null) {
72 List<Integer> orderNos = new ArrayList<>();
73 for (OLEAccessActivationWorkFlow workflow : accessConfiguration.getAccessActivationWorkflowList()) {
74 if (!orderNos.contains(workflow.getOrderNo())){
75 orderNos.add(workflow.getOrderNo());
76 }else {
77 GlobalVariables.getMessageMap().putError(OLEConstants.ORDER_NO_FIELD, OLEConstants.ERROR_DUPLICATE_ORDER_NO_FOUND);
78 return false;
79 }
80 }
81 }
82 return true;
83 }
84
85 public boolean validateUniqueStatus(OLEAccessActivationConfiguration accessConfiguration) {
86 if (accessConfiguration.getAccessActivationWorkflowList() != null) {
87 List<String> statusList = new ArrayList<>();
88 for (OLEAccessActivationWorkFlow workflow : accessConfiguration.getAccessActivationWorkflowList()) {
89 if (!statusList.contains(workflow.getStatus())){
90 statusList.add(workflow.getStatus());
91 }else {
92 GlobalVariables.getMessageMap().putError(OLEConstants.ORDER_NO_FIELD, OLEConstants.ERROR_DUPLICATE_STATUS_FOUND);
93 return false;
94 }
95 }
96 }
97 return true;
98 }
99
100
101 private boolean validateAccessActivationWorkflows(OLEAccessActivationConfiguration accessConfiguration) {
102 boolean isValid = true;
103 if (CollectionUtils.isEmpty(accessConfiguration.getAccessActivationWorkflowList())) {
104 GlobalVariables.getMessageMap().putError(OLEConstants.ACCESS_NAME_FIELD, OLEConstants.ERROR_ATLEAST_ONE_WORKFLOW);
105 isValid = false;
106 }else {
107 isValid &= validateUniqueOrderNo(accessConfiguration);
108
109 }
110 return isValid;
111 }
112 }