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