TINKERPOP-1562 Abstracted groovysh/io to GremlinShellEnvironment The GremlinShellEnvironment provides a way to abstract groovysh and io classes (i.e. groovy specific classes) so that plugins don't need to depend on gremlin-groovy at all.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/30a76e69 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/30a76e69 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/30a76e69 Branch: refs/heads/TINKERPOP-1562 Commit: 30a76e69af749223b2dc7b9a9b05030cde3a03b2 Parents: daad833 Author: Stephen Mallette <sp...@genoprime.com> Authored: Wed Nov 23 17:10:13 2016 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Dec 1 06:41:43 2016 -0500 ---------------------------------------------------------------------- .../console/jsr223/GephiRemoteAcceptor.groovy | 15 ++++---- .../console/plugin/GephiRemoteAcceptor.groovy | 2 ++ .../gremlin/console/plugin/PluggedIn.groovy | 26 +++++++++++++- .../console/jsr223/DriverGremlinPlugin.java | 8 ++--- .../console/jsr223/DriverRemoteAcceptor.java | 16 ++++----- .../console/jsr223/GephiGremlinPlugin.java | 10 ++---- .../jsr223/console/ConsoleCustomizer.java | 7 +--- .../jsr223/console/GremlinShellEnvironment.java | 37 ++++++++++++++++++++ .../hadoop/jsr223/HadoopGremlinPlugin.java | 7 ++-- .../hadoop/jsr223/HadoopRemoteAcceptor.java | 22 ++++++------ 10 files changed, 99 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy index dbc1156..4e41fa4 100644 --- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy +++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy @@ -29,14 +29,13 @@ import org.apache.http.impl.client.CloseableHttpClient import org.apache.http.impl.client.HttpClients import org.apache.http.util.EntityUtils import org.apache.tinkerpop.gremlin.console.plugin.GephiTraversalVisualizationStrategy +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment import org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor import org.apache.tinkerpop.gremlin.jsr223.console.RemoteException import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource import org.apache.tinkerpop.gremlin.structure.Edge import org.apache.tinkerpop.gremlin.structure.Graph import org.apache.tinkerpop.gremlin.structure.Vertex -import org.codehaus.groovy.tools.shell.Groovysh -import org.codehaus.groovy.tools.shell.IO /** * @author Stephen Mallette (http://stephen.genoprime.com) @@ -48,8 +47,7 @@ class GephiRemoteAcceptor implements RemoteAcceptor { private int port = 8080 private String workspace = "workspace1" - private final Groovysh shell - private final IO io + private final GremlinShellEnvironment shell private final Random rand = new Random(); boolean traversalSubmittedForViz = false @@ -64,9 +62,8 @@ class GephiRemoteAcceptor implements RemoteAcceptor { private CloseableHttpClient httpclient = HttpClients.createDefault(); - public GephiRemoteAcceptor(final Groovysh shell, final IO io) { + public GephiRemoteAcceptor(final GremlinShellEnvironment shell) { this.shell = shell - this.io = io // traversal visualization defaults vizStepDelay = 1000; // 1 second pause between viz of steps @@ -129,13 +126,13 @@ class GephiRemoteAcceptor implements RemoteAcceptor { else if (args[0] == "startSize") parseVizStartSize(args[1]) else if (args[0] == "visualTraversal") { - def graphVar = shell.interp.context.getVariable(args[1]) + def graphVar = shell.getVariable(args[1]) if (!(graphVar instanceof Graph)) throw new RemoteException("Invalid argument to 'visualTraversal' - first parameter must be a Graph instance") def gVar = args.size() == 3 ? args[2] : "vg" def theG = GraphTraversalSource.build().with(new GephiTraversalVisualizationStrategy(this)).create(graphVar) - shell.interp.context.setVariable(gVar, theG) + shell.setVariable(gVar, theG) } else throw new RemoteException("Invalid config arguments - check syntax") @@ -151,7 +148,7 @@ class GephiRemoteAcceptor implements RemoteAcceptor { final String line = String.join(" ", args) if (line.trim() == "clear") { clearGraph() - io.out.println("Gephi workspace cleared") + shell.println("Gephi workspace cleared") return } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiRemoteAcceptor.groovy ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiRemoteAcceptor.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiRemoteAcceptor.groovy index 4198444..902a479 100644 --- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiRemoteAcceptor.groovy +++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiRemoteAcceptor.groovy @@ -40,7 +40,9 @@ import org.codehaus.groovy.tools.shell.IO /** * @author Stephen Mallette (http://stephen.genoprime.com) * @author Randall Barnhart (rando...@gmail.com) + * @deprecated As of release 3.2.4, replaced by {@link org.apache.tinkerpop.gremlin.console.jsr223.GephiRemoteAcceptor} */ +@Deprecated class GephiRemoteAcceptor implements RemoteAcceptor { private String host = "localhost" http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy index 7a08a9d..364e6ef 100644 --- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy +++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy @@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer import org.apache.tinkerpop.gremlin.jsr223.ScriptCustomizer import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment import org.codehaus.groovy.tools.shell.Groovysh import org.codehaus.groovy.tools.shell.IO @@ -111,7 +112,30 @@ class PluggedIn { return Optional.empty() ConsoleCustomizer customizer = (ConsoleCustomizer) corePlugin.getCustomizers("gremlin-groovy").get().find{ it instanceof ConsoleCustomizer } - return Optional.of(new RemoteAcceptorAdapter(customizer.getRemoteAcceptor([(ConsoleCustomizer.ENV_CONSOLE_SHELL): shell, (ConsoleCustomizer.ENV_CONSOLE_IO): io]))) + return Optional.of(new RemoteAcceptorAdapter(customizer.getRemoteAcceptor(new GroovyGremlinShellEnvironment()))) + } + + public class GroovyGremlinShellEnvironment implements GremlinShellEnvironment { + + @Override + def <T> T getVariable(final String variableName) { + return (T) shell.interp.context.getVariable(variableName) + } + + @Override + def <T> void setVariable(final String variableName, final T variableValue) { + shell.interp.context.setVariable(variableName, variableValue) + } + + @Override + void println(final String line) { + io.println(line) + } + + @Override + def <T> T execute(final String line) { + return (T) shell.execute(line) + } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java index 89cec10..fb78ee9 100644 --- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java +++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java @@ -51,9 +51,7 @@ import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin; import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer; import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer; import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer; -import org.codehaus.groovy.tools.shell.Groovysh; - -import java.util.Map; +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment; /** * @author Stephen Mallette (http://stephen.genoprime.com) @@ -99,8 +97,8 @@ public class DriverGremlinPlugin extends AbstractGremlinPlugin { private static class DriverConsoleCustomizer implements ConsoleCustomizer { @Override - public org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor getRemoteAcceptor(final Map<String, Object> environment) { - return new DriverRemoteAcceptor((Groovysh) environment.get(ConsoleCustomizer.ENV_CONSOLE_SHELL)); + public org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor getRemoteAcceptor(final GremlinShellEnvironment environment) { + return new DriverRemoteAcceptor(environment); } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java index 93ac184..aa02606 100644 --- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java +++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java @@ -25,10 +25,10 @@ import org.apache.tinkerpop.gremlin.driver.Result; import org.apache.tinkerpop.gremlin.driver.ResultSet; import org.apache.tinkerpop.gremlin.driver.exception.ResponseException; import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode; +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment; import org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor; import org.apache.tinkerpop.gremlin.jsr223.console.RemoteException; import org.apache.tinkerpop.gremlin.structure.util.ElementHelper; -import org.codehaus.groovy.tools.shell.Groovysh; import javax.security.sasl.SaslException; import java.io.FileNotFoundException; @@ -75,10 +75,10 @@ public class DriverRemoteAcceptor implements RemoteAcceptor { private static final String TOKEN_SESSION_MANAGED = "session-managed"; private static final List<String> POSSIBLE_TOKENS = Arrays.asList(TOKEN_TIMEOUT, TOKEN_ALIAS); - private final Groovysh shell; + private final GremlinShellEnvironment shellEnvironment; - public DriverRemoteAcceptor(final Groovysh shell) { - this.shell = shell; + public DriverRemoteAcceptor(final GremlinShellEnvironment shellEnvironment) { + this.shellEnvironment = shellEnvironment; } @Override @@ -152,11 +152,11 @@ public class DriverRemoteAcceptor implements RemoteAcceptor { @Override public Object submit(final List<String> args) throws RemoteException { - final String line = getScript(String.join(" ", args), this.shell); + final String line = getScript(String.join(" ", args), this.shellEnvironment); try { final List<Result> resultSet = send(line); - this.shell.getInterp().getContext().setProperty(RESULT, resultSet); + this.shellEnvironment.setVariable(RESULT, resultSet); return resultSet.stream().map(result -> result.getObject()).iterator(); } catch (SaslException sasl) { throw new RemoteException("Security error - check username/password and related settings", sasl); @@ -232,7 +232,7 @@ public class DriverRemoteAcceptor implements RemoteAcceptor { /** * Retrieve a script as defined in the shell context. This allows for multi-line scripts to be submitted. */ - public static String getScript(final String submittedScript, final Groovysh shell) { - return submittedScript.startsWith("@") ? shell.getInterp().getContext().getProperty(submittedScript.substring(1)).toString() : submittedScript; + public static String getScript(final String submittedScript, final GremlinShellEnvironment shellEnvironment) { + return submittedScript.startsWith("@") ? shellEnvironment.getVariable(submittedScript.substring(1)).toString() : submittedScript; } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java ---------------------------------------------------------------------- diff --git a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java index 7698112..c30f864 100644 --- a/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java +++ b/gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java @@ -20,10 +20,7 @@ package org.apache.tinkerpop.gremlin.console.jsr223; import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin; import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer; -import org.codehaus.groovy.tools.shell.Groovysh; -import org.codehaus.groovy.tools.shell.IO; - -import java.util.Map; +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment; /** * @author Stephen Mallette (http://stephen.genoprime.com) @@ -37,9 +34,8 @@ public class GephiGremlinPlugin extends AbstractGremlinPlugin { private static class GephiConsoleCustomizer implements ConsoleCustomizer { @Override - public org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor getRemoteAcceptor(final Map<String, Object> environment) { - return new GephiRemoteAcceptor((Groovysh) environment.get(ConsoleCustomizer.ENV_CONSOLE_SHELL), - (IO) environment.get(ConsoleCustomizer.ENV_CONSOLE_IO)); + public org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor getRemoteAcceptor(final GremlinShellEnvironment gremlinShellEnvironment) { + return new GephiRemoteAcceptor(gremlinShellEnvironment); } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java index 7b3d788..9204488 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java @@ -20,19 +20,14 @@ package org.apache.tinkerpop.gremlin.jsr223.console; import org.apache.tinkerpop.gremlin.jsr223.Customizer; -import java.util.Map; - /** * @author Stephen Mallette (http://stephen.genoprime.com) */ public interface ConsoleCustomizer extends Customizer { - public static final String ENV_CONSOLE_IO = "ConsolePluginAcceptor.io"; - public static final String ENV_CONSOLE_SHELL = "ConsolePluginAcceptor.shell"; - /** * Allows a plugin to utilize features of the {@code :remote} and {@code :submit} commands of the Gremlin Console. * This method does not need to be implemented if the plugin is not meant for the Console for some reason or * if it does not intend to take advantage of those commands. */ - public RemoteAcceptor getRemoteAcceptor(final Map<String, Object> environment); + public RemoteAcceptor getRemoteAcceptor(final GremlinShellEnvironment environment); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/GremlinShellEnvironment.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/GremlinShellEnvironment.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/GremlinShellEnvironment.java new file mode 100644 index 0000000..6fc1363 --- /dev/null +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/GremlinShellEnvironment.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tinkerpop.gremlin.jsr223.console; + +/** + * Provides an abstraction over a "Gremlin Shell" (i.e. the core of a console), enabling the plugin to not have to + * be hardcoded specifically to any particular shell, like the Gremlin Groovy Console, and thus allowing it to + * not have to depend on the gremlin-groovy module itself. + * + * @author Stephen Mallette (http://stephen.genoprime.com) + */ +public interface GremlinShellEnvironment { + + public <T> T getVariable(final String variableName); + + public <T> void setVariable(final String variableName, final T variableValue); + + public void println(final String line); + + public <T> T execute(final String line); +} http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopGremlinPlugin.java ---------------------------------------------------------------------- diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopGremlinPlugin.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopGremlinPlugin.java index 5e21027..b7403b6 100644 --- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopGremlinPlugin.java +++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopGremlinPlugin.java @@ -53,14 +53,13 @@ import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer; import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer; import org.apache.tinkerpop.gremlin.jsr223.LazyBindingsCustomizer; import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer; +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment; import org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor; -import org.codehaus.groovy.tools.shell.Groovysh; import javax.script.Bindings; import javax.script.SimpleBindings; import java.util.Collections; import java.util.HashSet; -import java.util.Map; import java.util.Optional; import java.util.Set; @@ -147,8 +146,8 @@ public final class HadoopGremlinPlugin extends AbstractGremlinPlugin { private static class HadoopConsoleCustomizer implements ConsoleCustomizer { @Override - public RemoteAcceptor getRemoteAcceptor(final Map<String, Object> environment) { - return new HadoopRemoteAcceptor((Groovysh) environment.get(ConsoleCustomizer.ENV_CONSOLE_SHELL)); + public RemoteAcceptor getRemoteAcceptor(final GremlinShellEnvironment environment) { + return new HadoopRemoteAcceptor(environment); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/30a76e69/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java ---------------------------------------------------------------------- diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java index f2367bd..1fcdab1 100644 --- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java +++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java @@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.hadoop.jsr223; import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader; import org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph; +import org.apache.tinkerpop.gremlin.jsr223.console.GremlinShellEnvironment; import org.apache.tinkerpop.gremlin.jsr223.console.RemoteAcceptor; import org.apache.tinkerpop.gremlin.jsr223.console.RemoteException; import org.apache.tinkerpop.gremlin.process.computer.ComputerResult; @@ -30,7 +31,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep; import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal; -import org.codehaus.groovy.tools.shell.Groovysh; import java.io.IOException; import java.util.Collections; @@ -47,12 +47,12 @@ public final class HadoopRemoteAcceptor implements RemoteAcceptor { private static final String SPACE = " "; private HadoopGraph hadoopGraph; - private Groovysh shell; + private GremlinShellEnvironment shellEnvironment; private boolean useSugar = false; private TraversalSource traversalSource; - public HadoopRemoteAcceptor(final Groovysh shell) { - this.shell = shell; + public HadoopRemoteAcceptor(final GremlinShellEnvironment shellEnvironment) { + this.shellEnvironment = shellEnvironment; } @Override @@ -60,9 +60,9 @@ public final class HadoopRemoteAcceptor implements RemoteAcceptor { if (args.size() != 1 && args.size() != 2) { throw new IllegalArgumentException("Usage: :remote connect " + HadoopGremlinPlugin.NAME + " <variable name of graph> <optional variable name of traversal source>"); } - this.hadoopGraph = (HadoopGraph) this.shell.getInterp().getContext().getVariable(args.get(0)); + this.hadoopGraph = this.shellEnvironment.getVariable(args.get(0)); if (args.size() == 2) - this.traversalSource = ((TraversalSource) this.shell.getInterp().getContext().getVariable(args.get(1))); + this.traversalSource = this.shellEnvironment.getVariable(args.get(1)); else this.traversalSource = this.hadoopGraph.traversal(); /// @@ -78,7 +78,7 @@ public final class HadoopRemoteAcceptor implements RemoteAcceptor { if (args.get(i).equals(USE_SUGAR)) this.useSugar = Boolean.valueOf(args.get(i + 1)); else if (args.get(i).equals(USE_TRAVERSAL_SOURCE)) { - this.traversalSource = ((TraversalSource) this.shell.getInterp().getContext().getVariable(args.get(i + 1))); + this.traversalSource = this.shellEnvironment.getVariable(args.get(i + 1)); } else throw new IllegalArgumentException("The provided configuration is unknown: " + args.get(i) + ":" + args.get(i + 1)); } @@ -92,12 +92,12 @@ public final class HadoopRemoteAcceptor implements RemoteAcceptor { @Override public Object submit(final List<String> args) throws RemoteException { try { - String script = getScript(String.join(SPACE, args), this.shell); + String script = getScript(String.join(SPACE, args), this.shellEnvironment); if (this.useSugar) script = SugarLoader.class.getCanonicalName() + ".load()\n" + script; final TraversalVertexProgram program = TraversalVertexProgram.build().traversal(this.traversalSource, "gremlin-groovy", script).create(this.hadoopGraph); final ComputerResult computerResult = VertexProgramStrategy.getComputer(this.traversalSource.getStrategies()).get().apply(this.hadoopGraph).program(program).submit().get(); - this.shell.getInterp().getContext().setVariable(RESULT, computerResult); + this.shellEnvironment.setVariable(RESULT, computerResult); /// final Traversal.Admin<ComputerResult, ?> traversal = new DefaultTraversal<>(computerResult.graph()); traversal.addStep(new ComputerResultStep<>(traversal)); @@ -121,7 +121,7 @@ public final class HadoopRemoteAcceptor implements RemoteAcceptor { /** * Retrieve a script as defined in the shell context. This allows for multi-line scripts to be submitted. */ - public static String getScript(final String submittedScript, final Groovysh shell) { - return submittedScript.startsWith("@") ? shell.getInterp().getContext().getProperty(submittedScript.substring(1)).toString() : submittedScript; + public static String getScript(final String submittedScript, final GremlinShellEnvironment shell) { + return submittedScript.startsWith("@") ? shell.getVariable(submittedScript.substring(1)).toString() : submittedScript; } }