/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.batch; import java.io.File; import java.io.FileFilter; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.PrefixFileFilter; import org.apache.commons.io.filefilter.SuffixFileFilter; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.service.ReportAggregatorService; import org.kuali.rice.core.api.datetime.DateTimeService; public class ReportAggregationStep extends AbstractStep { protected String outputFilePath; protected String outputFilePrefix; protected String outputFileSuffix; protected ReportAggregatorService reportAggregatorService; protected String inputFilePath; protected String inputFilePrefix; protected String inputFileSuffix; public boolean execute(String jobName, Date jobRunDate) throws InterruptedException { File outputFile = new File(generateOutputFileName()); List<File> inputFiles = retrieveFilesToAggregate(); reportAggregatorService.aggregateReports(outputFile, inputFiles); return true; } protected String generateOutputFileName() { DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class); Date now = dateTimeService.getCurrentDate(); return outputFilePath + File.separator + outputFilePrefix + dateTimeService.toDateTimeStringForFilename(now) + outputFileSuffix; } protected List<File> retrieveFilesToAggregate() { File inputDirectory = new File(inputFilePath); if (!inputDirectory.exists() || !inputDirectory.isDirectory()) { throw new RuntimeException(inputFilePath + " does not exist or is not a directory."); } FileFilter filter = FileFilterUtils.andFileFilter( new PrefixFileFilter(inputFilePrefix), new SuffixFileFilter(inputFileSuffix)); List<File> fileList = Arrays.asList(inputDirectory.listFiles(filter)); Collections.sort(fileList); return fileList; } /** * Sets the outputFilePath attribute value. * @param outputFilePath The outputFilePath to set. */ public void setOutputFilePath(String outputFilePath) { this.outputFilePath = outputFilePath; } /** * Sets the outputFilePrefix attribute value. * @param outputFilePrefix The outputFilePrefix to set. */ public void setOutputFilePrefix(String outputFilePrefix) { this.outputFilePrefix = outputFilePrefix; } /** * Sets the outputFileSuffix attribute value. * @param outputFileSuffix The outputFileSuffix to set. */ public void setOutputFileSuffix(String outputFileSuffix) { this.outputFileSuffix = outputFileSuffix; } /** * Sets the reportAggregatorService attribute value. * @param reportAggregatorService The reportAggregatorService to set. */ public void setReportAggregatorService(ReportAggregatorService reportAggregatorService) { this.reportAggregatorService = reportAggregatorService; } /** * Sets the inputFilePath attribute value. * @param inputFilePath The inputFilePath to set. */ public void setInputFilePath(String inputFilePath) { this.inputFilePath = inputFilePath; } /** * Sets the inputFilePrefix attribute value. * @param inputFilePrefix The inputFilePrefix to set. */ public void setInputFilePrefix(String inputFilePrefix) { this.inputFilePrefix = inputFilePrefix; } /** * Sets the inputFileSuffix attribute value. * @param inputFileSuffix The inputFileSuffix to set. */ public void setInputFileSuffix(String inputFileSuffix) { this.inputFileSuffix = inputFileSuffix; } }