SynchronizerCli.java
package esa.bscs.pds4.packager.cli;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import esa.bscs.pds4.validate.exception.TechnicalErrorHandler;
public class SynchronizerCli {
private static final Logger LOGGER = LoggerFactory.getLogger(SynchronizerCli.class);
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new TechnicalErrorHandler());
try {
// Get conf directory from appassembler app.home
final String appHome = System.getProperty("app.home");
if(appHome == null || appHome.length() == 0) {
LOGGER.error("Could not detect application directory");
System.exit(1);
}
final File etc = new File(appHome, "etc");
// Display packager info
final Properties packagerProperties = new Properties();
packagerProperties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/maven/esa.bscs.pds4/pds4-packager/pom.properties"));
LOGGER.info("Packager {} installed at {}", packagerProperties.getProperty("version"), System.getProperty("app.home"));
// Read packager configuration URL from synchronizer.properties
final Properties synchronizerProperties = new Properties();
synchronizerProperties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("synchronizer.properties"));
final URL packagerConfigUrl = new URL(synchronizerProperties.get("packager.config.classifiers.url").toString());
final URL validateConfigUrl = new URL(synchronizerProperties.get("validate.config.dictionaries.url").toString());
// Display remote version info
final Properties remoteClassifierProperties = new Properties();
final Properties remoteDictionaryProperties = new Properties();
remoteClassifierProperties.load(new URL("jar:" + packagerConfigUrl.toExternalForm() + "!/META-INF/maven/esa.bscs.pds4/pds4-packager-classifiers/pom.properties").openStream());
remoteDictionaryProperties.load(new URL("jar:" + validateConfigUrl.toExternalForm() + "!/META-INF/maven/esa.bscs.pds4-tools.packager/pds4-validate-data/pom.properties").openStream());
// Recreate etc directory
if(etc.isDirectory()) {
FileUtils.cleanDirectory(etc);
}
etc.mkdir();
// Copy remote files to etc
final String[] packagerConfigFileElements = packagerConfigUrl.getFile().split("/");
final String[] validateConfigFileElements = validateConfigUrl.getFile().split("/");
LOGGER.info("Retrieving packager classifiers {} from {}", remoteClassifierProperties.getProperty("version"), packagerConfigUrl);
FileUtils.copyURLToFile(packagerConfigUrl, new File(etc, packagerConfigFileElements[packagerConfigFileElements.length-1]));
LOGGER.info("Retrieving validate configuration {} from {}", remoteDictionaryProperties.getProperty("version"), validateConfigUrl);
FileUtils.copyURLToFile(validateConfigUrl, new File(etc, validateConfigFileElements[validateConfigFileElements.length-1]));
LOGGER.info("Configuration update complete");
System.exit(0);
} catch(MalformedURLException e) {
LOGGER.error("Could not retrieve configuration from remote server");
System.exit(1);
} catch(IOException e) {
LOGGER.error("A problem arose while reading configuration" , e);
System.exit(1);
}
}
}