org.emonocot.harvest.common.MultiResourceDeletingTasklet.java Source code

Java tutorial

Introduction

Here is the source code for org.emonocot.harvest.common.MultiResourceDeletingTasklet.java

Source

/*
 * This is eMonocot, a global online biodiversity information resource.
 *
 * Copyright  20112015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford
 *
 * eMonocot 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.
 *
 * eMonocot 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.
 *
 * The complete text of the GNU Affero General Public License is in the source repository as the file
 * COPYING.  It is also available from <http://www.gnu.org/licenses/>.
 */
package org.emonocot.harvest.common;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.util.Assert;

/**
 *
 * @author Adrian Gonzalez
 *
 * @author jk00kg
 * Adding support for URL Resources
 */
public class MultiResourceDeletingTasklet implements Tasklet {

    /** Commons-logging Logger. */
    private static final Log logger = LogFactory.getLog(MultiResourceDeletingTasklet.class);

    /**
     * Rpertoires ou fichiers  supprimer.
     */
    private Resource[] resources;

    /**
     *
     * @param aResources The resources to delete
     */
    public final void setResources(final Resource[] aResources) {
        resources = aResources;
    }

    /**
     * <p>
     * Vrifie que l'attribut resources est bien valoris et que ses lments
     * correspondent  des FileSystemResource.
     * </p>
     *
     */
    public final void afterPropertiesSet() {
        Assert.notNull(resources, "resources must be set");
        for (Resource lResource : resources) {
            Assert.isInstanceOf(FileSystemResource.class, lResource,
                    "The attribute 'resources' does not contain" + " resources of the type FileSystemResource.");
        }
    }

    /**
     * @param contribution Set the step contribution
     * @param chunkContext Set the chunk context
     * @return the repeat status
     * @throws Exception if there is a problem deleting the resources
     */
    public final RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext)
            throws Exception {
        for (Resource lResource : resources) {
            FileSystemResource lFileSystemResource = new FileSystemResource(lResource.getFile().getAbsolutePath());
            if (!lFileSystemResource.exists()) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Resource " + lFileSystemResource.getDescription()
                            + " does not exist. The resource is ignored");
                }
            } else {
                File lFile = lFileSystemResource.getFile();
                if (lFile.isDirectory()) {
                    // supprime le rpertoire et son contenu
                    FileUtils.deleteDirectory(lFile);
                } else {
                    if (!lFile.delete()) {
                        throw new IOException("The file " + lFile + " cannot be deleted.");
                    }
                }
            }
        }
        return RepeatStatus.FINISHED;
    }
}