package org.hivedb.util;
import org.hivedb.Hive;
import org.hivedb.meta.persistence.CachingDataSourceProvider;
import org.hivedb.meta.persistence.HiveDataSourceProvider;
import org.hivedb.util.database.DialectTools;
import org.hivedb.util.database.HiveDbDialect;
import org.ho.yaml.Yaml;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;
import java.util.Map;
/**
* Creates a hive from a given yaml configuration file
*
* @author mellwanger
*/
public class YamlHiveCreator {
private HiveDataSourceProvider dataSourceProvider = CachingDataSourceProvider.getInstance();
private HiveDbDialect dialect;
public YamlHiveCreator(HiveDbDialect dialect) {
try {
Class.forName(DialectTools.getDriver(dialect));
} catch (Exception ex) {
throw new RuntimeException(String.format("Error initalizing the %s server.", dialect), ex);
}
this.dialect = dialect;
}
@SuppressWarnings("unchecked")
public Hive load(String configFile) throws FileNotFoundException {
Map<String, Map<String, ?>> configs = (Map<String, Map<String, ?>>) Yaml.load(new FileReader(configFile));
if (configs == null || configs.size() != 1) {
throw new RuntimeException(String.format("Zero or multipe hives defined in %s", configFile));
}
return load(configs.values().iterator().next());
}
@SuppressWarnings("unchecked")
private Hive load(Map<String, ?> config) {
Map<String, String> dimension = (Map<String, String>) config.get("dimension");
List<Map<String, ?>> nodes = (List<Map<String, ?>>) config.get("nodes");
List<Map<String, ?>> resources = (List<Map<String, ?>>) config.get("resources");
return new BourneHive(dimension, dataSourceProvider, dialect).addNodes(nodes).addResources(resources).getHive();
}
public static void main(String[] args) throws FileNotFoundException {
if (args.length != 4 || getDialect(args) == null || getConfigFile(args) == null) {
usage();
} else {
new YamlHiveCreator(getDialect(args)).load(getConfigFile(args));
}
}
private static String getConfigFile(String args[]) {
if (args[0].equalsIgnoreCase("-yml")) {
return args[1];
} else if (args[2].equalsIgnoreCase("-yml")) {
return args[3];
}
return null;
}
private static HiveDbDialect getDialect(String dialect) {
return HiveDbDialect.valueOf(dialect);
}
private static HiveDbDialect getDialect(String args[]) {
if (args[0].equalsIgnoreCase("-dialect")) {
return getDialect(args[1]);
} else if (args[2].equalsIgnoreCase("-dialect")) {
return getDialect(args[3]);
}
return null;
}
public static void usage() {
System.out.println(new StringBuilder("USAGE: java -cp hivedb.jar org.hivedb.util.YamlHiveCreator -dialect [h2|mysql] -yml <path_to_yaml_config>"));
}
}