Skip to content
Snippets Groups Projects
Commit 96209c5e authored by npedot's avatar npedot
Browse files

adds deep clone db to serializer, used in apply changeset use case

parent 57775301
No related branches found
No related tags found
No related merge requests found
......@@ -46,6 +46,11 @@ class XMLSerializerJacksonAdapter : IXMLSerializerService {
return writer.writeValueAsString(db)
}
override fun deepclone(database: Database): Database {
val serializeDatabase = serializeDatabase(database)
return deserializeDatabase(serializeDatabase)
}
// constraint
override fun serializeConstraint(constraint: Constraint): String {
......
......@@ -2,6 +2,7 @@ package unibz.cs.semint.kprime.domain
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement
import kotlin.Cloneable
@JacksonXmlRootElement(localName = "constraint")
class Constraint () {
......@@ -18,4 +19,5 @@ class Constraint () {
var source = Source()
var target = Target()
}
......@@ -14,11 +14,4 @@ open class Database () {
var schema: Schema = Schema()
// @JsonCreator
// constructor(name:String, id:String, schema:Schema):this() {
// this.name=name
// this.id=id
// this.schema=schema
// }
}
......@@ -67,4 +67,5 @@ class Schema () {
constraints.add(functionalConstraint)
}
}
......@@ -2,13 +2,15 @@ package unibz.cs.semint.kprime.usecase
import unibz.cs.semint.kprime.domain.ChangeSet
import unibz.cs.semint.kprime.domain.Database
import unibz.cs.semint.kprime.usecase.service.IXMLSerializerService
/**
* Given a Databse will apply changes following a given changeSet modification.
*/
class ApplyChangeSetUseCase {
class ApplyChangeSetUseCase(serializer : IXMLSerializerService) {
val serializer = serializer
fun apply(db: Database, changeset:ChangeSet):Database {
// TODO for every create* and remove* will do it on a cloned db
return Database()
val newdb = serializer.deepclone(db)
return newdb
}
}
\ No newline at end of file
package unibz.cs.semint.kprime.usecase
import unibz.cs.semint.kprime.domain.Database
import unibz.cs.semint.kprime.usecase.service.IXMLSerializerService
class TransformerVUseCase :TransformerUseCase {
class TransformerVUseCase(serializer:IXMLSerializerService) :TransformerUseCase {
val serializer = serializer
override fun decompose(db: Database): Database {
val changeSet = VSplitUseCase().compute(db)
return ApplyChangeSetUseCase().apply(db,changeSet)
return ApplyChangeSetUseCase(serializer).apply(db,changeSet)
}
override fun compose(db: Database): Database {
val changeSet = VJoinUseCase().compute(db)
return ApplyChangeSetUseCase().apply(db,changeSet)
return ApplyChangeSetUseCase(serializer).apply(db,changeSet)
}
}
\ No newline at end of file
......@@ -16,4 +16,5 @@ interface IXMLSerializerService {
fun prettyChangeSet(table: ChangeSet): String
fun serializeTransfomer(transformer: Transformer): String
fun deserializeTransformer(transformer: String): Transformer
fun deepclone(database: Database):Database
}
\ No newline at end of file
package unibz.cs.semint.kprime.usecase
import org.junit.Test
import unibz.cs.semint.kprime.adapter.service.XMLSerializerJacksonAdapter
import unibz.cs.semint.kprime.domain.*
import kotlin.test.assertEquals
class ApplyChangeSetUseCaseTest {
@Test
fun test_deepclone_to_person_db() {
//given
val db = setUpPersonDb()
val changeset = ChangeSet()
val serializer = XMLSerializerJacksonAdapter()
// when
val newdb = ApplyChangeSetUseCase(serializer).apply(db, changeset)
//then
// checks that a mutation of original db isn't reflected on newdb.
assertEquals("person",newdb.name)
assertEquals(1,newdb.schema.constraints.size)
assertEquals(Constraint.TYPE.PRIMARY_KEY.name,newdb.schema.constraints[0].type)
assertEquals(1,newdb.schema.tables.size)
newdb.schema.constraints[0].type=Constraint.TYPE.FOREIGN_KEY.name
assertEquals(Constraint.TYPE.PRIMARY_KEY.name,db.schema.constraints[0].type)
}
@Test
fun test_apply_empty_changeset_to_person_db_as_identity() {
//given
val db = setUpPersonDb()
val changeset = ChangeSet()
val serializer = XMLSerializerJacksonAdapter()
// when
val newdb = ApplyChangeSetUseCase(serializer).apply(db, changeset)
//then
// checks identity
val serializeDb = serializer.serializeDatabase(db)
val serializeNewDb = serializer.serializeDatabase(newdb)
assertEquals(serializeDb,serializeNewDb)
}
fun setUpPersonDb():Database {
val db = Database()
db.name="person"
val constraint = Constraint()
val sourceCol = Column()
constraint.source.columns.add(sourceCol)
val targetCol = Column()
constraint.target.columns.add(targetCol)
constraint.type=Constraint.TYPE.PRIMARY_KEY.name
db.schema.constraints.add(constraint)
val table = Table()
val column = Column()
table.columns.add(column)
db.schema.tables.add(table)
return db
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment