def toQueryOption()

in s2core/src/main/scala/org/apache/s2graph/core/rest/RequestParser.scala [313:363]


  def toQueryOption(jsValue: JsValue, impIdOpt: Option[String]): QueryOption = {
    val filterOutFields = (jsValue \ "filterOutFields").asOpt[List[String]].getOrElse(List(LabelMeta.to.name))
    val filterOutQuery = (jsValue \ "filterOut").asOpt[JsValue].map { v =>
      toQuery(v, impIdOpt = impIdOpt)
    }.map { q =>
      q.copy(queryOption = q.queryOption.copy(filterOutFields = filterOutFields, selectColumns = filterOutFields))
    }
    val removeCycle = (jsValue \ "removeCycle").asOpt[Boolean].getOrElse(true)
    val selectColumns = (jsValue \ "select").asOpt[List[String]].getOrElse(List.empty)

    val groupBy = extractGroupBy((jsValue \ "groupBy").asOpt[JsValue])

    val orderByColumns: List[(String, Boolean)] = (jsValue \ "orderBy").asOpt[List[JsObject]].map { jsLs =>
      for {
        js <- jsLs
        (column, orderJs) <- js.fields
      } yield {
        val ascending = orderJs.as[String].toUpperCase match {
          case "ASC" => true
          case "DESC" => false
        }
        column -> ascending
      }
    }.getOrElse(Nil)
    val withScore = (jsValue \ "withScore").asOpt[Boolean].getOrElse(true)
    val returnTree = (jsValue \ "returnTree").asOpt[Boolean].getOrElse(false)
    //TODO: Refactor this
    val limitOpt = (jsValue \ "limit").asOpt[Int]
    val returnAgg = (jsValue \ "returnAgg").asOpt[Boolean].getOrElse(true)
    val scoreThreshold = (jsValue \ "scoreThreshold").asOpt[Double].getOrElse(Double.MinValue)
    val returnDegree = (jsValue \ "returnDegree").asOpt[Boolean].getOrElse(true)
    val ignorePrevStepCache = (jsValue \ "ignorePrevStepCache").asOpt[Boolean].getOrElse(false)
    val shouldPropagateScore = (jsValue \ "shouldPropagateScore").asOpt[Boolean].getOrElse(true)

    QueryOption(removeCycle = removeCycle,
      selectColumns = selectColumns,
      groupBy = groupBy,
      orderByColumns = orderByColumns,
      filterOutQuery = filterOutQuery,
      filterOutFields = filterOutFields,
      withScore = withScore,
      returnTree = returnTree,
      limitOpt = limitOpt,
      returnAgg = returnAgg,
      scoreThreshold = scoreThreshold,
      returnDegree = returnDegree,
      impIdOpt = impIdOpt,
      ignorePrevStepCache,
      shouldPropagateScore
    )
  }