app/services/migrationcomponents/VSCommissionEntity.scala (45 lines of code) (raw):

package services.migrationcomponents import java.sql.Timestamp import java.time.format.DateTimeFormatter import java.util.UUID import models.{EntryStatus, ProductionOffice} import play.api.libs.json.{JsArray, JsValue} import java.time.Instant import scala.util.Try case class VSCommissionEntity(override protected val rawData:JsValue) extends VSPlutoEntity { def collectionId = getSingle("collectionId") def title = getSingle("gnm_commission_title") def childCollections = getMeta("__child_collection") def status = getSingle("gnm_commission_status").map(entry=>{ if(entry=="In production") { //sometimes we have non-compliant values in VS that need to be dealt with "In Production" } else if(entry=="Complete") { "Completed" } else { entry } }).map(EntryStatus.withName) def description = getMetaOptional("gnm_commission_description").map(_.mkString("\n")) def commissionerId = getSingle("gnm_commission_commissioner").flatMap(stringVal=>Try {UUID.fromString(stringVal) }.toOption) def workingGroupId = getSingle("gnm_commission_workinggroup").flatMap(stringVal=>Try {UUID.fromString(stringVal) }.toOption) def notes = getMetaOptional("gnm_commission_notes") .map(_.mkString("\n")) .flatMap(value=>{ if(value=="") { None } else { Some(value) } }) def ownerId = getMetaOptional("gnm_commission_owner") def productionOffice = getSingle("gnm_commission_production_office").map(ProductionOffice.withName) def scheduledCompletion = getSingle("gnm_commission_scheduled_completion").map(dateString=>{ val formatter = DateTimeFormatter.ISO_DATE val parsedDate = formatter.parse(dateString) Timestamp.from(Instant.from(parsedDate)) }) } object VSCommissionEntity { def apply(rawData:JsValue) = new VSCommissionEntity(rawData) def fromList(entries:JsValue):IndexedSeq[VSCommissionEntity] = entries.as[JsArray].value.map(apply).toIndexedSeq }