Skip to content
Snippets Groups Projects
PersonTransfomerScenarioTI.kt 2.89 KiB
Newer Older
npedot's avatar
npedot committed
package unibz.cs.semint.kprime.scenario.person
npedot's avatar
npedot committed

import org.junit.Test
import unibz.cs.semint.kprime.adapter.service.XMLSerializerJacksonAdapter
import unibz.cs.semint.kprime.domain.Xrule
npedot's avatar
npedot committed
import unibz.cs.semint.kprime.usecase.common.XMLSerializeUseCase
import unibz.cs.semint.kprime.usecase.common.XPathTransformUseCase
import java.io.StringWriter
npedot's avatar
npedot committed
import java.util.*
import kotlin.test.assertEquals
npedot's avatar
npedot committed

class PersonTransfomerScenarioTI {

    @Test
npedot's avatar
npedot committed
    fun test_xpath_vertical_decomposition_on_person_db() {
npedot's avatar
npedot committed
        // given
        val dbFilePath = "db/person.xml"
        val tranformerParmeters = mutableMapOf<String,Any>()
npedot's avatar
npedot committed
        tranformerParmeters["originTable"]="person"
        tranformerParmeters["targetTable1"]="person1"
        tranformerParmeters["targetTable2"]="person2"
npedot's avatar
npedot committed

        val transfomerXml = PersonTransfomerScenarioTI::class.java.getResource("/transformer/verticalTransfomer.xml").readText()
        val vTransfomer = XMLSerializeUseCase(XMLSerializerJacksonAdapter()).deserializeTransformer(transfomerXml).ok
        val templateFilePath = vTransfomer!!.splitter.template.filename
        val xrules = toProperties(vTransfomer!!.splitter.xman.xrules)
npedot's avatar
npedot committed
        println(templateFilePath)
        // when
        val newDb = XPathTransformUseCase().transform(dbFilePath, templateFilePath, xrules, tranformerParmeters, StringWriter())
npedot's avatar
npedot committed
        // then
        val lineage = newDb.lineage("person1")
        assertEquals(lineage.size,2)
        assertEquals(lineage.last(),"person")
        assertEquals(lineage.first(),"person1")
npedot's avatar
npedot committed
        // print to console output
npedot's avatar
npedot committed
        println(newDb)
npedot's avatar
npedot committed
    }

    private fun toProperties(xrules: ArrayList<Xrule>): Properties {
        var pros = Properties()
        for (xrule in xrules) {
            pros[xrule.name]=xrule.rule
        }
        return pros
    }

    @Test
    // FIXME rimuovere attributi doppi dalla tabella
    // FIXME drop della primary key person1
npedot's avatar
npedot committed
    fun test_xpath_vertical_composition_on_person_db() {
npedot's avatar
npedot committed
        // given
        val dbFilePath = "db/person_splitted.xml"
npedot's avatar
npedot committed
        val tranformerParmeters = mutableMapOf<String,Any>()
        tranformerParmeters["targetTable"]="person"
        tranformerParmeters["originTable1"]="person1"
        tranformerParmeters["originTable2"]="person2"
npedot's avatar
npedot committed

        val transfomerXml = PersonTransfomerScenarioTI::class.java.getResource("/transformer/verticalTransfomer.xml").readText()
        val vTransfomer = XMLSerializeUseCase(XMLSerializerJacksonAdapter()).deserializeTransformer(transfomerXml).ok
        val templateFilePath = vTransfomer!!.composer.template.filename
        val xrules = toProperties(vTransfomer!!.composer.xman.xrules)
        println(templateFilePath)
npedot's avatar
npedot committed
        // when
        val newDb = XPathTransformUseCase().transform(dbFilePath, templateFilePath, xrules, tranformerParmeters, StringWriter())
npedot's avatar
npedot committed
        // then
        println(newDb)
    @Test
    fun test_roundtrip_vertical_transformation() {

    }
npedot's avatar
npedot committed
}