1   
2   
3   
4   package org.kuali.student.lum.workflow.qualifierresolver;
5   
6   import java.util.ArrayList;
7   import java.util.List;
8   import java.util.Map;
9   
10  import org.apache.commons.lang.StringUtils;
11  import org.kuali.rice.kew.engine.RouteContext;
12  import org.kuali.rice.kew.engine.node.RouteNodeUtils;
13  import org.kuali.student.r2.core.search.dto.SearchResultRowInfo;
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  public class CocOrganizationQualifierResolver extends AbstractOrganizationServiceQualifierResolver {
51  
52      protected static final String ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY = "organizationIdQualifierKey";
53      protected static final String ROUTE_NODE_XML_USE_NON_DERIVED_ROLES = "useNonDerivedRoles";
54  
55      public static final String KUALI_ORG_TYPE_CURRICULUM_PARENT = "kuali.org.CurriculumParent";
56      public static final String KUALI_ORG_HIERARCHY_CURRICULUM = "kuali.org.hierarchy.Curriculum";
57      public static final String KUALI_ORG_COC = "kuali.org.COC";
58  
59      
60  
61  
62      @Override
63      public List<Map<String,String>> resolve(RouteContext context) {
64          List<Map<String,String>> attributeSets = new ArrayList<Map<String,String>>();
65          String orgIdKey = getNodeSpecificOrganizationIdAttributeSetKey(context);
66          for (String orgId : getOrganizationIdsFromDocumentContent(context)) {
67              List<SearchResultRowInfo> results = relatedOrgsFromOrgId(orgId, getOrganizationRelationTypeCode(), getRelatedOrganizationTypeCode());
68              attributeSets.addAll(attributeSetFromSearchResult(results, orgIdKey));
69          }
70          return attributeSets;
71      }
72  
73      public String getNodeSpecificOrganizationIdAttributeSetKey(RouteContext context) {
74          String organizationIdFieldKey = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY);
75          if (StringUtils.isBlank(organizationIdFieldKey)) {
76              if (usesNonDerivedOrganizationRoles(context)) {
77                  throw new RuntimeException("Cannot find required XML element '" + ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY + "' on the Route Node XML configuration.");
78              }
79          }
80          return organizationIdFieldKey;
81      }
82      
83      public Boolean usesNonDerivedOrganizationRoles(RouteContext context) {
84          String useNonDerivedOrganizationRoles = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_USE_NON_DERIVED_ROLES);
85          if (StringUtils.isNotBlank(useNonDerivedOrganizationRoles)) {
86              return Boolean.valueOf(useNonDerivedOrganizationRoles);
87          }
88          return true;
89      }
90  
91      protected String getOrganizationHierarchyTypeCode() {
92          return KUALI_ORG_HIERARCHY_CURRICULUM;
93      }
94  
95      protected String getOrganizationRelationTypeCode() {
96          return KUALI_ORG_TYPE_CURRICULUM_PARENT;
97      }
98  
99      protected String getRelatedOrganizationTypeCode() {
100         return KUALI_ORG_COC;
101     }
102 
103 }