
com.innovenso.townplanner.io.concepts.DataObjectExcelIO.scala Maven / Gradle / Ivy
package com.innovenso.townplanner.io.concepts
import com.innovenso.townplanner.io.concepts.ExcelFields._
import com.innovenso.townplanner.model.EnterpriseArchitecture
import com.innovenso.townplanner.model.concepts.properties.DataClassification
import com.innovenso.townplanner.model.concepts.{
AggregateRoot,
Command,
DataObject,
DataObjectConfigurer,
Entity,
Event,
Projection,
Query,
ValueObject
}
object DataObjectExcelIO extends ConceptExcelIO[DataObject] {
override def conceptClass: Class[DataObject] = classOf[DataObject]
override def sheetName: String = "Data Objects"
override def headerLabels: List[String] = List(
TITLE,
DESCRIPTION,
TYPE,
CLASSIFICATION,
CLASSIFICATION_DESCRIPTION
)
override def cellValues(concept: DataObject): List[String] = List(
concept.title,
concept.descriptions.map(_.value).mkString("\n\n"),
concept.dataObjectType,
concept.dataClassification.map(_.level.title).getOrElse(""),
concept.dataClassification.flatMap(_.description).getOrElse("")
)
override def concept(
props: ConceptProperties,
enterpriseArchitecture: EnterpriseArchitecture
): Unit = {
val dataObject = props(TYPE) match {
case "Projection" | "projection" =>
enterpriseArchitecture describes Projection(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it => configureDataObject(props, it) }
case "Query" | "query" =>
enterpriseArchitecture describes Query(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
case "Command" | "command" =>
enterpriseArchitecture describes Command(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
case "Event" | "event" =>
enterpriseArchitecture describes Event(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
case "Aggregate Root" | "aggregate root" | "Aggregate root" |
"aggregate Root" =>
enterpriseArchitecture describes AggregateRoot(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
case "Entity" | "entity" =>
enterpriseArchitecture describes Entity(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
case "Value Object" | "value object" | "Value object" | "value Object" =>
enterpriseArchitecture describes ValueObject(
key = props.key,
sortKey = props.sortKey,
title = props.title
) as { it =>
configureDataObject(props, it)
}
}
println(s"imported $dataObject")
}
private def configureDataObject(
props: ConceptProperties,
it: DataObjectConfigurer[_ <: DataObject]
) = {
props.descriptions.foreach(d => it has d)
it has DataClassification.fromString(
props(CLASSIFICATION),
Option(props(CLASSIFICATION_DESCRIPTION))
)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy