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.sys.batch.dataaccess;
017
018 import java.util.Collection;
019 import java.util.Set;
020
021 import org.apache.ojb.broker.query.Criteria;
022 import org.kuali.rice.kns.bo.PersistableBusinessObject;
023
024 /**
025 * Defines methods that must be implemented for a DAO making an entity for a new fiscal year
026 */
027 public interface FiscalYearMaker {
028
029 /**
030 * Does any necessary changes on the base record (for base fiscal year) for storing as a record of the new fiscal year. The
031 * fiscal year field should be updated an minimum.
032 *
033 * @param baseFiscalYear fiscal year of the base record
034 * @param currentRecord business object of type (@see org.kuali.kfs.coa.dataaccess.FiscalYearMakerDao.getBusinessObjectClass())
035 * populated with the current year record data
036 * @return business object of type (@see org.kuali.kfs.coa.dataaccess.FiscalYearMakerDao.getBusinessObjectClass()) populated
037 * with data for the new fiscal year record
038 */
039 public void changeForNewYear(Integer baseFiscalYear, PersistableBusinessObject currentRecord);
040
041 /**
042 * Creates OJB Criteria object that will be used to query for records to copy
043 *
044 * @param baseFiscalYear fiscal year of the base record
045 * @return OJB criteria object
046 * @see org.apache.ojb.broker.query.Criteria
047 */
048 public Criteria createSelectionCriteria(Integer baseFiscalYear);
049
050 /**
051 * Creates OJB Criteria object that will be used to delete records in the target year
052 *
053 * @param baseFiscalYear fiscal year of the base record
054 * @return OJB criteria object
055 * @see org.apache.ojb.broker.query.Criteria
056 */
057 public Criteria createDeleteCriteria(Integer baseFiscalYear);
058
059 /**
060 * Hook to do custom new population for a business object
061 *
062 * @param baseFiscalYear fiscal year of the base record
063 * @param firstCopyYear boolean that indicates whether this is the first year being copied (useful for two year copies)
064 */
065 public void performCustomProcessing(Integer baseFiscalYear, boolean firstCopyYear);
066
067 /**
068 * Indicator for determining whether we should do normal FYM process and call custom hook or only custom
069 *
070 * @return true if only custom processing should be done, false if both normal FYM process and custom should be performed
071 */
072 public boolean doCustomProcessingOnly();
073
074 /**
075 * Returns the class for the business object the fiscal year maker implementation operates on
076 *
077 * @return business object class
078 */
079 public Class<? extends PersistableBusinessObject> getBusinessObjectClass();
080
081 /**
082 * Returns Set of Class objects that are parents to this business object. Parents will be copied before this object to satisfy
083 * referential integrity in the database
084 *
085 * @return Set of Class objects that extend PersistableBusinessObject
086 */
087 public Set<Class<? extends PersistableBusinessObject>> getParentClasses();
088
089 /**
090 * Indicates whether records should be created for two fiscal years out as opposed to just one
091 *
092 * @return true if two years should be copied, false otherwise (only the default one)
093 */
094 public boolean isTwoYearCopy();
095
096 /**
097 * Indicates whether records of this type can be cleared for target year (if Override parameter is set to true). Clearing
098 * records for some tables causes RI issues therefore they cannot be safely deleted once created
099 *
100 * @return true if target year data can be cleared, false if not
101 */
102 public boolean isAllowOverrideTargetYear();
103
104 }