String name = options.getName();
final LocalFilesystemConnector localConnection = new LocalFilesystemConnector(options.getPath());
Handler handler = null;
try {
String remoteConnectorName = options.getRemoteConnector();
RemoteConnector remoteConnector = null;
try {
remoteConnector = (RemoteConnector) Class.forName("cloudsync.connector.Remote" + remoteConnectorName + "Connector").newInstance();
} catch (IllegalAccessException e) {
} catch (InstantiationException e) {
} catch (ClassNotFoundException e) {
throw new CloudsyncException("Remote connector '" + remoteConnectorName + "' not found", e);
}
remoteConnector.init(name, options);
final long start = System.currentTimeMillis();
SyncType type = options.getType();
String[] includePatterns = options.getIncludePatterns();
if (includePatterns != null) {
LOGGER.log(Level.FINEST, "use include pattern: " + "[^" + StringUtils.join(includePatterns, "$] | [$") + "$]");
}
String[] excludePatterns = options.getExcludePatterns();
if (excludePatterns != null) {
LOGGER.log(Level.FINEST, "use exclude pattern: " + "[^" + StringUtils.join(excludePatterns, "$] | [$") + "$]");
}
handler = new Handler(name, localConnection, remoteConnector, new Crypt(options.getPassphrase()), options.getDuplicate(), options.getFollowLinks(), options.getPermissionType());
handler.init(type, options.getCacheFile(), options.getLockFile(), options.getPIDFile(), options.getNoCache(), options.getForceStart());
switch (type) {
case BACKUP:
handler.backup(!options.isTestRun(), includePatterns, excludePatterns);
break;
case RESTORE:
handler.restore(!options.isTestRun(), includePatterns, excludePatterns);
break;
case LIST:
handler.list(includePatterns, excludePatterns);
break;
case CLEAN:
handler.clean();
break;
}
final long end = System.currentTimeMillis();
LOGGER.log(Level.INFO, "runtime: " + ((end - start) / 1000.0f) + " seconds");
} finally {
try {
if (handler != null)
handler.finalize();
} catch (CloudsyncException e) {
throw e;
}
}
}