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.gl.batch;
017
018 import java.sql.Date;
019 import java.text.DateFormat;
020 import java.text.ParseException;
021 import java.text.SimpleDateFormat;
022 import java.util.HashMap;
023 import java.util.Map;
024
025 import org.kuali.kfs.gl.GeneralLedgerConstants;
026 import org.kuali.kfs.gl.batch.service.YearEndService;
027 import org.kuali.kfs.gl.service.OriginEntryGroupService;
028 import org.kuali.kfs.sys.batch.AbstractWrappedBatchStep;
029 import org.kuali.kfs.sys.batch.service.WrappedBatchExecutorService.CustomBatchExecutor;
030 import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
031 import org.springframework.util.StopWatch;
032
033 /**
034 * The step that runs the year end nominal activity closing process.
035 */
036 public class NominalActivityClosingStep extends AbstractWrappedBatchStep {
037 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(NominalActivityClosingStep.class);
038 private YearEndService yearEndService;
039
040 public static final String TRANSACTION_DATE_FORMAT_STRING = "yyyy-MM-dd";
041
042 /**
043 * @see org.kuali.kfs.sys.batch.AbstractWrappedBatchStep#getCustomBatchExecutor()
044 */
045 @Override
046 protected CustomBatchExecutor getCustomBatchExecutor() {
047 return new CustomBatchExecutor() {
048 /**
049 * Runs the nominal activity process, including retrieving system parameters for the process, creating the origin entry group
050 * for output origin entries, and generating reports based on the run
051 * @return true if the step completed successfully, false if otherwise
052 * @see org.kuali.kfs.sys.batch.Step#performStep()
053 */
054 public boolean execute() {
055 StopWatch stopWatch = new StopWatch();
056 stopWatch.start("NominalActivityClosingStep");
057
058 Date varTransactionDate;
059 try {
060 DateFormat transactionDateFormat = new SimpleDateFormat(TRANSACTION_DATE_FORMAT_STRING);
061 varTransactionDate = new Date(transactionDateFormat.parse(getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_TRANSACTION_DATE_PARM)).getTime());
062 }
063 catch (ParseException e) {
064 LOG.error("forwardBalances() Unable to parse transaction date", e);
065 throw new IllegalArgumentException("Unable to parse transaction date");
066 }
067 Integer varFiscalYear = new Integer(getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_FISCAL_YEAR_PARM));
068 String nominalClosingFileName = GeneralLedgerConstants.BatchFileSystem.CLOSE_NOMINAL_ACTIVITY_FILE + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
069
070 Map nominalClosingJobParameters = new HashMap();
071 nominalClosingJobParameters.put(GeneralLedgerConstants.ColumnNames.UNIV_DT, varTransactionDate);
072 nominalClosingJobParameters.put(GeneralLedgerConstants.ColumnNames.UNIVERSITY_FISCAL_YEAR, varFiscalYear);
073 Map<String, Integer> nominalActivityClosingCounts = new HashMap<String, Integer>();
074
075 yearEndService.closeNominalActivity(nominalClosingFileName, nominalClosingJobParameters);
076 stopWatch.stop();
077 LOG.info("NominalActivityClosingStep took " + (stopWatch.getTotalTimeSeconds() / 60.0) + " minutes to complete");
078
079 return true;
080 }
081 };
082 }
083
084 /**
085 * Sets the yearEndService attribute, allowing the injection of an implementation of the service
086 *
087 * @param yearEndService the year end service to set
088 * @see org.kuali.module.gl.service.YearEndService
089 */
090 public void setYearEndService(YearEndService yearEndService) {
091 this.yearEndService = yearEndService;
092 }
093
094 /**
095 * This method returns the YearEndService object associated with this step
096 *
097 * @return the yearEndService this step is using to complete its process
098 * @see org.kuali.module.gl.service.YearEndSErvice
099 */
100 public YearEndService getYearEndService() {
101 return yearEndService;
102 }
103 }