Skip to content

Commit 79528ea

Browse files
committed
Merge branch '3.8-dev'
2 parents e1a5eab + 250b4ea commit 79528ea

14 files changed

Lines changed: 189 additions & 65 deletions

File tree

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ private static TraversalStrategy tryToConstructStrategy(final String strategyNam
9595
return (TraversalStrategy) clazz.getMethod("create", Configuration.class).invoke(null, conf);
9696
}
9797
} catch (Exception ex) {
98-
throw new IllegalStateException("TraversalStrategy not recognized - " + strategyName, ex);
98+
throw new IllegalStateException("TraversalStrategy cannot be instantiated - " + strategyName, ex);
9999
}
100100
}
101101
}

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.commons.lang3.StringUtils;
2424
import org.apache.tinkerpop.gremlin.language.grammar.GremlinParser;
2525
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
26+
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
2627
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
2728
import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
2829

@@ -249,12 +250,22 @@ public Void visitTraversalStrategy(final GremlinParser.TraversalStrategyContext
249250

250251
final List<ParseTree> configs = ctx.children.stream().
251252
filter(c -> c instanceof GremlinParser.ConfigurationContext).collect(Collectors.toList());
252-
253-
// the rest are the arguments to the strategy
254-
for (int ix = 0; ix < configs.size(); ix++) {
255-
visit(configs.get(ix));
256-
if (ix < configs.size() - 1)
257-
sb.append(", ");
253+
if (configs.size() > 0 && ctx.children.stream().anyMatch(t -> t.getText().equals(OptionsStrategy.class.getSimpleName()))) {
254+
sb.append("new Dictionary<string, object> {");
255+
for (int ix = 0; ix < configs.size(); ix++) {
256+
sb.append("{\"").append(configs.get(ix).getChild(0).getText());
257+
sb.append("\",");
258+
visit(configs.get(ix).getChild(2));
259+
sb.append("},");
260+
}
261+
sb.append("}");
262+
} else {
263+
// the rest are the arguments to the strategy
264+
for (int ix = 0; ix < configs.size(); ix++) {
265+
visit(configs.get(ix));
266+
if (ix < configs.size() - 1)
267+
sb.append(", ");
268+
}
258269
}
259270

260271
sb.append(")");;
@@ -274,6 +285,11 @@ public Void visitConfiguration(final GremlinParser.ConfigurationContext ctx) {
274285
// find the last "List" in sb and replace it with "HashSet"
275286
final int ix = sb.lastIndexOf("List<object>");
276287
sb.replace(ix, ix + 12, "HashSet<string>");
288+
} else if (ctx.getChild(0).getText().equals("keys")) {
289+
// find the last "List" in sb and replace it with "HashSet"
290+
final int ix = sb.lastIndexOf("List<object>");
291+
if (ix > -1)
292+
sb.replace(ix, ix + 12, "List<string>");
277293
}
278294

279295
return null;

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GoTranslateVisitor.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.antlr.v4.runtime.tree.TerminalNode;
2424
import org.apache.commons.lang3.StringUtils;
2525
import org.apache.tinkerpop.gremlin.language.grammar.GremlinParser;
26+
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
2627
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
2728
import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
2829

@@ -198,20 +199,32 @@ public Void visitTraversalStrategy(final GremlinParser.TraversalStrategyContext
198199
else {
199200
String strategyName = ctx.getChild(0).getText().equals("new") ? ctx.getChild(1).getText() : ctx.getChild(0).getText();
200201
sb.append(GO_PACKAGE_NAME).append(strategyName).append("(");
201-
sb.append(GO_PACKAGE_NAME + strategyName + "Config{");
202202

203203
// get a list of all the arguments to the strategy - i.e. anything not a terminal node
204204
final List<ParseTree> configs = ctx.children.stream().
205205
filter(c -> c instanceof GremlinParser.ConfigurationContext).collect(Collectors.toList());
206206

207-
// the rest are the arguments to the strategy
208-
for (int ix = 0; ix < configs.size(); ix++) {
209-
visit(configs.get(ix));
210-
if (ix < configs.size() - 1)
211-
sb.append(", ");
207+
if (configs.size() > 0 && ctx.children.stream().anyMatch(t -> t.getText().equals(OptionsStrategy.class.getSimpleName()))) {
208+
sb.append("map[string]interface{}{");
209+
for (int ix = 0; ix < configs.size(); ix++) {
210+
sb.append("\"").append(configs.get(ix).getChild(0).getText()).append("\":");
211+
visit(configs.get(ix).getChild(2));
212+
if (ix < configs.size() - 1)
213+
sb.append(", ");
214+
}
215+
sb.append("}");
216+
} else {
217+
// the rest are the arguments to the strategy
218+
sb.append(GO_PACKAGE_NAME + strategyName + "Config{");
219+
for (int ix = 0; ix < configs.size(); ix++) {
220+
visit(configs.get(ix));
221+
if (ix < configs.size() - 1)
222+
sb.append(", ");
223+
}
224+
sb.append("}");
212225
}
213226

214-
sb.append("})");
227+
sb.append(")");
215228
}
216229

217230
return null;

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.antlr.v4.runtime.tree.ParseTree;
2222
import org.antlr.v4.runtime.tree.TerminalNode;
2323
import org.apache.tinkerpop.gremlin.language.grammar.GremlinParser;
24+
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.OptionsStrategy;
2425
import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
2526
import org.apache.tinkerpop.gremlin.util.DatetimeHelper;
2627

@@ -75,10 +76,20 @@ public Void visitTraversalStrategy(final GremlinParser.TraversalStrategyContext
7576
final List<ParseTree> configs = ctx.children.stream().
7677
filter(c -> c instanceof GremlinParser.ConfigurationContext).collect(Collectors.toList());
7778

78-
// the rest are the arguments to the strategy
79-
for (ParseTree config : configs) {
80-
sb.append(".");
81-
visit(config);
79+
if (configs.size() > 0 && ctx.getChild(1).getText().equals(OptionsStrategy.class.getSimpleName())) {
80+
for (int ix = 0; ix < configs.size(); ix++) {
81+
sb.append(".with(\"");
82+
sb.append(configs.get(ix).getChild(0).getText());
83+
sb.append("\", ");
84+
visit(configs.get(ix).getChild(2));
85+
sb.append(")");
86+
}
87+
} else {
88+
// the rest are the arguments to the strategy
89+
for (ParseTree config : configs) {
90+
sb.append(".");
91+
visit(config);
92+
}
8293
}
8394

8495
sb.append(".create()");

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/AbstractWarningVerificationStrategy.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
*/
1919
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
2020

21+
import org.apache.commons.configuration2.BaseConfiguration;
2122
import org.apache.commons.configuration2.Configuration;
2223
import org.apache.commons.configuration2.MapConfiguration;
24+
import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
2325
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
2426
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
2527
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
28+
import org.apache.tinkerpop.gremlin.util.GremlinDisabledListDelimiterHandler;
2629
import org.slf4j.Logger;
2730
import org.slf4j.LoggerFactory;
2831

@@ -73,10 +76,12 @@ public void apply(final Traversal.Admin<?, ?> traversal) {
7376

7477
@Override
7578
public Configuration getConfiguration() {
76-
final Map<String, Object> m = new LinkedHashMap<>(2);
77-
m.put(THROW_EXCEPTION, this.throwException);
78-
m.put(LOG_WARNING, this.logWarning);
79-
return new MapConfiguration(m);
79+
final BaseConfiguration conf = new BaseConfiguration();
80+
conf.setListDelimiterHandler(GremlinDisabledListDelimiterHandler.instance());
81+
conf.setProperty(THROW_EXCEPTION, this.throwException);
82+
conf.setProperty(LOG_WARNING, this.logWarning);
83+
84+
return conf;
8085
}
8186

8287
public static abstract class Builder<T extends AbstractWarningVerificationStrategy, B extends Builder> {

gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategy.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStep;
2929
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AddPropertyStep;
3030
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Parameters;
31+
import org.apache.tinkerpop.gremlin.util.GremlinDisabledListDelimiterHandler;
3132

3233
import java.util.ArrayList;
3334
import java.util.Arrays;
@@ -77,18 +78,19 @@ void verify(final Traversal.Admin<?, ?> traversal) throws VerificationException
7778
}
7879

7980
public static ReservedKeysVerificationStrategy create(final Configuration configuration) {
81+
Set<String> keys = (Set) configuration.getProperty(KEYS);
82+
if (null == keys) keys = new LinkedHashSet<>(DEFAULT_RESERVED_KEYS);
8083
return build()
81-
.reservedKeys(configuration.getList(KEYS, new ArrayList<>(DEFAULT_RESERVED_KEYS)).
82-
stream().map(Object::toString).collect(Collectors.toCollection(LinkedHashSet::new)))
84+
.reservedKeys(keys)
8385
.throwException(configuration.getBoolean(THROW_EXCEPTION, false))
8486
.logWarning(configuration.getBoolean(LOG_WARNING, false)).create();
8587
}
8688

8789
@Override
8890
public Configuration getConfiguration() {
89-
final Configuration c = super.getConfiguration();
90-
c.setProperty(KEYS, this.reservedKeys);
91-
return c;
91+
final Configuration conf = super.getConfiguration();
92+
conf.setProperty(KEYS, this.reservedKeys);
93+
return conf;
9294
}
9395

9496
public static ReservedKeysVerificationStrategy.Builder build() {

gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static Iterable<Object[]> generateTestParameters() {
7171
{"new ReservedKeysVerificationStrategy(logWarning: true, throwException: true)", ReservedKeysVerificationStrategy.build().logWarning(true).throwException(true).create()},
7272
{"ReservedKeysVerificationStrategy(logWarning: true, throwException: true)", ReservedKeysVerificationStrategy.build().logWarning(true).throwException(true).create()},
7373
{"new ReservedKeysVerificationStrategy(logWarning: true, throwException: false)", ReservedKeysVerificationStrategy.build().logWarning(true).create()},
74-
{"new ReservedKeysVerificationStrategy(keys: ['a','b'])", ReservedKeysVerificationStrategy.build().reservedKeys(new LinkedHashSet<>(Arrays.asList("a", "b"))).create()},
74+
{"new ReservedKeysVerificationStrategy(keys: {'a','b'})", ReservedKeysVerificationStrategy.build().reservedKeys(new LinkedHashSet<>(Arrays.asList("a", "b"))).create()},
7575
{"new SubgraphStrategy(vertices: hasLabel('person'))", SubgraphStrategy.build().vertices(hasLabel("person")).create()},
7676
{"SubgraphStrategy(vertices: hasLabel('person'))", SubgraphStrategy.build().vertices(hasLabel("person")).create()},
7777
{"new SubgraphStrategy(vertices: hasLabel('person'), edges: hasLabel('knows'), vertexProperties: has('time', between(1234, 4321)), checkAdjacentVertices: true)", SubgraphStrategy.build().vertices(hasLabel("person")).edges(hasLabel("knows")).vertexProperties(has("time", P.between(1234, 4321))).checkAdjacentVertices(true).create()},

gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,15 @@ public static Collection<Object[]> data() {
583583
null,
584584
null,
585585
"g.with_bulk(x)"},
586+
{"g.withStrategies(ReservedKeysVerificationStrategy(keys:{'x','y'}))", /// if you happen to do [] you get a List in translation...........
587+
"g.withStrategies(ReservedKeysVerificationStrategy(keys:{'x', 'y'}))",
588+
"g.withStrategies(ReservedKeysVerificationStrategy(keys:set0))",
589+
"g.WithStrategies(new ReservedKeysVerificationStrategy(keys: new HashSet<object> { \"x\", \"y\" }))",
590+
"g.WithStrategies(gremlingo.ReservedKeysVerificationStrategy(gremlingo.ReservedKeysVerificationStrategyConfig{Keys: gremlingo.NewSimpleSet(\"x\", \"y\")}))",
591+
"g.withStrategies(new ReservedKeysVerificationStrategy(keys:['x', 'y'] as Set))",
592+
"g.withStrategies(ReservedKeysVerificationStrategy.build().keys(new HashSet<Object>() {{ add(\"x\"); add(\"y\"); }}).create())",
593+
"g.withStrategies(new ReservedKeysVerificationStrategy({keys: new Set([\"x\", \"y\"])}))",
594+
"g.with_strategies(ReservedKeysVerificationStrategy(keys={'x', 'y'}))"},
586595
{"g.withStrategies(ReadOnlyStrategy)",
587596
null,
588597
null,
@@ -592,6 +601,15 @@ public static Collection<Object[]> data() {
592601
"g.withStrategies(ReadOnlyStrategy.instance())",
593602
"g.withStrategies(new ReadOnlyStrategy())",
594603
"g.with_strategies(ReadOnlyStrategy())"},
604+
{"g.withStrategies(new OptionsStrategy(myVar:10000))",
605+
null,
606+
"g.withStrategies(new OptionsStrategy(myVar:number0))",
607+
"g.WithStrategies(new OptionsStrategy(new Dictionary<string, object> {{\"myVar\",10000},}))",
608+
"g.WithStrategies(gremlingo.OptionsStrategy(map[string]interface{}{\"myVar\":10000}))",
609+
null,
610+
"g.withStrategies(OptionsStrategy.build().with(\"myVar\", 10000).create())",
611+
"g.withStrategies(new OptionsStrategy({myVar: 10000}))",
612+
"g.with_strategies(OptionsStrategy(my_var=10000))"}, ////////////////////////SO NOT RIGHT
595613
{"g.withStrategies(new SeedStrategy(seed:10000))",
596614
null,
597615
"g.withStrategies(new SeedStrategy(seed:number0))",

0 commit comments

Comments
 (0)