Clover Coverage Report - KS LUM Impl 1.2-M4-SNAPSHOT
Coverage timestamp: Wed Jul 20 2011 13:49:35 EDT
../../../../../../../img/srcFileCovDistChart9.png 20% of files have more coverage
83   197   34   10.38
34   155   0.41   8
8     4.25  
1    
 
  CredentialProgramAssembler       Line # 19 83 0% 34 23 81.6% 0.816
 
  (4)
 
1    package org.kuali.student.lum.program.service.assembler;
2   
3    import org.apache.log4j.Logger;
4    import org.kuali.student.common.assembly.BOAssembler;
5    import org.kuali.student.common.assembly.BaseDTOAssemblyNode;
6    import org.kuali.student.common.assembly.BaseDTOAssemblyNode.NodeOperation;
7    import org.kuali.student.common.assembly.data.AssemblyException;
8    import org.kuali.student.common.exceptions.DoesNotExistException;
9    import org.kuali.student.lum.lu.dto.AdminOrgInfo;
10    import org.kuali.student.lum.lu.dto.CluCluRelationInfo;
11    import org.kuali.student.lum.lu.dto.CluInfo;
12    import org.kuali.student.lum.lu.service.LuService;
13    import org.kuali.student.lum.program.dto.CredentialProgramInfo;
14    import org.kuali.student.lum.service.assembler.CluAssemblerUtils;
15   
16    import java.util.List;
17    import java.util.Map;
18   
 
19    public class CredentialProgramAssembler implements BOAssembler<CredentialProgramInfo, CluInfo> {
20    final static Logger LOG = Logger.getLogger(CredentialProgramAssembler.class);
21   
22    private ProgramAssemblerUtils programAssemblerUtils;
23    private CluAssemblerUtils cluAssemblerUtils;
24    private LuService luService;
25   
 
26  6 toggle @Override
27    public CredentialProgramInfo assemble(CluInfo clu,
28    CredentialProgramInfo credentialProgram,
29    boolean shallowBuild)
30    throws AssemblyException {
31   
32  6 CredentialProgramInfo cpInfo = (null != credentialProgram) ? credentialProgram : new CredentialProgramInfo();
33   
34    // Copy all the data from the clu to the credential program
35  6 if (!ProgramAssemblerConstants.CREDENTIAL_PROGRAM_TYPES.contains(clu.getType())) {
36  0 throw new AssemblyException("CredentialProgramAssembler.assemble() called for Clu of incorrect type: " + clu.getType());
37    }
38  6 cpInfo.setCredentialProgramType(clu.getType());
39  6 cpInfo.setDescr(clu.getDescr());
40  6 cpInfo.setVersionInfo(clu.getVersionInfo());
41   
42  6 programAssemblerUtils.assembleBasics(clu, cpInfo);
43  6 programAssemblerUtils.assembleIdentifiers(clu, cpInfo);
44  6 if (null != clu.getOfficialIdentifier().getLevel()) {
45  6 cpInfo.setProgramLevel(clu.getOfficialIdentifier().getLevel());
46    }
47  6 programAssemblerUtils.assembleBasicAdminOrgs(clu, cpInfo);
48  6 for (AdminOrgInfo org : clu.getAdminOrgs()) {
49  14 if (ProgramAssemblerConstants.INSTITUTION.equals(org.getType())) {
50  6 cpInfo.setInstitution(org);
51    }
52    }
53  6 programAssemblerUtils.assembleAtps(clu, cpInfo);
54  6 programAssemblerUtils.assembleLuCodes(clu, cpInfo);
55   
56  6 if (!shallowBuild) {
57  4 programAssemblerUtils.assembleRequirements(clu, cpInfo);
58  4 cpInfo.setLearningObjectives(cluAssemblerUtils.assembleLos(clu.getId(), shallowBuild));
59  4 cpInfo.setResultOptions(programAssemblerUtils.assembleResultOptions(clu.getId()));
60    }
61   
62  6 try {
63  6 cpInfo.setCoreProgramIds(luService.getRelatedCluIdsByCluId(clu.getId(), ProgramAssemblerConstants.HAS_CORE_PROGRAM));
64    } catch (Exception e) {
65  0 throw new AssemblyException(e);
66    }
67   
68  6 return cpInfo;
69    }
70   
 
71  2 toggle @Override
72    public BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo> disassemble(
73    CredentialProgramInfo credential, NodeOperation operation)
74    throws AssemblyException {
75   
76  2 BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo> result = new BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo>(this);
77   
78  2 if (credential == null) {
79    // FIXME Unsure now if this is an exception or just return null or
80    // empty assemblyNode
81  0 LOG.error("credentialProgram to disassemble is null!");
82  0 throw new AssemblyException("credentialProgram can not be null");
83    }
84   
85  2 CluInfo clu;
86  2 try {
87  2 clu = (NodeOperation.UPDATE == operation) ? luService.getClu(credential.getId()) : new CluInfo();
88    } catch (Exception e) {
89  0 throw new AssemblyException("Error getting existing learning unit during CoreProgram update", e);
90    }
91   
92  2 boolean stateChanged = NodeOperation.UPDATE == operation && credential.getState() != null && !credential.getState().equals(clu.getState());
93   
94  2 programAssemblerUtils.disassembleBasics(clu, credential);
95  2 if (credential.getId() == null)
96  1 credential.setId(clu.getId());
97  2 programAssemblerUtils.disassembleIdentifiers(clu, credential, operation);
98  2 programAssemblerUtils.disassembleAdminOrgs(clu, credential, operation);
99  2 programAssemblerUtils.disassembleAtps(clu, credential, operation);
100  2 programAssemblerUtils.disassembleLuCodes(clu, credential, operation);
101   
102  2 if (credential.getProgramRequirements() != null && !credential.getProgramRequirements().isEmpty()) {
103  1 programAssemblerUtils.disassembleRequirements(clu, credential, operation, result, stateChanged);
104    }
105   
106  2 if (credential.getResultOptions() != null) {
107  2 disassembleResultOptions(credential, operation, result);
108    }
109   
110  2 if (credential.getLearningObjectives() != null) {
111  2 disassembleLearningObjectives(credential, operation, result);
112    }
113   
114  2 clu.setDescr(credential.getDescr());
115  2 clu.setType(credential.getCredentialProgramType());
116   
117   
118   
119  2 if (credential.getCoreProgramIds() != null && credential.getCoreProgramIds().size() > 0) {
120  2 disassembleCorePrograms(credential, operation, result);
121    }
122   
123    // Add the Clu to the result
124  2 result.setNodeData(clu);
125  2 result.setOperation(operation);
126  2 result.setBusinessDTORef(credential);
127  2 return result;
128    }
129   
 
130  2 toggle private void disassembleResultOptions(CredentialProgramInfo credential, NodeOperation operation, BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo> result) throws AssemblyException {
131  2 BaseDTOAssemblyNode<?, ?> resultOptions = cluAssemblerUtils.disassembleCluResults(
132    credential.getId(), credential.getState(), credential.getResultOptions(), operation, ProgramAssemblerConstants.DEGREE_RESULTS, "Result options", "Result option");
133  2 if (resultOptions != null) {
134  2 result.getChildNodes().add(resultOptions);
135    }
136    }
137   
 
138  2 toggle private void disassembleLearningObjectives(CredentialProgramInfo credential, NodeOperation operation, BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo> result) throws AssemblyException {
139  2 try {
140  2 List<BaseDTOAssemblyNode<?, ?>> loResults = cluAssemblerUtils.disassembleLos(credential.getId(), credential.getState(), credential.getLearningObjectives(), operation);
141  2 if (loResults != null) {
142  2 result.getChildNodes().addAll(loResults);
143    }
144    } catch (DoesNotExistException e) {
145    } catch (Exception e) {
146  0 throw new AssemblyException("Error while disassembling los", e);
147    }
148    }
149   
 
150  2 toggle private void disassembleCorePrograms(CredentialProgramInfo credential, NodeOperation operation, BaseDTOAssemblyNode<CredentialProgramInfo, CluInfo> result) throws AssemblyException {
151  2 List<BaseDTOAssemblyNode<?, ?>> coreResults;
152   
153  2 try {
154  2 Map<String, String> currentRelations = null;
155   
156  2 if (!NodeOperation.CREATE.equals(operation)) {
157  1 currentRelations = programAssemblerUtils.getCluCluRelations(credential.getId(), ProgramAssemblerConstants.HAS_CORE_PROGRAM);
158    }
159   
160  2 for (String coreProgramId : credential.getCoreProgramIds()) {
161  2 coreResults = programAssemblerUtils.addAllRelationNodes(credential.getId(), coreProgramId, ProgramAssemblerConstants.HAS_CORE_PROGRAM, operation, currentRelations);
162  2 if (coreResults != null && coreResults.size() > 0) {
163  1 result.getChildNodes().addAll(coreResults);
164    }
165    }
166   
167  2 if (currentRelations != null && currentRelations.size() > 0) {
168  0 for (Map.Entry<String, String> entry : currentRelations.entrySet()) {
169    // Create a new relation with the id of the relation we want to
170    // delete
171  0 CluCluRelationInfo relationToDelete = new CluCluRelationInfo();
172  0 relationToDelete.setId(entry.getValue());
173  0 BaseDTOAssemblyNode<Object, CluCluRelationInfo> relationToDeleteNode = new BaseDTOAssemblyNode<Object, CluCluRelationInfo>(
174    null);
175  0 relationToDeleteNode.setNodeData(relationToDelete);
176  0 relationToDeleteNode.setOperation(NodeOperation.DELETE);
177  0 result.getChildNodes().add(relationToDeleteNode);
178    }
179    }
180    } catch (Exception e) {
181  0 throw new AssemblyException("Error while disassembling Core programs", e);
182    }
183    }
184   
 
185  1 toggle public void setProgramAssemblerUtils(ProgramAssemblerUtils programAssemblerUtils) {
186  1 this.programAssemblerUtils = programAssemblerUtils;
187    }
188   
 
189  1 toggle public void setLuService(LuService luService) {
190  1 this.luService = luService;
191    }
192   
 
193  1 toggle public void setCluAssemblerUtils(CluAssemblerUtils cluAssemblerUtils) {
194  1 this.cluAssemblerUtils = cluAssemblerUtils;
195    }
196   
197    }