1   
2   
3   
4   package org.kuali.student.lum.workflow.qualifierresolver;
5   
6   import java.util.ArrayList;
7   import java.util.List;
8   
9   import org.apache.commons.lang.StringUtils;
10  import org.kuali.rice.kew.engine.RouteContext;
11  import org.kuali.rice.kew.engine.node.RouteNodeUtils;
12  import org.kuali.rice.kim.bo.types.dto.AttributeSet;
13  import org.kuali.student.core.search.dto.SearchResultRow;
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      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CocOrganizationQualifierResolver.class);
52  
53      protected static final String ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY = "organizationIdQualifierKey";
54      protected static final String ROUTE_NODE_XML_USE_NON_DERIVED_ROLES = "useNonDerivedRoles";
55  
56      public static final String KUALI_ORG_TYPE_CURRICULUM_PARENT = "kuali.org.CurriculumParent";
57      public static final String KUALI_ORG_HIERARCHY_CURRICULUM = "kuali.org.hierarchy.Curriculum";
58      public static final String KUALI_ORG_COC = "kuali.org.COC";
59  
60      
61  
62  
63      @Override
64      public List<AttributeSet> resolve(RouteContext context) {
65          List<AttributeSet> attributeSets = new ArrayList<AttributeSet>();
66          String orgIdKey = getNodeSpecificOrganizationIdAttributeSetKey(context);
67          for (String orgId : getOrganizationIdsFromDocumentContent(context)) {
68              List<SearchResultRow> results = relatedOrgsFromOrgId(orgId, getOrganizationRelationTypeCode(), getRelatedOrganizationTypeCode());
69              attributeSets.addAll(attributeSetFromSearchResult(results, orgIdKey));
70          }
71          return attributeSets;
72      }
73  
74      public String getNodeSpecificOrganizationIdAttributeSetKey(RouteContext context) {
75          String organizationIdFieldKey = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY);
76          if (StringUtils.isBlank(organizationIdFieldKey)) {
77              if (usesNonDerivedOrganizationRoles(context)) {
78                  throw new RuntimeException("Cannot find required XML element '" + ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY + "' on the Route Node XML configuration.");
79              }
80          }
81          return organizationIdFieldKey;
82      }
83      
84      public Boolean usesNonDerivedOrganizationRoles(RouteContext context) {
85          String useNonDerivedOrganizationRoles = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_USE_NON_DERIVED_ROLES);
86          if (StringUtils.isNotBlank(useNonDerivedOrganizationRoles)) {
87              return Boolean.valueOf(useNonDerivedOrganizationRoles);
88          }
89          return true;
90      }
91  
92      protected String getOrganizationHierarchyTypeCode() {
93          return KUALI_ORG_HIERARCHY_CURRICULUM;
94      }
95  
96      protected String getOrganizationRelationTypeCode() {
97          return KUALI_ORG_TYPE_CURRICULUM_PARENT;
98      }
99  
100     protected String getRelatedOrganizationTypeCode() {
101         return KUALI_ORG_COC;
102     }
103 
104 }