/*
* This is eMonocot, a global online biodiversity information resource.
*
* Copyright © 2011–2015 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);
/**
* Répertoires ou fichiers à supprimer.
*/
private Resource[] resources;
/**
*
* @param aResources The resources to delete
*/
public final void setResources(final Resource[] aResources) {
resources = aResources;
}
/**
* <p>
* Vérifie que l'attribut resources est bien valorisé et que ses éléments
* 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 répertoire et son contenu
FileUtils.deleteDirectory(lFile);
} else {
if (!lFile.delete()) {
throw new IOException("The file " + lFile
+ " cannot be deleted.");
}
}
}
}
return RepeatStatus.FINISHED;
}
}