001 /**
002 * Copyright 2012 The Kuali Foundation Licensed under the
003 * Educational Community License, Version 2.0 (the "License"); you may
004 * not use this file except in compliance with the License. You may
005 * obtain a copy of the License at
006 *
007 * http://www.osedu.org/licenses/ECL-2.0
008 *
009 * Unless required by applicable law or agreed to in writing,
010 * software distributed under the License is distributed on an "AS IS"
011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012 * or implied. See the License for the specific language governing
013 * permissions and limitations under the License.
014 *
015 * Created by David Yin on 8/7/12
016 */
017 package org.kuali.student.enrollment.class2.courseoffering.service.impl;
018
019 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
020 import org.kuali.student.enrollment.class2.courseoffering.service.SeatPoolUtilityService;
021 import org.kuali.student.enrollment.courseoffering.dto.SeatPoolDefinitionInfo;
022 import org.kuali.student.enrollment.courseoffering.service.CourseOfferingService;
023 import org.kuali.student.r2.common.dto.ContextInfo;
024 import org.kuali.student.r2.common.util.constants.CourseOfferingServiceConstants;
025 import org.kuali.student.r2.common.util.constants.LuiServiceConstants;
026
027 import javax.xml.namespace.QName;
028 import java.util.ArrayList;
029 import java.util.Collections;
030 import java.util.Comparator;
031 import java.util.List;
032
033 /**
034 * This class //TODO ...
035 *
036 * @author Kuali Student Team
037 */
038 public class SeatPoolUtilityServiceImpl implements SeatPoolUtilityService {
039
040 private transient CourseOfferingService courseOfferingService = null;
041
042 @Override
043 public void updateSeatPoolDefinitionList(List<SeatPoolDefinitionInfo> updatedSeatPoolList, String activityOfferingId, ContextInfo context) {
044 List<SeatPoolDefinitionInfo> updatedSeatPoolFinalList = new ArrayList<SeatPoolDefinitionInfo>();
045 List <String> currentSeatPoolIds = getExistingSeatPoolIds(activityOfferingId, context);
046
047 try {
048 if (updatedSeatPoolList != null) {
049 Collections.sort(updatedSeatPoolList, new Comparator<SeatPoolDefinitionInfo>() {
050 @Override
051 public int compare(SeatPoolDefinitionInfo sp1, SeatPoolDefinitionInfo sp2) {
052 return sp1.getProcessingPriority().compareTo(sp2.getProcessingPriority());
053 }
054 });
055
056 int seatPoolPriority = 1;
057 for (SeatPoolDefinitionInfo seatPool : updatedSeatPoolList) {
058 seatPool.setProcessingPriority(seatPoolPriority);
059 if(seatPool.getId()!=null && !seatPool.getId().isEmpty() && currentSeatPoolIds.contains(seatPool.getId())) {
060 //update SP
061 SeatPoolDefinitionInfo seatPoolUpdated = getCourseOfferingService().updateSeatPoolDefinition(seatPool.getId(), seatPool, context);
062 updatedSeatPoolFinalList.add(seatPoolUpdated);
063 currentSeatPoolIds.remove(seatPool.getId());
064 } else {
065 //create new SP
066 seatPool.setTypeKey(LuiServiceConstants.SEATPOOL_LUI_CAPACITY_TYPE_KEY);
067 seatPool.setStateKey(LuiServiceConstants.LUI_CAPACITY_ACTIVE_STATE_KEY);
068 SeatPoolDefinitionInfo seatPoolCreated = getCourseOfferingService().createSeatPoolDefinition(seatPool,context);
069 getCourseOfferingService().addSeatPoolDefinitionToActivityOffering(seatPoolCreated.getId(),activityOfferingId, context);
070 updatedSeatPoolFinalList.add(seatPoolCreated);
071
072 }
073 seatPoolPriority++;
074 }
075
076 //delete SPs that have been removed by the user
077 if (currentSeatPoolIds != null && currentSeatPoolIds.size() > 0){
078 for(String seatPoolId: currentSeatPoolIds){
079 getCourseOfferingService().deleteSeatPoolDefinition(seatPoolId, context);
080 }
081 }
082
083 }
084 } catch (Exception e) {
085 throw new RuntimeException(e);
086 }
087 }
088
089 private List<String> getExistingSeatPoolIds(String activityOfferingId, ContextInfo context) {
090 try {
091 List<SeatPoolDefinitionInfo> seatPoolList = getCourseOfferingService().getSeatPoolDefinitionsForActivityOffering(activityOfferingId, context);
092 List<String> seatPoolIds = new ArrayList<String>();
093
094 if(seatPoolList != null && !seatPoolList.isEmpty()){
095 for(SeatPoolDefinitionInfo seatPool : seatPoolList){
096 seatPoolIds.add(seatPool.getId());
097 }
098 }
099
100 return seatPoolIds;
101 } catch (Exception e) {
102 throw new RuntimeException(e);
103 }
104 }
105
106 private CourseOfferingService getCourseOfferingService() {
107 if (courseOfferingService == null) {
108 courseOfferingService = (CourseOfferingService) GlobalResourceLoader.getService(new QName(CourseOfferingServiceConstants.NAMESPACE,
109 CourseOfferingServiceConstants.SERVICE_NAME_LOCAL_PART));
110 }
111 return courseOfferingService;
112 }
113
114 }