Skip to content
Snippets Groups Projects
Commit 421673e4 authored by Eike Cochu's avatar Eike Cochu
Browse files

reverted property linking, debug mode does not pick up the file

added delete option for cmd
simlified service creation through configuration
added basic data directory path version
parent e4ecaceb
No related branches found
No related tags found
No related merge requests found
Showing
with 149 additions and 45 deletions
......@@ -33,11 +33,4 @@
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
<linkedResources>
<link>
<name>src/main/resources/config.properties</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
</link>
</linkedResources>
</projectDescription>
......@@ -2,6 +2,7 @@ package de.vipra.cmd;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;
public class CmdOptions extends Options {
......@@ -11,15 +12,24 @@ public class CmdOptions extends Options {
public static final String OPT_HELP = "h";
public static final String OPT_HELP_LONG = "help";
public static final String OPT_IMPORT = "i";
public static final String OPT_IMPORT_LONG = "import";
public static final String OPT_SHELL = "x";
public static final String OPT_SHELL_LONG = "shell";
public static final String OPT_DELETE = "d";
public static final String OPT_DELETE_LONG = "delete";
public CmdOptions() {
addOption(Option.builder(OPT_HELP).longOpt("help").desc("print this message").build());
addOption(Option.builder(OPT_SHELL).longOpt("shell").hasArg(true).argName("name")
addOption(Option.builder(OPT_HELP).longOpt(OPT_HELP_LONG).desc("print this message").build());
addOption(Option.builder(OPT_SHELL).longOpt(OPT_SHELL_LONG).hasArg(true).argName("name")
.desc("run from a shell script").build());
addOption(Option.builder(OPT_IMPORT).longOpt("import").hasArgs().argName("files/dirs...")
OptionGroup group = new OptionGroup();
group.addOption(Option.builder(OPT_IMPORT).longOpt(OPT_IMPORT_LONG).hasArgs().argName("files/dirs...")
.desc("import articles into the database").build());
group.addOption(Option.builder(OPT_DELETE).longOpt(OPT_DELETE_LONG).hasArgs().argName("files/ids...")
.desc("delete articles from the database").build());
addOptionGroup(group);
}
public void printHelp(String cmd) {
......
package de.vipra.cmd;
import static de.vipra.cmd.CmdOptions.OPT_HELP;
import static de.vipra.cmd.CmdOptions.OPT_IMPORT;
import static de.vipra.cmd.CmdOptions.OPT_SHELL;
import static de.vipra.cmd.CmdOptions.*;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
......@@ -12,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.vipra.cmd.option.Command;
import de.vipra.cmd.option.DeleteCommand;
import de.vipra.cmd.option.ImportCommand;
public class Main {
......@@ -44,8 +43,9 @@ public class Main {
if (cline.hasOption(OPT_HELP)) {
options.printHelp(cmd);
} else if (cline.hasOption(OPT_IMPORT)) {
String[] paths = cline.getOptionValues(OPT_IMPORT);
c = new ImportCommand(paths);
c = new ImportCommand(cline.getOptionValues(OPT_IMPORT));
} else if (cline.hasOption(OPT_DELETE)) {
c = new DeleteCommand(cline.getOptionValues(OPT_DELETE));
}
if (c != null) {
......
package de.vipra.cmd.option;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.vipra.cmd.ExecutionException;
import de.vipra.cmd.model.Article;
import de.vipra.util.Config;
import de.vipra.util.ConfigException;
import de.vipra.util.Constants;
import de.vipra.util.service.DatabaseService;
import de.vipra.util.service.FilebaseService;
public class DeleteCommand implements Command {
public static final Logger log = LoggerFactory.getLogger(DeleteCommand.class);
public static final Logger out = LoggerFactory.getLogger("shellout");
private ArrayList<String> ids = new ArrayList<>();
private Config config;
private DatabaseService<Article> dbArticles;
private FilebaseService<Article> fbArticles;
public DeleteCommand(String[] strings) {
addIds(strings);
}
private void addIds(String[] strings) {
for (String str : strings) {
if (str.contains(File.pathSeparator)) {
String[] parts = str.split(File.pathSeparator);
str = parts[parts.length - 1];
}
ids.add(str);
}
}
private void deleteEntry(String id) {
// 1. delete mongodb entry
// 2. delete file
// 3. delete elasticsearch index entry
}
@Override
public void run() throws ExecutionException {
try {
config = new Config();
dbArticles = config.getDatabaseService(Constants.Collection.ARTICLES, Article.class);
fbArticles = config.getFilebaseService(Article.class);
} catch (IOException | ConfigException e) {
throw new ExecutionException(e);
}
List<Exception> ex = new ArrayList<>();
for (String id : ids) {
try {
deleteEntry(id);
} catch (Exception e) {
ex.add(e);
}
}
if (ex.size() > 0) {
throw new ExecutionException(ex);
}
}
}
......@@ -18,7 +18,6 @@ import de.vipra.cmd.model.Article;
import de.vipra.util.Config;
import de.vipra.util.ConfigException;
import de.vipra.util.Constants;
import de.vipra.util.Mongo;
import de.vipra.util.StringUtils;
import de.vipra.util.ex.DatabaseException;
import de.vipra.util.ex.FilebaseException;
......@@ -100,8 +99,6 @@ public class ImportCommand implements Command {
}
private void importArticle(JSONObject obj) throws FilebaseException, DatabaseException {
// 4. topic modeling
// 3. index article via elasticsearch, include topics
out.info("importing \"" + StringUtils.ellipsize(obj.get("title").toString(), 80) + "\"");
Article article = new Article();
article.fromJSON(obj);
......@@ -111,16 +108,17 @@ public class ImportCommand implements Command {
// add article to filebase
article = fbArticles.createSingle(article);
// 3. index article via elasticsearch, include topics
// 4. topic modeling
}
@Override
public void run() throws ExecutionException {
try {
config = new Config();
File dataDir = null;
Mongo mongo = Mongo.getInstance(config);
dbArticles = new DatabaseService<Article>(mongo, Constants.Collection.ARTICLES, Article.class);
fbArticles = new FilebaseService<Article>(dataDir, Article.class);
dbArticles = config.getDatabaseService(Constants.Collection.ARTICLES, Article.class);
fbArticles = config.getFilebaseService(Article.class);
} catch (IOException | ConfigException e) {
throw new ExecutionException(e);
}
......
db.host=localhost
db.port=27017
db.name=test
fb.path=/home/eike/.local/share/vipra
\ No newline at end of file
......@@ -41,11 +41,4 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
<linkedResources>
<link>
<name>src/main/resources/config.properties</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
</link>
</linkedResources>
</projectDescription>
db.host=localhost
db.port=27017
db.name=test
fb.path=${datadir}/vipra
\ No newline at end of file
......@@ -33,11 +33,4 @@
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
</natures>
<linkedResources>
<link>
<name>src/main/resources/config.properties</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/vipra-config/config.properties</locationURI>
</link>
</linkedResources>
</projectDescription>
package de.vipra.util;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
......@@ -7,6 +8,10 @@ import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.vipra.util.model.Model;
import de.vipra.util.service.DatabaseService;
import de.vipra.util.service.FilebaseService;
public class Config {
public static final Logger log = LoggerFactory.getLogger(Config.class);
......@@ -14,11 +19,18 @@ public class Config {
private final Properties props = new Properties();
public Config() throws IOException, ConfigException {
this(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(Constants.CONFIG_FILE);
if (is == null) {
is = Config.class.getResourceAsStream(Constants.CONFIG_FILE);
}
load(is);
}
public Config(InputStream is) throws IOException, ConfigException {
load(is);
}
private void load(InputStream is) throws ConfigException, IOException {
if (is == null) {
log.error("config file input stream is null");
throw new ConfigException("config file input stream is null");
......@@ -47,4 +59,24 @@ public class Config {
}
}
public File getDataDirectory() throws ConfigException {
File dataDir = new File(getString("fb.path"));
if (!dataDir.exists()) {
if (!dataDir.mkdirs()) {
throw new ConfigException("could not create data directory: " + dataDir.getAbsolutePath());
}
}
return dataDir;
}
public <T extends Model> DatabaseService<T> getDatabaseService(Constants.Collection collection, Class<T> clazz)
throws ConfigException {
Mongo mongo = Mongo.getInstance(this);
return new DatabaseService<T>(mongo, collection, clazz);
}
public <T extends Model> FilebaseService<T> getFilebaseService(Class<T> clazz) throws ConfigException {
return new FilebaseService<T>(getDataDirectory(), clazz);
}
}
......@@ -7,6 +7,8 @@ public class Constants {
public static final String FB_DIR = "vipra";
public static final Charset FB_ENCODING = StandardCharsets.UTF_8;
public static final String CONFIG_FILE = "config.properties";
public static final String DEFAULT_HOST = "localhost";
public static final int DEFAULT_PORT = 27017;
......
......@@ -36,13 +36,9 @@ public abstract class Model {
}
}
public boolean writeToFile(File file) throws IOException {
if (file.exists()) {
String data = toFileString();
FileUtils.writeStringToFile(file, data, Constants.FB_ENCODING, false);
return true;
}
return false;
public void writeToFile(File file) throws IOException {
String data = toFileString();
FileUtils.writeStringToFile(file, data, Constants.FB_ENCODING, false);
}
public abstract String getType();
......
......@@ -54,6 +54,7 @@ public class FilebaseService<T extends Model> implements Service<T, FilebaseExce
}
try {
t.writeToFile(file);
log.info("file created: " + file.getAbsolutePath());
} catch (IOException e) {
throw new FilebaseException(e);
}
......
db.host=localhost
db.port=27017
db.name=test
fb.path=${datadir}/vipra
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment