001    package org.kuali.student.enrollment.class2.acal.service.assembler;
002    
003    import java.util.ArrayList;
004    import org.kuali.student.enrollment.acal.dto.HolidayCalendarInfo;
005    import org.kuali.student.r2.common.assembler.AssemblyException;
006    import org.kuali.student.r2.common.assembler.DTOAssembler;
007    import org.kuali.student.r2.common.dto.AttributeInfo;
008    import org.kuali.student.r2.common.dto.ContextInfo;
009    import org.kuali.student.r2.core.constants.AtpServiceConstants;
010    import org.kuali.student.r2.core.atp.dto.AtpInfo;
011    
012    public class HolidayCalendarAssembler implements DTOAssembler<HolidayCalendarInfo, AtpInfo> {
013    
014        @Override
015        public HolidayCalendarInfo assemble(AtpInfo atp, ContextInfo context) throws AssemblyException {
016            if (atp != null) {
017                HolidayCalendarInfo holidayCalendarInfo = new HolidayCalendarInfo();
018                holidayCalendarInfo.setId(atp.getId());
019                holidayCalendarInfo.setName(atp.getName());
020                holidayCalendarInfo.setAdminOrgId(atp.getAdminOrgId());
021                holidayCalendarInfo.setDescr(atp.getDescr());
022                holidayCalendarInfo.setStartDate(atp.getStartDate());
023                holidayCalendarInfo.setEndDate(atp.getEndDate());
024                holidayCalendarInfo.setTypeKey(atp.getTypeKey());
025                holidayCalendarInfo.setStateKey(atp.getStateKey());
026                holidayCalendarInfo.setMeta(atp.getMeta());
027                for (AttributeInfo attr : atp.getAttributes()) {
028                    if (attr.getKey().equals(AtpServiceConstants.CAMPUS_LOCATION)) {
029                        holidayCalendarInfo.getCampusKeys().add(attr.getValue());
030                    } else {
031                        holidayCalendarInfo.getAttributes().add(attr);
032                    }
033                }
034                return holidayCalendarInfo;
035            } else {
036                return null;
037            }
038        }
039    
040        @Override
041        public AtpInfo disassemble(HolidayCalendarInfo holidayCalendarInfo, ContextInfo context) throws AssemblyException {
042            if (holidayCalendarInfo != null) {
043                AtpInfo atp = new AtpInfo();
044                atp.setId(holidayCalendarInfo.getId());
045                atp.setName(holidayCalendarInfo.getName());
046                atp.setAdminOrgId(holidayCalendarInfo.getAdminOrgId());
047                atp.setDescr(holidayCalendarInfo.getDescr());
048                atp.setStartDate(holidayCalendarInfo.getStartDate());
049                atp.setEndDate(holidayCalendarInfo.getEndDate());
050                atp.setTypeKey(AtpServiceConstants.ATP_HOLIDAY_CALENDAR_TYPE_KEY);
051                atp.setStateKey(holidayCalendarInfo.getStateKey());
052                atp.setMeta(holidayCalendarInfo.getMeta());
053                atp.getAttributes().addAll(holidayCalendarInfo.getAttributes());
054                // TODO: fix this essentially flawed mechanism -- that happens because of the assembler structure
055    //            it really should take in as a paraemter the existing ATP, if there is one
056    //            and find/match the campus keys there and update the set of attributes not replacing them
057    //            doing it this way we lose the original id of attribute on update 
058                // the making it hard (wrong?) to store it later
059                for (String campusKey : holidayCalendarInfo.getCampusKeys()) {
060                    AttributeInfo attr = new AttributeInfo();
061                    attr.setKey(AtpServiceConstants.CAMPUS_LOCATION);
062                    attr.setValue(campusKey);
063                    atp.getAttributes().add(attr);
064                }
065                return atp;
066            }
067    
068            return null;
069        }
070    }