diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/Gid.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/Gid.kt new file mode 100644 index 0000000000000000000000000000000000000000..a3acbee8744909d4657925ceb1cb122d4be96b1d --- /dev/null +++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/Gid.kt @@ -0,0 +1,16 @@ +package unibz.cs.semint.kprime.domain + +import java.util.* + +// https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html#randomUUID() +fun nextGid(): Gid = UUID.randomUUID().toString() + +// hexDigit 0-9,a-z,A-Z,'-' +fun Gid.isValidGid(): Boolean { + if (this.isEmpty()) return false + if (this.length < 10) return false + if (!this.matches(Regex("[0-9a-zA-Z\\-]+"))) return false + return true +} + +typealias Gid = String \ No newline at end of file diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Database.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Database.kt index 52ce4a4d5d1ce90a0114fafa61545d2c87cb637d..de9a27ad4b7d22367378cf8c75177b3e5baa94b7 100644 --- a/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Database.kt +++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/ddl/Database.kt @@ -4,7 +4,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement +import unibz.cs.semint.kprime.domain.Gid import unibz.cs.semint.kprime.domain.dql.Query +import unibz.cs.semint.kprime.domain.nextGid import java.util.* import javax.xml.bind.annotation.XmlElements import kotlin.collections.ArrayList @@ -12,11 +14,14 @@ import kotlin.collections.ArrayList @JacksonXmlRootElement(localName = "database") open class Database () { + @JacksonXmlProperty(isAttribute = true) + var gid: Gid? = null + @JacksonXmlProperty(isAttribute = true) var name: String ="" @JacksonXmlProperty(isAttribute = true) - var id: String="" + var id: String = "" @JacksonXmlProperty(isAttribute = true) var author: String? = null diff --git a/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/ChangeSet.kt b/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/ChangeSet.kt index 3de103f21757076c613b730492b25b1803d91d18..ddc609e1d50ca2d37254f1ca319b7132347989ac 100644 --- a/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/ChangeSet.kt +++ b/src/main/kotlin/unibz.cs.semint.kprime/domain/dml/ChangeSet.kt @@ -4,7 +4,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement +import unibz.cs.semint.kprime.domain.Gid import unibz.cs.semint.kprime.domain.ddl.Database +import unibz.cs.semint.kprime.domain.nextGid fun initChangeSet(alfa:ChangeSet.()->Unit):ChangeSet { val changeSet = ChangeSet() @@ -14,6 +16,8 @@ fun initChangeSet(alfa:ChangeSet.()->Unit):ChangeSet { @JacksonXmlRootElement(localName = "changeSet") class ChangeSet() { + @JacksonXmlProperty(isAttribute = true) + var gid: Gid? = null @JacksonXmlProperty(isAttribute = true) var id: String = "" @@ -66,7 +70,7 @@ class ChangeSet() { @JacksonXmlElementWrapper(useWrapping=false) var commands : MutableList<String>? = ArrayList() - infix fun withId(id:String) = apply { + infix fun withId(id:Gid) = apply { this.id=id } diff --git a/src/test/kotlin/unibz.cs.semint.kprime/domain/GidTest.kt b/src/test/kotlin/unibz.cs.semint.kprime/domain/GidTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..755a5a3067a1831305e99a429115c3182434795b --- /dev/null +++ b/src/test/kotlin/unibz.cs.semint.kprime/domain/GidTest.kt @@ -0,0 +1,22 @@ +package unibz.cs.semint.kprime.domain + +import org.junit.Test +import java.util.* +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class GidTest { + + @Test + fun test_gid() { + assertTrue("1234567890".isValidGid()) + assertFalse("".isValidGid()) + assertFalse("123456789".isValidGid()) + // UUID 9c63265d-f068-46d4-83fb-48d10c6ea8d8 + assertTrue(UUID.randomUUID().toString().isValidGid()) + assertTrue(nextGid().isValidGid()) + assertTrue("9c63265d-f068-46d4-83fb-48d10c6ea8d8".isValidGid()) + assertFalse("9c63265d-f068-46d4-83fb+48d10c6ea8d8".isValidGid()) + assertFalse("9c63265d%f068-46d4-83fb-48d10c6ea8d8".isValidGid()) + } +} \ No newline at end of file diff --git a/src/test/kotlin/unibz.cs.semint.kprime/usecase/serialize/YAMLSerializerDatabaseTest.kt b/src/test/kotlin/unibz.cs.semint.kprime/usecase/serialize/YAMLSerializerDatabaseTest.kt index b1b1fd4080862cebb4e9236d30a245e375303382..5f2f318f2543f750cd95eb54b6b0411ffe053d58 100644 --- a/src/test/kotlin/unibz.cs.semint.kprime/usecase/serialize/YAMLSerializerDatabaseTest.kt +++ b/src/test/kotlin/unibz.cs.semint.kprime/usecase/serialize/YAMLSerializerDatabaseTest.kt @@ -27,6 +27,7 @@ class YAMLSerializerDatabaseTest { objectMapper.writeValue(outWriter,database) assertEquals(""" --- + gid: null name: "dbname" id: "iddb" author: null