001    package org.kuali.student.enrollment.class2.appointment.keyvalue;
002    
003    import org.apache.log4j.Logger;
004    import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
005    import org.kuali.rice.core.api.util.ConcreteKeyValue;
006    import org.kuali.rice.core.api.util.KeyValue;
007    import org.kuali.rice.krad.uif.control.UifKeyValuesFinderBase;
008    import org.kuali.rice.krad.uif.view.ViewModel;
009    import org.kuali.student.r2.core.acal.dto.KeyDateInfo;
010    import org.kuali.student.r2.core.acal.dto.TermInfo;
011    import org.kuali.student.r2.core.acal.service.AcademicCalendarService;
012    import org.kuali.student.enrollment.class2.appointment.form.RegistrationWindowsManagementForm;
013    import org.kuali.student.mock.utilities.TestHelper;
014    import org.kuali.student.r2.common.dto.ContextInfo;
015    import org.kuali.student.r2.core.constants.AcademicCalendarServiceConstants;
016    import org.kuali.student.r2.core.class1.type.dto.TypeTypeRelationInfo;
017    import org.kuali.student.r2.core.class1.type.service.TypeService;
018    import org.kuali.student.r2.core.constants.AtpServiceConstants;
019    import org.kuali.student.r2.core.constants.TypeServiceConstants;
020    
021    import javax.xml.namespace.QName;
022    import java.io.Serializable;
023    import java.util.ArrayList;
024    import java.util.List;
025    
026    public class PeriodForAppWindowKeyDatesFinder extends UifKeyValuesFinderBase implements Serializable {
027        private static final long serialVersionUID = 1L;
028    
029        private static final Logger LOG = Logger.getLogger(PeriodForAppWindowKeyDatesFinder.class);
030    
031        private transient AcademicCalendarService acalService;
032        private transient TypeService typeService;
033    
034        @Override
035        public List<KeyValue> getKeyValues(ViewModel model) {
036            List<KeyValue> keyValues = new ArrayList<KeyValue>();
037            RegistrationWindowsManagementForm form = (RegistrationWindowsManagementForm)model;
038    
039            ContextInfo context = TestHelper.getContext1();
040            try {
041                TermInfo term = form.getTermInfo();
042                if (term.getId() != null && !term.getId().isEmpty()) {
043                    List<KeyDateInfo> keyDateInfoList = getAcalService().getKeyDatesForTerm(term.getId(), context);
044                    if (!keyDateInfoList.isEmpty())
045                        keyValues.add(new ConcreteKeyValue("", "Select Period..."));
046                    try{
047                        List<TypeTypeRelationInfo> relations = getTypeService().getTypeTypeRelationsByOwnerAndType("kuali.milestone.type.group.appt.regperiods","kuali.type.type.relation.type.group",context);
048                        for (KeyDateInfo keyDateInfo : keyDateInfoList) {
049                            for (TypeTypeRelationInfo relationInfo : relations) {
050                                String relatedTypeKey = relationInfo.getRelatedTypeKey();
051                                if (keyDateInfo.getTypeKey().equals(relatedTypeKey) &&
052                                       (AtpServiceConstants.ATP_OFFICIAL_STATE_KEY.equals(keyDateInfo.getStateKey()) ||
053                                        AtpServiceConstants.ATP_OFFICIAL_STATE_KEY.equals(keyDateInfo.getStateKey()))) {
054                                    keyValues.add(new ConcreteKeyValue(keyDateInfo.getId(), keyDateInfo.getName()));
055                                    break;
056                                }
057                            }
058                        }
059    
060                    }catch (Exception e){
061                        LOG.error("Error getting periods", e);
062                    }
063    
064                }
065            }catch (Exception e){
066                LOG.error("Error getting periods", e);
067            }
068            return keyValues;
069        }
070    
071        public AcademicCalendarService getAcalService() {
072            if(acalService == null) {
073                acalService = (AcademicCalendarService) GlobalResourceLoader.getService(new QName(AcademicCalendarServiceConstants.NAMESPACE, AcademicCalendarServiceConstants.SERVICE_NAME_LOCAL_PART));
074            }
075            return this.acalService;
076        }
077    
078        public TypeService getTypeService() {
079            if(typeService == null) {
080                typeService = (TypeService) GlobalResourceLoader.getService(new QName(TypeServiceConstants.NAMESPACE, TypeServiceConstants.SERVICE_NAME_LOCAL_PART));
081            }
082            return this.typeService;
083        }
084    
085    }