in s2core/src/main/scala/org/apache/s2graph/core/S2GraphLike.scala [84:238]
override def features() = s2Features
def fallback = Future.successful(StepResult.Empty)
def defaultStorage: Storage
def getStorage(service: Service): Storage
def getStorage(label: Label): Storage
def getVertexFetcher(column: ServiceColumn): VertexFetcher
def getEdgeFetcher(label: Label): EdgeFetcher
def getAllVertexFetchers(): Seq[VertexFetcher]
def getAllEdgeFetchers(): Seq[EdgeFetcher]
/** optional */
def getOptimisticEdgeFetcher(label: Label): OptimisticEdgeFetcher
def getEdgeMutator(label: Label): EdgeMutator
def getVertexMutator(column: ServiceColumn): VertexMutator
def flushStorage(): Unit
def shutdown(modelDataDelete: Boolean = false): Unit
def getVertices(vertices: Seq[S2VertexLike]): Future[Seq[S2VertexLike]]
def getVertices(queryParam: VertexQueryParam): Future[Seq[S2VertexLike]]
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,
id: Any,
props: Map[String, Any] = Map.empty,
ts: Long = System.currentTimeMillis(),
operation: String = "insert"): S2VertexLike =
elementBuilder.toVertex(serviceName, columnName, id, props, ts, operation)
def toEdge(srcId: Any,
tgtId: Any,
labelName: String,
direction: String,
props: Map[String, Any] = Map.empty,
ts: Long = System.currentTimeMillis(),
operation: String = "insert"): S2EdgeLike =
elementBuilder.toEdge(srcId, tgtId, labelName, direction, props, ts, operation)
def toGraphElement(s: String, labelMapping: Map[String, String] = Map.empty): Option[GraphElement] =
elementBuilder.toGraphElement(s, labelMapping)
/** TinkerPop Interfaces **/
def vertices(ids: AnyRef*): util.Iterator[structure.Vertex] = {
val fetchVertices = ids.lastOption.map { lastParam =>
if (lastParam.isInstanceOf[Boolean]) lastParam.asInstanceOf[Boolean]
else true
}.getOrElse(true)
if (ids.isEmpty) {
//TODO: default storage need to be fixed.
val futures = (defaultStorage.vertexFetcher +: getAllVertexFetchers).map { vertexFetcher =>
vertexFetcher.fetchVerticesAll()
}
val future = Future.sequence(futures)
Await.result(future, WaitTimeout).flatten.iterator
} else {
val vertexIds = ids.collect {
case s2Vertex: S2VertexLike => s2Vertex.id
case vId: VertexId => vId
case vertex: Vertex => vertex.id().asInstanceOf[VertexId]
case other@_ => VertexId.fromString(other.toString)
}
if (fetchVertices) {
val queryParam = VertexQueryParam(vertexIds = vertexIds)
val future = getVertices(queryParam).map { vs =>
val ls = new util.ArrayList[structure.Vertex]()
ls.addAll(vs)
ls.iterator()
}
Await.result(future, WaitTimeout)
} else {
vertexIds.map(vId => elementBuilder.newVertex(vId)).iterator
}
}
}