diff --git a/.gitignore b/.gitignore index cca6a663..48d87eb9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ .gremlin_history target/ .idea/ -gremlin.iml \ No newline at end of file +*.iml \ No newline at end of file diff --git a/gremlin-core/pom.xml b/gremlin-core/pom.xml new file mode 100644 index 00000000..15e864a2 --- /dev/null +++ b/gremlin-core/pom.xml @@ -0,0 +1,183 @@ + + + 4.0.0 + + com.tinkerpop.gremlin + gremlin + 1.4-SNAPSHOT + ../pom.xml + + gremlin-core + 1.4-SNAPSHOT + jar + Gremlin-Core: The Core of the Gremlin Language + + + Marko A. Rodriguez + marko@markorodriguez.com + http://markorodriguez.com + + + + + Gremlin Users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users/topics + + + 2009 + + UTF-8 + + + + com.tinkerpop.blueprints + blueprints-core + 1.1-SNAPSHOT + + + + com.tinkerpop.blueprints + blueprints-graph-jung + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-graph-sail + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-neo4j-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-orient-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-dex-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-sail-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-rexster-graph + 1.1-SNAPSHOT + provided + + + + com.tinkerpop + pipes + 0.9-SNAPSHOT + + + + org.fusesource.jansi + jansi + 1.5 + + + jline + jline + 0.9.94 + + + + junit + junit + 4.5 + test + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + http://tinkerpop.com/maven2 + + true + always + + + + + ${basedir}/target + ${project.artifactId}-${project.version} + + + ${basedir}/src/main/resources + + + + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + maven-assembly-plugin + 2.2-beta-4 + + + package + + assembly + + + + + + src/assembly/distribution.xml + + ${project.artifactId}-${project.version} + target + target/assembly/work + warn + + + com.tinkerpop.gremlin.console.Console + + + + + + maven-deploy-plugin + 2.5 + + + org.apache.maven.wagon + wagon-ftp + 1.0-alpha-6 + + + + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + ftp://ftp.tinkerpop.com:21/public/maven2/ + + + \ No newline at end of file diff --git a/src/assembly/distribution.xml b/gremlin-core/src/assembly/distribution.xml similarity index 90% rename from src/assembly/distribution.xml rename to gremlin-core/src/assembly/distribution.xml index ade7a64b..1bf91dc0 100644 --- a/src/assembly/distribution.xml +++ b/gremlin-core/src/assembly/distribution.xml @@ -28,7 +28,7 @@ target/site - target/gremlin-${project.version}-standalone + target/gremlin-core-${project.version}-standalone diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml new file mode 100644 index 00000000..1f8f8bb6 --- /dev/null +++ b/gremlin-groovy/pom.xml @@ -0,0 +1,231 @@ + + + 4.0.0 + + com.tinkerpop.gremlin + gremlin + 1.4-SNAPSHOT + ../pom.xml + + gremlin-groovy + 1.4-SNAPSHOT + jar + Gremlin-Groovy: Gremlin for the Groovy Language + + + Marko A. Rodriguez + marko@markorodriguez.com + http://markorodriguez.com + + + + + Pavel Yaskevich + povel.y@gmail.com + http://github.com/xedin + + + Darrick Wiebe + darrick@innatesoftware.com + http://github.com/pangloss + + + Peter Neubauer + peter.neubauer@neotechnology.com + http://www.linkedin.com/in/neubauer + + + + + Gremlin Users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users/topics + + + 2009 + + UTF-8 + + + + com.tinkerpop.gremlin + gremlin-core + 1.4-SNAPSHOT + + + + com.tinkerpop.blueprints + blueprints-graph-jung + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-graph-sail + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-neo4j-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-orient-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-dex-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-sail-graph + 1.1-SNAPSHOT + provided + + + com.tinkerpop.blueprints + blueprints-rexster-graph + 1.1-SNAPSHOT + provided + + + + com.tinkerpop + pipes + 0.9-SNAPSHOT + + + org.codehaus.groovy + groovy + 1.8.2 + + + + org.fusesource.jansi + jansi + 1.5 + + + jline + jline + 0.9.94 + + + + org.codehaus.gmaven + gmaven-plugin + 1.3 + provided + + + + junit + junit + 4.5 + test + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + http://tinkerpop.com/maven2 + + true + always + + + + + ${basedir}/target + ${project.artifactId}-${project.version} + + + ${basedir}/src/main/resources + + + + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + maven-assembly-plugin + 2.2-beta-4 + + + package + + assembly + + + + + + src/assembly/standalone.xml + src/assembly/distribution.xml + + ${project.artifactId}-${project.version} + target + target/assembly/work + warn + + + com.tinkerpop.gremlin.console.Console + + + + + + org.codehaus.gmaven + gmaven-plugin + 1.3 + + + + generateStubs + compile + generateTestStubs + testCompile + + + 1.7 + + + + + + maven-deploy-plugin + 2.5 + + + org.apache.maven.wagon + wagon-ftp + 1.0-alpha-6 + + + + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + ftp://ftp.tinkerpop.com:21/public/maven2/ + + + \ No newline at end of file diff --git a/gremlin-groovy/src/assembly/distribution.xml b/gremlin-groovy/src/assembly/distribution.xml new file mode 100644 index 00000000..81d60958 --- /dev/null +++ b/gremlin-groovy/src/assembly/distribution.xml @@ -0,0 +1,34 @@ + + + zip + + + + + pom.xml + + + + 0775 + + gremlin.sh + gremlin.bat + + + + src + + + data + + + target/apidocs + + + target/site + + + target/gremlin-groovy-${project.version}-standalone + + + diff --git a/src/assembly/standalone.xml b/gremlin-groovy/src/assembly/standalone.xml similarity index 100% rename from src/assembly/standalone.xml rename to gremlin-groovy/src/assembly/standalone.xml diff --git a/src/main/bin/gremlin.bat b/gremlin-groovy/src/main/bin/gremlin.bat similarity index 100% rename from src/main/bin/gremlin.bat rename to gremlin-groovy/src/main/bin/gremlin.bat diff --git a/src/main/bin/gremlin.sh b/gremlin-groovy/src/main/bin/gremlin.sh similarity index 100% rename from src/main/bin/gremlin.sh rename to gremlin-groovy/src/main/bin/gremlin.sh diff --git a/src/main/groovy/com/tinkerpop/gremlin/Gremlin.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/Gremlin.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/Gremlin.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/Gremlin.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/ElementLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/ElementLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/ElementLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/ElementLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/FilterPipeLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/FilterPipeLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/FilterPipeLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/FilterPipeLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/GraphLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/GraphLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/GraphLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/GraphLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/IndexLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/IndexLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/IndexLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/IndexLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/ObjectLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/ObjectLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/ObjectLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/ObjectLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/PipeLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/PipeLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/PipeLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/PipeLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/SideEffectPipeLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/SideEffectPipeLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/SideEffectPipeLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/SideEffectPipeLoader.groovy diff --git a/src/main/groovy/com/tinkerpop/gremlin/loaders/TransformPipeLoader.groovy b/gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/TransformPipeLoader.groovy similarity index 100% rename from src/main/groovy/com/tinkerpop/gremlin/loaders/TransformPipeLoader.groovy rename to gremlin-groovy/src/main/groovy/com/tinkerpop/gremlin/loaders/TransformPipeLoader.groovy diff --git a/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/GremlinTokens.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java diff --git a/src/main/java/com/tinkerpop/gremlin/GroovyPipeFunction.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/GroovyPipeFunction.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/GroovyPipeFunction.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/GroovyPipeFunction.java diff --git a/src/main/java/com/tinkerpop/gremlin/Imports.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/Imports.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/Imports.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/Imports.java diff --git a/src/main/java/com/tinkerpop/gremlin/Version.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/Version.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/Version.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/Version.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/ArrayIterator.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ArrayIterator.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/ArrayIterator.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ArrayIterator.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/Console.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/Console.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/Console.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/Console.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/ErrorHookClosure.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ErrorHookClosure.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/ErrorHookClosure.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ErrorHookClosure.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/NullResultHookClosure.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/NullResultHookClosure.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/NullResultHookClosure.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/NullResultHookClosure.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/PromptClosure.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/PromptClosure.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/PromptClosure.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/PromptClosure.java diff --git a/src/main/java/com/tinkerpop/gremlin/console/ResultHookClosure.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ResultHookClosure.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/console/ResultHookClosure.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/console/ResultHookClosure.java diff --git a/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java diff --git a/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineFactory.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineFactory.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineFactory.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineFactory.java diff --git a/src/main/java/com/tinkerpop/gremlin/jsr223/ScriptExecutor.java b/gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/ScriptExecutor.java similarity index 100% rename from src/main/java/com/tinkerpop/gremlin/jsr223/ScriptExecutor.java rename to gremlin-groovy/src/main/java/com/tinkerpop/gremlin/jsr223/ScriptExecutor.java diff --git a/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory b/gremlin-groovy/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory similarity index 100% rename from src/main/resources/META-INF/services/javax.script.ScriptEngineFactory rename to gremlin-groovy/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory diff --git a/src/test/groovy/com/tinkerpop/gremlin/GremlinTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/GremlinTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/GremlinTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/GremlinTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/ElementLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/ElementLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/ElementLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/ElementLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/GraphLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/GraphLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/GraphLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/GraphLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/IndexLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/IndexLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/IndexLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/IndexLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/ObjectLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/ObjectLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/ObjectLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/ObjectLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/PipeLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/PipeLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/PipeLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/PipeLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoaderTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoaderTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoaderTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/loaders/SailGraphLoaderTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/pipes/TablePipeTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/pipes/TablePipeTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/pipes/TablePipeTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/pipes/TablePipeTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/AggregateStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/AggregateStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/AggregateStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/AggregateStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/AsStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/AsStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/AsStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/AsStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/BackFilterStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/BackFilterStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/BackFilterStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/BackFilterStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/ClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/ClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/ClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/ClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/CopySplitStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/CopySplitStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/CopySplitStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/CopySplitStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/ExceptStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/ExceptStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/ExceptStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/ExceptStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/FilterClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/FilterClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/FilterClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/FilterClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/GatherStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/GatherStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/GatherStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/GatherStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/GroupCountClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/GroupCountClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/GroupCountClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/GroupCountClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/IfThenElseStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/IfThenElseStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/IfThenElseStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/IfThenElseStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/LoopStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/LoopStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/LoopStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/LoopStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/MapStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/MapStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/MapStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/MapStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/MemoizeStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/MemoizeStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/MemoizeStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/MemoizeStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/PathClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/PathClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/PathClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/PathClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/RangeFilterStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/RangeFilterStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/RangeFilterStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/RangeFilterStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/RetainStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/RetainStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/RetainStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/RetainStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/SideEffectClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/SideEffectClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/SideEffectClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/SideEffectClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/TransformClosureStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/TransformClosureStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/TransformClosureStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/TransformClosureStepTest.groovy diff --git a/src/test/groovy/com/tinkerpop/gremlin/steps/UniqueObjectStepTest.groovy b/gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/UniqueObjectStepTest.groovy similarity index 100% rename from src/test/groovy/com/tinkerpop/gremlin/steps/UniqueObjectStepTest.groovy rename to gremlin-groovy/src/test/groovy/com/tinkerpop/gremlin/steps/UniqueObjectStepTest.groovy diff --git a/src/test/java/com/tinkerpop/gremlin/BaseTest.java b/gremlin-groovy/src/test/java/com/tinkerpop/gremlin/BaseTest.java similarity index 100% rename from src/test/java/com/tinkerpop/gremlin/BaseTest.java rename to gremlin-groovy/src/test/java/com/tinkerpop/gremlin/BaseTest.java diff --git a/src/test/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineTest.java b/gremlin-groovy/src/test/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineTest.java similarity index 100% rename from src/test/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineTest.java rename to gremlin-groovy/src/test/java/com/tinkerpop/gremlin/jsr223/GremlinScriptEngineTest.java diff --git a/src/test/java/com/tinkerpop/gremlin/jsr223/ScriptExecutorTest.java b/gremlin-groovy/src/test/java/com/tinkerpop/gremlin/jsr223/ScriptExecutorTest.java similarity index 100% rename from src/test/java/com/tinkerpop/gremlin/jsr223/ScriptExecutorTest.java rename to gremlin-groovy/src/test/java/com/tinkerpop/gremlin/jsr223/ScriptExecutorTest.java diff --git a/src/test/resources/com/tinkerpop/gremlin/jsr223/gremlin-script.grm b/gremlin-groovy/src/test/resources/com/tinkerpop/gremlin/jsr223/gremlin-script.grm similarity index 100% rename from src/test/resources/com/tinkerpop/gremlin/jsr223/gremlin-script.grm rename to gremlin-groovy/src/test/resources/com/tinkerpop/gremlin/jsr223/gremlin-script.grm diff --git a/gremlin-scala/pom.xml b/gremlin-scala/pom.xml new file mode 100644 index 00000000..9a6f0f03 --- /dev/null +++ b/gremlin-scala/pom.xml @@ -0,0 +1,168 @@ + + + 4.0.0 + + com.tinkerpop.gremlin + gremlin + 1.4-SNAPSHOT + ../pom.xml + + gremlin-scala + 1.4-SNAPSHOT + jar + Gremlin-Scala: Gremlin for the Scala Language + + + Zach Cox + + + + + Gremlin Users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users + http://groups.google.com/group/gremlin-users/topics + + + 2011 + + UTF-8 + + + + com.tinkerpop.gremlin + gremlin-core + 1.4-SNAPSHOT + + + com.tinkerpop + pipes + 0.9-SNAPSHOT + + + org.scala-lang + scala-library + 2.9.1 + + + + org.fusesource.jansi + jansi + 1.5 + + + jline + jline + 0.9.94 + + + + junit + junit + 4.5 + test + + + org.specs2 + specs2_2.9.1 + 1.6.1 + test + + + org.specs2 + specs2-scalaz-core_2.9.1 + 6.0.1 + test + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + http://tinkerpop.com/maven2 + + true + always + + + + + ${basedir}/target + ${project.artifactId}-${project.version} + + + ${basedir}/src/main/resources + + + + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + maven-assembly-plugin + 2.2-beta-4 + + + package + + assembly + + + + + + src/assembly/standalone.xml + src/assembly/distribution.xml + + ${project.artifactId}-${project.version} + target + target/assembly/work + warn + + + com.tinkerpop.gremlin.console.Console + + + + + + org.scala-tools + maven-scala-plugin + 2.9.1 + + + + compile + testCompile + + + + + + maven-deploy-plugin + 2.5 + + + org.apache.maven.wagon + wagon-ftp + 1.0-alpha-6 + + + + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + ftp://ftp.tinkerpop.com:21/public/maven2/ + + + \ No newline at end of file diff --git a/gremlin-scala/src/assembly/distribution.xml b/gremlin-scala/src/assembly/distribution.xml new file mode 100644 index 00000000..350c6635 --- /dev/null +++ b/gremlin-scala/src/assembly/distribution.xml @@ -0,0 +1,34 @@ + + + zip + + + + + pom.xml + + + + 0775 + + gremlin.sh + gremlin.bat + + + + src + + + data + + + target/apidocs + + + target/site + + + target/gremlin-scala-${project.version}-standalone + + + diff --git a/gremlin-scala/src/assembly/standalone.xml b/gremlin-scala/src/assembly/standalone.xml new file mode 100644 index 00000000..2054e4f8 --- /dev/null +++ b/gremlin-scala/src/assembly/standalone.xml @@ -0,0 +1,32 @@ + + standalone + + dir + + false + + + + src/main/bin + /bin + 0755 + + + target/*.jar + /lib + + + + + + /lib + false + compile + + + /lib + false + provided + + + diff --git a/gremlin-scala/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java new file mode 100644 index 00000000..b11970c8 --- /dev/null +++ b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/GremlinTokens.java @@ -0,0 +1,61 @@ +package com.tinkerpop.gremlin; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public class GremlinTokens { + + public static final String VERSION = "1.3-SNAPSHOT"; + public static final String LABEL = "label"; + public static final String ID = "id"; + + public enum T { + eq, neq, lt, lte, gt, gte, v, e + } + + public static final String OUT = "out"; + public static final String OUTV = "outV"; + public static final String IN = "in"; + public static final String INV = "inV"; + public static final String BOTH = "both"; + public static final String BOTHV = "bothV"; + public static final String OUTE = "outE"; + public static final String INE = "inE"; + public static final String BOTHE = "bothE"; + public static final String V = "V"; + public static final String E = "E"; + + + public static final String _ = "_"; + public static final String AGGREGATE = "aggregate"; + public static final String ANDFILTER = "andFilter"; + public static final String AS = "as"; + public static final String BACK = "back"; + public static final String CAP = "cap"; + public static final String COPYSPLIT = "copySplit"; + public static final String EXCEPT = "except"; + public static final String EXHAUSTMERGE = "exhaustMerge"; + public static final String FAIRMERGE = "fairMerge"; + public static final String SIDEEFFECT = "sideEffect"; + public static final String TRANSFORM = "transform"; + public static final String FILTER = "filter"; + public static final String GATHER = "gather"; + public static final String GROUPCOUNT = "groupCount"; + public static final String IFTHENELSE = "ifThenElse"; + public static final String LOOP = "loop"; + public static final String MAP = "map"; + public static final String MEMOIZE = "memoize"; + public static final String OPTIONAL = "optional"; + public static final String ORFILTER = "orFilter"; + public static final String PATHS = "paths"; + public static final String PROPERTYFILTER = "propertyFilter"; + public static final String RANDOM = "random"; + public static final String RETAIN = "retain"; + public static final String SCATTER = "scatter"; + public static final String STEP = "step"; + public static final String TABLE = "table"; + public static final String UNIQUEOBJECT = "uniqueObject"; + public static final String UNIQUEPATH = "uniquePath"; + + +} diff --git a/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Imports.java b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Imports.java new file mode 100644 index 00000000..b520af58 --- /dev/null +++ b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Imports.java @@ -0,0 +1,48 @@ +package com.tinkerpop.gremlin; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public class Imports { + + private static final List imports = new ArrayList(); + + static { + // gremlin + imports.add("com.tinkerpop.gremlin.*"); + imports.add("com.tinkerpop.gremlin.GremlinTokens.T"); + + // blueprints + imports.add("com.tinkerpop.blueprints.pgm.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.tg.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.neo4j.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.orientdb.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.dex.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.rexster.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.event.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.readonly.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.sail.*"); + imports.add("com.tinkerpop.blueprints.pgm.impls.sail.impls.*"); + imports.add("com.tinkerpop.blueprints.pgm.util.*"); + imports.add("com.tinkerpop.blueprints.pgm.util.graphml.*"); + imports.add("com.tinkerpop.blueprints.pgm.oupls.sail.*"); + imports.add("com.tinkerpop.blueprints.pgm.oupls.jung.*"); + imports.add("com.tinkerpop.blueprints.pgm.oupls.jung.util.*"); + + // pipes + imports.add("com.tinkerpop.pipes.*"); + imports.add("com.tinkerpop.pipes.branch.*"); + imports.add("com.tinkerpop.pipes.filter.*"); + imports.add("com.tinkerpop.pipes.sideeffect.*"); + imports.add("com.tinkerpop.pipes.transform.*"); + imports.add("com.tinkerpop.pipes.util.*"); + } + + public static List getImports() { + return Imports.imports; + } +} diff --git a/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Version.java b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Version.java new file mode 100644 index 00000000..71715654 --- /dev/null +++ b/gremlin-scala/src/main/java/com/tinkerpop/gremlin/Version.java @@ -0,0 +1,15 @@ +package com.tinkerpop.gremlin; + +import java.io.IOException; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public class Version { + + public static void main(final String[] arguments) throws IOException { + System.out.println("gremlin " + GremlinTokens.VERSION); + } +} + + diff --git a/gremlin-scala/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory b/gremlin-scala/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory new file mode 100644 index 00000000..0036d7b3 --- /dev/null +++ b/gremlin-scala/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory @@ -0,0 +1 @@ +com.tinkerpop.gremlin.jsr223.GremlinScriptEngineFactory \ No newline at end of file diff --git a/gremlin-scala/src/main/scala/package.scala b/gremlin-scala/src/main/scala/package.scala new file mode 100644 index 00000000..3e0b0f81 --- /dev/null +++ b/gremlin-scala/src/main/scala/package.scala @@ -0,0 +1,27 @@ +package com.tinkerpop.gremlin + +import com.tinkerpop.pipes.PipeFunction +import com.tinkerpop.pipes.util.FluentPipeline +import java.lang.{Boolean => JBoolean} + +/** Implicit conversions that make PipeFunction easier to use in Scala. Users can just `import com.tinkerpop.gremlin.scala._` */ +package object scala { + /** Most generic conversion: A => B to PipeFunction[A, B]. */ + implicit def functionToPipeFunction[A, B](f: Function1[A, B]) = + new PipeFunction[A, B] { + def compute(a: A): B = f(a) + } + + /** Mainly for FluentPipeline.filter, to convert A => scala.Boolean to PipeFunction[A, java.lang.Boolean]. */ + implicit def booleanFunctionToPipeFunction[A](f: Function1[A, Boolean]) = + new PipeFunction[A, JBoolean] { + def compute(a: A): JBoolean = Boolean box f(a) + } + + /** Bring the wrap implicits into scope. The compiler will check the unwrap implicits on its own. */ + implicit val wrapScalaVertex = ScalaVertex.wrap _ + implicit val wrapScalaEdge = ScalaEdge.wrap _ + implicit val wrapScalaGraph = ScalaGraph.wrap _ + implicit def wrapScalaFluentPipeline[A, B] = ScalaFluentPipeline.wrap[A, B] _ //this implicit has type parameters so it must be a def instead of a val +} + diff --git a/gremlin-scala/src/main/scala/wrappers.scala b/gremlin-scala/src/main/scala/wrappers.scala new file mode 100644 index 00000000..b4135c8a --- /dev/null +++ b/gremlin-scala/src/main/scala/wrappers.scala @@ -0,0 +1,97 @@ +package com.tinkerpop.gremlin.scala + +import com.tinkerpop.blueprints.pgm.{Vertex, Edge, Graph} +import com.tinkerpop.pipes.util.FluentPipeline + +/** Adds convenience methods to [[com.tinkerpop.blueprints.pgm.Vertex]]. */ +class ScalaVertex(val vertex: Vertex) { + def out = new FluentPipeline(vertex).out() + def out(labels: String*) = new FluentPipeline(vertex).out(labels: _*) + + def outE = new FluentPipeline(vertex).outE() + def outE(labels: String*) = new FluentPipeline(vertex).outE(labels: _*) + + def in = new FluentPipeline(vertex).in() + def in(labels: String*) = new FluentPipeline(vertex).in(labels: _*) + + def inE = new FluentPipeline(vertex).inE() + def inE(labels: String*) = new FluentPipeline(vertex).inE(labels: _*) + + def both = new FluentPipeline(vertex).both() + def both(labels: String*) = new FluentPipeline(vertex).both(labels: _*) + + def bothE = new FluentPipeline(vertex).bothE() + def bothE(labels: String*) = new FluentPipeline(vertex).bothE(labels: _*) +} + +/** Implicit conversions between [[com.tinkerpop.blueprints.pgm.Vertex]] and [[com.tinkerpop.gremlin.scala.ScalaVertex]]. */ +object ScalaVertex { + implicit def wrap(vertex: Vertex) = new ScalaVertex(vertex) + implicit def unwrap(wrapper: ScalaVertex) = wrapper.vertex +} + +/** Adds convenience methods to [[com.tinkerpop.blueprints.pgm.Edge]]. */ +class ScalaEdge(val edge: Edge) { + def inV = new FluentPipeline(edge).inV() + def outV = new FluentPipeline(edge).outV() + def bothV = new FluentPipeline(edge).bothV() +} + +/** Implicit conversions between [[com.tinkerpop.blueprints.pgm.Edge]] and [[com.tinkerpop.gremlin.scala.ScalaEdge]]. */ +object ScalaEdge { + implicit def wrap(edge: Edge) = new ScalaEdge(edge) + implicit def unwrap(wrapper: ScalaEdge) = wrapper.edge +} + +/** Adds convenience methods to [[com.tinkerpop.blueprints.pgm.Graph]]. */ +class ScalaGraph(val graph: Graph) { + def V = new FluentPipeline(graph).V() + def E = new FluentPipeline(graph).E() + + //in Groovy, Graph.v appears to return a vertex if called with one ID, or a list of vertices if called with multiple IDs... + /*def v(id: Object): Vertex = graph getVertex id + def v(id: Object, ids: Object*): Iterable[Vertex] = { + val v1 = graph getVertex id + val vs = ids.map(graph.getVertex(_)) + Iterable(v1, vs: _*) + }*/ + def v(ids: Object*): Iterable[Vertex] = ids.map(graph.getVertex(_)) + + //def += for addVertex and addEdge? +} + +/** Implicit conversions between [[com.tinkerpop.blueprints.pgm.Graph]] and [[com.tinkerpop.gremlin.scala.ScalaGraph]]. */ +object ScalaGraph { + implicit def wrap(graph: Graph) = new ScalaGraph(graph) + implicit def unwrap(wrapper: ScalaGraph) = wrapper.graph +} + +/** Adds convenience methods to [[com.tinkerpop.pipes.util.FluentPipeline]]. */ +class ScalaFluentPipeline[A, B](val pipeline: FluentPipeline[A, B]) extends Iterator[B] { + //Pipe is both: + // - Iterator = iterate over elements in collection, defines hasNext(), next() and remove() methods + // - Iterable = can be target of foreach statement, defines iterator() method + // => so you can use Pipe as a raw Iterator or in for(E e : pipe), the key point is that you iterate over the Es + + //Scala's Iterator[A] trait provides much more than just hasNext, next & foreach; like map/flatMap/filter/fold/toX/etc + // - thus an Iterator can be used in for-comprehensions + // - scala.collection.JavaConversions.JIteratorWrapper is a Scala Iterator that wraps a Java Iterator + + //Scala's Iterable[A] trait provides a lot of what Iterator provides, but also the ability to create new collections of the same type + // - Iterable is really meant to be implemented by actual collection data structures + // - Iterator is probably better for things that just provide a way to iterate over some contained elements + // => If ScalaFluentPipeline[S,E] extends Iterator[E], then it should act like Pipe in all the right Scala ways, + // and the hasNext & next methods can delegate to hasNext() & next() in FluentPipeline + + def hasNext: Boolean = pipeline.hasNext + def next(): B = pipeline.next() + + def loop[T](numberedStep: Int)(whileFunction: Function1[T, Boolean]) = pipeline.loop(numberedStep, whileFunction) +} + +/** Implicit conversions between [[com.tinkerpop.pipes.util.FluentPipeline]] and [[com.tinkerpop.gremlin.scala.ScalaFluentPipeline]]. */ +object ScalaFluentPipeline { + implicit def wrap[A, B](fp: FluentPipeline[A, B]) = new ScalaFluentPipeline(fp) + implicit def unwrap[A, B](wrapper: ScalaFluentPipeline[A, B]) = wrapper.pipeline +} + diff --git a/gremlin-scala/src/test/scala/GremlinScalaTest.scala b/gremlin-scala/src/test/scala/GremlinScalaTest.scala new file mode 100644 index 00000000..54af5499 --- /dev/null +++ b/gremlin-scala/src/test/scala/GremlinScalaTest.scala @@ -0,0 +1,15 @@ +package com.tinkerpop.gremlin + +import com.tinkerpop.blueprints.pgm.Vertex +import com.tinkerpop.blueprints.pgm.impls.tg.TinkerGraphFactory +import com.tinkerpop.pipes.util.FluentPipeline +import _root_.scala.collection.JavaConversions +import junit.framework.TestCase + +class GremlinScalaTest extends TestCase { + def testGremlin() { + val g = TinkerGraphFactory.createTinkerGraph(); + val pipe = new FluentPipeline[Vertex, Vertex]; + JavaConversions.asScalaIterator[Vertex](pipe.start(g.getVertex(1)).out("knows").asInstanceOf[java.util.Iterator[Vertex]]); + } +} diff --git a/gremlin-scala/src/test/scala/ScalaPipeFunctionTest.scala b/gremlin-scala/src/test/scala/ScalaPipeFunctionTest.scala new file mode 100644 index 00000000..6d430701 --- /dev/null +++ b/gremlin-scala/src/test/scala/ScalaPipeFunctionTest.scala @@ -0,0 +1,28 @@ +package com.tinkerpop.gremlin + +import org.specs2.mutable._ +import com.tinkerpop.blueprints.pgm.Vertex +import com.tinkerpop.blueprints.pgm.impls.tg.TinkerGraphFactory +import com.tinkerpop.pipes.PipeFunction +import com.tinkerpop.pipes.util.FluentPipeline +import com.tinkerpop.gremlin.scala._ + +class ScalaPipeFunctionTest extends SpecificationWithJUnit { + "The scala PipeFunction implicits" should { + "properly wrap any function literal" in { + val f: String => Int = s => s.length + val pf: PipeFunction[String, Int] = f + + pf.compute("abcd") must_== f("abcd") + } + + "properly wrap a String => Boolean function literal" in { + val graph = TinkerGraphFactory.createTinkerGraph() + val fp = new FluentPipeline(graph getVertex 1) out "knows" property "name" filter { s: String => s startsWith "j" } + + fp.hasNext() must_== true + fp.next() must_== "josh" + fp.hasNext() must_== false + } + } +} diff --git a/gremlin-scala/src/test/scala/ScalaWrapperTest.scala b/gremlin-scala/src/test/scala/ScalaWrapperTest.scala new file mode 100644 index 00000000..3de7fabf --- /dev/null +++ b/gremlin-scala/src/test/scala/ScalaWrapperTest.scala @@ -0,0 +1,117 @@ +package com.tinkerpop.gremlin + +import org.specs2.mutable._ +import com.tinkerpop.blueprints.pgm.{Graph, Vertex} +import com.tinkerpop.blueprints.pgm.impls.tg.TinkerGraphFactory +import com.tinkerpop.pipes.PipeFunction +import com.tinkerpop.pipes.util.FluentPipeline +import com.tinkerpop.gremlin.scala._ + +class ScalaWrapperTest extends SpecificationWithJUnit { + "The ScalaFluentPipeline wrapper" should { + "be a Scala Iterator" in { + val g = TinkerGraphFactory.createTinkerGraph() + val i: Iterator[Any] = new ScalaFluentPipeline(new FluentPipeline(g).V()) + + //TODO assert that the proper values come out of the next() calls + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beTrue + i.next() must_!= null + i.hasNext must beFalse + } + + "implicitly wrap a FluentPipeline" in { + val g = TinkerGraphFactory.createTinkerGraph() + val sfp: ScalaFluentPipeline[_,_] = new FluentPipeline(g).V() + + //sfp must_!= null // <===== weird compiler errors on this line... + sfp.isInstanceOf[ScalaFluentPipeline[_,_]] must beTrue + } + + "implicitly wrap a FluentPipeline when calling an Iterable method" in { + val g = TinkerGraphFactory.createTinkerGraph() + val i: Iterable[Any] = new FluentPipeline(g).V().toIterable + + i must_!= null + } + + "unwrap ScalaFluentPipeline => FluentPipeline" in { + val g = TinkerGraphFactory.createTinkerGraph() + val fp: FluentPipeline[_,_] = new FluentPipeline(g) + val sfp: ScalaFluentPipeline[_,_] = fp + def toString(p: FluentPipeline[_,_]) = p.toString + + toString(fp) must_== toString(sfp) //sfp must be unwrapped when passed to print + } + } + + "The ScalaGraph wrapper" should { + "return all vertices using V" in { + val g = TinkerGraphFactory.createTinkerGraph() + val vs = g.V.toIterable + + vs must have size(6) + vs must contain(g getVertex 1) + vs must contain(g getVertex 2) + vs must contain(g getVertex 3) + vs must contain(g getVertex 4) + vs must contain(g getVertex 5) + vs must contain(g getVertex 6) + } + + //TODO graph.E + //TODO graph.v(id) + //TODO unwrap ScalaGraph => Graph + } + + "The ScalaVertex wrapper" should { + "return all out vertices using out" in { + val g = TinkerGraphFactory.createTinkerGraph() + val vs = g.getVertex(1).out.toIterable + + vs must have size(3) + vs must contain(g getVertex 2) + vs must contain(g getVertex 3) + vs must contain(g getVertex 4) + } + + "return proper out vertices using out with label" in { + val g = TinkerGraphFactory.createTinkerGraph() + val vs = g.getVertex(1).out("knows").toIterable + + vs must have size(2) + vs must contain(g getVertex 2) + vs must contain(g getVertex 4) + } + + //TODO vertex.outE and vertex.outE() + //TODO vertex.in and vertex.in(label) + //TODO vertex.inE and vertex.inE(label) + //TODO vertex.both and vertex.bothE(label) + + "get unwrapped by the implicit" in { + val g = TinkerGraphFactory.createTinkerGraph() + val v1: Vertex = g getVertex 1 + val v2: ScalaVertex = v1 + def toString(v: Vertex) = v.toString + + toString(v1) must_== toString(v2) //v2 must be unwrapped when passed to toString + } + } + + /*"The ScalaEdge wrapper" should { + //TODO edge.inV + //TODO edge.outV + //TODO edge.bothV + //TODO unwrap ScalaEdge => Edge + }*/ +} diff --git a/gremlin.sh b/gremlin.sh index 23e02eea..4fe8eea4 100755 --- a/gremlin.sh +++ b/gremlin.sh @@ -1,3 +1,3 @@ #!/bin/bash -`dirname $0`/target/gremlin-*-standalone/bin/gremlin.sh $@ +`dirname $0`/gremlin-groovy/target/gremlin-*-standalone/bin/gremlin.sh $@ diff --git a/pom.xml b/pom.xml index ea70cdc0..e12b0964 100644 --- a/pom.xml +++ b/pom.xml @@ -1,232 +1,79 @@ - - - 4.0.0 - com.tinkerpop - gremlin - 1.4-SNAPSHOT - - jar - http://gremlin.tinkerpop.com - Gremlin: A Graph Traversal Language - Gremlin is a domain specific language for traversing property graphs. - Gremlin makes use of a path-based syntax written in Groovy to support complex graph traversals. - This language has application in the areas of graph query, analysis, and manipulation. - - - - Marko A. Rodriguez - marko@markorodriguez.com - http://markorodriguez.com - - - - - Pavel Yaskevich - povel.y@gmail.com - http://github.com/xedin - - - Darrick Wiebe - darrick@innatesoftware.com - http://github.com/pangloss - - - Peter Neubauer - peter.neubauer@neotechnology.com - http://www.linkedin.com/in/neubauer - - - - - Gremlin Users - http://groups.google.com/group/gremlin-users - http://groups.google.com/group/gremlin-users - http://groups.google.com/group/gremlin-users/topics - - - 2009 - - UTF-8 - - - - com.tinkerpop.blueprints - blueprints-core - 1.1-SNAPSHOT - - - - com.tinkerpop.blueprints - blueprints-graph-jung - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-graph-sail - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-neo4j-graph - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-orient-graph - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-dex-graph - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-sail-graph - 1.1-SNAPSHOT - provided - - - com.tinkerpop.blueprints - blueprints-rexster-graph - 1.1-SNAPSHOT - provided - - - - com.tinkerpop - pipes - 0.9-SNAPSHOT - - - org.codehaus.groovy - groovy - 1.8.2 - - - - org.fusesource.jansi - jansi - 1.5 - - - jline - jline - 0.9.94 - - - - org.codehaus.gmaven - gmaven-plugin - 1.3 - provided - - - - junit - junit - 4.5 - test - - - - - tinkerpop-repository - TinkerPop Maven2 Repository - http://tinkerpop.com/maven2 - - true - always - - - - - ${basedir}/target - ${project.artifactId}-${project.version} - - - ${basedir}/src/main/resources - - - - - - maven-compiler-plugin - 2.3.2 - - 1.6 - 1.6 - - - - maven-assembly-plugin - 2.2-beta-4 - - - package - - assembly - - - - - - src/assembly/standalone.xml - src/assembly/distribution.xml - - ${project.artifactId}-${project.version} - target - target/assembly/work - warn - - - com.tinkerpop.gremlin.console.Console - - - - - - org.codehaus.gmaven - gmaven-plugin - 1.3 - - - - generateStubs - compile - generateTestStubs - testCompile - - - 1.7 - - - - - - maven-deploy-plugin - 2.5 - - - org.apache.maven.wagon - wagon-ftp - 1.0-alpha-6 - - - - - - - - tinkerpop-repository - TinkerPop Maven2 Repository - ftp://ftp.tinkerpop.com:21/public/maven2/ - - - \ No newline at end of file + + + 4.0.0 + com.tinkerpop.gremlin + gremlin + 1.4-SNAPSHOT + pom + http://gremlin.tinkerpop.com + Gremlin: A Graph Traversal Language + Gremlin is a domain specific language for traversing property graphs. + Gremlin makes use of a path-based syntax to support complex graph traversals. + This language has application in the areas of graph query, analysis, and manipulation. + + 2011 + + + Marko A. Rodriguez + marko@markorodriguez.com + http://markorodriguez.com + + + + + gremlin-core + gremlin-groovy + gremlin-scala + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + http://tinkerpop.com/maven2 + + true + always + + + + + + ${basedir}/target + + + maven-deploy-plugin + 2.5 + + + org.apache.maven.wagon + wagon-ftp + 1.0-alpha-6 + + + + + + + + + tinkerpop-repository + TinkerPop Maven2 Repository + ftp://ftp.tinkerpop.com:21/public/maven2/ + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.8 + + true + + + + +