def uploadShapeIfRequired()

in online_nearline/src/main/scala/VidispineMessageProcessor.scala [344:393]


  def uploadShapeIfRequired(vault: Vault, fullPath: Path,
                            mediaIngested: VidispineMediaIngested,
                            nearlineRecord: NearlineRecord,
                            proxyFile:VSShapeFile): Future[Either[String, MessageProcessorReturnValue]] = {
    logger.debug(s"uploadShapeIfRequired: Shape file is $fullPath")

    val proxyFileName = uploadKeyForProxy(nearlineRecord, proxyFile)

    val copyResult = for {
      copyResult <- fileCopier.copyFileToMatrixStore(vault, proxyFileName, fullPath)
      metadataUpdate <- buildMetadataForProxy(vault, nearlineRecord)
      writeResult <- Future.fromTry((copyResult, metadataUpdate) match {
        case (Left(_), _)=>Success( () ) //ignore
        case (Right(proxyObjectId), Some(meta))=>
          callUpdateMetadata(vault, proxyObjectId, meta)
        case (Right(proxyObjectId), None)=>
          logger.error(s"Could not get parent metadata for ${nearlineRecord.objectId} (${nearlineRecord.originalFilePath}). Deleting the copied proxy until we have the right metadata.")
          Try {
            val obj = vault.getObject(proxyObjectId)
            obj.delete()
          }
      })
      _ <- Future.fromTry(copyResult match {
        case Left(_)=>Success( () )
        case Right(proxyOid)=>updateParentsMetadata(vault, nearlineRecord.objectId, "ATT_PROXY_OID", proxyOid)
      })
    } yield copyResult

    copyResult.flatMap({
        case Right(objectId) =>
          val record = nearlineRecord
            .copy(
              proxyObjectId = Some(objectId),
              vidispineItemId = mediaIngested.itemId,
              vidispineVersionId = mediaIngested.essenceVersion,
            )

          nearlineRecordDAO
            .writeRecord(record)
            .map(recId=>
              Right(MessageProcessorReturnValue(
                record
                  .copy(id = Some(recId))
                  .asJson
              ))
            )

        case Left(error) => Future(Left(error))
      })
  }