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

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement

@JacksonXmlRootElement(localName = "table")
class Table (): Labelled {
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var name: String =""
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var id: String=""

    @JacksonXmlProperty(isAttribute = true)
npedot's avatar
npedot committed
    var view: String =""

    @JacksonXmlProperty(isAttribute = true)
    var condition: String =""
npedot's avatar
npedot committed
    @JacksonXmlProperty(isAttribute = true)
    var parent: String? = null

npedot's avatar
npedot committed
    var columns= ArrayList<Column>()
    @JacksonXmlProperty(isAttribute = true)
    var labels: String? = null

    @JacksonXmlProperty(isAttribute = true)
    var catalog: String? = null

    @JacksonXmlProperty(isAttribute = true)
    var schema: String? = null

    private var labeller = Labeller()

    fun hasColumn(nameToFind:String): Boolean {
        for (col in columns) {
            if (col.name.equals(nameToFind)) return true
        }
        return false
    }

    fun hasColumns(namesToFind:List<String>) : Boolean {
        for (name in namesToFind) {
            if (!hasColumn(name)) return false
        }
        return true
    }

    fun hasNullable(): Boolean {
        for (col in columns) {
            if (col.nullable) return true
        }
        return false
    }

    infix fun id(id: String ) = apply {
        this.id = id
    }

    infix fun name(name: String ) = apply {
        this.name = name
    }

    infix fun withColumn(name: String ) = apply {
        val col = Column()
        col.name = name
        this.columns.add(col)
    }

npedot's avatar
npedot committed
    infix fun withCols(cols: Set<Column>) = apply {
        this.columns.addAll(cols)
    }

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

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

    fun addColomunsLabels(labelsAsString: String): String {
        for (column in columns) column.addLabels(labelsAsString)
        return ""
    }

    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
}