001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.ld.businessobject.inquiry;
017    
018    import java.text.SimpleDateFormat;
019    import java.util.ArrayList;
020    import java.util.Calendar;
021    import java.util.Date;
022    import java.util.HashMap;
023    import java.util.List;
024    import java.util.Map;
025    import java.util.Properties;
026    
027    import org.kuali.kfs.module.ld.LaborPropertyConstants;
028    import org.kuali.kfs.module.ld.businessobject.PositionData;
029    import org.kuali.kfs.sys.KFSConstants;
030    import org.kuali.kfs.sys.KFSPropertyConstants;
031    import org.kuali.rice.kns.bo.BusinessObject;
032    
033    /**
034     * This class is used to generate the URL for the user-defined attributes for the Position Inquiry screen. It is entended the
035     * KualiInquirableImpl class, so it covers both the default implementation and customized implemetnation.
036     */
037    public class PositionDataDetailsInquirableImpl extends AbstractLaborInquirableImpl {
038    
039        /**
040         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#addMoreParameters(java.util.Properties,
041         *      java.lang.String)
042         */
043        @Override
044        protected void addMoreParameters(Properties parameter, String attributeName) {
045            parameter.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.START_METHOD);
046        }
047    
048        /**
049         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#buildUserDefinedAttributeKeyList()
050         */
051        protected List buildUserDefinedAttributeKeyList() {
052            List keys = new ArrayList();
053            keys.add(KFSPropertyConstants.POSITION_NUMBER);
054            keys.add(LaborPropertyConstants.EFFECTIVE_DATE);
055            return keys;
056        }
057    
058        /**
059         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getAttributeName(java.lang.String)
060         */
061        protected String getAttributeName(String attributeName) {
062            return KFSPropertyConstants.POSITION_NUMBER;
063        }
064    
065        /**
066         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getBaseUrl()
067         */
068        protected String getBaseUrl() {
069            return KFSConstants.INQUIRY_ACTION;
070        }
071    
072        /**
073         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getInquiryBusinessObjectClass(java.lang.String)
074         */
075        protected Class getInquiryBusinessObjectClass(String attributeName) {
076            return PositionData.class;
077        }
078    
079        /**
080         * Returns the position value with the greatest effective date
081         * 
082         * @see org.kuali.rice.kns.inquiry.Inquirable#getBusinessObject(java.util.Map)
083         */
084        @Override
085        public BusinessObject getBusinessObject(Map fieldValues) {
086            List<PositionData> positionList = new ArrayList<PositionData>(getLookupService().findCollectionBySearch(PositionData.class, fieldValues));
087            SimpleDateFormat formatter = new SimpleDateFormat("MMddyyyy");
088    
089            Date today = Calendar.getInstance().getTime();
090            Date maxEffectiveDate = null;
091    
092            PositionData lookupValue = null;
093            for (PositionData position : positionList) {
094                Date effectiveDate = position.getEffectiveDate();
095                if (effectiveDate.compareTo(today) <= 0 && (maxEffectiveDate == null || effectiveDate.compareTo(maxEffectiveDate) > 0)) {
096                    maxEffectiveDate = effectiveDate;
097                    lookupValue = position;
098                }
099            }
100    
101            return lookupValue;
102        }
103    
104        /**
105         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getKeyName(java.lang.String)
106         */
107        protected String getKeyName(String keyName) {
108            return keyName;
109        }
110    
111        /**
112         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getKeyValue(java.lang.String, java.lang.Object)
113         */
114        protected Object getKeyValue(String keyName, Object keyValue) {
115            return keyValue;
116        }
117    
118        /**
119         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getLookupableImplAttributeName()
120         */
121        protected String getLookupableImplAttributeName() {
122            return null;
123        }
124    
125        /**
126         * @see org.kuali.kfs.module.ld.businessobject.inquiry.AbstractLaborInquirableImpl#getUserDefinedAttributeMap()
127         */
128        protected Map getUserDefinedAttributeMap() {
129            Map userDefinedAttributeMap = new HashMap();
130            userDefinedAttributeMap.put(KFSPropertyConstants.POSITION_NUMBER, KFSPropertyConstants.POSITION_NUMBER);
131    
132            return userDefinedAttributeMap;
133        }
134    }