View Javadoc

1   package org.kuali.student.lum.workflow.qualifierresolver;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.Map;
6   
7   import org.apache.commons.lang.StringUtils;
8   import org.kuali.rice.kew.engine.RouteContext;
9   import org.kuali.rice.kew.engine.node.RouteNodeUtils;
10  import org.kuali.student.r2.core.search.dto.SearchResultRowInfo;
11  
12  public class ParentOrganizationQualifierResolver extends
13  		AbstractOrganizationServiceQualifierResolver {
14      protected static final String ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY = "organizationIdQualifierKey";
15      protected static final String ROUTE_NODE_XML_USE_NON_DERIVED_ROLES = "useNonDerivedRoles";
16      
17      protected static final String ROUTE_NODE_XML_ORG_RELATION_TYPE = "organizationRelationType";
18      protected static final String ROUTE_NODE_XML_RELATED_ORG_TYPE = "relatedOrganizationType";
19      
20  	@Override
21  	public List<Map<String,String>> resolve(RouteContext context) {
22          List<Map<String,String>> attributeSets = new ArrayList<Map<String,String>>();
23          
24          String orgIdKey = getNodeSpecificOrganizationIdAttributeSetKey(context);
25          String orgRelationType = getOrganizationRelationTypeCode(context);
26          String relatedOrgType = getRelatedOrganizationTypeCode(context);
27          
28          for (String orgId : getOrganizationIdsFromDocumentContent(context)) {
29              List<SearchResultRowInfo> results = relatedOrgsFromOrgId(orgId, orgRelationType, relatedOrgType);
30              attributeSets.addAll(attributeSetFromSearchResult(results, orgIdKey));
31          }
32          return attributeSets;
33  	}
34  	
35      protected String getRelatedOrganizationTypeCode(RouteContext context) {
36      	 String relatedOrganizationType = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_RELATED_ORG_TYPE);
37      	 if(StringUtils.isBlank(relatedOrganizationType)){
38      		 throw new RuntimeException("Cannot find required XML element '" + ROUTE_NODE_XML_RELATED_ORG_TYPE + "' on the Route Node XML configuration.");
39      	 }
40      	 return relatedOrganizationType;
41  	}
42  
43  	protected String getOrganizationRelationTypeCode(RouteContext context) {
44     	 String orgRelationType = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_ORG_RELATION_TYPE);
45     	 if(StringUtils.isBlank(orgRelationType)){
46     		 throw new RuntimeException("Cannot find required XML element '" + ROUTE_NODE_XML_ORG_RELATION_TYPE + "' on the Route Node XML configuration.");
47     	 }
48     	 return orgRelationType;
49  	}
50  
51  	public String getNodeSpecificOrganizationIdAttributeSetKey(RouteContext context) {
52          String organizationIdFieldKey = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY);
53          if (StringUtils.isBlank(organizationIdFieldKey)) {
54              if (usesNonDerivedOrganizationRoles(context)) {
55                  throw new RuntimeException("Cannot find required XML element '" + ROUTE_NODE_XML_ORG_ID_QUALIFIER_KEY + "' on the Route Node XML configuration.");
56              }
57          }
58          return organizationIdFieldKey;
59      }
60      
61      public Boolean usesNonDerivedOrganizationRoles(RouteContext context) {
62          String useNonDerivedOrganizationRoles = RouteNodeUtils.getValueOfCustomProperty(context.getNodeInstance().getRouteNode(), ROUTE_NODE_XML_USE_NON_DERIVED_ROLES);
63          if (StringUtils.isNotBlank(useNonDerivedOrganizationRoles)) {
64              return Boolean.valueOf(useNonDerivedOrganizationRoles);
65          }
66          return true;
67      }
68  }