def handleMetadataUpdate()

in online_archive/src/main/scala/VidispineMessageProcessor.scala [295:323]


  def handleMetadataUpdate(msg: Json, mediaIngested: VidispineMediaIngested): Future[Either[String, Json]] = {
    mediaIngested.itemId match {
      case Some(itemId) =>
        for {
          maybeArchivedItem <- archivedRecordDAO.findByVidispineId(itemId)
          maybeIgnoredItem <- ignoredRecordDAO.findByVidispineId(itemId)
          result <- (maybeArchivedItem, maybeIgnoredItem) match {
            case (_, Some(ignoredItem))=>
              logger.info(s"Item $itemId is ignored because ${ignoredItem.ignoreReason}, leaving alone")
              Future.failed(SilentDropMessage())
            case (Some(archivedItem), None)=>
              MDC.put("correlationId", archivedItem.correlationId)

              if(archivedItem.archiveHunterIDValidated) {
                vidispineFunctions.uploadMetadataToS3(itemId, mediaIngested.essenceVersion, archivedItem)
              } else {
                logger.info(s"ArchiveHunter ID for ${archivedItem.originalFilePath} has not been validated yet")
                Future(Left(s"ArchiveHunter ID for ${archivedItem.originalFilePath} has not been validated yet"))
              }
            case (None, None)=>
              logger.info(s"No record of vidispine item $itemId")
              Future(Left(s"No record of vidispine item $itemId"))
          }
        } yield result
      case None =>
        logger.error("Metadata update without any item ID")
        Future.failed(new RuntimeException(s"Received metadata update ${msg.noSpaces} without any itemId"))
    }
  }