fr.acxio.tools.agia.ftp.FTPUploadTasklet.java Source code

Java tutorial

Introduction

Here is the source code for fr.acxio.tools.agia.ftp.FTPUploadTasklet.java

Source

package fr.acxio.tools.agia.ftp;

/*
 * Copyright 2014 Acxio
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;

import org.apache.commons.net.ftp.FTPClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.repeat.RepeatStatus;

public class FTPUploadTasklet extends FTPFileOperationTasklet {

    private static final Logger LOGGER = LoggerFactory.getLogger(FTPUploadTasklet.class);

    private String remoteBaseDir; // Factory ?
    private String regexFilename;
    private String localBaseDir; // Factory ?

    public void setRemoteBaseDir(String sRemoteBaseDir) {
        remoteBaseDir = sRemoteBaseDir;
    }

    public void setRegexFilename(String sRegexFilename) {
        regexFilename = sRegexFilename;
    }

    public void setLocalBaseDir(String sLocalBaseDir) {
        localBaseDir = sLocalBaseDir;
    }

    @Override
    public RepeatStatus execute(StepContribution sContribution, ChunkContext sChunkContext) throws Exception {
        FTPClient aClient = ftpClientFactory.getFtpClient();

        RegexFilenameFilter aFilter = new RegexFilenameFilter();
        aFilter.setRegex(regexFilename);

        try {
            File aLocalDir = new File(localBaseDir);

            if (LOGGER.isInfoEnabled()) {
                LOGGER.info("Listing : {} ({}) for upload to [{}]", localBaseDir, regexFilename,
                        aClient.getRemoteAddress().toString());
            }

            File[] aLocalFiles = aLocalDir.listFiles(aFilter);

            if (LOGGER.isInfoEnabled()) {
                LOGGER.info("  {} file(s) found", aLocalFiles.length);
            }

            for (File aLocalFile : aLocalFiles) {

                if (sContribution != null) {
                    sContribution.incrementReadCount();
                }

                URI aRemoteFile = new URI(remoteBaseDir).resolve(aLocalFile.getName());
                InputStream aInputStream;
                aInputStream = new FileInputStream(aLocalFile);
                try {

                    if (LOGGER.isInfoEnabled()) {
                        LOGGER.info(" Uploading : {} => {}", aLocalFile.getAbsolutePath(),
                                aRemoteFile.toASCIIString());
                    }

                    aClient.storeFile(aRemoteFile.toASCIIString(), aInputStream);

                    if (sContribution != null) {
                        sContribution.incrementWriteCount(1);
                    }
                } finally {
                    aInputStream.close();
                }
            }
        } finally {
            aClient.logout();
            aClient.disconnect();
        }

        return RepeatStatus.FINISHED;
    }
}