edu.emory.cci.aiw.neo4jetl.Neo4jHome Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aiw-neo4j-etl Show documentation
Show all versions of aiw-neo4j-etl Show documentation
AIW Neo4j ETL is a Protempa query results handler for loading data and
abstractions into the Neo4j graph database.
package edu.emory.cci.aiw.neo4jetl;
/*
* #%L
* AIW Neo4j ETL
* %%
* Copyright (C) 2015 Emory University
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* .
* #L%
*/
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecuteResultHandler;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.Executor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Andrew Post
*/
class Neo4jHome {
private static final Logger LOGGER
= LoggerFactory.getLogger(Neo4jHome.class);
private static final String SERVER_PROPERTIES = new File("conf", "neo4j-server.properties").getPath();
private static final String SERVER_CONTROL_COMMAND = new File("bin", "neo4j").getPath();
private final String home;
private final File dbPath;
Neo4jHome(String home) throws IOException {
assert home != null : "home cannot be null";
this.home = home;
Properties serverProperties = new Properties();
try (FileReader bf = new FileReader(new File(home, SERVER_PROPERTIES))) {
serverProperties.load(bf);
}
this.dbPath = new File(home, serverProperties.getProperty("org.neo4j.server.database.location"));
}
File getDbPath() {
return this.dbPath;
}
void startServer() throws IOException, InterruptedException, CommandFailedException {
controlServer("start");
}
void stopServer() throws IOException, InterruptedException, CommandFailedException {
controlServer("stop");
}
private void controlServer(String command) throws IOException, InterruptedException, CommandFailedException {
LOGGER.debug("Executing neo4j command {}...", command);
CommandLine serverControlCommand = new CommandLine(new File(this.home, SERVER_CONTROL_COMMAND));
serverControlCommand.addArgument("${command}");
Map map = new HashMap<>();
map.put("command", command);
serverControlCommand.setSubstitutionMap(map);
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
ExecuteWatchdog watchdog = new ExecuteWatchdog(60*1000);
Executor executor = new DefaultExecutor();
executor.setExitValue(1);
executor.setWatchdog(watchdog);
executor.execute(serverControlCommand, resultHandler);
LOGGER.debug("Neo4j command {} is completed, checking exit value...", command);
resultHandler.waitFor();
int exitValue = resultHandler.getExitValue();
if (exitValue != 0) {
ExecuteException exception = resultHandler.getException();
throw new CommandFailedException(exitValue, "Neo4j command '" + command + "' failed", exception);
}
LOGGER.debug("Neo4j command {} was successful", command);
}
}