diff --git a/docker/docker-run.sh b/docker/docker-run.sh index 645fd946e3bb5fb83258edb73092ad193368ab4a..3a03cf84e6569335765664e3a584f31384abb79f 100755 --- a/docker/docker-run.sh +++ b/docker/docker-run.sh @@ -26,4 +26,4 @@ if [ $REPLACE_WEBROOT -eq 1 ]; then VOLUME_WEBROOT="-v $DIR/webroot:/webroot" fi -docker run -d $PORT_MAPPING $VOLUME_WEBAPPS $VOLUME_WEBROOT -v $DIR/logs:/tomcat/logs eikecochu/vipra \ No newline at end of file +echo docker run -d $PORT_MAPPING $VOLUME_WEBAPPS $VOLUME_WEBROOT -v $DIR/logs:/tomcat/logs eikecochu/vipra diff --git a/vipra-cmd/runcfg/CMD.launch b/vipra-cmd/runcfg/CMD.launch index bee7078bfab75ad04d237aa2164895de91ae036e..2748817dbefc9e12dbe0bb6a11af817c60c599de 100644 --- a/vipra-cmd/runcfg/CMD.launch +++ b/vipra-cmd/runcfg/CMD.launch @@ -11,7 +11,6 @@ </listAttribute> <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="de.vipra.cmd.Main"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-S test2 -dcI /home/eike/repos/master/ma-impl/docker/data/test-1.json"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="vipra-cmd"/> <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/> diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java b/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java index 23a021709650a87db646b18c757e01f2079aeceb..493f2c823568cc80cd157a9f799973237e56817c 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java @@ -22,7 +22,6 @@ public class CommandLineOptions { public static final Option VERSION = Option.builder("v").longOpt("version").desc("print the version number").build(); public static final Option PERF = Option.builder("p").longOpt("perf").desc("generate performance statistics").hasArg().optionalArg(true) .argName("file").build(); - public static final Option INDEX = Option.builder("i").longOpt("index").desc("create index for models").hasArgs().argName("[models...]") .optionalArg(true).build(); public static final Option REREAD = Option.builder("r").longOpt("reread").desc("reread generated models").hasArgs().argName("[models...]") @@ -48,6 +47,8 @@ public class CommandLineOptions { public static final Option RESTORE = Option.builder("R").longOpt("restore").desc("restore data/filebase").hasArg().argName("file").build(); public static final Option LOG = Option.builder("o").longOpt("out").desc("print output to file").hasArg().optionalArg(true).argName("file") .build(); + public static final Option CONFIG = Option.builder("f").longOpt("config").desc("choose a custom config file").hasArg().argName("file/name") + .build(); private final Options options; private CommandLine cmd; @@ -55,7 +56,7 @@ public class CommandLineOptions { public CommandLineOptions() { final Option[] optionsArray = { ERASE, DEBUG, HELP, INDEX, LIST, REREAD, SILENT, TEST, ALL, CREATE, DELETE, EDIT, PRINT, IMPORT, MODEL, - RENAME, CLEAR, SELECT, BACKUP, RESTORE, VERSION, PERF, LOG }; + RENAME, CLEAR, SELECT, BACKUP, RESTORE, VERSION, PERF, LOG, CONFIG }; options = new Options(); for (final Option option : optionsArray) options.addOption(option); @@ -287,6 +288,14 @@ public class CommandLineOptions { return getOptionValue(LOG); } + public boolean isConfig() { + return hasOption(CONFIG); + } + + public String configString() { + return getOptionValue(CONFIG); + } + private static String[] stripGroups(final String[] names) { if (names == null) return null; diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java index 85315441c3f7237c709361a8f18ea07daa9b0dcf..18c52caa424913e058de010d429ada746c3f9302 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java @@ -97,6 +97,10 @@ public class Main { return; } + // config + + Config.configString = opts.configString(); + // commands final List<Command> commands = new ArrayList<>(); diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/TestCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/TestCommand.java index 14455611bf62a0d4dbd036f4a77137a5eaef144e..9af93956f2632d71edcd8ae0dcd1bbd140b1f99a 100644 --- a/vipra-cmd/src/main/java/de/vipra/cmd/option/TestCommand.java +++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/TestCommand.java @@ -28,7 +28,7 @@ public class TestCommand implements Command { // test if configuration readable ConsoleUtils.infoNOLF(" " + ConsoleUtils.PATH_T + " reading configuration..."); - final Config config = Config.getConfig(true); + final Config config = Config.getConfig(false); ConsoleUtils.print(Ansi.ansi().fg(Color.GREEN).a("OK").reset().toString()); // test if dtm is accessible diff --git a/vipra-util/src/main/java/de/vipra/util/Config.java b/vipra-util/src/main/java/de/vipra/util/Config.java index 7c7fe7e08bce278382310456ef247c9a27ab07c7..cd708b2f65b7e5221a0c916593d60163d0b9abd5 100644 --- a/vipra-util/src/main/java/de/vipra/util/Config.java +++ b/vipra-util/src/main/java/de/vipra/util/Config.java @@ -1,9 +1,11 @@ package de.vipra.util; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -31,6 +33,8 @@ public class Config { public static final Logger log = LoggerFactory.getLogger(Config.class); public static final ObjectMapper mapper = new ObjectMapper(); + public static String configString = null; + static { mapper.enable(SerializationFeature.INDENT_OUTPUT); mapper.enable(Feature.ALLOW_COMMENTS); @@ -247,31 +251,46 @@ public class Config { } public static Config getConfig() throws ConfigException { - return getConfig(false); + return getConfig(configString, true); + } + + public static Config getConfig(final boolean readModels) throws ConfigException { + return getConfig(configString, readModels); } - public static Config getConfig(final boolean skipModels) throws ConfigException { + public static Config getConfig(final String configStr, final boolean readModels) throws ConfigException { if (instance == null) { try { InputStream in = null; + final File configDir = getGenericConfigDir(); + if (!configDir.exists()) { + configDir.mkdirs(); + } + + final List<File> files = new ArrayList<>(); + + // custom config file or name + if (configStr != null) { + files.addAll(Arrays.asList(new File(configStr), new File(configDir, configStr), new File(configDir, configStr + ".json"))); + } // config from environment final String configPath = System.getenv("VIPRA_CONFIG"); if (configPath != null && configPath.length() > 0) { - final File file = new File(configPath); - if (file.exists() && file.isFile()) { - in = org.apache.commons.io.FileUtils.openInputStream(file); - } + files.addAll(Arrays.asList(new File(configPath), new File(configPath, Constants.CONFIG_FILE))); } // config from generic config dir - final File configDir = getGenericConfigDir(); - if (!configDir.exists()) { - configDir.mkdirs(); - } final File configFile = new File(configDir, Constants.CONFIG_FILE); - if (configDir != null && configDir.exists() && configDir.isDirectory() && configFile.exists() && configFile.isFile()) - in = org.apache.commons.io.FileUtils.openInputStream(configFile); + files.add(configFile); + + // check locations + for (final File file : files) { + if (file.exists() && file.isFile() && file.canRead()) { + in = new FileInputStream(file); + break; + } + } // config from source if (in == null) { @@ -280,11 +299,13 @@ public class Config { if (in == null) { log.error("config file input stream is null"); - throw new ConfigException("config file input stream is null"); + throw new ConfigException("could not find any config file"); } // load config final String config = IOUtils.toString(in); + + // write generic config if (configDir.exists() && !configFile.exists()) org.apache.commons.io.FileUtils.write(configFile, config); @@ -293,15 +314,8 @@ public class Config { if (instance == null) throw new ConfigException("could not read configuration"); - // read topic model configs - if (!skipModels) { - final MongoService<TopicModelFull, ObjectId> dbTopicModels = MongoService.getDatabaseService(instance, TopicModelFull.class); - final List<TopicModelFull> topicModels = dbTopicModels.getAll("_all"); - final Map<String, TopicModelConfig> topicModelConfigs = new HashMap<>(topicModels.size()); - for (final TopicModelFull topicModel : topicModels) - topicModelConfigs.put(topicModel.getName(), topicModel.getModelConfig()); - instance.setTopicModelConfigs(topicModelConfigs); - } + if (readModels) + instance.rereadTopicModelConfigs(); } catch (final IOException e) { throw new ConfigException(e); } @@ -310,6 +324,19 @@ public class Config { return instance; } + public void rereadTopicModelConfigs() throws ConfigException { + if (instance == null) + throw new ConfigException("config not initialized"); + + // read topic model configs + final MongoService<TopicModelFull, ObjectId> dbTopicModels = MongoService.getDatabaseService(instance, TopicModelFull.class); + final List<TopicModelFull> topicModels = dbTopicModels.getAll("_all"); + final Map<String, TopicModelConfig> topicModelConfigs = new HashMap<>(topicModels.size()); + for (final TopicModelFull topicModel : topicModels) + topicModelConfigs.put(topicModel.getName(), topicModel.getModelConfig()); + setTopicModelConfigs(topicModelConfigs); + } + public String validModelName(String name) throws ConfigException { name = name.trim().toLowerCase(); if (name.equals("all"))