package hudson.plugins.tfs.model;
import com.microsoft.tfs.core.config.persistence.PersistenceStoreProvider;
import com.microsoft.tfs.core.persistence.FilesystemPersistenceStore;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class ClonePersistenceStoreProvider implements PersistenceStoreProvider {
private final FilesystemPersistenceStore cacheStore;
private final FilesystemPersistenceStore configurationStore;
private final FilesystemPersistenceStore logStore;
private final String hostName;
public ClonePersistenceStoreProvider(final PersistenceStoreProvider sourcePersistenceStoreProvider, final String hostName) {
this.hostName = hostName;
final FilesystemPersistenceStore sourceCache = sourcePersistenceStoreProvider.getCachePersistenceStore();
final File cacheFolder = createAndCopy(sourceCache, hostName);
this.cacheStore = new FilesystemPersistenceStore(cacheFolder);
final FilesystemPersistenceStore sourceConfiguration = sourcePersistenceStoreProvider.getConfigurationPersistenceStore();
final File configurationFolder = createAndCopy(sourceConfiguration, hostName);
this.configurationStore = new FilesystemPersistenceStore(configurationFolder);
final FilesystemPersistenceStore sourceLog = sourcePersistenceStoreProvider.getLogPersistenceStore();
final File logFolder = createAndCopy(sourceLog, hostName);
this.logStore = new FilesystemPersistenceStore(logFolder);
}
static File createAndCopy(final FilesystemPersistenceStore sourceStore, final String nodeName) {
final File sourceBase = sourceStore.getStoreFile();
final String childName = sourceBase.getName();
final File sourceParent = sourceBase.getParentFile();
final File destinationBase = new File(sourceParent, nodeName);
final File destination = new File(destinationBase, childName);
if (!destination.isDirectory() && sourceBase.isDirectory()) {
try {
FileUtils.copyDirectory(sourceBase, destination);
}
catch (final IOException e) {
throw new Error(e);
}
}
return destination;
}
public FilesystemPersistenceStore getCachePersistenceStore() {
return cacheStore;
}
public FilesystemPersistenceStore getConfigurationPersistenceStore() {
return configurationStore;
}
public FilesystemPersistenceStore getLogPersistenceStore() {
return logStore;
}
public String getHostName() {
return hostName;
}
}