/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.ssh.jsch.executor.context;
import java.util.Random;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Simple abstraction of remote temporary directory path generation. Could be expanded into a
* management class that keeps track of and disposes the generated directories.
*
* @author Robert Mischke
*
*/
class RemoteTempDirFactory {
private static final int MIN_PLAUSIBLE_ROOT_DIR_LENGTH = "/tmp".length();
/**
* The provided root dir path, normalized to end with "/".
*/
private final String rootDir;
private final Random random = new Random();
RemoteTempDirFactory(String rootDir) {
// basic root dir checks
if (rootDir == null || rootDir.length() < MIN_PLAUSIBLE_ROOT_DIR_LENGTH) {
throw new IllegalArgumentException("Invalid root path: " + rootDir);
}
// normalize
if (rootDir.charAt(rootDir.length() - 1) != '/') {
rootDir = rootDir + "/";
}
this.rootDir = rootDir;
}
/**
* Returns a new, most-likely-unique temp directory. Note that the directory is not actually
* created; this method only generates a unique path string.
*
* @param contextHint a hint text that is used as part of the directory path to simplify
* recognizing created directories; must only contain characters valid for all relevant
* file systems
* @param separator an arbitrary separator part (like "-", "." or similar) to join directory
* name segments
* @return the full path name of the new temp directory
*/
public String createTempDirPath(String contextHint, String separator) {
// although the JavaDoc does not state this, nextInt() is implemented thread-safely
int randInt = random.nextInt();
return StringUtils.format("%s%s%s%d%s%d", rootDir, contextHint, separator, System.currentTimeMillis(), separator,
Math.abs(randInt));
}
public String getRootDir() {
return rootDir;
}
}