/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You 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.
*/
package com.esri.gpt.framework.scheduler;
import java.io.File;
import java.util.logging.Logger;
import com.esri.gpt.framework.collection.StringAttributeMap;
/**
* Performs file clean up operation
* server communication.
*/
public class FileCleanup {
//class variables =============================================================
private static Logger LOGGER = Logger.getLogger(FileCleanup.class.getName());
//instance variables ==========================================================
private String _folderPath = null;
private String _filePrefix = null;
private String _fileSuffix = null;
private long _expirationTimeMinutes = 0;
//constructors ================================================================
/**
* Sets the file clean up parameters
* @param parameters the key,value parameter mapping
*/
protected FileCleanup(StringAttributeMap parameters) {
_folderPath = parameters.get("folderPath").getValue();
_filePrefix = parameters.get("filePrefix").getValue();
_fileSuffix = parameters.get("fileSuffix").getValue();
_expirationTimeMinutes = Long.parseLong(parameters.get(
"expirationTimeMinutes").getValue());
if (_filePrefix == null || _filePrefix.trim().length() < 1) {
LOGGER.severe(" Invalid filePrefix parameter for file clean up task");
}
if (_fileSuffix == null || _fileSuffix.trim().length() < 1) {
LOGGER.severe(" Invalid fileSuffix parameter for file clean up task");
}
if ((_expirationTimeMinutes * 60 * 1000) < 1) {
LOGGER
.severe(" Invalid expirationTimeMinutes parameter for file clean up task");
}
}
//methods =====================================================================
/**
* Performs cleaning up task.
* @return boolean file cleanup status
*/
protected boolean cleanup() {
if (_folderPath == null || _folderPath.trim().length() < 1) {
LOGGER.severe(" Invalid folder path for file clean up task");
return false;
}
File directory = new File(_folderPath);
if (!directory.exists()) {
LOGGER.severe(_folderPath + " does not exist");
return false;
}
String[] directoryContents = directory.list();
if (directoryContents == null) {
LOGGER.info(" No files inside folder " + _folderPath);
return false;
} else {
LOGGER.finer(" Count of files/directory inside folder is "
+ directoryContents.length);
}
boolean cleanUpFlag = false;
for (int i = 0; i < directoryContents.length; i++) {
if (Thread.interrupted()) {
break;
}
File file = new File(_folderPath + directory.separator
+ directoryContents[i]);
String fileName = file.getName().toUpperCase().trim();
if (!file.isFile()
|| !checkPrefix(fileName)
|| !checkSuffix(fileName)
|| (System.currentTimeMillis() - file.lastModified()) < (_expirationTimeMinutes * 60 * 1000))
continue;
LOGGER.finer(" Cleaning up file " + file.getPath());
if (!file.delete())
LOGGER.severe("Couldn't remove file " + file.getPath());
else
cleanUpFlag = true;
}
return cleanUpFlag;
}
/**
* Checks file name for prefix match
* @param fileName
* @return true if file name matches prefix
*/
private boolean checkPrefix(String fileName) {
String prefixes[] = _filePrefix.split(",");
for (int i = 0; i < prefixes.length; i++) {
if (Thread.interrupted()) {
break;
}
if (fileName.startsWith(prefixes[i].toUpperCase()))
return true;
}
return false;
}
/**
* Checks file name for suffix match
* @param fileName
* @return true if file name matches suffix
*/
private boolean checkSuffix(String fileName) {
String suffixes[] = _fileSuffix.split(",");
for (int i = 0; i < suffixes.length; i++) {
if (Thread.interrupted()) {
break;
}
if (fileName.endsWith(suffixes[i].toUpperCase()))
return true;
}
return false;
}
/**
* Returns the string representation of the object.
* @return the string
*/
@Override
public String toString() {
StringBuffer sb = new StringBuffer(getClass().getName()).append(" (\n");
sb.append(" folderPath=\"").append(_folderPath).append("\"");
sb.append(" filePrefix=\"").append(_filePrefix).append("\"");
sb.append(" fileSuffix=\"").append(_fileSuffix).append("\"");
sb.append(" expirationTimeMinutes=\"").append(_expirationTimeMinutes).append("\"");
sb.append(") ===== end ").append(getClass().getName());
return sb.toString();
}
}