1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.student.lum.statement.config.context;
17  
18  import java.util.ArrayList;
19  import java.util.List;
20  import java.util.Map;
21  
22  import org.kuali.student.common.exceptions.OperationFailedException;
23  import org.kuali.student.common.versionmanagement.dto.VersionDisplayInfo;
24  import org.kuali.student.core.statement.dto.ReqComponentInfo;
25  import org.kuali.student.lum.lu.dto.CluInfo;
26  import org.kuali.student.lum.lu.dto.CluSetInfo;
27  import org.kuali.student.lum.lu.dto.CluSetTreeViewInfo;
28  import org.kuali.student.lum.lu.service.LuService;
29  import org.kuali.student.lum.lu.service.LuServiceConstants;
30  import org.kuali.student.lum.statement.config.context.util.NLCluSet;
31  import org.kuali.student.lum.statement.typekey.ReqComponentFieldTypes;
32  
33  
34  
35  
36  public class LuContextImpl extends BasicContextImpl {
37      
38  
39  
40  	private LuService luService;
41  
42  	
43  
44  
45  
46  
47  	public final static String CLU_TOKEN = "clu";
48  	public final static String COURSE_CLU_TOKEN = "courseClu";
49  	public final static String PROGRAM_CLU_TOKEN = "programClu";
50  	public final static String TEST_CLU_TOKEN = "testClu";
51  
52  	
53  
54  
55  
56  
57  	public final static String CLU_SET_TOKEN = "cluSet";
58  	public final static String COURSE_CLU_SET_TOKEN = "courseCluSet";
59  	public final static String PROGRAM_CLU_SET_TOKEN = "programCluSet";
60  	public final static String TEST_CLU_SET_TOKEN = "testCluSet";
61  
62  	
63  
64  
65  
66  
67      public void setLuService(LuService luService) {
68  		this.luService = luService;
69  	}
70  
71  	
72  
73  
74  
75  
76  
77  
78      public CluInfo getCluInfo(String cluId) throws OperationFailedException {
79  		if (cluId == null) {
80  			return null;
81  		}
82  		try {
83  			VersionDisplayInfo versionInfo = luService.getCurrentVersion(LuServiceConstants.CLU_NAMESPACE_URI, cluId);
84  			CluInfo clu = this.luService.getClu(versionInfo.getId());
85  			return clu;
86  		} catch(Exception e) {
87  			throw new OperationFailedException(e.getMessage(), e);
88  		}
89      }
90  
91      private CluInfo getClu(ReqComponentInfo reqComponent, String key) throws OperationFailedException {
92          Map<String, String> map = getReqComponentFieldMap(reqComponent);
93          if(map.containsKey(key)) {
94  	    	String cluId = map.get(key);
95  	    	return getCluInfo(cluId);
96          }
97          return null;
98      }
99      
100     
101 
102 
103 
104 
105 
106 
107     public CluSetInfo getCluSetInfo(String cluSetId) throws OperationFailedException {
108 		if (cluSetId == null) {
109 			return null;
110 		}
111 		try {
112 	    	CluSetInfo cluSet = this.luService.getCluSetInfo(cluSetId);
113 	    	return cluSet;
114 		} catch(Exception e) {
115 			throw new OperationFailedException(e.getMessage(), e);
116 		}
117     }
118 
119     
120 
121 
122 
123 
124 
125 
126     public NLCluSet getCluSet(String cluSetId) throws OperationFailedException {
127 		if (cluSetId == null) {
128 			return null;
129 		}
130     	CluSetInfo cluSet = getCluSetInfo(cluSetId);
131 		try {
132 	    	List<CluInfo> list = new ArrayList<CluInfo>();
133 	    	CluSetTreeViewInfo tree = luService.getCluSetTreeView(cluSetId);
134 	    	findClusInCluSet(tree, list);
135 	    	return new NLCluSet(cluSet.getId(), list);
136 		} catch(Exception e) {
137 			throw new OperationFailedException(e.getMessage(), e);
138 		}
139     }
140 
141     private static void findClusInCluSet(CluSetTreeViewInfo tree, List<CluInfo> cluList) {
142     	if (tree.getCluSets() != null) {
143 			for (CluSetTreeViewInfo cluSet : tree.getCluSets()) {
144 				findClusInCluSet(cluSet, cluList);
145 			}
146 		} else {
147 			for (CluInfo clu : tree.getClus()) {
148 				if (!containsClu(cluList, clu)) {
149 					cluList.add(clu);
150 				}
151 			}
152 		}
153 	}
154 
155 	private static boolean containsClu(List<CluInfo> cluList, CluInfo clu) {
156 		for (CluInfo clu2 : cluList) {
157 			if (clu2.getId().equals(clu.getId())) {
158 				return true;
159 			}
160 		}
161 		return false;
162 	}
163 
164 	
165 
166 
167 
168 
169 
170 
171     
172 
173 
174 
175 
176 
177 
178 
179 
180 
181     
182 
183 
184 
185 
186 
187 
188     public NLCluSet getCluSet(ReqComponentInfo reqComponent, String key) throws OperationFailedException {
189         Map<String, String> map = getReqComponentFieldMap(reqComponent);
190     	NLCluSet cluSet = null;
191     	if(map.containsKey(key)) {
192         	String cluSetId = map.get(key);
193             cluSet = getCluSet(cluSetId);
194         }
195     	return cluSet;
196     }
197 
198     
199 
200 
201 
202 
203 
204     public Map<String, Object> createContextMap(ReqComponentInfo reqComponent) throws OperationFailedException {
205         Map<String, Object> contextMap = super.createContextMap(reqComponent);
206 
207         CluInfo clu = getClu(reqComponent, ReqComponentFieldTypes.CLU_KEY.getId());
208         if(clu != null) {
209 	        contextMap.put(CLU_TOKEN, clu);
210         }
211         CluInfo courseClu = getClu(reqComponent, ReqComponentFieldTypes.COURSE_CLU_KEY.getId());
212         if(courseClu != null) {
213 	        contextMap.put(COURSE_CLU_TOKEN, courseClu);
214         }
215         CluInfo programClu = getClu(reqComponent, ReqComponentFieldTypes.PROGRAM_CLU_KEY.getId());
216         if(programClu != null) {
217 	        contextMap.put(PROGRAM_CLU_TOKEN, programClu);
218         }
219         CluInfo testClu = getClu(reqComponent, ReqComponentFieldTypes.TEST_CLU_KEY.getId());
220         if(testClu != null) {
221 	        contextMap.put(TEST_CLU_TOKEN, testClu);
222         }
223 
224         NLCluSet cluSet = getCluSet(reqComponent, ReqComponentFieldTypes.CLUSET_KEY.getId());
225         if(cluSet != null) {
226         	contextMap.put(CLU_SET_TOKEN, cluSet);
227         }
228         NLCluSet courseCluSet = getCluSet(reqComponent, ReqComponentFieldTypes.COURSE_CLUSET_KEY.getId());
229         if(courseCluSet != null) {
230         	contextMap.put(COURSE_CLU_SET_TOKEN, courseCluSet);
231         }
232         NLCluSet programCluSet = getCluSet(reqComponent, ReqComponentFieldTypes.PROGRAM_CLUSET_KEY.getId());
233         if(programCluSet != null) {
234         	contextMap.put(PROGRAM_CLU_SET_TOKEN, programCluSet);
235         }
236         NLCluSet testCluSet = getCluSet(reqComponent, ReqComponentFieldTypes.TEST_CLUSET_KEY.getId());
237         if(testCluSet != null) {
238         	contextMap.put(TEST_CLU_SET_TOKEN, testCluSet);
239         }
240 
241         return contextMap;
242     }
243 }