Clover Coverage Report - KS LUM Rice 1.2.1-SNAPSHOT
Coverage timestamp: Wed Dec 31 1969 19:00:00 EST
../../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
30   95   11   15
14   62   0.37   2
2     5.5  
1    
 
  OrganizationCurriculumCommitteeQualifierResolver       Line # 36 30 0% 11 46 0% 0.0
 
No Tests
 
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.kim.bo.types.dto.AttributeSet;
12    import org.kuali.rice.student.bo.KualiStudentKimAttributes;
13    import org.kuali.student.common.exceptions.DoesNotExistException;
14    import org.kuali.student.core.organization.dto.OrgInfo;
15    import org.kuali.student.core.organization.dto.OrgOrgRelationInfo;
16    import org.kuali.student.core.organization.service.OrganizationService;
17    import org.kuali.student.lum.workflow.node.OrganizationDynamicNode;
18   
19    /**
20    * A qualifier resolver class that is used by the hierarchy routing node {@link OrganizationDynamicNode}.
21    *
22    * This qualifier resolver will get the organization id value from inside the current route node instance and use the
23    * {@link OrganizationService#getOrgOrgRelationsByOrg(String)} method to find all relations to it. From those relations
24    * this class will select the ones that are both active and of the relation type matching
25    * {@link AbstractOrganizationServiceQualifierResolver.KUALI_ORG_TYPE_CURRICULUM_PARENT}. Once the list of those relations has been
26    * determined this qualifier resolver will select any of the organizations that match the above relation details but
27    * also only organizations that are of the type {@link AbstractOrganizationServiceQualifierResolver.KUALI_ORG_COC}. Those
28    * organizations will be returned as qualifications with the details being the organization id and the organization
29    * short name fields.
30    *
31    * If no relation is found that is both active and of the relation type matching
32    * {@link AbstractOrganizationServiceQualifierResolver.KUALI_ORG_TYPE_CURRICULUM_PARENT} then this class will use the organization
33    * found on the current route node instance as the qualification returned.
34    *
35    */
 
36    public class OrganizationCurriculumCommitteeQualifierResolver extends AbstractOrganizationServiceQualifierResolver {
37    protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OrganizationCurriculumCommitteeQualifierResolver.class);
38   
 
39  0 toggle @Override
40    public List<AttributeSet> resolve(RouteContext routeContext) {
41    // get the organization id from the current route node instance and error out if not found
42  0 String orgIdValue = routeContext.getNodeInstance().getNodeState(OrganizationDynamicNode.NODE_STATE_ORG_ID_KEY).getValue();
43  0 if (StringUtils.isBlank(orgIdValue)) {
44  0 throw new RuntimeException("Cannot find valid organization ID in Route Node Instance Node States");
45    }
46  0 if (LOG.isDebugEnabled()) {
47  0 LOG.debug("orgIdValue = '" + orgIdValue + "'");
48    }
49   
50  0 try {
51  0 List<AttributeSet> attributeSets = new ArrayList<AttributeSet>();
52    // find the OrgOrgRelationInfo objects associated with the org from the route node instance
53  0 List<OrgOrgRelationInfo> orgRelationInfos = getOrganizationService().getOrgOrgRelationsByOrg(orgIdValue);
54  0 for (OrgOrgRelationInfo orgOrgRelationInfo : orgRelationInfos) {
55    // check that the relationship is active
56  0 if (StringUtils.equals("Active", orgOrgRelationInfo.getState())) {
57    // check for the proper relationship type
58  0 if (StringUtils.equals(AbstractOrganizationServiceQualifierResolver.KUALI_ORG_TYPE_CURRICULUM_PARENT, orgOrgRelationInfo.getType())) {
59  0 OrgInfo nextNodeOrgInfo = getOrganization(orgOrgRelationInfo.getRelatedOrgId());
60    // check the org type of the related org is the proper org type
61  0 if (StringUtils.equals(AbstractOrganizationServiceQualifierResolver.KUALI_ORG_COC, nextNodeOrgInfo.getType())) {
62  0 if (LOG.isDebugEnabled()) {
63  0 LOG.debug("---- Related Org Relation: " + nextNodeOrgInfo.getId() + " - " + nextNodeOrgInfo.getShortName() + " (" + nextNodeOrgInfo.getLongName() + ")");
64    }
65  0 AttributeSet attributeSet = new AttributeSet();
66  0 attributeSet.put(KualiStudentKimAttributes.QUALIFICATION_ORG_ID, nextNodeOrgInfo.getId());
67  0 attributeSets.add(attributeSet);
68    }
69    }
70    }
71    }
72    // if no org is found then use the org on the route node instance
73  0 if (attributeSets.isEmpty()) {
74  0 OrgInfo currentNodeOrg = getOrganization(orgIdValue);
75  0 AttributeSet attributeSet = new AttributeSet();
76  0 attributeSet.put(KualiStudentKimAttributes.QUALIFICATION_ORG_ID, currentNodeOrg.getId());
77  0 attributeSets.add(attributeSet);
78    }
79  0 return attributeSets;
80    } catch (Exception e) {
81  0 LOG.error("Error getting organization(s) or organization relations", e);
82  0 throw new RuntimeException(e);
83    }
84    }
85   
 
86  0 toggle protected OrgInfo getOrganization(String orgId) throws Exception {
87  0 try {
88  0 return getOrganizationService().getOrganization(orgId);
89    } catch (DoesNotExistException e) {
90  0 LOG.error("No valid organization found for id '" + orgId + "'", e);
91  0 throw e;
92    }
93    }
94   
95    }