package cz.cuni.mff.d3s.been.hostruntime; import static cz.cuni.mff.d3s.been.hostruntime.HostRuntimeConfiguration.*; import java.io.File; import java.util.*; import org.apache.commons.io.FileUtils; import org.apache.commons.io.comparator.NameFileComparator; import cz.cuni.mff.d3s.been.util.PropertyReader; /** * Resolver of working directories * * @author donarus */ public class WorkingDirectoryResolver { private static final String TASKS_WRKDIR_PARENT = "tasks"; private Properties properties; /** * Creates new WorkingDirectoryResolver. * * @param properties * resolver's settings */ public WorkingDirectoryResolver(Properties properties) { this.properties = properties; } /** * Returns this Host Runtime's working directory. * * @return this Host Runtime's working directory */ public File getHostRuntimeWorkingDirectory() { final PropertyReader propReader = PropertyReader.on(properties); final String hrWrkDir = propReader.getString(WRKDIR_NAME, DEFAULT_WRKDIR_NAME); return new File(hrWrkDir); } /** * Returns this Host Runtime's task working directory. * * @return this Host Runtime's task working directory */ public File getTasksWorkingDirectory() { final PropertyReader propReader = PropertyReader.on(properties); Integer hrTasksWrkDirMaxHistory = propReader.getInteger(TASKS_WRKDIR_MAX_HISTORY, DEFAULT_TASKS_WRKDIR_MAX_HISTORY); if (hrTasksWrkDirMaxHistory < 1) { hrTasksWrkDirMaxHistory = 1; } File hrWrkDir = getHostRuntimeWorkingDirectory(); File tasksParentDir = new File(hrWrkDir, TASKS_WRKDIR_PARENT); if (tasksParentDir.exists()) { List<File> oldTasksWrkDirs = Arrays.asList(tasksParentDir.listFiles()); Collections.sort(oldTasksWrkDirs, NameFileComparator.NAME_INSENSITIVE_COMPARATOR); for (int i = 0; i < oldTasksWrkDirs.size() - hrTasksWrkDirMaxHistory + 1; i++) { FileUtils.deleteQuietly(oldTasksWrkDirs.get(i)); } } return new File(tasksParentDir, "" + new Date().getTime()); } }