Commit e5e0e133 authored by Steven Murdoch's avatar Steven Murdoch
Browse files

Use foldLeft rather than recursion to simplify code

parent 1a32c0ea
Loading
Loading
Loading
Loading
+13 −26
Original line number Diff line number Diff line
@@ -95,34 +95,21 @@ object AutoPromotion {
  }

  def invertMapping(runningNodes: Map[Date, Status]) = {
    // Loop over all dates
    def invertMapping(runningNodes: List[(Date, Status)], acc: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = {
      runningNodes match {
        case Nil => acc
        case (k,v) :: rns => {
          // Loop over all routers running at that date
          def updateNodeInfo(names: List[RouterName], ri: Map[RouterName, RouterInfo]): Map[RouterName, RouterInfo] = {
            names match {
              case Nil => ri
              case n :: ns => {
    runningNodes.foldLeft[Map[RouterName, RouterInfo]](TreeMap.empty){
      (acc: Map[RouterName, RouterInfo],  ds: (Date, Status)) =>
        val (date, status) = ds
        status.runningRouters.toList.foldLeft(acc){(ri, n) =>
          if (ri.contains(n)) {
            val routerInfo = ri(n)
                  routerInfo.addDate(k)
                  updateNodeInfo(ns, ri)
            routerInfo.addDate(date)
            ri
          } else {
            val routerInfo = new RouterInfo
                  routerInfo.addDate(k)
                  updateNodeInfo(ns, ri + (n -> routerInfo))
                }
              }
            }
          }

          invertMapping(rns, updateNodeInfo(v.runningRouters.toList, acc))
            routerInfo.addDate(date)
            ri + (n -> routerInfo)
          }
       }
    }
    invertMapping(runningNodes.toList, TreeMap.empty)
  }

  def main(args: Array[String]) {