gremlin> :> g.V('15').hasLabel('ROOT').repeat(or(__.outE('delivers').and(has('source','node2'),has('ignore',P.neq('true'))),__.outE('contains')).inV().simplePath()).emit().path()
{"requestId":"XXXXXXXXXXXXXXXX","code":"UnsupportedOperationException","detailedMessage":"EdgeVertexStep only applies to Edges."}
gremlin> :> g.V('15').hasLabel('ROOT').repeat(where(outE('delivers').and(has('source','node2'),has('ignore',P.neq('true'))).or().outE('contains')).inV().simplePath()).emit().path()
{"requestId":"XXXXXXXXXXXXXXXX","code":"UnsupportedOperationException","detailedMessage":"EdgeVertexStep only applies to Edges."}
gremlin> :> g.V('15').hasLabel('ROOT').repeat(__.outE('delivers','contains').inV().simplePath()).emit().path()
==>[v[15],e[17][15-delivers->2],v[2]]
==>[v[15],e[17][15-delivers->2],v[2],e[11][2-delivers->4],v[4]]
==>[v[15],e[17][15-delivers->2],v[2],e[12][2-delivers->3],v[3]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5]]
==>[v[15],e[17][15-delivers->2],v[2],e[12][2-delivers->3],v[3],e[13][3-contains->6],v[6]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5],e[19][5-contains->7],v[7]]
==>[v[15],e[17][15-delivers->2],v[2],e[12][2-delivers->3],v[3],e[13][3-contains->6],v[6],e[14][6-contains->8],v[8]]
==>[v[15],e[17][15-delivers->2],v[2]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5],e[19][5-contains->7],v[7]]
gremlin> :> g.addV('ROOT').property(T.id,'1').property('innerId','node1').next()
==>v[1]
gremlin> :> g.addV('N').property(T.id,'2').property('innerId','').next()
==>v[2]
gremlin> :> g.addV('N').property(T.id,'3').property('innerId','').next()
==>v[3]
gremlin> :> g.addV('N').property(T.id,'4').property('innerId','').next()
==>v[4]
gremlin> :> g.addV('N').property(T.id,'5').property('innerId','').next()
==>v[5]
gremlin> :> g.addV('N').property(T.id,'6').property('innerId','').next()
==>v[6]
gremlin> :> g.addV('N').property(T.id,'7').property('innerId','').next()
==>v[7]
gremlin> :> g.addV('N').property(T.id,'8').property('innerId','').next()
==>v[8]
gremlin> :> g.addV('ROOT').property(T.id,'15').property('innerId','node2').next()
==>v[15]
gremlin> :> g.addE('delivers').from(__.V('1')).to(__.V('1')).property(T.id, '9').property('ignore','true').property('source','node1').next()
==>e[9][1-delivers->1]
gremlin> :> g.addE('delivers').from(__.V('1')).to(__.V('2')).property(T.id, '10').property('ignore','').property('source','node1').next()
==>e[10][1-delivers->2]
gremlin> :> g.addE('delivers').from(__.V('2')).to(__.V('4')).property(T.id, '11').property('ignore','').property('source','node1').next()
==>e[11][2-delivers->4]
gremlin> :> g.addE('delivers').from(__.V('2')).to(__.V('3')).property(T.id, '12').property('ignore','').property('source','node1').next()
==>e[12][2-delivers->3]
gremlin> :> g.addE('contains').from(__.V('3')).to(__.V('6')).property(T.id, '13').property('ignore','').property('source','').next()
==>e[13][3-contains->6]
gremlin> :> g.addE('contains').from(__.V('6')).to(__.V('8')).property(T.id, '14').property('ignore','').property('source','').next()
==>e[14][6-contains->8]
gremlin> :> g.addE('delivers').from(__.V('15')).to(__.V('15')).property(T.id, '16').property('ignore','true').property('source','node2').next()
==>e[16][15-delivers->15]
gremlin> :> g.addE('delivers').from(__.V('15')).to(__.V('2')).property(T.id, '17').property('ignore','').property('source','node2').next()
==>e[17][15-delivers->2]
gremlin> :> g.addE('delivers').from(__.V('2')).to(__.V('5')).property(T.id, '18').property('ignore','').property('source','node2').next()
==>e[18][2-delivers->5]
gremlin> :> g.addE('contains').from(__.V('5')).to(__.V('7')).property(T.id, '19').property('ignore','').property('source','').next()
==>e[19][5-contains->7]
gremlin> :> g.V('15').hasLabel('ROOT').repeat(coalesce(outE('delivers').and(has('ignore',P.neq('true')),has('source','node2')),outE('contains')).inV().simplePath()).emit().path()
==>[v[15],e[17][15-delivers->2],v[2]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5]]
==>[v[15],e[17][15-delivers->2],v[2],e[18][2-delivers->5],v[5],e[19][5-contains->7],v[7]]
g.V('15').hasLabel('ROOT'). repeat(__.outE('delivers', 'contains'). where(or(hasLabel('contains'), and(has('source','node2'), has('ignore',P.neq('true'))))). inV().simplePath()). emit().path()g.V('15').hasLabel('ROOT').
repeat(__.outE('delivers', 'contains').
where(or(hasLabel('contains'),
has('source','node2'))).
inV().simplePath()).
emit().path()
g.V('15').hasLabel('ROOT').
repeat(__.outE('delivers', 'contains').
where(or(hasLabel('contains'),
has('source','node2'),
has('source','node3))).
inV().simplePath()).
emit().path()
g.V('15').hasLabel('ROOT').
repeat(__.outE('delivers', 'contains').
where(__.hasLabel('contains')
.or(__.has('source','node2'))).
inV().simplePath()).
emit().path()
public Path getPath(...) {
return g.V(vertexId).hasLabel('ROOT'). repeat(outE('delivers', 'contains'). where(or(getOrTraversals(...))). inV().simplePath()). emit().path();}
private Traversal[] getOrTraversals(...) { // Conditions can be passed as method arguments or refer to the object state
List<Traversal> orTraversals = new ArrayList<>();
if (some condition1) {
orTraversals.add(hasLabel('contains')); }
if (some condition2) {
orTraversals.add(has('source','node2')); }
if (some condition3) {
orTraversals.add(has('source','node3'))); }
return orTraversals.toArray(new Traversal[0]);}g.V('15').hasLabel('ROOT').
repeat(__.outE('delivers', 'contains').
where(or(hasLabel('contains'),
has(source, within(getSources(...))))). inV().simplePath()).