Repository: incubator-s2graph
Updated Branches:
  refs/heads/master 1c2bd045a -> b58ba20b1


[S2GRAPH-124]: Change JSONParser from Trait to Object.


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

Branch: refs/heads/master
Commit: 38df9f8c213ec847da08d09ef9ef4bdf809fb939
Parents: ed03799
Author: DO YUNG YOON <[email protected]>
Authored: Tue Nov 8 13:52:41 2016 +0900
Committer: DO YUNG YOON <[email protected]>
Committed: Tue Nov 8 13:52:41 2016 +0900

----------------------------------------------------------------------
 .../loader/subscriber/TransferToHFile.scala     |   4 +-
 .../scala/org/apache/s2graph/core/Edge.scala    |  10 +-
 .../org/apache/s2graph/core/JSONParser.scala    | 235 +++++++++++++++++--
 .../org/apache/s2graph/core/Management.scala    |   3 +-
 .../org/apache/s2graph/core/PostProcess.scala   |   4 +-
 .../org/apache/s2graph/core/mysqls/Label.scala  |   6 +-
 .../apache/s2graph/core/mysqls/LabelMeta.scala  |   4 +-
 .../s2graph/core/mysqls/ServiceColumn.scala     |   2 +-
 .../s2graph/core/parsers/WhereParser.scala      |   6 +-
 .../s2graph/core/rest/RequestParser.scala       |   4 +-
 .../apache/s2graph/core/JsonParserTest.scala    |   3 +-
 .../org/apache/s2graph/rest/netty/Server.scala  |   2 +-
 .../rest/play/controllers/QueryController.scala |   2 +-
 13 files changed, 239 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/loader/src/main/scala/org/apache/s2graph/loader/subscriber/TransferToHFile.scala
----------------------------------------------------------------------
diff --git 
a/loader/src/main/scala/org/apache/s2graph/loader/subscriber/TransferToHFile.scala
 
b/loader/src/main/scala/org/apache/s2graph/loader/subscriber/TransferToHFile.scala
index f010328..f347ba9 100644
--- 
a/loader/src/main/scala/org/apache/s2graph/loader/subscriber/TransferToHFile.scala
+++ 
b/loader/src/main/scala/org/apache/s2graph/loader/subscriber/TransferToHFile.scala
@@ -38,7 +38,7 @@ import play.api.libs.json.Json
 import scala.collection.JavaConversions._
 
 
-object TransferToHFile extends SparkApp with JSONParser {
+object TransferToHFile extends SparkApp {
 
   val usages =
     s"""
@@ -94,7 +94,7 @@ object TransferToHFile extends SparkApp with JSONParser {
   def buildDegreePutRequests(vertexId: String, labelName: String, direction: 
String, degreeVal: Long): List[PutRequest] = {
     val label = Label.findByName(labelName).getOrElse(throw new 
RuntimeException(s"$labelName is not found in DB."))
     val dir = GraphUtil.directions(direction)
-    val innerVal = jsValueToInnerVal(Json.toJson(vertexId), 
label.srcColumnWithDir(dir).columnType, label.schemaVersion).getOrElse {
+    val innerVal = JSONParser.jsValueToInnerVal(Json.toJson(vertexId), 
label.srcColumnWithDir(dir).columnType, label.schemaVersion).getOrElse {
       throw new RuntimeException(s"$vertexId can not be converted into 
innerval")
     }
     val vertex = Vertex(SourceVertexId(label.srcColumn.id.get, innerVal))

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/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..81946ba 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/Edge.scala
@@ -22,8 +22,8 @@ package org.apache.s2graph.core
 import org.apache.s2graph.core.mysqls.{Label, LabelIndex, LabelMeta}
 import org.apache.s2graph.core.types._
 import org.apache.s2graph.core.utils.logger
+import org.apache.s2graph.core.JSONParser._
 import play.api.libs.json.{JsNumber, Json}
-
 import scala.collection.JavaConversions._
 import scala.util.hashing.MurmurHash3
 
@@ -36,7 +36,7 @@ case class SnapshotEdge(srcVertex: Vertex,
                         props: Map[Byte, InnerValLikeWithTs],
                         pendingEdgeOpt: Option[Edge],
                         statusCode: Byte = 0,
-                        lockTs: Option[Long]) extends JSONParser {
+                        lockTs: Option[Long]) {
 
   if (!props.containsKey(LabelMeta.timeStampSeq)) throw new 
Exception("Timestamp is required.")
 
@@ -70,7 +70,7 @@ case class IndexEdge(srcVertex: Vertex,
                      op: Byte,
                      version: Long,
                      labelIndexSeq: Byte,
-                     props: Map[Byte, InnerValLikeWithTs]) extends JSONParser {
+                     props: Map[Byte, InnerValLikeWithTs]) {
   //  if (!props.containsKey(LabelMeta.timeStampSeq)) throw new 
Exception("Timestamp is required.")
   //  assert(props.containsKey(LabelMeta.timeStampSeq))
 
@@ -144,7 +144,7 @@ case class Edge(srcVertex: Vertex,
                 originalEdgeOpt: Option[Edge] = None,
                 pendingEdgeOpt: Option[Edge] = None,
                 statusCode: Byte = 0,
-                lockTs: Option[Long] = None) extends GraphElement with 
JSONParser {
+                lockTs: Option[Long] = None) extends GraphElement {
 
   if (!props.containsKey(LabelMeta.timeStampSeq)) throw new 
Exception("Timestamp is required.")
   //  assert(propsWithTs.containsKey(LabelMeta.timeStampSeq))
@@ -305,7 +305,7 @@ case class EdgeMutate(edgesToDelete: List[IndexEdge] = 
List.empty[IndexEdge],
   }
 }
 
-object Edge extends JSONParser {
+object Edge {
   val incrementVersion = 1L
   val minTsVal = 0L
 

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala
index 796ba7c..732840e 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala
@@ -19,12 +19,15 @@
 
 package org.apache.s2graph.core
 
-import org.apache.s2graph.core.types.{InnerVal, InnerValLike}
+import org.apache.s2graph.core.GraphExceptions.IllegalDataTypeException
+import org.apache.s2graph.core.mysqls.LabelMeta
+import org.apache.s2graph.core.rest.TemplateHelper
+import org.apache.s2graph.core.types.{InnerValLikeWithTs, InnerVal, 
InnerValLike}
 import org.apache.s2graph.core.utils.logger
 import play.api.libs.json._
 
 
-trait JSONParser {
+object JSONParser {
 
   //TODO: check result notation on bigDecimal.
   def innerValToJsValue(innerVal: InnerValLike, dataType: String): 
Option[JsValue] = {
@@ -91,27 +94,138 @@ trait JSONParser {
   //    }
   //  }
 
-  def toInnerVal(str: String, dataType: String, version: String): InnerValLike 
= {
-    //TODO:
-    //        logger.error(s"toInnerVal: $str, $dataType, $version")
-    val s =
-      if (str.startsWith("\"") && str.endsWith("\"")) str.substring(1, 
str.length - 1)
-      else str
-    val dType = InnerVal.toInnerDataType(dataType)
+  //  def toInnerVal(str: String, dataType: String, version: String): 
InnerValLike = {
+  //    //TODO:
+  //    //        logger.error(s"toInnerVal: $str, $dataType, $version")
+  //    val s =
+  //      if (str.startsWith("\"") && str.endsWith("\"")) str.substring(1, 
str.length - 1)
+  //      else str
+  //    val dType = InnerVal.toInnerDataType(dataType)
+  //
+  //    dType match {
+  //      case InnerVal.STRING => InnerVal.withStr(s, version)
+  //      //      case t if InnerVal.NUMERICS.contains(t) => 
InnerVal.withNumber(BigDecimal(s), version)
+  //      case InnerVal.BYTE | InnerVal.SHORT | InnerVal.INT | InnerVal.LONG | 
InnerVal.FLOAT | InnerVal.DOUBLE =>
+  //        InnerVal.withNumber(BigDecimal(s), version)
+  //      case InnerVal.BOOLEAN => InnerVal.withBoolean(s.toBoolean, version)
+  //      case InnerVal.BLOB => InnerVal.withBlob(s.getBytes, version)
+  //      case _ =>
+  //        //        InnerVal.withStr("")
+  //        throw new RuntimeException(s"illegal datatype for string: dataType 
is $dataType for $s")
+  //    }
+  //  }
+  def isNumericType(dType: String): Boolean = {
+    dType == InnerVal.LONG || dType == InnerVal.INT ||
+      dType == InnerVal.SHORT || dType == InnerVal.BYTE ||
+      dType == InnerVal.FLOAT || dType == InnerVal.DOUBLE
+  }
 
+  //TODO: fix this messy parts
+  def innerValToAny(innerValLike: InnerValLike, dataType: String): Any = {
+    val dType = InnerVal.toInnerDataType(dataType)
     dType match {
-      case InnerVal.STRING => InnerVal.withStr(s, version)
-      //      case t if InnerVal.NUMERICS.contains(t) => 
InnerVal.withNumber(BigDecimal(s), version)
-      case InnerVal.BYTE | InnerVal.SHORT | InnerVal.INT | InnerVal.LONG | 
InnerVal.FLOAT | InnerVal.DOUBLE =>
-        InnerVal.withNumber(BigDecimal(s), version)
-      case InnerVal.BOOLEAN => InnerVal.withBoolean(s.toBoolean, version)
-      case InnerVal.BLOB => InnerVal.withBlob(s.getBytes, version)
-      case _ =>
-        //        InnerVal.withStr("")
-        throw new RuntimeException(s"illegal datatype for string: dataType is 
$dataType for $s")
+      case InnerVal.LONG =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toLong
+          case l: Long => l
+          case i: Int => i.toLong
+          case f: Float => f.toLong
+          case d: Double => d.toLong
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case InnerVal.INT =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toInt
+          case l: Long => l.toInt
+          case i: Int => i
+          case f: Float => f.toInt
+          case d: Double => d.toInt
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case InnerVal.SHORT =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toShort
+          case s: Short => s
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case InnerVal.BYTE =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toByte
+          case b: Byte => b
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case InnerVal.FLOAT =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toFloat
+          case d: Double => d.toFloat
+          case f: Float => f
+          case l: Long => l.toFloat
+          case i: Int => i.toFloat
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case InnerVal.DOUBLE =>
+        innerValLike.value match {
+          case b: BigDecimal => b.toDouble
+          case d: Double => d
+          case l: Long => l.toDouble
+          case i: Int => i.toDouble
+          case f: Float => f.toDouble
+          case _ => throw new RuntimeException(s"not supported data type: 
$innerValLike, ${innerValLike.value.getClass}, $dataType")
+        }
+      case _ => innerValLike.value
     }
   }
 
+  def toInnerVal(any: Any, dataType: String, version: String): InnerValLike = {
+    val dType = InnerVal.toInnerDataType(dataType)
+    val isNumeric = isNumericType(dType)
+    any match {
+      case n: BigDecimal =>
+        if (isNumeric) InnerVal.withNumber(n, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = BigDecimal, 
[DataType]: $dataType, [Input]: $any")
+      case l: Long =>
+        if (isNumeric) InnerVal.withLong(l, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Long, 
[DataType]: $dataType, [Input]: $any")
+      case i: Int =>
+        if (isNumeric) InnerVal.withInt(i, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Int, 
[DataType]: $dataType, [Input]: $any")
+      case sh: Short =>
+        if (isNumeric) InnerVal.withInt(sh.toInt, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Short, 
[DataType]: $dataType, [Input]: $any")
+      case b: Byte =>
+        if (isNumeric) InnerVal.withInt(b.toInt, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Byte, 
[DataType]: $dataType, [Input]: $any")
+      case f: Float =>
+        if (isNumeric) InnerVal.withFloat(f, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Float, 
[DataType]: $dataType, [Input]: $any")
+      case d: Double =>
+        if (isNumeric) InnerVal.withDouble(d, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Double, 
[DataType]: $dataType, [Input]: $any")
+      case bl: Boolean =>
+        if (dType == InnerVal.BOOLEAN) InnerVal.withBoolean(bl, version)
+        else throw new IllegalDataTypeException(s"[ValueType] = Boolean, 
[DataType]: $dataType, [Input]: $any")
+      case _s: String =>
+        if (isNumeric) {
+          try {
+            val s = TemplateHelper.replaceVariable(System.currentTimeMillis(), 
_s)
+            InnerVal.withNumber(BigDecimal(s), version)
+          } catch {
+            case e: Exception =>
+              throw new IllegalDataTypeException(s"[ValueType] = String, 
[DataType]: $dataType, [Input]: $any")
+          }
+        } else {
+          dType match {
+            case InnerVal.BOOLEAN => try {
+              InnerVal.withBoolean(_s.toBoolean, version)
+            } catch {
+              case e: Exception =>
+                throw new IllegalDataTypeException(s"[ValueType] = String, 
[DataType]: boolean, [Input]: $any")
+            }
+            case InnerVal.STRING => InnerVal.withStr(_s, version)
+          }
+        }
+    }
+  }
   def jsValueToInnerVal(jsValue: JsValue, dataType: String, version: String): 
Option[InnerValLike] = {
     val ret = try {
       val dType = InnerVal.toInnerDataType(dataType.toLowerCase())
@@ -124,13 +238,14 @@ trait JSONParser {
               Some(InnerVal.withNumber(n.value, version))
             case _ => None
           }
-        case s: JsString =>
+        case _s: JsString =>
+          val s = TemplateHelper.replaceVariable(System.currentTimeMillis(), 
_s.value)
           dType match {
-            case InnerVal.STRING => Some(InnerVal.withStr(s.value, version))
-            case InnerVal.BOOLEAN => 
Some(InnerVal.withBoolean(s.as[String].toBoolean, version))
+            case InnerVal.STRING => Some(InnerVal.withStr(s, version))
+            case InnerVal.BOOLEAN => Some(InnerVal.withBoolean(s.toBoolean, 
version))
             //            case t if InnerVal.NUMERICS.contains(t) =>
             case InnerVal.BYTE | InnerVal.SHORT | InnerVal.INT | InnerVal.LONG 
| InnerVal.FLOAT | InnerVal.DOUBLE =>
-              Some(InnerVal.withNumber(BigDecimal(s.value), version))
+              Some(InnerVal.withNumber(BigDecimal(s), version))
             case _ => None
           }
         case b: JsBoolean =>
@@ -144,10 +259,84 @@ trait JSONParser {
       }
     } catch {
       case e: Exception =>
-        logger.error(e.getMessage)
+        logger.error(s"jsValueToInnerVal: jsValue = ${jsValue}, dataType = 
${dataType}, version = ${version}", e)
         None
     }
 
     ret
   }
+
+  def anyValToJsValue(value: Any): Option[JsValue] = {
+    try {
+      val v = value match {
+        case null => JsNull
+        case l: Long => JsNumber(l)
+        case i: Int => JsNumber(i)
+        case s: Short => JsNumber(s.toInt)
+        case b: Byte => JsNumber(b.toInt)
+        case f: Float => JsNumber(f.toDouble)
+        case d: Double => JsNumber(d)
+        case bd: BigDecimal => if (bd.isValidLong) JsNumber(bd.toLong) else 
JsNumber(bd)
+        case s: String => JsString(s)
+        case b: Boolean => JsBoolean(b)
+        case _ => throw new RuntimeException(s"$value, 
${value.getClass.getName} is not supported data type.")
+      }
+      Option(v)
+    } catch {
+      case e: Exception =>
+        logger.error(s"anyValToJsValue: $value", e)
+        None
+    }
+  }
+
+  def jsValueToAny(value: JsValue): Option[AnyRef] = {
+    try {
+      val v = value match {
+//        case JsNull =>
+        case n: JsNumber => n.value
+        case s: JsString => 
TemplateHelper.replaceVariable(System.currentTimeMillis(), s.value)
+        case b: JsBoolean => Boolean.box(b.value)
+      }
+      Option(v)
+    } catch {
+      case e: Exception =>
+        logger.error(s"jsValueToAny: $value", e)
+        None
+    }
+  }
+
+  def propertiesToJson(props: Map[String, Any],
+                       selectColumns: Map[String, Boolean] = Map.empty): 
Map[String, JsValue] = {
+    if (selectColumns.isEmpty) {
+      for {
+        (k, v) <- props
+        jsValue <- anyValToJsValue(v)
+      //      labelMeta <- label.metaPropsInvMap.get(k)
+      //      innerVal = toInnerVal(v.toString, labelMeta.dataType, labelMeta.)
+      } yield {
+        k -> jsValue
+      }
+    } else {
+      for {
+        (k, _) <- selectColumns
+        v <- props.get(k)
+        jsValue <- anyValToJsValue(v)
+      } yield k -> jsValue
+    }
+  }
+
+  def jsValueToString(jsValue: JsValue): String = {
+    jsValue match {
+      case s: JsString => s.value
+      case _ => jsValue.toString
+    }
+  }
+  def fromJsonToProperties(jsObject: JsObject): Map[String, Any] = {
+    val kvs = for {
+      (k, v) <- jsObject.fieldSet
+    } yield {
+        k -> jsValueToString(v)
+      }
+    kvs.toMap
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/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..dc71169 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/Management.scala
@@ -24,6 +24,7 @@ import org.apache.s2graph.core.Management.JsonModel.{Index, 
Prop}
 import org.apache.s2graph.core.mysqls._
 import org.apache.s2graph.core.types.HBaseType._
 import org.apache.s2graph.core.types._
+import org.apache.s2graph.core.JSONParser._
 import play.api.libs.json.Reads._
 import play.api.libs.json._
 
@@ -33,7 +34,7 @@ import scala.util.Try
  * This is designed to be bridge between rest to s2core.
  * s2core never use this for finding models.
  */
-object Management extends JSONParser {
+object Management {
 
   object JsonModel {
 

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/main/scala/org/apache/s2graph/core/PostProcess.scala
----------------------------------------------------------------------
diff --git a/s2core/src/main/scala/org/apache/s2graph/core/PostProcess.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/PostProcess.scala
index 923eeef..9ab08b3 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/PostProcess.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/PostProcess.scala
@@ -23,10 +23,10 @@ import 
org.apache.s2graph.core.GraphExceptions.BadQueryException
 import org.apache.s2graph.core.mysqls.{ColumnMeta, Label, LabelMeta, 
ServiceColumn}
 import org.apache.s2graph.core.types.{InnerVal, InnerValLike}
 import play.api.libs.json.{Json, _}
-
+import org.apache.s2graph.core.JSONParser._
 import scala.collection.mutable.ListBuffer
 
-object PostProcess extends JSONParser {
+object PostProcess {
 
 
   type EDGE_VALUES = Map[String, JsValue]

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/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..760816e 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
@@ -19,10 +19,12 @@
 
 package org.apache.s2graph.core.mysqls
 
+
 import org.apache.s2graph.core.GraphExceptions.ModelNotFoundException
+import org.apache.s2graph.core.GraphUtil
 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 org.apache.s2graph.core.JSONParser._
 import play.api.libs.json.Json
 import scalikejdbc._
 
@@ -262,7 +264,7 @@ 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) {
   def metas = LabelMeta.findAllByLabelId(id.get)
 
   def metaSeqsToNames = metas.map(x => (x.seq, x.name)) toMap

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/main/scala/org/apache/s2graph/core/mysqls/LabelMeta.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/LabelMeta.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/LabelMeta.scala
index f2b6bad..ef5d90a 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/LabelMeta.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/LabelMeta.scala
@@ -28,7 +28,7 @@ import org.apache.s2graph.core.{GraphExceptions, JSONParser}
 import play.api.libs.json.Json
 import scalikejdbc._
 
-object LabelMeta extends Model[LabelMeta] with JSONParser {
+object LabelMeta extends Model[LabelMeta] {
 
   /** dummy sequences */
 
@@ -164,6 +164,6 @@ object LabelMeta extends Model[LabelMeta] with JSONParser {
   }
 }
 
-case class LabelMeta(id: Option[Int], labelId: Int, name: String, seq: Byte, 
defaultValue: String, dataType: String) extends JSONParser {
+case class LabelMeta(id: Option[Int], labelId: Int, name: String, seq: Byte, 
defaultValue: String, dataType: String) {
   lazy val toJson = Json.obj("name" -> name, "defaultValue" -> defaultValue, 
"dataType" -> dataType)
 }

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/main/scala/org/apache/s2graph/core/mysqls/ServiceColumn.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/ServiceColumn.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/ServiceColumn.scala
index e86aa36..b68fa79 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/mysqls/ServiceColumn.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/mysqls/ServiceColumn.scala
@@ -89,7 +89,7 @@ object ServiceColumn extends Model[ServiceColumn] {
     })
   }
 }
-case class ServiceColumn(id: Option[Int], serviceId: Int, columnName: String, 
columnType: String, schemaVersion: String) extends JSONParser {
+case class ServiceColumn(id: Option[Int], serviceId: Int, columnName: String, 
columnType: String, schemaVersion: String) {
 
   lazy val service = Service.findById(serviceId)
   lazy val metas = ColumnMeta.findAllByColumn(id.get)

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/main/scala/org/apache/s2graph/core/parsers/WhereParser.scala
----------------------------------------------------------------------
diff --git 
a/s2core/src/main/scala/org/apache/s2graph/core/parsers/WhereParser.scala 
b/s2core/src/main/scala/org/apache/s2graph/core/parsers/WhereParser.scala
index f48bec6..5920f3c 100644
--- a/s2core/src/main/scala/org/apache/s2graph/core/parsers/WhereParser.scala
+++ b/s2core/src/main/scala/org/apache/s2graph/core/parsers/WhereParser.scala
@@ -23,12 +23,12 @@ import 
org.apache.s2graph.core.GraphExceptions.WhereParserException
 import org.apache.s2graph.core.mysqls.{Label, LabelMeta}
 import org.apache.s2graph.core.types.InnerValLike
 import org.apache.s2graph.core.{Edge, GraphExceptions, JSONParser}
-
+import org.apache.s2graph.core.JSONParser._
 import scala.annotation.tailrec
 import scala.util.Try
 import scala.util.parsing.combinator.JavaTokenParsers
 
-trait ExtractValue extends JSONParser {
+trait ExtractValue {
   val parent = "_parent."
 
   def propToInnerVal(edge: Edge, key: String) = {
@@ -168,7 +168,7 @@ object WhereParser {
   val success = Where()
 }
 
-case class WhereParser(label: Label) extends JavaTokenParsers with JSONParser {
+case class WhereParser(label: Label) extends JavaTokenParsers {
 
   val anyStr = "[^\\s(),]+".r
 

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/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..2787bf8 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
@@ -20,7 +20,6 @@
 package org.apache.s2graph.core.rest
 
 import java.util.concurrent.{Callable, TimeUnit}
-
 import com.google.common.cache.CacheBuilder
 import com.typesafe.config.Config
 import org.apache.s2graph.core.GraphExceptions.{BadQueryException, 
ModelNotFoundException}
@@ -28,6 +27,7 @@ import org.apache.s2graph.core._
 import org.apache.s2graph.core.mysqls._
 import org.apache.s2graph.core.parsers.{Where, WhereParser}
 import org.apache.s2graph.core.types._
+import org.apache.s2graph.core.JSONParser._
 import play.api.libs.json._
 import play.api.libs.json.Reads._
 
@@ -72,7 +72,7 @@ object TemplateHelper {
   }
 }
 
-class RequestParser(config: Config) extends JSONParser {
+class RequestParser(config: Config) {
 
   import Management.JsonModel._
 

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2core/src/test/scala/org/apache/s2graph/core/JsonParserTest.scala
----------------------------------------------------------------------
diff --git a/s2core/src/test/scala/org/apache/s2graph/core/JsonParserTest.scala 
b/s2core/src/test/scala/org/apache/s2graph/core/JsonParserTest.scala
index 0315188..419e9c4 100644
--- a/s2core/src/test/scala/org/apache/s2graph/core/JsonParserTest.scala
+++ b/s2core/src/test/scala/org/apache/s2graph/core/JsonParserTest.scala
@@ -20,9 +20,10 @@
 package org.apache.s2graph.core
 
 import org.apache.s2graph.core.types.{InnerVal, InnerValLike}
+import org.apache.s2graph.core.JSONParser._
 import org.scalatest.{FunSuite, Matchers}
 
-class JsonParserTest extends FunSuite with Matchers with TestCommon with 
JSONParser {
+class JsonParserTest extends FunSuite with Matchers with TestCommon {
 
   import InnerVal._
   import types.HBaseType._

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala
----------------------------------------------------------------------
diff --git 
a/s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala 
b/s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala
index 6ff050f..a654a83 100644
--- a/s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala
+++ b/s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala
@@ -48,7 +48,7 @@ import scala.io.Source
 import scala.util.{Failure, Success, Try}
 import scala.language.existentials
 
-class S2RestHandler(s2rest: RestHandler)(implicit ec: ExecutionContext) 
extends SimpleChannelInboundHandler[FullHttpRequest] with JSONParser {
+class S2RestHandler(s2rest: RestHandler)(implicit ec: ExecutionContext) 
extends SimpleChannelInboundHandler[FullHttpRequest] {
   val ApplicationJson = "application/json"
 
   val Ok = HttpResponseStatus.OK

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/38df9f8c/s2rest_play/app/org/apache/s2graph/rest/play/controllers/QueryController.scala
----------------------------------------------------------------------
diff --git 
a/s2rest_play/app/org/apache/s2graph/rest/play/controllers/QueryController.scala
 
b/s2rest_play/app/org/apache/s2graph/rest/play/controllers/QueryController.scala
index 62b4649..495cf7b 100644
--- 
a/s2rest_play/app/org/apache/s2graph/rest/play/controllers/QueryController.scala
+++ 
b/s2rest_play/app/org/apache/s2graph/rest/play/controllers/QueryController.scala
@@ -27,7 +27,7 @@ import play.api.mvc._
 
 import scala.language.postfixOps
 
-object QueryController extends Controller with JSONParser {
+object QueryController extends Controller {
 
   import ApplicationController._
   import play.api.libs.concurrent.Execution.Implicits.defaultContext

Reply via email to