Skip to content
Snippets Groups Projects
Column.kt 2.87 KiB
Newer Older
package unibz.cs.semint.kprime.domain.ddl
npedot's avatar
npedot committed

import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty

class Column (): Labelled {
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var name: String = ""
    @JacksonXmlProperty(isAttribute = true)
    var id: String = ""
    @JacksonXmlProperty(isAttribute = true)
    var dbname: String = ""
    @JacksonXmlProperty(isAttribute = true)
    var nullable: Boolean = false
    @JacksonXmlProperty(isAttribute = true)
    var dbtype: String = ""
    @JacksonXmlProperty(isAttribute = true)
    var type: String? = null
    @JacksonXmlProperty(isAttribute = true)
    var unit: String? = null
    @JacksonXmlProperty(isAttribute = true)
    var cardinality: String? = null
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var role: String? = null
    @JacksonXmlProperty(isAttribute = true)
    var labels: String? = null
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var default: Any? = null

    private var labeller = Labeller()
npedot's avatar
npedot committed

    @JsonCreator
    constructor(
        @JsonProperty("name")  name: String,
        @JsonProperty("id") id: String,
        @JsonProperty("dbname") dbname: String) : this() {
        this.name= name
        this.id=id
        this.dbname=dbname
    }

npedot's avatar
npedot committed
    companion object {
        fun set(expr:String):Set<Column> {
            if (expr.isEmpty()) return HashSet()
npedot's avatar
npedot committed
            val names = expr.replace("\\s+","")
            return set(names.split(","))
        }

        fun set(names: List<String>): HashSet<Column> {
            val attrs = HashSet<Column>()
            for (name in names) {
                attrs.add(of(name))
            }
            return attrs
        }

        fun of(name:String):Column {
            val c = Column()
            c.name = name.trim()
            return c

        }

    }
    override fun resetLabels(labelsAsString: String): String {
        labels = labeller.resetLabels(labelsAsString)
        return labelsAsString()
    }

    override fun addLabels(labelsAsString: String): String {
        labels = labeller.addLabels(labelsAsString)
        return labelsAsString()
    }

    override fun addLabels(newLabels: List<Label>): String {
        labels = labeller.addLabels(newLabels)
        return labelsAsString()
    }

    override fun labelsAsString(): String {
        return labels?: ""
    }

    override fun hasLabel(label: String): Boolean {
        return labeller.hasLabel(label)
    }

npedot's avatar
npedot committed
    override fun toString(): String {
        return name
npedot's avatar
npedot committed
    }

    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (javaClass != other?.javaClass) return false
        other as Column
        if (name != other.name) return false
        return true
    }

    override fun hashCode(): Int {
        return name.hashCode()
    }


npedot's avatar
npedot committed
}