Repository: incubator-s2graph
Updated Branches:
  refs/heads/master 6610285ad -> b5908311a


add options variable on label model class.


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

Branch: refs/heads/master
Commit: 0e58f55722b48517f0db4a99d8e823dff4fffb2d
Parents: 1c2bd04
Author: DO YUNG YOON <steams...@apache.org>
Authored: Wed Mar 16 13:32:36 2016 +0900
Committer: DO YUNG YOON <steams...@apache.org>
Committed: Thu Nov 10 05:46:17 2016 +0900

----------------------------------------------------------------------
 .../scala/org/apache/s2graph/core/Edge.scala    |  3 +-
 .../org/apache/s2graph/core/Management.scala    |  7 ++--
 .../org/apache/s2graph/core/mysqls/Label.scala  | 37 +++++++++-----------
 .../s2graph/core/rest/RequestParser.scala       |  3 +-
 .../s2graph/core/TestCommonWithModels.scala     | 12 +++----
 5 files changed, 30 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
index 0fab400..8813313 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
@@ -159,7 +159,8 @@ case class Edge(srcVertex: Vertex,
     } else {
       val outDir = labelWithDir.copy(dir = GraphUtil.directions("out"))
       val base = copy(labelWithDir = outDir)
-      List(base, base.reverseSrcTgtEdge)
+      val skipReverse = 
label.extraOptions.get("skipReverse").map(_.as[Boolean]).getOrElse(false)
+      if (skipReverse) List(base) else List(base, base.reverseSrcTgtEdge)
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/Management.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
index d5b4335..db2c5af 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
@@ -344,7 +344,8 @@ class Management(graph: Graph) {
                   hTableTTL: Option[Int],
                   schemaVersion: String = DEFAULT_VERSION,
                   isAsync: Boolean,
-                  compressionAlgorithm: String = "gz"): Try[Label] = {
+                  compressionAlgorithm: String = "gz",
+                  options: Option[String] = None): Try[Label] = {
 
     val labelOpt = Label.findByName(label, useCache = false)
 
@@ -358,7 +359,7 @@ class Management(graph: Graph) {
             srcServiceName, srcColumnName, srcColumnType,
             tgtServiceName, tgtColumnName, tgtColumnType,
             isDirected, serviceName, indices, props, consistencyLevel,
-            hTableName, hTableTTL, schemaVersion, isAsync, 
compressionAlgorithm)
+            hTableName, hTableTTL, schemaVersion, isAsync, 
compressionAlgorithm, options)
 
           /* create hbase table */
           val service = newLabel.service
@@ -395,6 +396,6 @@ class Management(graph: Graph) {
       old.tgtService.serviceName, old.tgtColumnName, old.tgtColumnType,
       old.isDirected, old.serviceName,
       allIndices, allProps,
-      old.consistencyLevel, hTableName, old.hTableTTL, old.schemaVersion, 
old.isAsync, old.compressionAlgorithm)
+      old.consistencyLevel, hTableName, old.hTableTTL, old.schemaVersion, 
old.isAsync, old.compressionAlgorithm, old.options)
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala
index 90d3d67..ebbb4ba 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/Label.scala
@@ -23,7 +23,7 @@ import 
org.apache.s2graph.core.GraphExceptions.ModelNotFoundException
 import org.apache.s2graph.core.Management.JsonModel.{Index, Prop}
 import org.apache.s2graph.core.utils.logger
 import org.apache.s2graph.core.{GraphExceptions, GraphUtil, JSONParser}
-import play.api.libs.json.Json
+import play.api.libs.json.{JsValue, JsObject, Json}
 import scalikejdbc._
 
 object Label extends Model[Label] {
@@ -35,7 +35,8 @@ object Label extends Model[Label] {
       rs.int("src_service_id"), rs.string("src_column_name"), 
rs.string("src_column_type"),
       rs.int("tgt_service_id"), rs.string("tgt_column_name"), 
rs.string("tgt_column_type"),
       rs.boolean("is_directed"), rs.string("service_name"), 
rs.int("service_id"), rs.string("consistency_level"),
-      rs.string("hbase_table_name"), rs.intOpt("hbase_table_ttl"), 
rs.string("schema_version"), rs.boolean("is_async"), 
rs.string("compressionAlgorithm"))
+      rs.string("hbase_table_name"), rs.intOpt("hbase_table_ttl"), 
rs.string("schema_version"), rs.boolean("is_async"),
+      rs.string("compressionAlgorithm"), rs.stringOpt("options"))
   }
 
   def deleteAll(label: Label)(implicit session: DBSession) = {
@@ -72,7 +73,8 @@ object Label extends Model[Label] {
              hTableTTL: Option[Int],
              schemaVersion: String,
              isAsync: Boolean,
-             compressionAlgorithm: String)(implicit session: DBSession = 
AutoSession) = {
+             compressionAlgorithm: String,
+             options: Option[String])(implicit session: DBSession = 
AutoSession) = {
     sql"""
        insert into labels(label,
     src_service_id, src_column_name, src_column_type,
@@ -156,7 +158,8 @@ object Label extends Model[Label] {
                 hTableTTL: Option[Int],
                 schemaVersion: String,
                 isAsync: Boolean,
-                compressionAlgorithm: String)(implicit session: DBSession = 
AutoSession): Label = {
+                compressionAlgorithm: String,
+                options: Option[String])(implicit session: DBSession = 
AutoSession): Label = {
 
     val srcServiceOpt = Service.findByName(srcServiceName, useCache = false)
     val tgtServiceOpt = Service.findByName(tgtServiceName, useCache = false)
@@ -186,7 +189,8 @@ object Label extends Model[Label] {
 
           val createdId = insert(labelName, srcServiceId, srcColumnName, 
srcColumnType,
             tgtServiceId, tgtColumnName, tgtColumnType, isDirected, 
serviceName, serviceId, consistencyLevel,
-            hTableName.getOrElse(service.hTableName), 
hTableTTL.orElse(service.hTableTTL), schemaVersion, isAsync, 
compressionAlgorithm).toInt
+            hTableName.getOrElse(service.hTableName), 
hTableTTL.orElse(service.hTableTTL), schemaVersion, isAsync,
+            compressionAlgorithm, options).toInt
 
           val labelMetaMap = metaProps.map { case Prop(propName, defaultValue, 
dataType) =>
             val labelMeta = LabelMeta.findOrInsert(createdId, propName, 
defaultValue, dataType)
@@ -262,7 +266,8 @@ case class Label(id: Option[Int], label: String,
                  isDirected: Boolean = true, serviceName: String, serviceId: 
Int, consistencyLevel: String = "strong",
                  hTableName: String, hTableTTL: Option[Int],
                  schemaVersion: String, isAsync: Boolean = false,
-                 compressionAlgorithm: String) extends JSONParser {
+                 compressionAlgorithm: String,
+                 options: Option[String]) extends JSONParser {
   def metas = LabelMeta.findAllByLabelId(id.get)
 
   def metaSeqsToNames = metas.map(x => (x.seq, x.name)) toMap
@@ -323,6 +328,11 @@ case class Label(id: Option[Int], label: String,
     jsValue <- innerValToJsValue(toInnerVal(prop.defaultValue, prop.dataType, 
schemaVersion), prop.dataType)
   } yield prop.name -> jsValue).toMap
 
+  lazy val extraOptions: Map[String, JsValue] = options match {
+    case None => Map.empty
+    case Some(v) => Json.parse(v).asOpt[JsObject].map { obj => 
obj.fields.toMap }.getOrElse(Map.empty)
+  }
+
   def srcColumnWithDir(dir: Int) = {
     if (dir == GraphUtil.directions("out")) srcColumn else tgtColumn
   }
@@ -353,26 +363,11 @@ case class Label(id: Option[Int], label: String,
     metaProps
   }
 
-  //  def srcColumnInnerVal(jsValue: JsValue) = {
-  //    jsValueToInnerVal(jsValue, srcColumnType, version)
-  //  }
-  //  def tgtColumnInnerVal(jsValue: JsValue) = {
-  //    jsValueToInnerVal(jsValue, tgtColumnType, version)
-  //  }
-
   override def toString(): String = {
     val orderByKeys = LabelMeta.findAllByLabelId(id.get)
     super.toString() + orderByKeys.toString()
   }
 
-  //  def findLabelIndexSeq(scoring: List[(Byte, Double)]): Byte = {
-  //    if (scoring.isEmpty) LabelIndex.defaultSeq
-  //    else {
-  //      LabelIndex.findByLabelIdAndSeqs(id.get, 
scoring.map(_._1).sorted).map(_.seq).getOrElse(LabelIndex.defaultSeq)
-  //
-  ////      LabelIndex.findByLabelIdAndSeqs(id.get, 
scoring.map(_._1).sorted).map(_.seq).getOrElse(LabelIndex.defaultSeq)
-  //    }
-  //  }
   lazy val toJson = Json.obj("labelName" -> label,
     "from" -> srcColumn.toJson, "to" -> tgtColumn.toJson,
     "isDirected" -> isDirected,

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala
index f67a89b..7fa9e34 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala
@@ -559,10 +559,11 @@ class RequestParser(config: Config) extends JSONParser {
     val schemaVersion = (jsValue \ 
"schemaVersion").asOpt[String].getOrElse(HBaseType.DEFAULT_VERSION)
     val isAsync = (jsValue \ "isAsync").asOpt[Boolean].getOrElse(false)
     val compressionAlgorithm = (jsValue \ 
"compressionAlgorithm").asOpt[String].getOrElse(DefaultCompressionAlgorithm)
+    val options = (jsValue \ "options").asOpt[JsValue].map(_.toString())
 
     (labelName, srcServiceName, srcColumnName, srcColumnType,
       tgtServiceName, tgtColumnName, tgtColumnType, isDirected, serviceName,
-      indices, allProps, consistencyLevel, hTableName, hTableTTL, 
schemaVersion, isAsync, compressionAlgorithm)
+      indices, allProps, consistencyLevel, hTableName, hTableTTL, 
schemaVersion, isAsync, compressionAlgorithm, options)
   }
 
   def toIndexElements(jsValue: JsValue) = Try {

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/0e58f557/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala 
b/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala
index c652e80..33a901d 100644
--- a/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala
+++ b/s2core/src/test/scala/org/apache/s2graph/core/TestCommonWithModels.scala
@@ -134,22 +134,22 @@ trait TestCommonWithModels {
   def createTestLabel() = {
     implicit val session = AutoSession
     management.createLabel(labelName, serviceName, columnName, columnType, 
serviceName, columnName, columnType,
-      isDirected = true, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4")
+      isDirected = true, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4", None)
 
     management.createLabel(labelNameV2, serviceNameV2, columnNameV2, 
columnTypeV2, serviceNameV2, tgtColumnNameV2, tgtColumnTypeV2,
-      isDirected = true, serviceNameV2, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4")
+      isDirected = true, serviceNameV2, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4", None)
 
     management.createLabel(labelNameV3, serviceNameV3, columnNameV3, 
columnTypeV3, serviceNameV3, tgtColumnNameV3, tgtColumnTypeV3,
-      isDirected = true, serviceNameV3, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4")
+      isDirected = true, serviceNameV3, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4", None)
 
     management.createLabel(labelNameV4, serviceNameV4, columnNameV4, 
columnTypeV4, serviceNameV4, tgtColumnNameV4, tgtColumnTypeV4,
-      isDirected = true, serviceNameV4, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION4, false, "lg4")
+      isDirected = true, serviceNameV4, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION4, false, "lg4", None)
 
     management.createLabel(undirectedLabelName, serviceName, columnName, 
columnType, serviceName, tgtColumnName, tgtColumnType,
-      isDirected = false, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION3, false, "lg4")
+      isDirected = false, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION1, false, "lg4", None)
 
     management.createLabel(undirectedLabelNameV2, serviceNameV2, columnNameV2, 
columnTypeV2, serviceNameV2, tgtColumnNameV2, tgtColumnTypeV2,
-      isDirected = false, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4")
+      isDirected = false, serviceName, testIdxProps, testProps, 
consistencyLevel, Some(hTableName), hTableTTL, VERSION2, false, "lg4", None)
   }
 
   def service = Service.findByName(serviceName, useCache = false).get

Reply via email to