diff --git a/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ResultHookClosure.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ResultHookClosure.java index 606d8725..4f96ee3a 100644 --- a/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ResultHookClosure.java +++ b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ResultHookClosure.java @@ -1,12 +1,10 @@ package com.tinkerpop.gremlin.groovy.console; +import com.tinkerpop.gremlin.java.GremlinToStringPipe; import com.tinkerpop.pipes.util.iterators.SingleIterator; import groovy.lang.Closure; import org.codehaus.groovy.tools.shell.IO; -import java.util.Iterator; -import java.util.Map; - /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -22,21 +20,11 @@ public ResultHookClosure(final Object owner, final IO io, final String resultPro public Object call(final Object[] args) { final Object result = args[0]; - final Iterator itty; - if (result instanceof Iterator) { - itty = (Iterator) result; - } else if (result instanceof Iterable) { - itty = ((Iterable) result).iterator(); - } else if (result instanceof Object[]) { - itty = new ArrayIterator((Object[]) result); - } else if (result instanceof Map) { - itty = ((Map) result).entrySet().iterator(); - } else { - itty = new SingleIterator(result); - } + GremlinToStringPipe toStringPipe = new GremlinToStringPipe(); + toStringPipe.setStarts(new SingleIterator(result)); - while (itty.hasNext()) { - this.io.out.println(this.resultPrompt + itty.next()); + while (toStringPipe.hasNext()) { + this.io.out.println(this.resultPrompt + toStringPipe.next()); } return null; diff --git a/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ArrayIterator.java b/gremlin-java/src/main/java/com/tinkerpop/gremlin/java/ArrayIterator.java similarity index 93% rename from gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ArrayIterator.java rename to gremlin-java/src/main/java/com/tinkerpop/gremlin/java/ArrayIterator.java index 694a7447..78622512 100644 --- a/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/groovy/console/ArrayIterator.java +++ b/gremlin-java/src/main/java/com/tinkerpop/gremlin/java/ArrayIterator.java @@ -1,4 +1,4 @@ -package com.tinkerpop.gremlin.groovy.console; +package com.tinkerpop.gremlin.java; import java.util.Iterator; import java.util.NoSuchElementException; diff --git a/gremlin-java/src/main/java/com/tinkerpop/gremlin/java/GremlinToStringPipe.java b/gremlin-java/src/main/java/com/tinkerpop/gremlin/java/GremlinToStringPipe.java new file mode 100644 index 00000000..cc643332 --- /dev/null +++ b/gremlin-java/src/main/java/com/tinkerpop/gremlin/java/GremlinToStringPipe.java @@ -0,0 +1,47 @@ +package com.tinkerpop.gremlin.java; + +import com.tinkerpop.pipes.AbstractPipe; +import com.tinkerpop.pipes.transform.TransformPipe; +import com.tinkerpop.pipes.util.PipeHelper; + +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; + +/** + * Date: 2013/06/12 + * Time: 8:24 PM + */ +public class GremlinToStringPipe extends AbstractPipe implements TransformPipe { + + private Iterator tempIterator = PipeHelper.emptyIterator(); + + @Override + protected String processNextStart() throws NoSuchElementException { + while (true) { + if (this.tempIterator.hasNext()) { + return this.tempIterator.next().toString(); + } else { + final Object result = this.starts.next(); + if (result instanceof Iterator) { + tempIterator = (Iterator) result; + } else if (result instanceof Iterable) { + tempIterator = ((Iterable) result).iterator(); + } else if (result instanceof Object[]) { + tempIterator = new ArrayIterator((Object[]) result); + } else if (result instanceof Map) { + tempIterator = ((Map) result).entrySet().iterator(); + } else { + return result.toString(); + } + } + } + } + + @Override + public void reset() { + this.tempIterator = PipeHelper.emptyIterator(); + super.reset(); + } + +}