View Javadoc

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   * A QualifierResolver class that will use configuration elements from the Route Node xml configuration to get a list of
17   * organizations related to the organization(s) that are set in the document content xml for a particular document
18   * instance.
19   * 
20   * <p>
21   * A sample of the Route Node configuration:
22   * <p>
23   * 
24   * <pre>
25   * {@code
26   * <role name="Document Organization Review">
27   *   <activationType>P</activationType>
28   *   <qualifierResolverClass>org.kuali.student.lum.workflow.qualifierresolver.CocOrganizationQualifierResolver</qualifierResolverClass>
29   *   <useNonDerivedRoles>true</useNonDerivedRoles>
30   *   <organizationIdQualifierKey>orgId</organizationIdQualifierKey>
31   *   <organizationIdDocumentContentKey>orgId</organizationIdDocumentContentKey>
32   * </role>
33   * }
34   * </pre>
35   * 
36   * <p>
37   * A sample of the Document Content xml expected by default:
38   * <p>
39   * 
40   * <pre>
41   * {@code
42   * <info>
43   *   <orgId>1234</orgId>
44   *   <orgId>5678</orgId>
45   * </info>
46   * }
47   * </pre>
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       * @see org.kuali.rice.kew.role.QualifierResolver#resolve(org.kuali.rice.kew.engine.RouteContext)
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 }