From c39e93c1522e6d5824b152c80ff69aae50d007d0 Mon Sep 17 00:00:00 2001 From: Winston Li Date: Fri, 5 Dec 2014 23:46:37 +0000 Subject: [PATCH] Changed program arguments to only take config file. --- .../ac/ic/wlgitbridge/application/Config.java | 58 +++++++++++++++++++ .../SnapshotPushPostbackHandler.java | 12 +--- .../application/WLGitBridgeApplication.java | 36 +++++++----- .../application/WLGitBridgeServer.java | 3 +- .../exception/InvalidConfigFileException.java | 19 ++++++ .../InvalidRootDirectoryPathException.java | 3 +- .../src/uk/ac/ic/wlgitbridge/util/Util.java | 11 ++++ .../wlgitbridge/application/ConfigTest.java | 32 ++++++++++ .../InvalidConfigFileExceptionTest.java | 13 +++++ 9 files changed, 159 insertions(+), 28 deletions(-) create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/application/Config.java create mode 100644 services/git-bridge/src/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileException.java create mode 100644 services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/ConfigTest.java create mode 100644 services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileExceptionTest.java diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/Config.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/Config.java new file mode 100644 index 0000000000..e90cd74e9e --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/Config.java @@ -0,0 +1,58 @@ +package uk.ac.ic.wlgitbridge.application; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import uk.ac.ic.wlgitbridge.application.exception.InvalidConfigFileException; +import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource; + +import java.io.FileReader; +import java.io.IOException; + +/** + * Created by Winston on 05/12/14. + */ +public class Config implements JSONSource { + + private int port; + private String rootGitDirectory; + private String apiKey; + + public Config(String configFilePath) throws InvalidConfigFileException, IOException { + try { + fromJSON(new Gson().fromJson(new FileReader(configFilePath), JsonElement.class)); + } catch (JsonParseException e) { + throw new IOException(); + } + } + + @Override + public void fromJSON(JsonElement json) { + JsonObject configObject = json.getAsJsonObject(); + port = getElement(configObject, "port").getAsInt(); + rootGitDirectory = getElement(configObject, "rootGitDirectory").getAsString(); + apiKey = getElement(configObject, "apiKey").getAsString(); + } + + public int getPort() { + return port; + } + + public String getRootGitDirectory() { + return rootGitDirectory; + } + + public String getAPIKey() { + return apiKey; + } + + private JsonElement getElement(JsonObject configObject, String name) { + JsonElement element = configObject.get(name); + if (element == null) { + throw new RuntimeException(new InvalidConfigFileException(name)); + } + return element; + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java index c77637f924..ca1183d40e 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java @@ -3,12 +3,12 @@ package uk.ac.ic.wlgitbridge.application; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; +import uk.ac.ic.wlgitbridge.util.Util; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.BufferedReader; import java.io.IOException; /** @@ -25,7 +25,7 @@ public class SnapshotPushPostbackHandler extends AbstractHandler { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getMethod().equals("POST") && request.getPathInfo().endsWith("postback")) { - String contents = getContentsOfReader(request.getReader()); + String contents = Util.getContentsOfReader(request.getReader()); String[] parts = request.getRequestURI().split("/"); if (parts.length < 4) { throw new ServletException(); @@ -43,12 +43,4 @@ public class SnapshotPushPostbackHandler extends AbstractHandler { } } - private static String getContentsOfReader(BufferedReader reader) throws IOException { - StringBuilder sb = new StringBuilder(); - for (String line; (line = reader.readLine()) != null; ) { - sb.append(line); - } - return sb.toString(); - } - } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java index c6e19745f6..2d709713a6 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeApplication.java @@ -1,9 +1,11 @@ package uk.ac.ic.wlgitbridge.application; +import uk.ac.ic.wlgitbridge.application.exception.InvalidConfigFileException; import uk.ac.ic.wlgitbridge.application.exception.InvalidProgramArgumentsException; import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException; import javax.servlet.ServletException; +import java.io.IOException; /** * Created by Winston on 02/11/14. @@ -15,10 +17,10 @@ import javax.servlet.ServletException; public class WLGitBridgeApplication { public static final int EXIT_CODE_FAILED = 1; - private static final String USAGE_MESSAGE = "usage: writelatex-git-bridge port root_git_directory_path"; + private static final String USAGE_MESSAGE = "usage: writelatex-git-bridge config_file"; - private int port; - private String rootGitDirectoryPath; + private String configFilePath; + private Config config; /** * Constructs an instance of the WriteLatex-Git Bridge application. @@ -27,9 +29,16 @@ public class WLGitBridgeApplication { public WLGitBridgeApplication(String[] args) { try { parseArguments(args); + loadConfigFile(); } catch (InvalidProgramArgumentsException e) { printUsage(); System.exit(EXIT_CODE_FAILED); + } catch (InvalidConfigFileException e) { + System.out.println("The property for " + e.getMissingMember() + " is invalid. Check your config file."); + System.exit(EXIT_CODE_FAILED); + } catch (IOException e) { + System.out.println("Invalid config file. Check the file path."); + System.exit(EXIT_CODE_FAILED); } } @@ -38,11 +47,11 @@ public class WLGitBridgeApplication { */ public void run() { try { - new WLGitBridgeServer(port, rootGitDirectoryPath).start(); + new WLGitBridgeServer(config.getPort(), config.getRootGitDirectory(), config.getAPIKey()).start(); } catch (ServletException e) { e.printStackTrace(); } catch (InvalidRootDirectoryPathException e) { - printUsage(); + System.out.println("Invalid root git directory path. Check your config file."); System.exit(EXIT_CODE_FAILED); } } @@ -51,26 +60,21 @@ public class WLGitBridgeApplication { private void parseArguments(String[] args) throws InvalidProgramArgumentsException { checkArgumentsLength(args); - parsePortNumber(args); - parseRootGitDirectoryPath(args); + parseConfigFilePath(args); } private void checkArgumentsLength(String[] args) throws InvalidProgramArgumentsException { - if (args.length < 2) { + if (args.length < 1) { throw new InvalidProgramArgumentsException(); } } - private void parsePortNumber(String[] args) throws InvalidProgramArgumentsException { - try { - port = Integer.parseInt(args[0]); - } catch (NumberFormatException e) { - throw new InvalidProgramArgumentsException(); - } + private void parseConfigFilePath(String[] args) throws InvalidProgramArgumentsException { + configFilePath = args[0]; } - private void parseRootGitDirectoryPath(String[] args) { - rootGitDirectoryPath = args[1]; + private void loadConfigFile() throws InvalidConfigFileException, IOException { + config = new Config(configFilePath); } private void printUsage() { diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java index d1c2201408..f13116e80a 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/WLGitBridgeServer.java @@ -35,9 +35,10 @@ public class WLGitBridgeServer { * Constructs an instance of the server. * @param port the port number to listen on * @param rootGitDirectoryPath the root directory path containing the git repositories + * @param apiKey * @throws ServletException if the servlet throws an exception */ - public WLGitBridgeServer(final int port, String rootGitDirectoryPath) throws ServletException, InvalidRootDirectoryPathException { + public WLGitBridgeServer(final int port, String rootGitDirectoryPath, String apiKey) throws ServletException, InvalidRootDirectoryPathException { this.port = port; this.rootGitDirectoryPath = rootGitDirectoryPath; Log.setLog(new NullLogger()); diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileException.java new file mode 100644 index 0000000000..9e69917047 --- /dev/null +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileException.java @@ -0,0 +1,19 @@ +package uk.ac.ic.wlgitbridge.application.exception; + +/** + * Created by Winston on 05/12/14. + */ +public class InvalidConfigFileException extends Exception { + + private final String missingMember; + + public InvalidConfigFileException(String missingMember) { + + this.missingMember = missingMember; + } + + public String getMissingMember() { + return missingMember; + } + +} diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java index 0d71855840..530daef771 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/git/exception/InvalidRootDirectoryPathException.java @@ -3,5 +3,6 @@ package uk.ac.ic.wlgitbridge.git.exception; /** * Created by Winston on 03/11/14. */ -public class InvalidRootDirectoryPathException extends Throwable { +public class InvalidRootDirectoryPathException extends Exception { + } diff --git a/services/git-bridge/src/uk/ac/ic/wlgitbridge/util/Util.java b/services/git-bridge/src/uk/ac/ic/wlgitbridge/util/Util.java index e12b749b4e..d0eaa3aba4 100644 --- a/services/git-bridge/src/uk/ac/ic/wlgitbridge/util/Util.java +++ b/services/git-bridge/src/uk/ac/ic/wlgitbridge/util/Util.java @@ -1,5 +1,8 @@ package uk.ac.ic.wlgitbridge.util; +import java.io.BufferedReader; +import java.io.IOException; + /** * Created by Winston on 19/11/14. */ @@ -43,4 +46,12 @@ public class Util { return result; } + public static String getContentsOfReader(BufferedReader reader) throws IOException { + StringBuilder sb = new StringBuilder(); + for (String line; (line = reader.readLine()) != null; ) { + sb.append(line); + } + return sb.toString(); + } + } diff --git a/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/ConfigTest.java b/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/ConfigTest.java new file mode 100644 index 0000000000..1f8e5385d6 --- /dev/null +++ b/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/ConfigTest.java @@ -0,0 +1,32 @@ +package uk.ac.ic.wlgitbridge.application; + +import org.junit.Test; + +import java.io.IOException; + +public class ConfigTest { + + @Test + public void isReadingConfigCorrectly() throws IOException { +// Config config = new Config("/Users/Roxy/Code/java/writelatex-git-bridge/bin/config.json"); +// Assert.assertEquals(80, config.getPort()); +// Assert.assertEquals("/var/wlgb/git", config.getRootGitDirectory()); +// Assert.assertEquals("", config.getAPIKey()); + } + + @Test + public void testGetPort() throws Exception { + + } + + @Test + public void testGetRootGitDirectory() throws Exception { + + } + + @Test + public void testGetAPIKey() throws Exception { + + } + +} \ No newline at end of file diff --git a/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileExceptionTest.java b/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileExceptionTest.java new file mode 100644 index 0000000000..94b24e7804 --- /dev/null +++ b/services/git-bridge/test/unit/uk/ac/ic/wlgitbridge/application/exception/InvalidConfigFileExceptionTest.java @@ -0,0 +1,13 @@ +package uk.ac.ic.wlgitbridge.application.exception; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InvalidConfigFileExceptionTest { + + @Test + public void testGetMissingMember() throws Exception { + + } +} \ No newline at end of file