/*
* ====================================================================
* Copyright (c) 2005-2012 sventon project. All rights reserved.
*
* This software is licensed as described in the file LICENSE, which
* you should have received as part of this distribution. The terms
* are also available at http://www.sventon.org.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.sventon.export;
import org.apache.commons.lang.Validate;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.sventon.appl.ConfigDirectory;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
/**
* Temporary export file cleaner.
*
* @author jesper@sventon.org
*/
@ManagedResource
public final class TemporaryFileCleaner {
/**
* The logging instance.
*/
private final Log logger = LogFactory.getLog(getClass());
/**
* Temp file root directory.
*/
private final File directory;
/**
* File name filter to use.
*/
private final FilenameFilter filenameFilter;
/**
* Expiration rule.
*/
private final ExpirationRule expirationRule;
/**
* Constructor.
*
* @param configDirectory The configuration directory.
* @param filenameFilter Filter to use.
* @param expirationRule Expiration rule.
*/
public TemporaryFileCleaner(final ConfigDirectory configDirectory, final FilenameFilter filenameFilter, final ExpirationRule expirationRule) {
final File exportDirectory = configDirectory.getExportDirectory();
Validate.isTrue(exportDirectory.exists(), "Directory does not exist: " + exportDirectory.getAbsolutePath());
Validate.isTrue(exportDirectory.isDirectory(), "Not a directory: " + exportDirectory.getAbsolutePath());
Validate.notNull(filenameFilter);
Validate.notNull(expirationRule);
this.directory = exportDirectory;
this.filenameFilter = filenameFilter;
this.expirationRule = expirationRule;
}
/**
* Cleans the given directory.
* <p/>
* All file names matching <code>sventon-[millis].zip</code>
* older than given threshold value will be deleted.
*
* @throws IOException if unable to delete temporary files.
*/
@ManagedOperation
public void clean() throws IOException {
for (final File file : directory.listFiles(filenameFilter)) {
if (expirationRule.hasExpired(file)) {
logger.debug("Deleting tempfile [" + file.getAbsolutePath() + "]");
if (!file.delete()) {
throw new IOException("Unable to delete: " + file.getAbsolutePath());
}
}
}
}
}