001    /*
002     * Copyright 2007-2010 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.rice.kns.service;
017    
018    import java.util.Date;
019    import java.util.List;
020    import java.util.Map;
021    
022    import org.kuali.rice.kns.bo.InactivateableFromTo;
023    
024    /**
025     * Provides methods for retrieval of business objects implementing InactivateableFromTo and needing effective dating logic
026     * 
027     * @see org.kuali.rice.kns.bo.InactivateableFromTo
028     */
029    public interface InactivateableFromToService {
030    
031            /**
032             * Performs search on given class and criteria and returns only results that active based on the active to/from dates and the current
033             * date
034             * 
035             * @param clazz
036             *            - InactivateableFromTo class to search
037             * @param fieldValues
038             *            - Search key values
039             * @return List of InactivateableFromTo instances that match search criteria and are active
040             */
041            public List<InactivateableFromTo> findMatchingActive(Class<? extends InactivateableFromTo> clazz, Map fieldValues);
042    
043            /**
044             * Performs search on given class and criteria and returns only results that active based on the active to/from dates and the given
045             * active as of date
046             * 
047             * @param clazz
048             *            - InactivateableFromTo class to search
049             * @param fieldValues
050             *            - Search key values
051             * @param activeAsOfDate
052             *            - Date to compare to for determining active status
053             * @return List of InactivateableFromTo instances that match search criteria and are active as of the given date
054             */
055            public List<InactivateableFromTo> findMatchingActiveAsOfDate(Class<? extends InactivateableFromTo> clazz,
056                            Map fieldValues, Date activeAsOfDate);
057    
058            /**
059             * Removes instances from the given list that are inactive based on the current date
060             * 
061             * @param filterList
062             *            - List of InactivateableFromTo instances to filter
063             * @return List of InactivateableFromTo instances from the given list that are active as of the current date
064             */
065            public List<InactivateableFromTo> filterOutNonActive(List<InactivateableFromTo> filterList);
066    
067            /**
068             * Removes instances from the given list that are inactive based on the given date
069             * 
070             * @param filterList
071             *            - List of InactivateableFromTo instances to filter
072             * @param activeAsOfDate
073             *            - Date to compare to for determining active status
074             * @return List of InactivateableFromTo instances from the given list that are active as of the given date
075             */
076            public List<InactivateableFromTo> filterOutNonActive(List<InactivateableFromTo> filterList, Date activeAsOfDate);
077    
078            /**
079             * Performs search on given class and criteria and returns that are active and most current. That is if two records are active the more
080             * current one will be the one with a later active begin date
081             * 
082             * @param clazz
083             *            - InactivateableFromTo class to search
084             * @param fieldValues
085             *            - Search key values
086             * @return List of InactivateableFromTo instances that match search criteria and are current
087             */
088            public List<InactivateableFromTo> findMatchingCurrent(Class<? extends InactivateableFromTo> clazz,
089                            Map fieldValues);
090    
091            /**
092             * Performs search on given class and criteria and returns that are active and most current based on the given date. That is if two
093             * records are active the more current one will be the one with a later active begin date
094             * 
095             * @param clazz
096             *            - InactivateableFromTo class to search
097             * @param fieldValues
098             *            - Search key values
099             * @param currentAsOfDate
100             *            - Date to compare to for determining active and current status
101             * @return List of InactivateableFromTo instances that match search criteria and are current
102             */
103            public List<InactivateableFromTo> findMatchingCurrent(Class<? extends InactivateableFromTo> clazz,
104                            Map fieldValues, Date currentAsOfDate);
105    
106            /**
107             * Removes instances from the given list that are not current based on the current date
108             * 
109             * @param filterList
110             *            - List of InactivateableFromTo instances to filter
111             * @return List of InactivateableFromTo instances from the given list that are current as of the current date
112             */
113            public List<InactivateableFromTo> filterOutNonCurrent(List<InactivateableFromTo> filterList);
114    
115            /**
116             * Removes instances from the given list that are not current based on the given date
117             * 
118             * @param filterList
119             *            - List of InactivateableFromTo instances to filter
120             * @param currentAsOfDate
121             *            - Date to compare to for determining active and current status
122             * @return List of InactivateableFromTo instances from the given list that are current as of the given date
123             */
124            public List<InactivateableFromTo> filterOutNonCurrent(List<InactivateableFromTo> filterList, Date currentAsOfDate);
125    
126    }