def crosslinkFilter()

in project_restorer/src/main/scala/PlutoCoreMessageProcessor.scala [272:297]


  def crosslinkFilter(onlineResultsE: Either[String, Seq[OnlineOutputMessage]], nearlineResultsE: Either[String, Seq[OnlineOutputMessage]], crosslinkStatusItemTuplesE: Either[String, Seq[(PlutoCoreMessageProcessor.SendRemoveActionTarget.Value, OnlineOutputMessage)]]): Seq[Either[String, Seq[OnlineOutputMessage]]] =
    (onlineResultsE, nearlineResultsE, crosslinkStatusItemTuplesE) match {
      case (Right(onlineResults), Right(nearlineResults), Right(crosslinkStatusItemTuples)) =>
        val neitherItemTuples = crosslinkStatusItemTuples.collect({ case t if SendRemoveActionTarget.Neither == t._1 => t })
        val onlyOnlineItemTuples = crosslinkStatusItemTuples.collect({ case t if SendRemoveActionTarget.OnlyOnline == t._1 => t })

        val neitherNearlineIds = neitherItemTuples.map(_._2.nearlineId).collect({ case Some(x) => x })
        val onlyOnlineNearlineIds = onlyOnlineItemTuples.map(_._2.nearlineId).collect({ case Some(x) => x })
        val filteredNearline = nearlineResults
          .filterNot(item => neitherNearlineIds.contains(item.nearlineId.getOrElse("<missing nearline ID>")))
          .filterNot(item => onlyOnlineNearlineIds.contains(item.nearlineId.getOrElse("<missing nearline ID>")))

        val neitherOnlineIds = neitherItemTuples.map(_._2.vidispineItemId).collect({ case Some(x) => x })
        val filteredOnline = crosslinkStatusItemTuples
          .filterNot(item => neitherOnlineIds.contains(item._2.vidispineItemId.getOrElse("<missing vsItem ID>"))).map(_._2)

        logPreAndPostCrosslinkFiltering(onlineResults, nearlineResults, filteredNearline, filteredOnline)

        Seq(Right(filteredOnline), Right(filteredNearline), Right(crosslinkStatusItemTuples.map(_._2)))

      case (onlineE, nearlineE, Right(_)) =>
        Seq(onlineE, nearlineE, Right(Seq()))

      case (onlineE, nearlineE, Left(err)) =>
        Seq(onlineE, nearlineE, Left(err))
    }