View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.r2.lum.lu.dao.impl;
17  
18  import java.util.Collections;
19  import java.util.Date;
20  import java.util.List;
21  
22  import javax.persistence.EntityManager;
23  import javax.persistence.PersistenceContext;
24  import javax.persistence.Query;
25  
26  import org.kuali.student.r1.common.dao.impl.AbstractSearchableCrudDaoImpl;
27  import org.kuali.student.r2.core.versionmanagement.dto.VersionDisplayInfo;
28  import org.kuali.student.r2.lum.lu.dao.LuDao;
29  import org.kuali.student.r2.lum.lu.entity.Clu;
30  import org.kuali.student.r2.lum.lu.entity.CluCluRelation;
31  import org.kuali.student.r2.lum.lu.entity.CluLoRelation;
32  import org.kuali.student.r2.lum.lu.entity.CluPublication;
33  import org.kuali.student.r2.lum.lu.entity.CluResult;
34  import org.kuali.student.r2.lum.lu.entity.CluResultType;
35  import org.kuali.student.r2.lum.lu.entity.CluSet;
36  import org.kuali.student.r2.lum.lu.entity.Lui;
37  import org.kuali.student.r2.lum.lu.entity.LuiLuiRelation;
38  
39  public class LuDaoImpl extends AbstractSearchableCrudDaoImpl implements LuDao {
40  
41  	@PersistenceContext(unitName = "Lu")
42  	@Override
43  	public void setEm(EntityManager em) {
44  		super.setEm(em);
45  	}
46  
47  	@Override
48  	public List<Clu> getClusByIdList(List<String> cluIdList) {
49  		Query query = em.createNamedQuery("Clu.findClusByIdList");
50  		query.setParameter("idList", cluIdList);
51  		@SuppressWarnings("unchecked")
52  		List<Clu> resultList = query.getResultList();
53  		return resultList;
54  	}
55  
56  	@Override
57  	public List<Clu> getClusByLuType(String luTypeKey, String luState) {
58  		Query query = em.createNamedQuery("Clu.getClusByLuType");
59  		query.setParameter("luTypeKey", luTypeKey);
60  		query.setParameter("luState", luState);
61  		@SuppressWarnings("unchecked")
62  		List<Clu> resultList = query.getResultList();
63  		return resultList;
64  	}
65  
66  	@Override
67  	public List<CluSet> getCluSetInfoByIdList(List<String> cluSetIdList) {
68  		Query query = em.createNamedQuery("CluSet.getCluSetInfoByIdList");
69  		query.setParameter("cluSetIdList", cluSetIdList);
70  		@SuppressWarnings("unchecked")
71  		List<CluSet> resultList = query.getResultList();
72  		return resultList;
73  	}
74  
75  	@Override
76  	public List<Lui> getLuisByIdList(List<String> luiIds) {
77  		Query query = em.createNamedQuery("Lui.getLuisByIdList");
78  		query.setParameter("luiIdList", luiIds);
79  		@SuppressWarnings("unchecked")
80  		List<Lui> luis = query.getResultList();
81  		return luis;
82  	}
83  
84  	@Override
85  	public List<String> getLuiIdsByCluId(String cluId) {
86  		Query query = em.createNamedQuery("Lui.getLuiIdsByCluId");
87  		query.setParameter("cluId", cluId);
88  		@SuppressWarnings("unchecked")
89  		List<String> luiIds = query.getResultList();
90  		return luiIds;
91  	}
92  
93  	@Override
94  	public List<Lui> getLuisByRelationType(String luiId,
95  			String luLuRelationTypeId) {
96  		Query query = em
97  				.createNamedQuery("LuiLuiRelation.getLuisByRelationType");
98  		query.setParameter("luiId", luiId);
99  		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
100 
101 		@SuppressWarnings("unchecked")
102 		List<Lui> luis = query.getResultList();
103 		return luis;
104 	}
105 
106 	@Override
107 	public List<String> getLuiIdsByRelationType(String relatedLuiId,
108 			String luLuRelationTypeId) {
109 		Query query = em
110 				.createNamedQuery("LuiLuiRelation.getLuiIdsByRelationType");
111 		query.setParameter("luiId", relatedLuiId);
112 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
113 
114 		@SuppressWarnings("unchecked")
115 		List<String> luiIds = query.getResultList();
116 		return luiIds;
117 	}
118 
119 	@Override
120 	public List<String> getLuiIdsInAtpByCluId(String cluId, String atpKey) {
121 		Query query = em.createNamedQuery("Lui.getLuiIdsInAtpByCluId");
122 		query.setParameter("cluId", cluId);
123 		query.setParameter("atpKey", atpKey);
124 		@SuppressWarnings("unchecked")
125 		List<String> luiIds = query.getResultList();
126 		return luiIds;
127 	}
128 
129 	@Override
130 	public Boolean isCluInCluSet(String cluId, String cluSetId) {
131 		Query query = em.createNamedQuery("CluSet.isCluInCluSet");
132 		query.setParameter("cluId", cluId);
133 		query.setParameter("cluSetId", cluSetId);
134 		Long valid = (Long) query.getSingleResult();
135 		return valid.intValue() > 0;
136 	}
137 
138 	@Override
139 	public List<LuiLuiRelation> getLuiLuiRelations(String luiId) {
140 		Query query = em
141 				.createNamedQuery("LuiLuiRelation.getLuiLuiRelationsByLuiId");
142 		query.setParameter("luiId", luiId);
143 		@SuppressWarnings("unchecked")
144 		List<LuiLuiRelation> luiLuiRelations = query.getResultList();
145 		return luiLuiRelations;
146 	}
147 
148 	@Override
149 	public List<CluCluRelation> getCluCluRelationsByClu(String cluId) {
150 		Query query = em.createNamedQuery("CluCluRelation.getCluCluRelation");
151 		query.setParameter("cluId", cluId);
152 		@SuppressWarnings("unchecked")
153 		List<CluCluRelation> cluCluRelations = query.getResultList();
154 		return cluCluRelations;
155 	}
156 
157 	@Override
158 	public List<String> getCluIdsByLoId(String loId) {
159 		Query query = em.createNamedQuery("Clu.getCluIdsByLoId");
160 		query.setParameter("loId", loId);
161 		@SuppressWarnings("unchecked")
162 		List<String> cluIds = query.getResultList();
163 		return cluIds;
164 	}
165 
166 	@Override
167 	public List<String> getRelatedCluIdsByCluId(String cluId,
168 			String luLuRelationTypeId) {
169 		Query query = em
170 				.createNamedQuery("CluCluRelation.getRelatedCluIdsByCluId");
171 		query.setParameter("cluId", cluId);
172 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
173 		@SuppressWarnings("unchecked")
174 		List<String> relatedCluIds = query.getResultList();
175 		return relatedCluIds;
176 	}
177 
178 	@Override
179     public List<String> getCluIdsByRelatedCluId(String relatedCluId, String luLuRelationTypeId) {
180         Query query = em.createNamedQuery("CluCluRelation.getCluIdsByRelatedCluId");
181         query.setParameter("relatedCluId", relatedCluId);
182         query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
183         @SuppressWarnings("unchecked")
184         List<String> relatedCluIds = query.getResultList();
185         return relatedCluIds;
186     }
187 
188     @Override
189 	public List<Clu> getRelatedClusByCluId(String cluId,
190 			String luLuRelationTypeId) {
191 		Query query = em
192 				.createNamedQuery("CluCluRelation.getRelatedClusByCluId");
193 		query.setParameter("cluId", cluId);
194 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
195 		@SuppressWarnings("unchecked")
196 		List<Clu> relatedClus = query.getResultList();
197 		return relatedClus;
198 	}
199 
200     @Override
201 	public List<Clu> getClusByRelatedCluId(String relatedCluId,
202 			String luLuRelationTypeId) {
203 		Query query = em
204 				.createNamedQuery("CluCluRelation.getClusByRelatedCluId");
205 		query.setParameter("relatedCluId", relatedCluId);
206 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
207 		@SuppressWarnings("unchecked")
208 		List<Clu> relatedClus = query.getResultList();
209 		return relatedClus;
210 	}
211     
212     
213     
214 	@Override
215 	public List<String> getRelatedLuiIdsByLuiId(String luiId,
216 			String luLuRelationTypeId) {
217 		Query query = em
218 				.createNamedQuery("LuiLuiRelation.getRelatedLuiIdsByLuiId");
219 		query.setParameter("luiId", luiId);
220 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
221 		@SuppressWarnings("unchecked")
222 		List<String> relatedLuiIds = query.getResultList();
223 		return relatedLuiIds;
224 	}
225 
226 	@Override
227 	public List<Lui> getRelatedLuisByLuiId(String luiId,
228 			String luLuRelationTypeId) {
229 		Query query = em
230 				.createNamedQuery("LuiLuiRelation.getRelatedLuisByLuiId");
231 		query.setParameter("luiId", luiId);
232 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
233 		@SuppressWarnings("unchecked")
234 		List<Lui> relatedLuis = query.getResultList();
235 		return relatedLuis;
236 	}
237 
238 	@Override
239 	public List<Clu> getClusByRelation(String parentCluId,
240 			String luLuRelationTypeKey) {
241 		Query query = em.createNamedQuery("Clu.getClusByRelation");
242 		query.setParameter("parentCluId", parentCluId);
243 		query.setParameter("luLuRelationTypeKey", luLuRelationTypeKey);
244 		@SuppressWarnings("unchecked")
245 		List<Clu> resultList = query.getResultList();
246 		return resultList;
247 	}
248 
249 	@Override
250 	public List<Clu> getClusByRelationSt(String cluId, String luLuRelationTypeId, List<String> luStateList) {
251 		Query query = em.createNamedQuery("CluCluRelation.getRelatedClusByCluIdSt");
252 		query.setParameter("cluId", cluId);
253 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
254 		query.setParameter("luStateList", luStateList);
255 		@SuppressWarnings("unchecked")
256 		List<Clu> resultList = query.getResultList();
257 		
258 		query = em.createNamedQuery("CluCluRelation.getClusByRelatedCluIdSt");
259 		query.setParameter("relatedCluId", cluId);
260 		query.setParameter("luLuRelationTypeId", luLuRelationTypeId);
261 		query.setParameter("luStateList", luStateList);		
262 		List<Clu> resultListRel = query.getResultList();
263 		if(resultListRel != null)
264 			for(Clu clu:resultListRel) {
265 				if (!resultList.contains(clu))
266 					resultList.add(clu);
267 			}
268 		
269 		return resultList;
270 	}
271 	
272 	@Override
273 	public List<CluLoRelation> getCluLoRelationsByClu(String cluId) {
274 		Query query = em
275 				.createNamedQuery("CluLoRelation.getCluLoRelationByClu");
276 		query.setParameter("cluId", cluId);
277 		@SuppressWarnings("unchecked")
278 		List<CluLoRelation> cluLoRelations = query.getResultList();
279 		return cluLoRelations;
280 	}
281 
282 	@Override
283 	public List<CluLoRelation> getCluLoRelationsByLo(String loId) {
284 		Query query = em
285 				.createNamedQuery("CluLoRelation.getCluLoRelationByLo");
286 		query.setParameter("loId", loId);
287 		@SuppressWarnings("unchecked")
288 		List<CluLoRelation> cluLoRelations = query.getResultList();
289 		return cluLoRelations;
290 	}
291 
292 	@Override
293 	public List<CluLoRelation> getCluLoRelationsByCludIdAndLoId(String cluId,
294 			String loId) {
295 		Query query = em.createNamedQuery("CluLoRelation.getCluLoRelation");
296 		query.setParameter("cluId", cluId);
297 		query.setParameter("loId", loId);
298 
299 		@SuppressWarnings("unchecked")
300 		List<CluLoRelation> rels = query.getResultList();
301 		return rels;
302 	}
303 
304 	@Override
305 	public List<String> getAllowedLuLuRelationTypesForLuType(String luTypeId,
306 			String relatedLuTypeId) {
307 		Query query = em
308 				.createNamedQuery("AllowedLuLuRelationType.getAllowedTypesByLuTypes");
309 		query.setParameter("luTypeId", luTypeId);
310 		query.setParameter("relatedLuTypeId", relatedLuTypeId);
311 		@SuppressWarnings("unchecked")
312 		List<String> resultList = query.getResultList();
313 		return resultList;
314 	}
315 
316 	@Override
317 	public List<String> getAllowedCluLoRelationTypesForLuType(String luTypeId) {
318 		Query query = em
319 				.createNamedQuery("AllowedCluLoRealtionType.getAllowedTypesByLuType");
320 		query.setParameter("luTypeId", luTypeId);
321 		@SuppressWarnings("unchecked")
322 		List<String> resultList = query.getResultList();
323 		return resultList;
324 	}
325 
326 	@Override
327 	public List<String> getAllowedResultUsageTypesForLuType(String luTypeId) {
328 		Query query = em
329 				.createNamedQuery("AllowedResultUsageLuType.getAllowedTypesByLuType");
330 		query.setParameter("luTypeId", luTypeId);
331 		@SuppressWarnings("unchecked")
332 		List<String> resultList = query.getResultList();
333 		return resultList;
334 	}
335 
336 	@Override
337 	public List<String> getAllowedResultComponentTypesForResultUsageType(
338 			String resultUsageType) {
339 		Query query = em
340 				.createNamedQuery("AllowedResultComponentUsageType.getAllowedComponentsByUsageType");
341 		query.setParameter("resultUsageType", resultUsageType);
342 		@SuppressWarnings("unchecked")
343 		List<String> resultList = query.getResultList();
344 		return resultList;
345 	}
346 
347 	@Override
348 	public List<CluResultType> getAllowedCluResultTypesForLuType(String luTypeId) {
349 		Query query = em
350 				.createNamedQuery("AllowedCluResultLuType.getAllowedTypesByLuType");
351 		query.setParameter("luTypeId", luTypeId);
352 		@SuppressWarnings("unchecked")
353 		List<CluResultType> resultList = query.getResultList();
354 		return resultList;
355 	}
356 
357 	@Override
358 	public List<String> getCluIdsByResultUsageType(String resultUsageTypeKey) {
359 		Query query = em
360 				.createNamedQuery("CluResult.getCluIdByResultUsageType");
361 		query.setParameter("resultUsageType", resultUsageTypeKey);
362 		@SuppressWarnings("unchecked")
363 		List<String> resultList = query.getResultList();
364 		return resultList;
365 	}
366 
367 	@Override
368 	public List<String> getCluIdsByResultComponentId(String resultComponentId) {
369 		Query query = em
370 				.createNamedQuery("CluResult.getCluIdByResultComponentId");
371 		query.setParameter("resultComponentId", resultComponentId);
372 		@SuppressWarnings("unchecked")
373 		List<String> resultList = query.getResultList();
374 		return resultList;
375 	}
376 
377 	@Override
378 	public List<String> getAllowedLuLuRelationTypesByLuiId(String luiId,
379 			String relatedLuiId) {
380 		Query query = em
381 				.createNamedQuery("LuiLuiRelation.getRelationTypeByLuiId");
382 		query.setParameter("luiId", luiId);
383 		query.setParameter("relatedLuiId", relatedLuiId);
384 		@SuppressWarnings("unchecked")
385 		List<String> resultList = query.getResultList();
386 		return resultList;
387 	}
388 
389 	@Override
390 	public List<String> getAllowedLuLuRelationTypesByCluId(String cluId,
391 			String relatedCluId) {
392 		Query query = em
393 				.createNamedQuery("CluCluRelation.getRelationTypeByCluId");
394 		query.setParameter("cluId", cluId);
395 		query.setParameter("relatedCluId", relatedCluId);
396 		@SuppressWarnings("unchecked")
397 		List<String> resultList = query.getResultList();
398 		return resultList;
399 	}
400 
401 	@Override
402 	public List<CluResult> getCluResultByClu(String cluId) {
403 		Query query = em
404 				.createNamedQuery("CluResult.getCluResultByCluId");
405 		query.setParameter("cluId", cluId);
406 		@SuppressWarnings("unchecked")
407 		List<CluResult> resultList = query.getResultList();
408 		return resultList;
409 	}
410 
411     @Override
412     public Clu getLatestCluVersion(String cluVersionIndId) {
413         Query query = em.createNamedQuery("Clu.findLatestClu");
414         query.setParameter("versionIndId", cluVersionIndId);
415         Clu clu = (Clu)query.getSingleResult();
416         return clu;
417     }
418 
419 	@Override
420 	public Clu getCurrentCluVersion(String cluVersionIndId) {
421         Query query = em.createNamedQuery("Clu.findCurrentClu");
422         query.setParameter("versionIndId", cluVersionIndId);
423         query.setParameter("currentTime", new Date());
424         Clu clu = (Clu)query.getSingleResult();
425         return clu;
426 	}
427 
428 	@Override
429 	public VersionDisplayInfo getCurrentCluVersionInfo(String cluVersionIndId, String objectTypeURI) {
430         Query query = em.createNamedQuery("Clu.findCurrentVersionInfo");
431         query.setParameter("versionIndId", cluVersionIndId);
432         query.setParameter("currentTime", new Date());
433         VersionDisplayInfo versionDisplayInfo = (VersionDisplayInfo)query.getSingleResult();
434         versionDisplayInfo.setRefObjectUri(objectTypeURI);
435         return versionDisplayInfo;
436 	}
437 
438 	@Override
439 	public VersionDisplayInfo getCurrentVersionOnDate(String versionIndId,
440 			String objectTypeURI, Date date) {
441         Query query = em.createNamedQuery("Clu.findCurrentVersionOnDate");
442         query.setParameter("versionIndId", versionIndId);
443         query.setParameter("date", date);
444         VersionDisplayInfo versionDisplayInfo = (VersionDisplayInfo)query.getSingleResult();
445         versionDisplayInfo.setRefObjectUri(objectTypeURI);
446         return versionDisplayInfo;
447 	}
448 
449 	@Override
450 	public VersionDisplayInfo getFirstVersion(String versionIndId,
451 			String objectTypeURI) {
452         Query query = em.createNamedQuery("Clu.findFirstVersion");
453         query.setParameter("versionIndId", versionIndId);
454         VersionDisplayInfo versionDisplayInfo = (VersionDisplayInfo)query.getSingleResult();
455         versionDisplayInfo.setRefObjectUri(objectTypeURI);
456         return versionDisplayInfo;
457 	}
458 
459 	@Override
460 	public VersionDisplayInfo getLatestVersion(String versionIndId,
461 			String objectTypeURI) {
462         Query query = em.createNamedQuery("Clu.findLatestVersion");
463         query.setParameter("versionIndId", versionIndId);
464         VersionDisplayInfo versionDisplayInfo = (VersionDisplayInfo)query.getSingleResult();
465         versionDisplayInfo.setRefObjectUri(objectTypeURI);
466         return versionDisplayInfo;
467 	}
468 
469 	@Override
470 	public VersionDisplayInfo getVersionBySequenceNumber(String versionIndId,
471 			String objectTypeURI, Long sequenceNumber) {
472         Query query = em.createNamedQuery("Clu.findVersionBySequence");
473         query.setParameter("versionIndId", versionIndId);
474         query.setParameter("sequenceNumber", sequenceNumber);
475         VersionDisplayInfo versionDisplayInfo = (VersionDisplayInfo)query.getSingleResult();
476         versionDisplayInfo.setRefObjectUri(objectTypeURI);
477         return versionDisplayInfo;
478 	}
479 
480 	@Override
481 	public List<VersionDisplayInfo> getVersions(String versionIndId,
482 			String objectTypeURI) {
483         Query query = em.createNamedQuery("Clu.findVersions");
484         query.setParameter("versionIndId", versionIndId);
485         List<VersionDisplayInfo> versionDisplayInfos = (List<VersionDisplayInfo>)query.getResultList();
486         if(versionDisplayInfos==null){
487         	versionDisplayInfos = Collections.emptyList();
488         }
489         for(VersionDisplayInfo versionDisplayInfo:versionDisplayInfos){
490         	versionDisplayInfo.setRefObjectUri(objectTypeURI);
491         }
492         return versionDisplayInfos;
493 	}
494 
495 	@Override
496 	public List<VersionDisplayInfo> getVersionsInDateRange(String versionIndId,
497 			String objectTypeURI, Date from, Date to) {
498 		if(from==null&&to==null){
499 			throw new IllegalArgumentException("from and to dates can not both be null");
500 		}
501 		Query query;
502 		if(from==null){
503 			query = em.createNamedQuery("Clu.findVersionsBeforeDate");
504 	        query.setParameter("versionIndId", versionIndId);
505 	        query.setParameter("date", to);			
506 		}else if(to==null){
507 			query = em.createNamedQuery("Clu.findVersionsAfterDate");
508 	        query.setParameter("versionIndId", versionIndId);
509 	        query.setParameter("date", from);
510 		}else{
511 			query = em.createNamedQuery("Clu.findVersionsInDateRange");
512 	        query.setParameter("versionIndId", versionIndId);
513 	        query.setParameter("from", from);
514 	        query.setParameter("to", to);
515 		}
516 		
517         List<VersionDisplayInfo> versionDisplayInfos = (List<VersionDisplayInfo>)query.getResultList();
518         if(versionDisplayInfos==null){
519         	versionDisplayInfos = Collections.emptyList();
520         }
521         for(VersionDisplayInfo versionDisplayInfo:versionDisplayInfos){
522         	versionDisplayInfo.setRefObjectUri(objectTypeURI);
523         }
524         return versionDisplayInfos;
525 	}
526 
527 	@Override
528 	public List<CluPublication> getCluPublicationsByType(
529 			String luPublicationTypeKey) {
530         Query query = em.createNamedQuery("CluPublication.findCluPublicationsByType");
531         query.setParameter("luPublicationTypeKey", luPublicationTypeKey);
532         List<CluPublication> cluPublications = query.getResultList();
533         return cluPublications;
534 	}
535 
536 	@Override
537 	public List<CluPublication> getCluPublicationsByCluId(String cluId) {
538         Query query = em.createNamedQuery("CluPublication.findPublicationsByCluId");
539         query.setParameter("cluId", cluId);
540         List<CluPublication> cluPublications = query.getResultList();
541         return cluPublications;
542 	}
543 
544 	@Override
545 	public List<CluSet> getCluSetsByCluVersionIndId(List<String> cluVersionIndIds) {
546         Query query = em.createNamedQuery("CluSet.findCluSetsByCluVersionIndIds");
547         query.setParameter("cluVersionIndIds", cluVersionIndIds);
548         List<CluSet> cluSetIds = query.getResultList();
549         return cluSetIds;
550 	}
551 
552 	@Override
553 	public List<CluSet> getAllDynamicCluSets() {
554         Query query = em.createNamedQuery("CluSet.findAllDynamicCluSets");
555         List<CluSet> cluSetIds = query.getResultList();
556         return cluSetIds;
557 	}
558 
559 	@Override
560 	public List<Clu> getCrossListedClusByCodes(List<String> crossListedCodes) {
561 		if(crossListedCodes!=null && crossListedCodes.isEmpty()){
562 			crossListedCodes.add(""); //Add a blank param value because jpql IN(:var) has problems with empty lists
563 		}
564         Query query = em.createNamedQuery("Clu.getCrossListedClusByCodes");
565         query.setParameter("crossListedCodes", crossListedCodes);
566         List<Clu> clus = query.getResultList();
567         return clus;
568 	}
569 	
570 }