@Override public Traversal<VertexProperty<String>, String> get_g_injectXg_VX1X_propertiesXnameX_nextX_value(final Object v1Id) { return g.<VertexProperty<String>>inject((VertexProperty) g.V(v1Id).properties("name").next()).value(); } }
@Override public Traversal<Integer, List<Integer>> get_g_injectX2X_chooseXisX1X__constantX10Xfold__foldX() { return g.inject(2).choose(__.is(1), __.constant(10).fold(), __.fold()); } }
@Override public Traversal<Integer, List<Integer>> get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX() { return g.inject(1).choose(__.is(1), __.constant(10).fold(), __.fold()); }
@Override public Traversal<Integer, Double> get_g_withSackX1X_injectX1X_repeatXsackXsumX_byXconstantX1XXX_timesX5X_emit_mathXsin__X_byXsackX() { return g.withSack(1).inject(1).repeat(__.sack((BiFunction) sum).by(__.constant(1))).times(10).emit().math("sin _").by(sack()); }
@Override public Traversal<VertexProperty<String>, String> get_g_injectXg_VX1X_propertiesXnameX_nextX_value(final Object v1Id) { return g.<VertexProperty<String>>inject((VertexProperty) g.V(v1Id).properties("name").next()).value(); } }
private void assertTranslation(final String expectedTranslation, final Object... objs) { final String script = GroovyTranslator.of("g").translate(g.inject(objs).asAdmin().getBytecode()); assertEquals(String.format("g.inject(%s)", expectedTranslation), script); assertThatScriptOk(script, "g", g); }
@Override public Traversal<Integer, List<Integer>> get_g_injectX2X_chooseXisX1X__constantX10Xfold__foldX() { return g.inject(2).choose(__.is(1), __.constant(10).fold(), __.fold()); } }
@Test public void shouldOverrideDefaultTypeTranslationWithSomethingBonkers() { final String thingToSuffixAllStringsWith = "-why-would-anyone-do-this"; final String script = GroovyTranslator.of("g", x -> x instanceof String ? x + thingToSuffixAllStringsWith : x). translate(g.inject("yyy", "xxx").asAdmin().getBytecode()); assertEquals(String.format("g.inject(\"yyy%s\",\"xxx%s\")", thingToSuffixAllStringsWith, thingToSuffixAllStringsWith), script); assertThatScriptOk(script, "g", g); }
@Override public Traversal<Integer, List<Integer>> get_g_injectX1X_chooseXisX1X__constantX10Xfold__foldX() { return g.inject(1).choose(__.is(1), __.constant(10).fold(), __.fold()); }
@Test public void shouldHandleEmptyMaps() { final Function identity = new Lambda.OneArgLambda("it.get()", "gremlin-groovy"); final String script = GroovyTranslator.of("g").translate(g.inject(Collections.emptyMap()).map(identity).asAdmin().getBytecode()); assertEquals("g.inject([]).map({it.get()})", script); assertThatScriptOk(script, "g", g); }
@Test public void shouldIncludeCustomTypeTranslationForSomethingSilly() throws Exception { final SillyClass notSillyEnough = SillyClass.from("not silly enough", 100); final GraphTraversalSource g = graph.traversal(); // without type translation we get uglinesss final String scriptBad = GroovyTranslator.of("g"). translate(g.inject(notSillyEnough).asAdmin().getBytecode()); assertEquals(String.format("g.inject(%s)", "not silly enough:100"), scriptBad); // with type translation we get valid gremlin final String scriptGood = GroovyTranslator.of("g", x -> x instanceof SillyClass ? new Translator.ScriptTranslator.Handled(String.format("org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslatorTest.SillyClass.from('%s', (int) %s)", ((SillyClass) x).getX(), ((SillyClass) x).getY())) : x). translate(g.inject(notSillyEnough).asAdmin().getBytecode()); assertEquals(String.format("g.inject(org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslatorTest.SillyClass.from('%s', (int) %s))", notSillyEnough.getX(), notSillyEnough.getY()), scriptGood); assertThatScriptOk(scriptGood, "g", g); final GremlinGroovyScriptEngine customEngine = new GremlinGroovyScriptEngine(new SillyClassTranslatorCustomizer()); final Bindings b = new SimpleBindings(); b.put("g", g); final Traversal t = customEngine.eval(g.inject(notSillyEnough).asAdmin().getBytecode(), b, "g"); final SillyClass sc = (SillyClass) t.next(); assertEquals(notSillyEnough.getX(), sc.getX()); assertEquals(notSillyEnough.getY(), sc.getY()); assertThat(t.hasNext(), is(false)); }
@Override public Traversal<Integer, Double> get_g_withSackX1X_injectX1X_repeatXsackXsumX_byXconstantX1XXX_timesX5X_emit_mathXsin__X_byXsackX() { return g.withSack(1).inject(1).repeat(__.sack((BiFunction) sum).by(__.constant(1))).times(10).emit().math("sin _").by(sack()); }
final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1) .create(); final String script1 = GroovyTranslator.of("g").translate(g.inject(vertex1).asAdmin().getBytecode()); assertEquals("g.inject(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex(" + "\"customer:10:foo bar \\$100#90\"," + final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2) .create(); final String script2 = GroovyTranslator.of("g").translate(g.inject(vertex2).asAdmin().getBytecode()); assertEquals("g.inject(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex(" + "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\"," + .setInV((DetachedVertex) vertex2) .create(); final String script3 = GroovyTranslator.of("g").translate(g.inject(edge).asAdmin().getBytecode()); assertEquals("g.inject(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge(" + "\"knows:30:foo bar \\$100:\\\\u0020\\\\u0024500#70\"," +