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
