support graph-create and graph-drop subcommand (#2) (#95)
diff --git a/src/main/java/com/baidu/hugegraph/cmd/HugeGraphCommand.java b/src/main/java/com/baidu/hugegraph/cmd/HugeGraphCommand.java index 3e1a80e..42e41a1 100644 --- a/src/main/java/com/baidu/hugegraph/cmd/HugeGraphCommand.java +++ b/src/main/java/com/baidu/hugegraph/cmd/HugeGraphCommand.java
@@ -57,7 +57,8 @@ public class HugeGraphCommand { - private static final int DEFAULT_CLEAR_TIMEOUT = 300; + private static final int DEFAULT_GRAPH_CLEAR_TIMEOUT = 300; + private static final int DEFAULT_GRAPH_CREATE_TIMEOUT = 300; private SubCommands subCommands; @@ -267,6 +268,26 @@ dumpManager.dumpFormatter(dump.formatter()); dumpManager.dump(); break; + case "graph-create": + SubCommands.GraphCreate graphCreate = this.subCommand(subCmd); + if (timeout() < DEFAULT_GRAPH_CREATE_TIMEOUT) { + this.timeout(DEFAULT_GRAPH_CREATE_TIMEOUT); + } + graphsManager = manager(GraphsManager.class); + graphsManager.create(graphCreate.name(), graphCreate.config()); + Printer.print("Graph '%s' is created", graphCreate.name()); + break; + case "graph-clone": + SubCommands.GraphClone graphClone = this.subCommand(subCmd); + if (timeout() < DEFAULT_GRAPH_CREATE_TIMEOUT) { + this.timeout(DEFAULT_GRAPH_CREATE_TIMEOUT); + } + graphsManager = manager(GraphsManager.class); + graphsManager.clone(graphClone.name(), + graphClone.cloneGraphName()); + Printer.print("Graph '%s' is created(cloned from '%s')", + graphClone.name(), graphClone.cloneGraphName()); + break; case "graph-list": graphsManager = manager(GraphsManager.class); Printer.printList("Graphs", graphsManager.list()); @@ -278,13 +299,22 @@ break; case "graph-clear": SubCommands.GraphClear graphClear = this.subCommand(subCmd); - if (timeout() < DEFAULT_CLEAR_TIMEOUT) { - this.timeout(DEFAULT_CLEAR_TIMEOUT); + if (timeout() < DEFAULT_GRAPH_CLEAR_TIMEOUT) { + this.timeout(DEFAULT_GRAPH_CLEAR_TIMEOUT); } graphsManager = manager(GraphsManager.class); graphsManager.clear(this.graph(), graphClear.confirmMessage()); Printer.print("Graph '%s' is cleared", this.graph()); break; + case "graph-drop": + SubCommands.GraphDrop graphDrop = this.subCommand(subCmd); + if (timeout() < DEFAULT_GRAPH_CLEAR_TIMEOUT) { + this.timeout(DEFAULT_GRAPH_CLEAR_TIMEOUT); + } + graphsManager = manager(GraphsManager.class); + graphsManager.drop(this.graph(), graphDrop.confirmMessage()); + Printer.print("Graph '%s' is dropped", this.graph()); + break; case "graph-mode-set": SubCommands.GraphModeSet graphModeSet = this.subCommand(subCmd); graphsManager = manager(GraphsManager.class);
diff --git a/src/main/java/com/baidu/hugegraph/cmd/SubCommands.java b/src/main/java/com/baidu/hugegraph/cmd/SubCommands.java index 92bd2e0..0102123 100644 --- a/src/main/java/com/baidu/hugegraph/cmd/SubCommands.java +++ b/src/main/java/com/baidu/hugegraph/cmd/SubCommands.java
@@ -59,9 +59,12 @@ } private void initSubCommands() { + this.commands.put("graph-create", new GraphCreate()); + this.commands.put("graph-clone", new GraphClone()); this.commands.put("graph-list", new GraphList()); this.commands.put("graph-get", new GraphGet()); this.commands.put("graph-clear", new GraphClear()); + this.commands.put("graph-drop", new GraphDrop()); this.commands.put("graph-mode-set", new GraphModeSet()); this.commands.put("graph-mode-get", new GraphModeGet()); @@ -370,6 +373,45 @@ } } + @Parameters(commandDescription = "Create graph with config") + public static class GraphCreate { + + @Parameter(names = {"--name", "-n"}, arity = 1, + description = "The name of new created graph, default is g") + public String name = "g"; + + @ParametersDelegate + private ConfigFile configFile = new ConfigFile(); + + public String name() { + return this.name; + } + + public String config() { + return this.configFile.config; + } + } + + @Parameters(commandDescription = "Clone graph") + public static class GraphClone { + + @Parameter(names = {"--name", "-n"}, arity = 1, + description = "The name of new created graph, default is g") + public String name = "g"; + + @Parameter(names = {"--clone-graph-name"}, arity = 1, + description = "The name of cloned graph, default is hugegraph") + public String cloneGraphName = "hugegraph"; + + public String name() { + return this.name; + } + + public String cloneGraphName() { + return this.cloneGraphName; + } + } + @Parameters(commandDescription = "List all graphs") public static class GraphList { } @@ -381,7 +423,18 @@ public static class GraphClear { @ParametersDelegate - private ConfirmMessage message = new ConfirmMessage(); + private ClearConfirmMessage message = new ClearConfirmMessage(); + + public String confirmMessage() { + return this.message.confirmMessage; + } + } + + @Parameters(commandDescription = "Drop graph") + public static class GraphDrop { + + @ParametersDelegate + private DropConfirmMessage message = new DropConfirmMessage(); public String confirmMessage() { return this.message.confirmMessage; @@ -736,7 +789,7 @@ public String url = null; } - public static class ConfirmMessage { + public static class ClearConfirmMessage { @Parameter(names = {"--confirm-message", "-c"}, arity = 1, description = "Confirm message of graph clear is " + @@ -746,6 +799,16 @@ public String confirmMessage; } + public static class DropConfirmMessage { + + @Parameter(names = {"--confirm-message", "-c"}, arity = 1, + description = "Confirm message of graph clear is " + + "\"I'm sure to drop the graph\". " + + "(Note: include \"\")", + required = true) + public String confirmMessage; + } + public static class Mode { @Parameter(names = {"--graph-mode", "-m"}, arity = 1, @@ -765,6 +828,14 @@ public String script; } + public static class ConfigFile { + + @Parameter(names = {"--file", "-f"}, arity = 1, + converter = FileNameToContentConverter.class, + description = "Creating graph config file") + public String config; + } + public static class GremlinScript { @Parameter(names = {"--script", "-s"}, arity = 1,
diff --git a/src/main/java/com/baidu/hugegraph/manager/GraphsManager.java b/src/main/java/com/baidu/hugegraph/manager/GraphsManager.java index 6561975..b88fb8f 100644 --- a/src/main/java/com/baidu/hugegraph/manager/GraphsManager.java +++ b/src/main/java/com/baidu/hugegraph/manager/GraphsManager.java
@@ -32,6 +32,14 @@ super(info, "graphs"); } + public Map<String, String> create(String name, String config) { + return this.client.graphs().createGraph(name, config); + } + + public Map<String, String> clone(String name, String cloneGraphName) { + return this.client.graphs().cloneGraph(name, cloneGraphName); + } + public List<String> list() { return this.client.graphs().listGraph(); } @@ -44,6 +52,10 @@ this.client.graphs().clearGraph(graph, confirmMessage); } + public void drop(String graph, String confirmMessage) { + this.client.graphs().dropGraph(graph, confirmMessage); + } + public void mode(String graph, GraphMode mode) { this.client.graphs().mode(graph, mode); }