org.kuali.kfs.gl.service.impl.OriginEntryGroupServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kfs.gl.service.impl.OriginEntryGroupServiceImpl.java

Source

/*
 * 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.gl.service.impl;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.gl.GeneralLedgerConstants;
import org.kuali.kfs.gl.service.OriginEntryGroupService;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.krad.service.KualiModuleService;
import org.springframework.transaction.annotation.Transactional;

/**
 * @see org.kuali.kfs.gl.service.OriginEntryGroupService
 */
@Transactional
public class OriginEntryGroupServiceImpl implements OriginEntryGroupService {
    private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger
            .getLogger(OriginEntryGroupServiceImpl.class);

    protected DateTimeService dateTimeService;
    protected String batchFileDirectoryName;
    protected KualiModuleService kualiModuleService;
    protected String nightlyOutFileName;
    protected String backupFileName;

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#getNewestScrubberErrorFileName()
     */
    public String getNewestScrubberErrorFileName() {
        File newestFile = null;

        File[] files = null;
        // can add filter here: listFiles(filter); -- check out originEntryTestBase from Jeff
        if (new File(batchFileDirectoryName) == null) {
            return null;
        }
        files = new File(batchFileDirectoryName).listFiles(new ScrubberErrorFilenameFilter());
        List<File> fileList = Arrays.asList(files);
        if (fileList.size() > 0) {
            for (File eachFile : fileList) {
                if (newestFile == null) {
                    newestFile = eachFile;
                } else {
                    if (newestFile.lastModified() < eachFile.lastModified()) {
                        newestFile = eachFile;
                    }
                }
            }
        } else {
            return null;
        }

        return newestFile.getName();
    }

    /**
     * Retrieves all groups to be created today, and creates backup group versions of them
     * 
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#createBackupGroup()
     */
    public void createBackupGroup() {
        LOG.debug("createBackupGroup() started");
        // check file from nightly out
        File nightlyOutFile = new File(batchFileDirectoryName + File.separator + nightlyOutFileName);
        if (!nightlyOutFile.exists()) {
            LOG.warn("nightlyOutFile doesn't exist :" + nightlyOutFileName);
        }

        String backupFile = batchFileDirectoryName + File.separator + backupFileName
                + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
        PrintStream backupPs = null;
        try {
            backupPs = new PrintStream(backupFile);
        } catch (FileNotFoundException e) {
            throw new RuntimeException("backupFile doesn't exist " + backupFile);
        }

        // get all done files from originEntry Directory
        File[] doneFileList = new File(batchFileDirectoryName).listFiles(new DoneFileFilter());
        // build output file with doneFileList and print stream
        buildBackupFileOutput(doneFileList, backupPs);
        backupPs.close();
    }

    /*
     * buildBackupFileOuput with doneFileList and PrintStream
     */
    protected void buildBackupFileOutput(File[] doneFileList, PrintStream ps) {
        BufferedReader inputFileReader = null;

        for (File doneFile : doneFileList) {
            // get data file with done file
            File dataFile = getDataFile(doneFile);
            if (dataFile != null) {
                try {
                    inputFileReader = new BufferedReader(new FileReader(dataFile.getPath()));
                    String line = null;
                    while ((line = inputFileReader.readLine()) != null) {
                        try {
                            ps.printf("%s\n", line);
                        } catch (Exception e) {
                            throw new IOException(e.toString());
                        }
                    }
                    inputFileReader.close();
                    inputFileReader = null;

                } catch (Exception e) {
                    throw new RuntimeException(e.toString());
                }

                doneFile.delete();
                postProcessDataFile(dataFile);

            }
        }
    }

    protected void postProcessDataFile(File dataFile) {
        // do nothing.  A hook for institution extension.
    }

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#createGroup(java.lang.String)
     */
    public File createGroup(String fileName) {
        return new File(batchFileDirectoryName + File.separator + fileName);
    }

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#getGroupExists(java.lang.String)
     */
    public boolean getGroupExists(String groupId) {

        File file = new File(batchFileDirectoryName + File.separator + groupId);
        if (file == null) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#getAllFileInBatchDirectory()
     */
    public File[] getAllFileInBatchDirectory() {
        File[] returnFiles = null;
        if (new File(batchFileDirectoryName) != null) {
            returnFiles = new File(batchFileDirectoryName).listFiles(new DateAndDoneFileFilter());
        }
        return returnFiles;
    }

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#deleteFile(java.lang.String)
     */
    public void deleteFile(String fileNameWithPath) {
        File file = new File(fileNameWithPath);
        if (file.exists()) {
            file.delete();
        }
    }

    /**
     * @see org.kuali.kfs.gl.service.OriginEntryGroupService#getLaborFileWithFileName(java.lang.String)
     */
    public File getFileWithFileName(String fileName) {
        return new File(batchFileDirectoryName + File.separator + fileName);
    }

    protected class ScrubberErrorFilenameFilter implements FilenameFilter {
        /**
         * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
         */
        public boolean accept(File dir, String name) {
            return name.contains(GeneralLedgerConstants.BatchFileSystem.SCRUBBER_ERROR_PREFIX);
        }
    }

    protected class DateAndDoneFileFilter implements FilenameFilter {
        /**
         * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
         */
        public boolean accept(File dir, String name) {
            return name.contains(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION)
                    || name.contains(GeneralLedgerConstants.BatchFileSystem.EXTENSION);
        }
    }

    protected class DoneFileFilter implements FilenameFilter {
        /**
         * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
         */
        public boolean accept(File dir, String name) {
            return name.contains(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION);
        }
    }

    protected File getDataFile(File doneFile) {
        String doneFileAbsPath = doneFile.getAbsolutePath();
        if (!doneFileAbsPath.endsWith(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION)) {
            throw new IllegalArgumentException(
                    "Done file name must end with " + GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION);
        }
        String dataFileAbsPath = StringUtils.removeEnd(doneFileAbsPath,
                GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION)
                + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
        File dataFile = new File(dataFileAbsPath);
        if (!dataFile.exists() || !dataFile.canRead()) {
            LOG.error("Cannot find/read data file " + dataFileAbsPath);
            return null;
        }
        return dataFile;
    }

    public void setBatchFileDirectoryName(String batchFileDirectoryName) {
        this.batchFileDirectoryName = batchFileDirectoryName;
    }

    public void setKualiModuleService(KualiModuleService kualiModuleService) {
        this.kualiModuleService = kualiModuleService;
    }

    public void setDateTimeService(DateTimeService dts) {
        dateTimeService = dts;
    }

    public void setNightlyOutFileName(String nightlyOutFileName) {
        this.nightlyOutFileName = nightlyOutFileName;
    }

    public void setBackupFileName(String backupFileName) {
        this.backupFileName = backupFileName;
    }

    protected DateTimeService getDateTimeService() {
        return dateTimeService;
    }

    protected String getBatchFileDirectoryName() {
        return batchFileDirectoryName;
    }

    protected KualiModuleService getKualiModuleService() {
        return kualiModuleService;
    }

}