Changed DataTypeFeatures.

Project: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/commit/b8033e76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/tree/b8033e76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/diff/b8033e76

Branch: refs/heads/master
Commit: b8033e768b8b61b9ac0d88cd168447ca5f9c8206
Parents: 507cfcf
Author: DO YUNG YOON <steams...@apache.org>
Authored: Fri Apr 14 14:47:52 2017 +0900
Committer: DO YUNG YOON <steams...@apache.org>
Committed: Fri Apr 14 14:47:52 2017 +0900

----------------------------------------------------------------------
 .../scala/org/apache/s2graph/core/S2Graph.scala | 72 +++++++++++++-------
 .../core/features/S2DataTypeFeatures.scala      | 32 +++++----
 2 files changed, 65 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/b8033e76/s2core/src/main/scala/org/apache/s2graph/core/S2Graph.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/S2Graph.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/S2Graph.scala
index 5669b2e..ec02dd5 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/S2Graph.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/S2Graph.scala
@@ -20,8 +20,8 @@
 package org.apache.s2graph.core
 
 import java.util
-import java.util.concurrent.atomic.{AtomicBoolean, AtomicLong}
-import java.util.concurrent.{ExecutorService, Executors, TimeUnit}
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.{Executors, TimeUnit}
 
 import com.typesafe.config.{Config, ConfigFactory}
 import org.apache.commons.configuration.{BaseConfiguration, Configuration}
@@ -34,15 +34,12 @@ import org.apache.s2graph.core.types._
 import org.apache.s2graph.core.utils.{DeferCache, Extensions, logger}
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer
 import org.apache.tinkerpop.gremlin.structure
-import org.apache.tinkerpop.gremlin.structure.Graph.Features.EdgeFeatures
 import org.apache.tinkerpop.gremlin.structure.Graph.{Features, Variables}
-import org.apache.tinkerpop.gremlin.structure.util.ElementHelper
-import org.apache.tinkerpop.gremlin.structure.{Edge, Element, Graph, Property, 
T, Transaction, Vertex}
+import org.apache.tinkerpop.gremlin.structure.{Edge, Element, Graph, T, 
Transaction, Vertex}
 import play.api.libs.json.{JsObject, Json}
 
 import scala.annotation.tailrec
 import scala.collection.JavaConversions._
-import scala.collection.JavaConverters._
 import scala.collection.mutable
 import scala.collection.mutable.{ArrayBuffer, ListBuffer}
 import scala.concurrent._
@@ -548,22 +545,22 @@ object S2Graph {
   // passed: all, failed: none
 
   new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.FeatureSupportTest", 
method="*", reason="no"),
-  // passed: , failed: shouldEnableFeatureOnEdgeIfNotEnabled, 
shouldEnableFeatureOnVertexIfNotEnabled, shouldSupportUserSuppliedIdsOfTypeAny
+  // passed: all, failed: none
+  // shouldEnableFeatureOnEdgeIfNotEnabled, 
shouldEnableFeatureOnVertexIfNotEnabled, shouldSupportUserSuppliedIdsOfTypeAny
 
   new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.VertexTest$BasicVertexTest",
 method="shouldHaveExceptionConsistencyWhenAssigningSameIdOnEdge", 
reason="S2Vertex.addEdge behave as upsert."),
   // passed: , failed: shouldHaveExceptionConsistencyWhenAssigningSameIdOnEdge
 
-    new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdgeTest",
 method="*", reason="no"),
+  new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdgeTest",
 method="shouldNotEvaluateToEqualDifferentId", reason="reference equals is not 
supported."),
   // passed: all, failed: shouldNotEvaluateToEqualDifferentId
 
-
   new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexTest",
 method="*", reason="no"),
   // passed: all, failed: none
 
   new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedGraphTest",
 method="*", reason="no"),
   // passed: all, failed: none,  all ignored
 
-  new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPropertyTest",
 method="*", reason="no"),
+  new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPropertyTest",
 method="shouldNotBeEqualPropertiesAsThereIsDifferentKey", reason="reference 
equals is not supported."),
   // passed: , failed: shouldNotBeEqualPropertiesAsThereIsDifferentKey
 
   new 
Graph.OptOut(test="org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexPropertyTest",
 method="*", reason="no"),
@@ -1608,25 +1605,52 @@ class S2Graph(_config: Config)(implicit val ec: 
ExecutionContext) extends Graph
     }
 
     val kvsMap = S2Property.kvsToProps(kvs)
+
     if (kvsMap.contains(T.label.name()) && 
kvsMap(T.label.name).toString.isEmpty)
       throw Element.Exceptions.labelCanNotBeEmpty
 
-    val id = kvsMap.getOrElse(T.id.toString, Random.nextLong)
-
-    val serviceColumnNames = kvsMap.getOrElse(T.label.toString, 
DefaultColumn.columnName).toString
-
-    val names = serviceColumnNames.split(S2Vertex.VertexLabelDelimiter)
-    val (serviceName, columnName) =
-      if (names.length == 1) (DefaultService.serviceName, names(0))
-      else throw new RuntimeException("malformed data on vertex label.")
-
-    val vertex = toVertex(serviceName, columnName, id, kvsMap)
+    def validType(t: Any): Boolean = t match {
+      case t: String => true
+      case t: java.lang.Integer => true
+      case t: java.lang.Long => true
+      case t: scala.Long => true
+      case t: scala.Int => true
+      case _ => false
+    }
 
-    val future = mutateVertices(Seq(vertex), withWait = true).map { vs =>
-      if (vs.forall(identity)) vertex
-      else throw new RuntimeException("addVertex failed.")
+    val vertex = kvsMap.get(T.id.name()) match {
+      case None => // do nothing
+        val id = Random.nextLong
+        val serviceColumnNames = kvsMap.getOrElse(T.label.toString, 
DefaultColumn.columnName).toString
+
+        val names = serviceColumnNames.split(S2Vertex.VertexLabelDelimiter)
+        val (serviceName, columnName) =
+          if (names.length == 1) (DefaultService.serviceName, names(0))
+          else throw new RuntimeException("malformed data on vertex label.")
+
+        toVertex(serviceName, columnName, id, kvsMap)
+      case Some(idValue) =>
+        idValue match {
+          case vId: VertexId =>
+            toVertex(vId.column.service.serviceName, vId.column.columnName, 
vId, kvsMap)
+
+          case _: Any if validType(idValue) =>
+            val serviceColumnNames = kvsMap.getOrElse(T.label.toString, 
DefaultColumn.columnName).toString
+            val names = serviceColumnNames.split(S2Vertex.VertexLabelDelimiter)
+
+            val (serviceName, columnName) =
+              if (names.length == 1) (DefaultService.serviceName, names(0))
+              else throw new RuntimeException("malformed data on vertex 
label.")
+
+            toVertex(serviceName, columnName, idValue, kvsMap)
+            
+          case _ =>
+            logger.error(s"[S2Graph.addVertex]: ${idValue.getClass.getName}")
+            throw Vertex.Exceptions.userSuppliedIdsOfThisTypeNotSupported
+        }
     }
-    Await.result(future, WaitTimeout)
+
+    addVertex(vertex)
   }
 
   def addVertex(id: VertexId,

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/b8033e76/s2core/src/main/scala/org/apache/s2graph/core/features/S2DataTypeFeatures.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/main/scala/org/apache/s2graph/core/features/S2DataTypeFeatures.scala
 
b/s2core/src/main/scala/org/apache/s2graph/core/features/S2DataTypeFeatures.scala
index a94ead3..3db4930 100644
--- 
a/s2core/src/main/scala/org/apache/s2graph/core/features/S2DataTypeFeatures.scala
+++ 
b/s2core/src/main/scala/org/apache/s2graph/core/features/S2DataTypeFeatures.scala
@@ -4,40 +4,42 @@ import org.apache.tinkerpop.gremlin.structure.Graph.Features
 
 case class S2DataTypeFeatures() extends Features.DataTypeFeatures {
 
-  override def supportsStringValues(): Boolean = true
+  // primitive types
+  override def supportsBooleanValues(): Boolean = true
 
-  override def supportsFloatValues(): Boolean = true
+  override def supportsByteValues(): Boolean = false
 
   override def supportsDoubleValues(): Boolean = true
 
+  override def supportsFloatValues(): Boolean = true
+
   override def supportsIntegerValues(): Boolean = true
 
   override def supportsLongValues(): Boolean = true
 
-  override def supportsBooleanValues(): Boolean = true
-
-  override def supportsDoubleArrayValues(): Boolean = false
+  // non-primitive types
+  override def supportsMapValues(): Boolean = false
 
-  override def supportsStringArrayValues(): Boolean = false
+  override def supportsMixedListValues(): Boolean = false
 
-  override def supportsIntegerArrayValues(): Boolean = false
+  override def supportsBooleanArrayValues(): Boolean = false
 
-  override def supportsByteValues(): Boolean = false
+  override def supportsByteArrayValues(): Boolean = false
 
-  override def supportsUniformListValues(): Boolean = false
+  override def supportsDoubleArrayValues(): Boolean = false
 
-  override def supportsMapValues(): Boolean = false
+  override def supportsFloatArrayValues(): Boolean = false
 
-  override def supportsBooleanArrayValues(): Boolean = false
+  override def supportsIntegerArrayValues(): Boolean = false
 
-  override def supportsSerializableValues(): Boolean = false
+  override def supportsStringArrayValues(): Boolean = false
 
   override def supportsLongArrayValues(): Boolean = false
 
-  override def supportsMixedListValues(): Boolean = false
+  override def supportsSerializableValues(): Boolean = true
 
-  override def supportsFloatArrayValues(): Boolean = false
+  override def supportsStringValues(): Boolean = true
 
-  override def supportsByteArrayValues(): Boolean = false
+  override def supportsUniformListValues(): Boolean = false
 
 }

Reply via email to