You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2019/03/13 20:51:47 UTC
[tinkerpop] 24/41: added test/ module and stubbed the first
IdentityTest.
This is an automated email from the ASF dual-hosted git repository.
okram pushed a commit to branch tp4
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 7e313cb66ce4e557c284b98b3a194bda505f80de
Author: Marko A. Rodriguez <ok...@gmail.com>
AuthorDate: Mon Mar 11 15:41:40 2019 -0600
added test/ module and stubbed the first IdentityTest.
---
.../tinkerpop/machine/bytecode/BytecodeUtil.java | 4 ++--
.../{NestedFunction.java => BranchFunction.java} | 18 ++++-----------
.../{NestedFunction.java => InternalFunction.java} | 13 +----------
.../machine/functions/NestedFunction.java | 13 +----------
.../UnionFlatMap.java => branch/UnionBranch.java} | 24 +++++++++----------
.../machine/functions/filter/FilterFilter.java | 2 +-
.../tinkerpop/machine/functions/map/MapMap.java | 2 +-
.../apache/tinkerpop/machine/traversers/Path.java | 3 +++
.../tinkerpop/machine/traversers/Traverser.java | 5 ++++
.../org/apache/tinkerpop/machine/beam/Beam.java | 15 ++++++------
.../apache/tinkerpop/machine/beam/BranchFn.java} | 27 ++++++++++++----------
java/machine/pipes/pom.xml | 7 ++++++
.../pipes/{FlatMapStep.java => BranchStep.java} | 23 +++++++++++-------
.../tinkerpop/machine/pipes/FlatMapStep.java | 9 +++++++-
.../org/apache/tinkerpop/machine/pipes/Pipes.java | 11 +++++----
.../machine/pipes/PipesIdentityTest.java} | 26 ++++++++++-----------
.../apache/tinkerpop/machine/pipes/PipesTest.java | 4 ++--
java/pom.xml | 1 +
java/{machine/pipes => test}/pom.xml | 17 +++++++++++---
.../machine/functions/filters/IdentityTest.java} | 22 ++++++++----------
20 files changed, 129 insertions(+), 117 deletions(-)
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
index 07f2f1d..4746e97 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.filter.FilterFilter;
import org.apache.tinkerpop.machine.functions.filter.IdentityFilter;
import org.apache.tinkerpop.machine.functions.filter.IsFilter;
-import org.apache.tinkerpop.machine.functions.flatMap.UnionFlatMap;
+import org.apache.tinkerpop.machine.functions.branch.UnionBranch;
import org.apache.tinkerpop.machine.functions.initial.InjectInitial;
import org.apache.tinkerpop.machine.functions.map.IncrMap;
import org.apache.tinkerpop.machine.functions.map.MapMap;
@@ -143,7 +143,7 @@ public final class BytecodeUtil {
for (final Bytecode<C> arg : (Bytecode<C>[]) instruction.args()) {
branchFunctions.add(compile(arg));
}
- return new UnionFlatMap<>(coefficient, labels, branchFunctions);
+ return new UnionBranch<>(coefficient, labels, branchFunctions);
default:
throw new RuntimeException("This is an unknown instruction:" + instruction.op());
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/BranchFunction.java
similarity index 64%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
copy to java/core/src/main/java/org/apache/tinkerpop/machine/functions/BranchFunction.java
index 2119f54..cfebf7a 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/BranchFunction.java
@@ -18,24 +18,16 @@
*/
package org.apache.tinkerpop.machine.functions;
-import org.apache.tinkerpop.machine.processor.ProcessorFactory;
-import org.apache.tinkerpop.machine.traversers.TraverserFactory;
+import org.apache.tinkerpop.machine.traversers.Traverser;
+import java.util.Iterator;
import java.util.List;
+import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
+public interface BranchFunction<C, S, E> extends Function<Traverser<C, S>, Iterator<Traverser<C, E>>>, InternalFunction<C> {
- public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
-
- public List<List<CFunction<C>>> getFunctions();
-
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
- }
-
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
-
- }
+ public List<List<CFunction<C>>> getBranches();
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InternalFunction.java
similarity index 79%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
copy to java/core/src/main/java/org/apache/tinkerpop/machine/functions/InternalFunction.java
index 2119f54..e399b19 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InternalFunction.java
@@ -21,21 +21,10 @@ package org.apache.tinkerpop.machine.functions;
import org.apache.tinkerpop.machine.processor.ProcessorFactory;
import org.apache.tinkerpop.machine.traversers.TraverserFactory;
-import java.util.List;
-
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
+public interface InternalFunction<C> extends CFunction<C> {
public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
-
- public List<List<CFunction<C>>> getFunctions();
-
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
- }
-
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
-
- }
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
index 2119f54..f0bc884 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
@@ -18,24 +18,13 @@
*/
package org.apache.tinkerpop.machine.functions;
-import org.apache.tinkerpop.machine.processor.ProcessorFactory;
-import org.apache.tinkerpop.machine.traversers.TraverserFactory;
-
import java.util.List;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
-
- public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
+public interface NestedFunction<C> extends InternalFunction<C> {
public List<List<CFunction<C>>> getFunctions();
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
- }
-
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
-
- }
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/flatMap/UnionFlatMap.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/branch/UnionBranch.java
similarity index 75%
rename from java/core/src/main/java/org/apache/tinkerpop/machine/functions/flatMap/UnionFlatMap.java
rename to java/core/src/main/java/org/apache/tinkerpop/machine/functions/branch/UnionBranch.java
index 8a5adef..9634b83 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/flatMap/UnionFlatMap.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/branch/UnionBranch.java
@@ -16,18 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions.flatMap;
+package org.apache.tinkerpop.machine.functions.branch;
import org.apache.tinkerpop.machine.coefficients.Coefficient;
import org.apache.tinkerpop.machine.functions.AbstractFunction;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.functions.CFunction;
-import org.apache.tinkerpop.machine.functions.FlatMapFunction;
-import org.apache.tinkerpop.machine.functions.NestedFunction;
import org.apache.tinkerpop.machine.processor.Processor;
import org.apache.tinkerpop.machine.processor.ProcessorFactory;
import org.apache.tinkerpop.machine.traversers.Traverser;
import org.apache.tinkerpop.machine.traversers.TraverserFactory;
-import org.apache.tinkerpop.util.IteratorUtils;
import org.apache.tinkerpop.util.MultiIterator;
import org.apache.tinkerpop.util.StringFactory;
@@ -39,42 +37,44 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class UnionFlatMap<C, S, E> extends AbstractFunction<C, S, Iterator<E>> implements FlatMapFunction<C, S, E>, NestedFunction.Branching<C, S, E> {
- // TODO: we need a branch/ package as these need to be NOT flatMap functions.
+public final class UnionBranch<C, S, E> extends AbstractFunction<C, S, Iterator<Traverser<C, E>>> implements BranchFunction<C, S, E> {
private final List<List<CFunction<C>>> branchFunctions;
+
+
private transient List<Processor<C, S, E>> processors;
private TraverserFactory<C> traverserFactory;
private ProcessorFactory processorFactory;
- public UnionFlatMap(final Coefficient<C> coefficient, final Set<String> labels, final List<List<CFunction<C>>> branchFunctions) {
+ public UnionBranch(final Coefficient<C> coefficient, final Set<String> labels, final List<List<CFunction<C>>> branchFunctions) {
super(coefficient, labels);
this.branchFunctions = branchFunctions;
}
@Override
- public Iterator<E> apply(final Traverser<C, S> traverser) {
+ public Iterator<Traverser<C, E>> apply(final Traverser<C, S> traverser) {
if (null == this.processors) {
this.processors = new ArrayList<>(this.branchFunctions.size());
for (final List<CFunction<C>> functions : this.branchFunctions) {
this.processors.add(processorFactory.mint(traverserFactory, functions));
}
}
- final MultiIterator<E> iterator = new MultiIterator<>();
+ final MultiIterator<Traverser<C, E>> iterator = new MultiIterator<>();
for (final Processor<C, S, E> processor : this.processors) {
processor.reset();
processor.addStart(traverser.clone());
- iterator.addIterator(IteratorUtils.map(processor, Traverser::object));
+ iterator.addIterator(processor);
}
-
return iterator;
}
+ @Override
public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory) {
this.traverserFactory = traverserFactory;
this.processorFactory = processorFactory;
}
- public List<List<CFunction<C>>> getFunctions() {
+ @Override
+ public List<List<CFunction<C>>> getBranches() {
return this.branchFunctions;
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/FilterFilter.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/FilterFilter.java
index a4a18ec..d247e1c 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/FilterFilter.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/filter/FilterFilter.java
@@ -36,7 +36,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class FilterFilter<C, S> extends AbstractFunction<C, S, S> implements FilterFunction<C, S>, NestedFunction.Internal<C, S, S> {
+public final class FilterFilter<C, S> extends AbstractFunction<C, S, S> implements FilterFunction<C, S>, NestedFunction<C> {
private final List<CFunction<C>> filterFunctions;
private TraverserFactory<C> traverserFactory;
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/map/MapMap.java b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/map/MapMap.java
index 63d64c0..67e30ee 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/map/MapMap.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/map/MapMap.java
@@ -36,7 +36,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class MapMap<C, S, E> extends AbstractFunction<C, S, E> implements MapFunction<C, S, E>, NestedFunction.Internal<C, S, E> {
+public class MapMap<C, S, E> extends AbstractFunction<C, S, E> implements MapFunction<C, S, E>, NestedFunction<C> {
private final List<CFunction<C>> mapFunctions;
private TraverserFactory<C> traverserFactory;
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
index 9f5b997..857cc1b 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.machine.traversers;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -45,6 +46,8 @@ public class Path implements Serializable {
}
public void addLabels(final Set<String> labels) {
+ if (this.labels.isEmpty())
+ this.labels.add(new HashSet<>());
this.labels.get(this.labels.size() - 1).addAll(labels);
}
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
index 6484d18..59c9752 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.machine.traversers;
import org.apache.tinkerpop.machine.coefficients.Coefficient;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.FilterFunction;
import org.apache.tinkerpop.machine.functions.FlatMapFunction;
@@ -57,6 +58,10 @@ public interface Traverser<C, S> extends Serializable, Cloneable {
return IteratorUtils.map(function.apply(this), e -> this.split(function, e));
}
+ public default <E> Iterator<Traverser<C, E>> branch(final BranchFunction<C, S, E> function) {
+ return function.apply(this);
+ }
+
//public default void sideEffect(final SideEffectFunction<C,S> function);
public default <E> Traverser<C, E> reduce(final ReduceFunction<C, S, E> function, final E reducedValue) {
diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
index 6531693..7aedadf 100644
--- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
+++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java
@@ -31,12 +31,13 @@ import org.apache.tinkerpop.machine.bytecode.Bytecode;
import org.apache.tinkerpop.machine.bytecode.BytecodeUtil;
import org.apache.tinkerpop.machine.coefficients.Coefficient;
import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.FilterFunction;
import org.apache.tinkerpop.machine.functions.FlatMapFunction;
import org.apache.tinkerpop.machine.functions.InitialFunction;
+import org.apache.tinkerpop.machine.functions.InternalFunction;
import org.apache.tinkerpop.machine.functions.MapFunction;
-import org.apache.tinkerpop.machine.functions.NestedFunction;
import org.apache.tinkerpop.machine.functions.ReduceFunction;
import org.apache.tinkerpop.machine.pipes.PipesProcessor;
import org.apache.tinkerpop.machine.processor.Processor;
@@ -75,11 +76,11 @@ public class Beam<C, S, E> implements Processor<C, S, E> {
private PCollection<Traverser<C, ?>> processFunction(PCollection<Traverser<C, ?>> collection, final CFunction<?> function, final boolean branching) {
DoFn<Traverser<C, S>, Traverser<C, E>> fn = null;
- if (function instanceof NestedFunction.Internal)
- ((NestedFunction<C, ?, ?>) function).setProcessor(this.traverserFactory, new PipesProcessor());
+ if (function instanceof InternalFunction)
+ ((InternalFunction<C>) function).setProcessor(this.traverserFactory, new PipesProcessor());
- if (function instanceof NestedFunction.Branching) {
- final List<List<CFunction<C>>> branches = ((NestedFunction.Branching) function).getFunctions();
+ if (function instanceof BranchFunction) {
+ final List<List<CFunction<C>>> branches = ((BranchFunction) function).getBranches();
final List<PCollection<Traverser<C, ?>>> collections = new ArrayList<>(branches.size());
for (final List<CFunction<C>> branch : branches) {
PCollection<Traverser<C, ?>> branchCollection = collection;
@@ -89,7 +90,7 @@ public class Beam<C, S, E> implements Processor<C, S, E> {
collections.add(branchCollection);
}
collection = PCollectionList.of(collections).apply(Flatten.pCollections());
- this.functions.add(new FlatMapFn<>((FlatMapFunction<C, S, E>) function));
+ this.functions.add(new BranchFn<>((BranchFunction<C, S, E>) function));
} else if (function instanceof InitialFunction) {
fn = new InitialFn((InitialFunction<C, S>) function, this.traverserFactory);
} else if (function instanceof FilterFunction) {
@@ -105,7 +106,7 @@ public class Beam<C, S, E> implements Processor<C, S, E> {
} else
throw new RuntimeException("You need a new step type:" + function);
- if (!(function instanceof ReduceFunction) && !(function instanceof NestedFunction.Branching)) {
+ if (!(function instanceof ReduceFunction) && !(function instanceof BranchFunction)) {
if (!branching)
this.functions.add((Fn) fn);
collection = (PCollection<Traverser<C, ?>>) collection.apply(ParDo.of((DoFn) fn));
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
similarity index 54%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
copy to java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
index 2119f54..40aec28 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/BranchFn.java
@@ -16,26 +16,29 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions;
+package org.apache.tinkerpop.machine.beam;
-import org.apache.tinkerpop.machine.processor.ProcessorFactory;
-import org.apache.tinkerpop.machine.traversers.TraverserFactory;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
-import java.util.List;
+import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
+public class BranchFn<C, S, E> extends AbstractFn<C, S, E> {
- public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
+ private BranchFunction<C, S, E> branchFunction;
- public List<List<CFunction<C>>> getFunctions();
-
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
+ public BranchFn(final BranchFunction<C, S, E> branchFunction) {
+ super(branchFunction);
+ this.branchFunction = branchFunction;
}
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
-
+ @ProcessElement
+ public void processElement(final @Element Traverser<C, S> traverser, final OutputReceiver<Traverser<C, E>> output) {
+ Iterator<Traverser<C, E>> iterator = traverser.branch(this.branchFunction);
+ while (iterator.hasNext())
+ output.output(iterator.next());
}
-}
+}
\ No newline at end of file
diff --git a/java/machine/pipes/pom.xml b/java/machine/pipes/pom.xml
index 3d40c2a..2c4008f 100644
--- a/java/machine/pipes/pom.xml
+++ b/java/machine/pipes/pom.xml
@@ -29,6 +29,13 @@ limitations under the License.
<artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
+ <!-- TESTING -->
+ <dependency>
+ <groupId>org.apache.tinkerpop</groupId>
+ <artifactId>test</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<directory>${basedir}/target</directory>
diff --git a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
similarity index 63%
copy from java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
copy to java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
index 468672a..9de62ae 100644
--- a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
+++ b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/BranchStep.java
@@ -18,7 +18,7 @@
*/
package org.apache.tinkerpop.machine.pipes;
-import org.apache.tinkerpop.machine.functions.FlatMapFunction;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.traversers.Traverser;
import java.util.Collections;
@@ -27,25 +27,32 @@ import java.util.Iterator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class FlatMapStep<C, S, E> extends AbstractStep<C, S, E> {
+public class BranchStep<C, S, E> extends AbstractStep<C, S, E> {
- private final FlatMapFunction<C, S, E> flatMapFunction;
+ private final BranchFunction<C, S, E> branchFunction;
private Iterator<Traverser<C, E>> iterator = Collections.emptyIterator();
- public FlatMapStep(final AbstractStep<C, ?, S> previousStep, final FlatMapFunction<C, S, E> flatMapFunction) {
- super(previousStep, flatMapFunction);
- this.flatMapFunction = flatMapFunction;
+ public BranchStep(final AbstractStep<C, ?, S> previousStep, final BranchFunction<C, S, E> branchFunction) {
+ super(previousStep, branchFunction);
+ this.branchFunction = branchFunction;
}
@Override
public boolean hasNext() {
- return this.iterator.hasNext() || super.hasNext();
+ while (true) {
+ if (this.iterator.hasNext())
+ return true;
+ else if (super.hasNext())
+ this.iterator = super.getPreviousTraverser().branch(this.branchFunction);
+ else
+ return false;
+ }
}
@Override
public Traverser<C, E> next() {
if (!this.iterator.hasNext()) {
- this.iterator = super.getPreviousTraverser().flatMap(this.flatMapFunction);
+ this.iterator = super.getPreviousTraverser().branch(this.branchFunction);
}
return this.iterator.next();
}
diff --git a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
index 468672a..1dcd090 100644
--- a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
+++ b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/FlatMapStep.java
@@ -39,7 +39,14 @@ public class FlatMapStep<C, S, E> extends AbstractStep<C, S, E> {
@Override
public boolean hasNext() {
- return this.iterator.hasNext() || super.hasNext();
+ while (true) {
+ if (this.iterator.hasNext())
+ return true;
+ else if (super.hasNext())
+ this.iterator = super.getPreviousTraverser().flatMap(this.flatMapFunction);
+ else
+ return false;
+ }
}
@Override
diff --git a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
index 7cd8872..a413b0f 100644
--- a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
+++ b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
@@ -18,12 +18,13 @@
*/
package org.apache.tinkerpop.machine.pipes;
+import org.apache.tinkerpop.machine.functions.BranchFunction;
import org.apache.tinkerpop.machine.functions.CFunction;
import org.apache.tinkerpop.machine.functions.FilterFunction;
import org.apache.tinkerpop.machine.functions.FlatMapFunction;
import org.apache.tinkerpop.machine.functions.InitialFunction;
+import org.apache.tinkerpop.machine.functions.InternalFunction;
import org.apache.tinkerpop.machine.functions.MapFunction;
-import org.apache.tinkerpop.machine.functions.NestedFunction;
import org.apache.tinkerpop.machine.functions.ReduceFunction;
import org.apache.tinkerpop.machine.pipes.util.BasicReducer;
import org.apache.tinkerpop.machine.processor.Processor;
@@ -45,11 +46,13 @@ public class Pipes<C, S, E> implements Processor<C, S, E> {
public Pipes(final TraverserFactory<C> traverserFactory, final List<CFunction<C>> functions) {
AbstractStep<C, ?, ?> previousStep = EmptyStep.instance();
for (final CFunction<?> function : functions) {
- if (function instanceof NestedFunction)
- ((NestedFunction<C, ?, ?>) function).setProcessor(traverserFactory, new PipesProcessor());
+ if (function instanceof InternalFunction)
+ ((InternalFunction<C>) function).setProcessor(traverserFactory, new PipesProcessor());
/////////
final AbstractStep nextStep;
- if (function instanceof FilterFunction)
+ if (function instanceof BranchFunction)
+ nextStep = new BranchStep(previousStep, (BranchFunction<C, ?, ?>) function);
+ else if (function instanceof FilterFunction)
nextStep = new FilterStep(previousStep, (FilterFunction<C, ?>) function);
else if (function instanceof FlatMapFunction)
nextStep = new FlatMapStep(previousStep, (FlatMapFunction<C, ?, ?>) function);
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
similarity index 57%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
copy to java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
index 2119f54..88b833d 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesIdentityTest.java
@@ -16,26 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions;
+package org.apache.tinkerpop.machine.pipes;
-import org.apache.tinkerpop.machine.processor.ProcessorFactory;
-import org.apache.tinkerpop.machine.traversers.TraverserFactory;
-
-import java.util.List;
+import org.apache.tinkerpop.language.Gremlin;
+import org.apache.tinkerpop.language.TraversalSource;
+import org.apache.tinkerpop.machine.coefficients.LongCoefficient;
+import org.apache.tinkerpop.machine.functions.filters.IdentityTest;
+import org.junit.jupiter.api.Test;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
-
- public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
-
- public List<List<CFunction<C>>> getFunctions();
-
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
- }
+public class PipesIdentityTest {
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
+ private TraversalSource<Long> g = Gremlin.<Long>traversal().withProcessor(PipesProcessor.class).withCoefficient(LongCoefficient.class);
+ private IdentityTest test = new IdentityTest();
+ @Test
+ public void g_injectX2X_identity() {
+ test.g_injectX2X_identity(g.inject(2L).identity());
}
}
diff --git a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
index 49a802a..28b24c9 100644
--- a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
+++ b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
@@ -39,7 +39,7 @@ public class PipesTest {
.withProcessor(PipesProcessor.class)
.withStrategy(IdentityStrategy.class);
- Traversal<Long, Long, ?> traversal = g.inject(7L, 10L, 12L).as("a").c(3L).map(__.incr()).identity().incr().identity().identity().sum().path();
+ Traversal<Long, Long, ?> traversal = g.inject(7L, 10L, 12L).as("a").c(3L).map(__.incr()).identity().incr().identity().identity().sum().path().identity();
System.out.println(TraversalUtil.getBytecode(traversal));
System.out.println(traversal);
System.out.println(traversal.toList());
@@ -49,7 +49,7 @@ public class PipesTest {
System.out.println(traversal);
System.out.println(traversal.toList());
System.out.println("\n----------\n");
- traversal = g.inject(7L).union(__.<Long>incr().incr().count(), __.<Long, Long>c(10L).incr().sum()).count();
+ traversal = g.inject(7L).union(__.<Long>incr().incr().count(), __.<Long, Long>c(10L).incr().sum());
System.out.println(TraversalUtil.getBytecode(traversal));
System.out.println(traversal);
System.out.println(traversal.toList());
diff --git a/java/pom.xml b/java/pom.xml
index 3887958..67ab0d3 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -66,6 +66,7 @@ limitations under the License.
<modules>
<module>core</module>
<module>machine</module>
+ <module>test</module>
</modules>
<scm>
<connection>scm:git:git@github.com:apache/tinkerpop.git</connection>
diff --git a/java/machine/pipes/pom.xml b/java/test/pom.xml
similarity index 79%
copy from java/machine/pipes/pom.xml
copy to java/test/pom.xml
index 3d40c2a..4f357a1 100644
--- a/java/machine/pipes/pom.xml
+++ b/java/test/pom.xml
@@ -16,19 +16,30 @@ limitations under the License.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
+
<parent>
- <artifactId>machine</artifactId>
+ <artifactId>java</artifactId>
<groupId>org.apache.tinkerpop</groupId>
<version>4.0.0-SNAPSHOT</version>
</parent>
- <name>Apache TinkerPop (Java) :: Machine :: Pipes</name>
- <artifactId>pipes</artifactId>
+ <name>Apache TinkerPop (Java) :: Test</name>
+ <artifactId>test</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>${junit.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>${junit.version}</version>
+ </dependency>
</dependencies>
<build>
<directory>${basedir}/target</directory>
diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java b/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
similarity index 61%
copy from java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
copy to java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
index 2119f54..45d0515 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/NestedFunction.java
+++ b/java/test/src/main/java/org/apache/tinkerpop/machine/functions/filters/IdentityTest.java
@@ -16,26 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.machine.functions;
+package org.apache.tinkerpop.machine.functions.filters;
-import org.apache.tinkerpop.machine.processor.ProcessorFactory;
-import org.apache.tinkerpop.machine.traversers.TraverserFactory;
+import org.apache.tinkerpop.language.Traversal;
import java.util.List;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public interface NestedFunction<C, S, E> extends CFunction<C> {
-
- public void setProcessor(final TraverserFactory<C> traverserFactory, final ProcessorFactory processorFactory);
-
- public List<List<CFunction<C>>> getFunctions();
-
- public interface Branching<C, S, E> extends NestedFunction<C, S, E> {
- }
-
- public interface Internal<C, S, E> extends NestedFunction<C, S, E> {
+public class IdentityTest {
+ public void g_injectX2X_identity(final Traversal<Long, Long, Long> traversal) {
+ final List<Long> list = traversal.toList();
+ assertEquals(1, list.size());
+ assertEquals(2L, list.get(0));
}
}