Skip to content
Snippets Groups Projects
Commit 039edb6f authored by npedot's avatar npedot
Browse files

changes Optimus constructor removing transformers

parent dcdfbad5
No related branches found
No related tags found
No related merge requests found
package unibz.cs.semint.kprime.domain
data class Applicability(val ok: Boolean, val message: String)
\ No newline at end of file
data class Applicability(val ok: Boolean, val message: String, val tranformerParmeters: MutableMap<String, Any>)
\ No newline at end of file
......@@ -10,27 +10,37 @@ import unibz.cs.semint.kprime.usecase.service.FileIOService
import unibz.cs.semint.kprime.usecase.service.IXMLSerializerService
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.mapOf
class OptimusUseCase {
class OptimusUseCase(transformationStrategy: TransformationStrategy) {
val transfomers : MutableList<TransformerUseCase> = ArrayList<TransformerUseCase>()
val transformationStrategy : TransformationStrategy
val transformationStrategy = transformationStrategy
constructor(serializer : IXMLSerializerService, fileIOService: FileIOService, transformationStrategy: TransformationStrategy) {
transfomers.add(TransformerHUseCase())
transfomers.add(TransformerVUseCase(serializer,fileIOService))
this.transformationStrategy = transformationStrategy
fun addTrasnsformers(transformers : List<TransformerUseCase>): OptimusUseCase {
this.transfomers.addAll(transformers)
return this
}
fun transfom(db: Database):List<Transformation> {
if (transfomers.size==0) {
println("Required at least one transformer. Use addTrasnsformers().")
}
val transformationPath = transfomers
.filter { t -> t.decomposeApplicable(db,transformationStrategy).ok }
.map { t -> t.decompose(db) }.toList()
.map { t ->
val params = mapOf(
"workingDir" to ""
)
t.decompose(db, params)
}.toList()
return transformationPath
}
fun oldtransfom(db: Database):Database {
// FIXME deprecated
private fun oldtransfom(db: Database):Database {
var dbTrasformable = db
var moreTrasformable = true
while (moreTrasformable) {
......@@ -42,6 +52,7 @@ class OptimusUseCase {
return dbTrasformable
}
// FIXME deprecated
private fun tryUseAnyTransfomers(db: Database, dbTrasformable: Database, trasformable: Boolean): Pair<Database, Boolean> {
var dbTrasformable1 = dbTrasformable
var moreTrasformable = trasformable
......@@ -54,6 +65,7 @@ class OptimusUseCase {
return Pair(dbTrasformable1, moreTrasformable)
}
// FIXME deprecated
private fun checkDecomposabilityUserAknowledgeAndTransform(
transfomer: TransformerUseCase, db: Database, dbTrasformable1: Database, trasformable1: Boolean): Pair<Database, Boolean> {
var dbTrasformable11 = dbTrasformable1
......@@ -62,7 +74,10 @@ class OptimusUseCase {
moreTrasformable = decomposability.ok
if (decomposability.ok) {
if (mockedUserAknowledge(decomposability.message)) {
val transformation: Transformation = transfomer.decompose(db)
val params = mapOf(
"" to ""
)
val transformation: Transformation = transfomer.decompose(db, params)
print(transformation.changeset)
print(transformation.newdb)
dbTrasformable11 = transformation.newdb
......@@ -71,6 +86,7 @@ class OptimusUseCase {
return Pair(dbTrasformable11, moreTrasformable)
}
// FIXME deprecated by strategy
private fun userAknowledge(message: String): Boolean {
println()
println(message)
......@@ -80,6 +96,7 @@ class OptimusUseCase {
return response.toUpperCase().equals("Y")
}
// FIXME deprecated
private fun mockedUserAknowledge(message: String): Boolean {
println()
println(message)
......
......@@ -6,8 +6,8 @@ import unibz.cs.semint.kprime.domain.TransformationStrategy
import unibz.cs.semint.kprime.domain.ddl.Database
interface TransformerUseCase {
fun decompose(db: Database, vararg params:String): Transformation
fun compose(db: Database, vararg params:String): Transformation
fun decompose(db: Database, params:Map<String,Any>): Transformation
fun compose(db: Database, params:Map<String,Any>): Transformation
fun decomposeApplicable(db: Database, transformationStrategy : TransformationStrategy): Applicability
fun composeApplicable(db: Database, transformationStrategy : TransformationStrategy): Applicability
}
\ No newline at end of file
......@@ -8,24 +8,26 @@ import unibz.cs.semint.kprime.domain.dml.ChangeSet
import unibz.cs.semint.kprime.usecase.TransformerUseCase
class TransformerHUseCase : TransformerUseCase {
override fun decompose(db: Database, vararg params:String): Transformation {
override fun decompose(db: Database, params:Map<String,Any>): Transformation {
// TODO("not implemented")
return Transformation(ChangeSet(), Database())
}
override fun compose(db: Database, vararg params:String): Transformation {
override fun compose(db: Database, params:Map<String,Any>): Transformation {
// TODO("not implemented")
return Transformation(ChangeSet(), Database())
}
override fun decomposeApplicable(db: Database, transformationStrategy: TransformationStrategy): Applicability {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
return Applicability(false,"TransformerHUseCase.decomposeApplicable")
val tranformerParmeters = mutableMapOf<String,Any>()
return Applicability(false, "TransformerHUseCase.decomposeApplicable", tranformerParmeters)
}
override fun composeApplicable(db: Database, transformationStrategy: TransformationStrategy): Applicability {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
return Applicability(false,"TransformerHUseCase.composeApplicable")
val tranformerParmeters = mutableMapOf<String,Any>()
return Applicability(false, "TransformerHUseCase.composeApplicable", tranformerParmeters)
}
}
\ No newline at end of file
package unibz.cs.semint.kprime.usecase.current
import unibz.cs.semint.kprime.adapter.file.FileIOAdapter
import unibz.cs.semint.kprime.domain.Applicability
import unibz.cs.semint.kprime.domain.Transformation
import unibz.cs.semint.kprime.domain.TransformationStrategy
......@@ -16,12 +15,12 @@ class TransformerVUseCase(serializer: IXMLSerializerService, fileIOAdapter: File
val serializer = serializer
val fileIOAdapter = fileIOAdapter
override fun decompose(db: Database, vararg params:String): Transformation {
override fun decompose(db: Database, params:Map<String,Any>): Transformation {
val tranformerParmeters = mutableMapOf<String,Any>()
tranformerParmeters["originTable"]=params[0]
tranformerParmeters["targetTable1"]=params[1]
tranformerParmeters["targetTable2"]=params[2]
val workingDir = params[3]
tranformerParmeters["originTable"]=params["originTable"]!!
tranformerParmeters["targetTable1"]=params["targetTable1"]!!
tranformerParmeters["targetTable2"]=params["targetTable2"]!!
val workingDir = params["workingDir"] as String
val changeSet = XPathTransformUseCase().compute(fileIOAdapter.writeOnWorkingFilePath(serializer.prettyDatabase(db), workingDir+"db.xml"),
"vertical",
"decompose",
......@@ -31,7 +30,7 @@ class TransformerVUseCase(serializer: IXMLSerializerService, fileIOAdapter: File
return Transformation(changeSet, ApplyChangeSetUseCase(serializer).apply(db,changeSet))
}
override fun compose(db: Database, vararg params:String): Transformation {
override fun compose(db: Database, params: Map<String,Any>): Transformation {
val changeSet = VJoinUseCase().compute(db)
val newdb = ApplyChangeSetUseCase(serializer).apply(db, changeSet)
return Transformation(changeSet, newdb)
......@@ -39,12 +38,21 @@ class TransformerVUseCase(serializer: IXMLSerializerService, fileIOAdapter: File
override fun decomposeApplicable(db: Database, transformationStrategy: TransformationStrategy): Applicability {
// TODO("not implemented decompose applicable logic.")
return Applicability(true,"TransformerVUseCase.decomposeApplicable")
// check if there is a functional dependency
// transformationStrategy.askToProceed
// then extract orginalTable
// then extract targetTable1 transformationStrategy.askParameter
// then extract targetTable2 transformationStrategy.askParameter
// then extract workingDir fileIOAdapter
// then extract workingFileName
val tranformerParmeters = mutableMapOf<String,Any>()
return Applicability(true,"TransformerVUseCase.decomposeApplicable", tranformerParmeters)
}
override fun composeApplicable(db: Database, transformationStrategy: TransformationStrategy): Applicability {
// TODO("not implemented compose applicable logic.")
return Applicability(true,"TransformerVUseCase.composeApplicable")
val tranformerParmeters = mutableMapOf<String,Any>()
return Applicability(true, "TransformerVUseCase.composeApplicable", tranformerParmeters)
}
}
\ No newline at end of file
......@@ -37,6 +37,7 @@ import unibz.cs.semint.kprime.usecase.current.TransformerVUseCase
class SakilaRefactTI {
@Test
// TODO work in progress...
fun test_api() {
var db = readMeta(sakilaDataSource())
if (db==null) {
......@@ -51,8 +52,13 @@ class SakilaRefactTI {
// val workingDir = "/home/nicola/Tmp/"
val workingDir = "/home/nipe/Temp/"
db = TransformerVUseCase(XMLSerializerJacksonAdapter(), FileIOAdapter()).decompose(
db,"film","film_catalog","film_rental", workingDir).newdb // detect lossy
val params = mapOf(
"originTable" to "film",
"targetTable1" to "film_catalog",
"targetTable2" to "film_rental",
"workingDir" to workingDir
)
db = TransformerVUseCase(XMLSerializerJacksonAdapter(), FileIOAdapter()).decompose(db,params).newdb // detect lossy
// .hdecompose("film_core","film_ita","film_not_ita","select * where language='IT'") // detect lossy
// .genarm()
// .alias("film_ita","film_italiani")
......
......@@ -90,6 +90,7 @@ class SakilaTransfomerScenarioTI {
Executes a query to sakila after split horizontal table in views.
Without changing the database.
*/
// TODO work in progress...
fun test_xpath_horizontal_decomposition_on_person_db() {
// given
val dbFilePath = "db/sakila_film_functional.xml"
......
......@@ -6,8 +6,12 @@ import org.junit.Test
import unibz.cs.semint.kprime.adapter.file.FileIOAdapter
import unibz.cs.semint.kprime.adapter.service.XMLSerializerJacksonAdapter
import unibz.cs.semint.kprime.adapter.strategy.TransformationStrategyYesAdapter
import unibz.cs.semint.kprime.domain.DataSource
import unibz.cs.semint.kprime.domain.Transformation
import unibz.cs.semint.kprime.scenario.sakila.readMeta
import unibz.cs.semint.kprime.scenario.sakila.sakilaDataSource
import unibz.cs.semint.kprime.usecase.current.TransformerHUseCase
import unibz.cs.semint.kprime.usecase.current.TransformerVUseCase
/**
* Applies Optimus to local Sakila Postgres Example.
......@@ -39,14 +43,21 @@ class OptimusUseCaseTI {
.addFunctionals("film","film_id --> replacement_cost, rental_duration, rental_rate")
// when
val serializerService = XMLSerializerJacksonAdapter()
val fileIOService = FileIOAdapter()
val transformationPath = OptimusUseCase(
XMLSerializerJacksonAdapter(),
FileIOAdapter(),
TransformationStrategyYesAdapter()
).transfom(database)
).addTrasnsformers(listOf(
TransformerHUseCase(),
TransformerVUseCase(serializerService,fileIOService)
)).transfom(database)
// then
assertNotNull(transformationPath)
//doPhysicalTransformation(sakilaDataSource(), trasformationPath)
doPhysicalTransformation(sakilaDataSource(), transformationPath)
}
private fun doPhysicalTransformation(sakilaDataSource: DataSource, transformationPath: List<Transformation>) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment