You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@s2graph.apache.org by st...@apache.org on 2017/11/19 02:29:04 UTC
[21/23] incubator-s2graph git commit: add java helpers on S2GraphLike.
add java helpers on S2GraphLike.
Project: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/commit/97bd7e2c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/tree/97bd7e2c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/diff/97bd7e2c
Branch: refs/heads/master
Commit: 97bd7e2cc07e800ad31c3ba075808e399e52c62c
Parents: 6c61087
Author: DO YUNG YOON <st...@apache.org>
Authored: Sat Nov 18 09:56:53 2017 +0900
Committer: DO YUNG YOON <st...@apache.org>
Committed: Sat Nov 18 10:34:19 2017 +0900
----------------------------------------------------------------------
s2core/build.sbt | 3 +-
.../s2graph/core/GraphElementBuilder.scala | 18 ++++++
.../org/apache/s2graph/core/GraphUtil.scala | 11 +++-
.../org/apache/s2graph/core/S2GraphLike.scala | 66 ++++++++++++++------
4 files changed, 77 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/97bd7e2c/s2core/build.sbt
----------------------------------------------------------------------
diff --git a/s2core/build.sbt b/s2core/build.sbt
index 8033581..b4273ba 100644
--- a/s2core/build.sbt
+++ b/s2core/build.sbt
@@ -48,7 +48,8 @@ libraryDependencies ++= Seq(
"org.specs2" %% "specs2-core" % specs2Version % "test",
"org.apache.hadoop" % "hadoop-hdfs" % hadoopVersion ,
"org.apache.lucene" % "lucene-core" % "6.6.0",
- "org.apache.lucene" % "lucene-queryparser" % "6.6.0"
+ "org.apache.lucene" % "lucene-queryparser" % "6.6.0",
+ "org.scala-lang.modules" %% "scala-java8-compat" % "0.8.0"
)
libraryDependencies := {
http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/97bd7e2c/s2core/src/main/scala/org/apache/s2graph/core/GraphElementBuilder.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/GraphElementBuilder.scala b/s2core/src/main/scala/org/apache/s2graph/core/GraphElementBuilder.scala
index 08da355..aed84c7 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/GraphElementBuilder.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/GraphElementBuilder.scala
@@ -2,9 +2,11 @@ package org.apache.s2graph.core
import org.apache.s2graph.core.GraphExceptions.LabelNotExistException
import org.apache.s2graph.core.JSONParser.{fromJsonToProperties, toInnerVal}
+import org.apache.s2graph.core.S2Graph.{DefaultColumnName, DefaultServiceName}
import org.apache.s2graph.core.mysqls._
import org.apache.s2graph.core.types._
import org.apache.s2graph.core.utils.logger
+import org.apache.tinkerpop.gremlin.structure.T
import play.api.libs.json.{JsObject, Json}
import scala.util.Try
@@ -241,6 +243,22 @@ class GraphElementBuilder(graph: S2GraphLike) {
vertex
}
+ def makeVertex(idValue: AnyRef, kvsMap: Map[String, AnyRef]): S2VertexLike = {
+ idValue match {
+ case vId: VertexId =>
+ toVertex(vId.column.service.serviceName, vId.column.columnName, vId, kvsMap)
+ case _ =>
+ val serviceColumnNames = kvsMap.getOrElse(T.label.toString, DefaultColumnName).toString
+
+ val names = serviceColumnNames.split(S2Vertex.VertexLabelDelimiter)
+ val (serviceName, columnName) =
+ if (names.length == 1) (DefaultServiceName, names(0))
+ else throw new RuntimeException("malformed data on vertex label.")
+
+ toVertex(serviceName, columnName, idValue, kvsMap)
+ }
+ }
+
def toRequestEdge(queryRequest: QueryRequest, parentEdges: Seq[EdgeWithScore]): S2EdgeLike = {
val srcVertex = queryRequest.vertex
val queryParam = queryRequest.queryParam
http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/97bd7e2c/s2core/src/main/scala/org/apache/s2graph/core/GraphUtil.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/GraphUtil.scala b/s2core/src/main/scala/org/apache/s2graph/core/GraphUtil.scala
index 939b596..a4f6bde 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/GraphUtil.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/GraphUtil.scala
@@ -21,6 +21,7 @@ package org.apache.s2graph.core
import java.util.regex.Pattern
+import org.apache.tinkerpop.gremlin.structure.Direction
import play.api.libs.json.Json
import scala.util.hashing.MurmurHash3
@@ -67,7 +68,15 @@ object GraphUtil {
}
}
- def fromDirection(direction: Int) = {
+ def toDirection(direction: Direction): Int = {
+ direction.name() match {
+ case "out" => 0
+ case "in" => 1
+ case "both" => throw new IllegalArgumentException("only in/out direction is supported.")
+ }
+ }
+
+ def fromDirection(direction: Int): String = {
direction match {
case 0 => "out"
case 1 => "in"
http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/97bd7e2c/s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala b/s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala
index 1b80cb4..9772470 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala
@@ -1,8 +1,10 @@
package org.apache.s2graph.core
import java.util
-import java.util.concurrent.TimeUnit
+import java.util.concurrent.{CompletableFuture, TimeUnit}
import java.util.concurrent.atomic.AtomicLong
+import java.lang.{Boolean => JBoolean, Long => JLong}
+import java.util.Optional
import com.typesafe.config.Config
import org.apache.commons.configuration.Configuration
@@ -21,8 +23,11 @@ import org.apache.tinkerpop.gremlin.structure.io.{GraphReader, GraphWriter, Io,
import org.apache.tinkerpop.gremlin.structure.{Direction, Edge, Element, Graph, T, Transaction, Vertex}
import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, ExecutionContext, Future}
+import scala.compat.java8.FutureConverters._
+import scala.compat.java8.OptionConverters._
trait S2GraphLike extends Graph {
@@ -72,34 +77,73 @@ trait S2GraphLike extends Graph {
def getVertices(vertices: Seq[S2VertexLike]): Future[Seq[S2VertexLike]]
+ def getVerticesJava(vertices: util.List[S2VertexLike]): CompletableFuture[util.List[S2VertexLike]] =
+ getVertices(vertices.toSeq).map(_.asJava).toJava.toCompletableFuture
+
def checkEdges(edges: Seq[S2EdgeLike]): Future[StepResult]
+ def checkEdgesJava(edges: util.List[S2EdgeLike]): CompletableFuture[StepResult] =
+ checkEdges(edges.asScala).toJava.toCompletableFuture
+
def mutateVertices(vertices: Seq[S2VertexLike], withWait: Boolean = false): Future[Seq[MutateResponse]]
+ def mutateVerticesJava(vertices: util.List[S2VertexLike], withWait: JBoolean): CompletableFuture[util.List[MutateResponse]] =
+ mutateVertices(vertices.asScala, withWait.booleanValue()).map(_.asJava).toJava.toCompletableFuture
+
def mutateEdges(edges: Seq[S2EdgeLike], withWait: Boolean = false): Future[Seq[MutateResponse]]
+ def mutateEdgesJava(edges: util.List[S2EdgeLike], withWait: JBoolean): CompletableFuture[util.List[MutateResponse]] =
+ mutateEdges(edges.asScala, withWait.booleanValue()).map(_.asJava).toJava.toCompletableFuture
+
def mutateElements(elements: Seq[GraphElement],
withWait: Boolean = false): Future[Seq[MutateResponse]]
+ def mutateElementsJava(elements: util.List[GraphElement], withWait: JBoolean): CompletableFuture[util.List[MutateResponse]] =
+ mutateElements(elements.asScala, withWait.booleanValue()).map(_.asJava).toJava.toCompletableFuture
+
def getEdges(q: Query): Future[StepResult]
+ def getEdgesJava(q: Query): CompletableFuture[StepResult] =
+ getEdges(q).toJava.toCompletableFuture
+
def getEdgesMultiQuery(mq: MultiQuery): Future[StepResult]
+ def getEdgesMultiQueryJava(mq: MultiQuery): CompletableFuture[StepResult] =
+ getEdgesMultiQuery(mq).toJava.toCompletableFuture
+
def deleteAllAdjacentEdges(srcVertices: Seq[S2VertexLike],
labels: Seq[Label],
dir: Int,
ts: Long): Future[Boolean]
+ def deleteAllAdjacentEdgesJava(srcVertices: util.List[S2VertexLike], labels: util.List[Label], direction: Direction): CompletableFuture[JBoolean] =
+ deleteAllAdjacentEdges(srcVertices.asScala, labels.asScala, GraphUtil.toDirection(direction), System.currentTimeMillis()).map(JBoolean.valueOf(_)).toJava.toCompletableFuture
+
def incrementCounts(edges: Seq[S2EdgeLike], withWait: Boolean): Future[Seq[MutateResponse]]
+ def incrementCountsJava(edges: util.List[S2EdgeLike], withWait: JBoolean): CompletableFuture[util.List[MutateResponse]] =
+ incrementCounts(edges.asScala, withWait.booleanValue()).map(_.asJava).toJava.toCompletableFuture
+
def updateDegree(edge: S2EdgeLike, degreeVal: Long = 0): Future[MutateResponse]
+ def updateDegreeJava(edge: S2EdgeLike, degreeVal: JLong): CompletableFuture[MutateResponse] =
+ updateDegree(edge, degreeVal.longValue()).toJava.toCompletableFuture
+
def getVertex(vertexId: VertexId): Option[S2VertexLike]
+ def getVertexJava(vertexId: VertexId): Optional[S2VertexLike] =
+ getVertex(vertexId).asJava
+
def fetchEdges(vertex: S2VertexLike, labelNameWithDirs: Seq[(String, String)]): util.Iterator[Edge]
+ def fetchEdgesJava(vertex: S2VertexLike, labelNameWithDirs: util.List[(String, String)]): util.Iterator[Edge] =
+ fetchEdges(vertex, labelNameWithDirs.asScala)
+
def edgesAsync(vertex: S2VertexLike, direction: Direction, labelNames: String*): Future[util.Iterator[Edge]]
+ def edgesAsyncJava(vertex: S2VertexLike, direction: Direction, labelNames: String*): CompletableFuture[util.Iterator[Edge]] =
+ edgesAsync(vertex, direction, labelNames: _*).toJava.toCompletableFuture
+
/** Convert to Graph Element **/
def toVertex(serviceName: String,
columnName: String,
@@ -196,22 +240,6 @@ trait S2GraphLike extends Graph {
addVertex(Seq(T.label, label): _*)
}
- def makeVertex(idValue: AnyRef, kvsMap: Map[String, AnyRef]): S2VertexLike = {
- idValue match {
- case vId: VertexId =>
- elementBuilder.toVertex(vId.column.service.serviceName, vId.column.columnName, vId, kvsMap)
- case _ =>
- val serviceColumnNames = kvsMap.getOrElse(T.label.toString, DefaultColumnName).toString
-
- val names = serviceColumnNames.split(S2Vertex.VertexLabelDelimiter)
- val (serviceName, columnName) =
- if (names.length == 1) (DefaultServiceName, names(0))
- else throw new RuntimeException("malformed data on vertex label.")
-
- elementBuilder.toVertex(serviceName, columnName, idValue, kvsMap)
- }
- }
-
def addVertex(kvs: AnyRef*): structure.Vertex = {
if (!features().vertex().supportsUserSuppliedIds() && kvs.contains(T.id)) {
throw Vertex.Exceptions.userSuppliedIdsNotSupported
@@ -232,9 +260,9 @@ trait S2GraphLike extends Graph {
val vertex = kvsMap.get(T.id.name()) match {
case None => // do nothing
val id = localLongId.getAndIncrement()
- makeVertex(Long.box(id), kvsMap)
+ elementBuilder.makeVertex(Long.box(id), kvsMap)
case Some(idValue) if S2Property.validType(idValue) =>
- makeVertex(idValue, kvsMap)
+ elementBuilder.makeVertex(idValue, kvsMap)
case _ =>
throw Vertex.Exceptions.userSuppliedIdsOfThisTypeNotSupported
}