All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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