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

com.datawizards.dmg.metadata.package.scala Maven / Gradle / Ivy

The newest version!
package com.datawizards.dmg

package object metadata {
  case class AnnotationAttributeMetaData(name: String, value: String)

  trait HasValueAttribute {
    val attributes: Seq[AnnotationAttributeMetaData]

    def getValue: String = {
      attributes.head.value
    }
  }

  case class AnnotationMetaData(name: String, attributes: Seq[AnnotationAttributeMetaData]) extends HasValueAttribute

  trait HasAnnotations {
    val annotations: Iterable[AnnotationMetaData]

    def getAnnotationValue(annotationName: String): Option[String] = {
      annotations.find(_.name == annotationName).map(_.getValue)
    }

    def annotationExists(annotationName: String): Boolean = {
      val annotation = annotations.find(_.name == annotationName)
      annotation.isDefined
    }

    def getAnnotationsByName(annotationName: String): Iterable[AnnotationMetaData] =
      annotations.filter(_.name == annotationName)
  }

  sealed trait TypeMetaData {
    val packageName: String
    val typeName: String
  }

  sealed abstract class PrimitiveTypeMetaData(val packageName: String, val typeName: String) extends TypeMetaData

  case object IntegerType extends PrimitiveTypeMetaData("scala", "Int")
  case object StringType extends PrimitiveTypeMetaData("scala", "String")
  case object LongType extends PrimitiveTypeMetaData("scala", "Long")
  case object DoubleType extends PrimitiveTypeMetaData("scala", "Double")
  case object FloatType extends PrimitiveTypeMetaData("scala", "Float")
  case object ShortType extends PrimitiveTypeMetaData("scala", "Short")
  case object ByteType extends PrimitiveTypeMetaData("scala", "Byte")
  case object BooleanType extends PrimitiveTypeMetaData("scala", "Boolean")
  case object BinaryType extends PrimitiveTypeMetaData("scala", "Binary")
  case object TimestampType extends PrimitiveTypeMetaData("java.sql", "Timestamp")
  case object DateType extends PrimitiveTypeMetaData("java.util", "Date")
  case object BigDecimalType extends PrimitiveTypeMetaData("scala", "BigDecimal")
  case object BigIntegerType extends PrimitiveTypeMetaData("scala.math", "BigInt")

  case class CollectionTypeMetaData(
    elementType: TypeMetaData
  ) extends TypeMetaData {
    val packageName: String = "scala"
    val typeName: String = "Seq"
  }

  case class MapTypeMetaData(
    keyType: TypeMetaData,
    valueType: TypeMetaData
  ) extends TypeMetaData {
    val packageName: String = "scala"
    val typeName: String = "Map"
  }

  case class ClassFieldMetaData(
    /**
      * Original Scala class field name
      */
    originalFieldName: String,

    /**
      * Field name taking into account annotations
      */
    fieldName: String,
    fieldType: TypeMetaData,
    annotations: Iterable[AnnotationMetaData]
  ) extends HasAnnotations

  case class ClassTypeMetaData(
    packageName: String,

    /**
      * Original Scala class name
      */
    originalTypeName: String,

    /**
      * Type name taking into account annotations
      */
    typeName: String,
    annotations: Iterable[AnnotationMetaData],
    fields: Iterable[ClassFieldMetaData]
  ) extends TypeMetaData with HasAnnotations

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy