diff --git a/src/main/scala/org/rosi_project/model_sync/generator/Generator.scala b/src/main/scala/org/rosi_project/model_sync/generator/Generator.scala index a2184b044860ac0ce2a0ca7823e788c2b7b40d26..9067dc95e5bc8700ab365bdc1b2cda0471783c64 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/Generator.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/Generator.scala @@ -48,7 +48,7 @@ class Generator(config: GeneratorConfig) { }) //create the new classes for rsum and rsync - if (config.getCreate == Creation.rolesync) { + if (config.create == Creation.rolesync) { sModels.foreach(sm => { //instance generation for rsync if (sm._2.obj != null) { @@ -59,7 +59,7 @@ class Generator(config: GeneratorConfig) { new SModelSyncUiPreparationService prepareModel (sm._1, config.getModelConfigFromEcore(sm._1.getSourceName)) }) } - if (config.getCreate == Creation.rolesum) { + if (config.create == Creation.rolesum) { sModels.foreach(sm => { //create core stuff new SModelSUMCorePreparationService prepareModel (sm._1) @@ -69,7 +69,7 @@ class Generator(config: GeneratorConfig) { new SModelSUMPreparationService prepareModel (sm._1) }) } - if (config.getCreate == Creation.rolecomb) { + if (config.create == Creation.rolecomb) { sModels.foreach(sm => { //create core stuff new SModelSUMCorePreparationService prepareModel (sm._1) @@ -106,7 +106,7 @@ class Generator(config: GeneratorConfig) { } }) - if (config.getCreate != Creation.rolesync) { + if (config.create != Creation.rolesync) { //create join stuff val modelJoinFile = config.getModelJoinFile if (modelJoinFile != null && modelJoinFile.exists()) { diff --git a/src/main/scala/org/rosi_project/model_sync/generator/GeneratorConfig.scala b/src/main/scala/org/rosi_project/model_sync/generator/GeneratorConfig.scala index 375a37e5ce374d6be2ca0fe722675b0ae87fce7d..3a21bea23333ace6a4d033e7c7b4c7a291f02e92 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/GeneratorConfig.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/GeneratorConfig.scala @@ -13,15 +13,8 @@ case class GeneratorConfig(sources: Seq[String] = Seq(), outDir: File = new File(System.getProperty("user.dir")), workDir: File = null, modelJoin: String = null, //can be more than one - syncLanguage: String = null) { //can be more than one - - private var create = Creation.rolesync - - def setCreate(d: Creation.Value): Unit = { - create = d - } - - def getCreate: Creation.Value = create; + syncLanguage: String = null, //can be more than one + create: Creation.Value = Creation.rolesync) { def hasWorkDir: Boolean = workDir != null diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala index 5b7bb51b584ba1e68c7b28fafe03bee83d87779d..442b904cc1b67a5b1951d8db6bab0906f265e683 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/ComplexSModel.scala @@ -14,7 +14,6 @@ class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SMo private var relationalCompartments: Set[SClass] = Set.empty private var viewCompartments: Set[SClass] = Set.empty private var joinClasses: Set[SClass] = Set.empty - private var joinObjects: Set[SClass] = Set.empty private var sEnums: Set[SEnum] = Set.empty /** Provides all model classes in `this` model. */ @@ -32,9 +31,6 @@ class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SMo /** Provides all the classes in `this` model. */ override def getAllClasses: Set[SClass] = modelClasses ++ providerClasses ++ relationalCompartments ++ viewCompartments - /** Provides all join objects in `this` model. */ - override def getJoinObjects: Set[SClass] = joinObjects - /** Provides all join classes in `this` model. */ override def getJoinClasses: Set[SClass] = joinClasses @@ -91,16 +87,6 @@ class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SMo joinClasses += mClass } - /** - * Extends the model by a new join object. - * - * @param mClass the class to add. May never `null`. - */ - override def addJoinObject(mClass: SClass): Unit = { - Assert.notNull(mClass, "Class may not be null") - joinObjects += mClass - } - /** * Extends the model by a new enum. * @@ -126,7 +112,6 @@ class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SMo relationalCompartments == that.relationalCompartments && viewCompartments == that.viewCompartments && joinClasses == that.joinClasses && - joinObjects == that.joinObjects && sEnums == that.sEnums case _ => false } @@ -137,7 +122,6 @@ class ComplexSModel(name: String, sourceName: String, nsUri: String) extends SMo relationalCompartments = relationalCompartments ++ model.getRelationalCompartments viewCompartments = viewCompartments ++ model.getViewCompartments joinClasses = joinClasses ++ model.getJoinClasses - joinObjects = joinObjects ++ model.getJoinObjects sEnums = sEnums ++ model.getModelEnums return this } diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala index f6c872e406351fbe7932d722ee71efc6c7ff8784..6d72049eb945dae34de2160f15900234ea868ce4 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClass.scala @@ -15,8 +15,7 @@ import org.rosi_project.model_sync.generator.sync.ToStringMethods */ class SClass(_name: String, _sPackage: String = "", - val isAbstract: Boolean = false, - _isInterface: Boolean = false) extends STypedElement(_name, _sPackage, _isInterface) { + _sClassType: SClassType.Value = SClassType.normalClass) extends STypedElement(_name, _sPackage, _sClassType) { protected var parentClass: STypedElement = null protected var parentInterfaces: Seq[STypedElement] = Seq.empty diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClassType.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClassType.scala new file mode 100644 index 0000000000000000000000000000000000000000..50ad1d74a477abf4cd9106759470ce269141301a --- /dev/null +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SClassType.scala @@ -0,0 +1,5 @@ +package org.rosi_project.model_sync.generator.acr_model + +object SClassType extends Enumeration { + val normalClass, caseClass, abstactClass, normalTrait, normalObject = Value +} \ No newline at end of file diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SEnum.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SEnum.scala index ad1a398c2bc2782d742d2f2498c37f8602d9812f..a0f6271b6a30005d3e23ee878d1120bf79891e7b 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SEnum.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SEnum.scala @@ -1,6 +1,6 @@ package org.rosi_project.model_sync.generator.acr_model -class SEnum (_name: String, _sPackage: String, val enums: Set[String]) extends STypedElement(_name, _sPackage, false) { +class SEnum (_name: String, _sPackage: String, val enums: Set[String]) extends STypedElement(_name, _sPackage, SClassType.normalClass) { override def getDeepName: String = _name + ".Value" diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerClass.scala index 899b42ac8e343f090d43f85d68339b900dace822..a9433f70e8a196db8ea96f576aac2dcf3e2eebe0 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerClass.scala @@ -4,9 +4,8 @@ import java.util.Objects class SInnerClass(_name: String, _sPackage: String = "", - _isAbstract: Boolean = false, - _isInterface: Boolean = false, - val externalClass: SClass) extends SClass(_name, _sPackage, _isAbstract, _isInterface) { + _sClassType: SClassType.Value = SClassType.normalClass, + val externalClass: SClass) extends SClass(_name, _sPackage, _sClassType) { Objects.requireNonNull(externalClass, "External class may not be null") diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewNaturalClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewNaturalClass.scala index 1093d9988b0c97f14c8e57ce6198b0838f41078f..38fe319e6469452bec98b0b22d6773f8062eadbc 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewNaturalClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewNaturalClass.scala @@ -4,10 +4,9 @@ import java.util.Objects class SInnerViewNaturalClass(_name: String, _sPackage: String = "", - _isAbstract: Boolean = false, - _isInterface: Boolean = false, + _sClassType: SClassType.Value = SClassType.normalClass, _externalClass: SClass, - val sumSource: SClass) extends SInnerClass(_name, _sPackage, _isAbstract, _isInterface, _externalClass) { + val sumSource: SClass) extends SInnerClass(_name, _sPackage, _sClassType, _externalClass) { Objects.requireNonNull(sumSource, "SUM Source class may not be null") diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewRelationalClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewRelationalClass.scala index eb966274561fb9e128f2f203b3e186f419256671..97feb240a538d46c4b06bc042838070aee814b1d 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewRelationalClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SInnerViewRelationalClass.scala @@ -4,12 +4,11 @@ import java.util.Objects class SInnerViewRelationalClass(_name: String, _sPackage: String = "", - _isAbstract: Boolean = false, - _isInterface: Boolean = false, + _sClassType: SClassType.Value = SClassType.normalClass, _externalClass: SClass, val sumSource: SRelationalCompartmentClass, val viewSource: SInnerViewNaturalClass, - val viewTarget: SInnerViewNaturalClass) extends SInnerClass(_name, _sPackage, _isAbstract, _isInterface, _externalClass) { + val viewTarget: SInnerViewNaturalClass) extends SInnerClass(_name, _sPackage, _sClassType, _externalClass) { Objects.requireNonNull(sumSource, "SUM Source class may not be null") Objects.requireNonNull(viewSource, "View Source class may not be null") diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala index f014f0c2580c424a3e0d6de49b15dabc8a32cd19..7412f6eb5b6d8072c7c697a4e0187bb1c04c4f5e 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SModel.scala @@ -22,6 +22,9 @@ abstract class SModel(private val name: String, private val sourceName: String, /** Provides all model classes in `this` model. */ def getModelClasses: Set[SClass] + /** Provides all model enums in `this` model. */ + def getModelEnums: Set[SEnum] + /** Provides all provider classes in `this` model. */ def getProviderClasses: Set[SClass] @@ -31,14 +34,10 @@ abstract class SModel(private val name: String, private val sourceName: String, /** Provides all view compartments in `this` model. */ def getViewCompartments: Set[SClass] - /** Provides all join objects in `this` model. */ - def getJoinObjects: Set[SClass] - /** Provides all join classes in `this` model. */ def getJoinClasses: Set[SClass] - /** Provides all model enums in `this` model. */ - def getModelEnums: Set[SEnum] + /** Extends the model by a new provder class. * @@ -70,12 +69,6 @@ abstract class SModel(private val name: String, private val sourceName: String, */ def addJoinClass(mClass: SClass): Unit - /** Extends the model by a new join object. - * - * @param mClass the class to add. May never `null`. - */ - def addJoinObject(mClass: SClass): Unit - /** Extends the model by a new enum. * * @param mEnum the enum to add. May never `null`. diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SRelationalCompartmentClass.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SRelationalCompartmentClass.scala index c08527fa359025695793f61e33db86f2c7f57bb2..2a311e6667394ce8b1ad6413dd0917abd625df69 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SRelationalCompartmentClass.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SRelationalCompartmentClass.scala @@ -4,11 +4,10 @@ import java.util.Objects class SRelationalCompartmentClass(_name: String, _sPackage: String = "", - _isAbstract: Boolean = false, - _isInterface: Boolean = false, + _sClassType: SClassType.Value = SClassType.normalClass, val connectedRef: SReference, val sClass: STypedElement, - val tClass: STypedElement) extends SClass(_name, _sPackage, _isAbstract, _isInterface) { + val tClass: STypedElement) extends SClass(_name, _sPackage, _sClassType) { Objects.requireNonNull(connectedRef, "Connected Reference may not be null") } \ No newline at end of file diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SType.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SType.scala index 350ec3743d89c8582c2e11b7c460aae3e31192a8..ad0470e4e58497855daab94bd119517addf58f58 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SType.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SType.scala @@ -11,7 +11,7 @@ package org.rosi_project.model_sync.generator.acr_model * @see [[SClass]] * @author Rico Bergmann */ -case class SType(_name: String, _sPackage: String = "", _isInterface: Boolean = true) extends STypedElement (_name, _sPackage, _isInterface) { +case class SType(_name: String, _sPackage: String = "", _sClassType: SClassType.Value = SClassType.normalTrait) extends STypedElement (_name, _sPackage, _sClassType) { override def accept(visitor: SModelVisitor): Unit = visitor.visit(this) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/STypedElement.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/STypedElement.scala index b57f9e3fc76d145ffacd569510b83e863e7ccc1c..0579ff7b2c1bc36bbd79bc8ecf2bc9c99e9f49a9 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/STypedElement.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/STypedElement.scala @@ -12,7 +12,7 @@ package org.rosi_project.model_sync.generator.acr_model */ abstract class STypedElement (_name: String, val sPackage: String, - val isInterface: Boolean) extends SNamedModelElement(_name) { + val sClassType: SClassType.Value) extends SNamedModelElement(_name) { /** Checks, whether `this` is part of the default package */ def isDefaultPackage: Boolean = sPackage == "" @@ -44,6 +44,16 @@ abstract class STypedElement (_name: String, */ def getNecessaryImports: Set[SImport] = Set.empty + def isInterface: Boolean = sClassType == SClassType.normalTrait + + def isAbstract: Boolean = sClassType == SClassType.abstactClass + + def isObject: Boolean = sClassType == SClassType.normalObject + + def isCaseClass: Boolean = sClassType == SClassType.caseClass + + def isNormalClass: Boolean = sClassType == SClassType.normalClass + override def toString: String = s"STE: $getName($sPackage, $isInterface)" } diff --git a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala index d27217e72bd0ebd03b441b1d90a6e344c774f7ea..c5ac6720b057b4d23be47ffe451d94beb4522977 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/acr_model/SimpleSModel.scala @@ -26,9 +26,6 @@ class SimpleSModel(name: String, sourceName: String, nsUri: String) extends SMod /** Provides all view compartments in `this` model. */ override def getViewCompartments: Set[SClass] = sClasses - /** Provides all join objects in `this` model. */ - override def getJoinObjects: Set[SClass] = Set.empty - /** Provides all join classes in `this` model. */ override def getJoinClasses: Set[SClass] = Set.empty @@ -57,7 +54,7 @@ class SimpleSModel(name: String, sourceName: String, nsUri: String) extends SMod * * @param mEnum the enum to add. May never `null`. */ - def addModelEnums(mEnum: SEnum): Unit = { + override def addModelEnums(mEnum: SEnum): Unit = { Assert.notNull(mEnum, "Enum may not be null") sEnums += mEnum } @@ -84,13 +81,7 @@ class SimpleSModel(name: String, sourceName: String, nsUri: String) extends SMod * * @param mClass the class to add. May never `null`. */ - def addJoinClass(mClass: SClass): Unit = {/*pass*/} - - /** Extends the model by a new join object. - * - * @param mClass the class to add. May never `null`. - */ - def addJoinObject(mClass: SClass): Unit = {/*pass*/} + override def addJoinClass(mClass: SClass): Unit = {/*pass*/} override def accept(visitor: SModelVisitor): Unit = { sClasses.foreach(_.accept(visitor)) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SClassConverter.scala b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SClassConverter.scala index f059a89f957a34495ed9a18edda8342845cf82d4..34573306ef182f24140e1ed2e8fb9996eef3a613 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SClassConverter.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SClassConverter.scala @@ -135,7 +135,14 @@ class SClassConverter extends Converter[EClass, SClass] { case sType => sys.error(s"sType should have been a class: $sType") }.getOrElse { - val createdClass: SClass = new SClass(source.getName, PackageNames.sourcePkgPrefix + source.getEPackage.getNsPrefix, source.isAbstract, source.isInterface) + var sClassType = SClassType.normalClass + if (source.isAbstract) { + sClassType = SClassType.abstactClass + } + if (source.isInterface) { + sClassType = SClassType.normalTrait + } + val createdClass: SClass = new SClass(source.getName, PackageNames.sourcePkgPrefix + source.getEPackage.getNsPrefix, sClassType) createdClass.setAttributes(attrs) createdClass.setReferences(refs) pars.foreach(p => { diff --git a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala index b2e108e5f7f7929dcba9aadf6ea02d51c8d9c240..76a4cfeb57da0728560e252ccfefc55c0baf68f7 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/conversion/SModelGenerator.scala @@ -1,39 +1,43 @@ package org.rosi_project.model_sync.generator.conversion -import org.eclipse.emf.ecore.{EClass, EGenericType, EPackage} -import org.rosi_project.model_sync.generator.acr_model.{SModel, SType, STypeRegistry, ComplexSModel} +import org.eclipse.emf.ecore.{ EClass, EGenericType, EPackage } +import org.rosi_project.model_sync.generator.acr_model.{ SModel, SType, STypeRegistry, ComplexSModel } import scala.collection.JavaConverters._ import org.rosi_project.model_sync.generator.acr_model.SClass import org.eclipse.emf.ecore.EEnum import org.rosi_project.model_sync.generator.PackageNames +import org.rosi_project.model_sync.generator.acr_model.SClassType -/** Converter to generate an [[SModel]] from ecore. - * - * @author Rico Bergmann - */ +/** + * Converter to generate an [[SModel]] from ecore. + * + * @author Rico Bergmann + */ class SModelGenerator extends Converter[EPackage, SModel] { override def convert(source: EPackage, sourceName: String): SModel = { //val packageName = if (source.getName != null) source.getName else "" var contents = source.eAllContents().asScala val model = new ComplexSModel(source.getName, sourceName, source.getNsURI) - - println("... Converting ecore model") + println("... Converting ecore model") println("First run creates all classes, important for abstract and interface relations") contents.foreach { case ec: EClass => - if (PackageNames.multiInhertitanceWithTraits) { - STypeRegistry.addType(new SClass(ec.getName, PackageNames.sourcePkgPrefix + ec.getEPackage.getNsPrefix, ec.isInterface, ec.isAbstract), ec) - } else { - STypeRegistry.addType(new SClass(ec.getName, PackageNames.sourcePkgPrefix + ec.getEPackage.getNsPrefix, ec.isAbstract, ec.isInterface), ec) - } + var sClassType = SClassType.normalClass + if (ec.isAbstract) { + sClassType = SClassType.abstactClass + } + if (ec.isInterface || PackageNames.multiInhertitanceWithTraits) { + sClassType = SClassType.normalTrait + } + STypeRegistry.addType(new SClass(ec.getName, PackageNames.sourcePkgPrefix + ec.getEPackage.getNsPrefix, sClassType), ec) case ee: EEnum => model.addModelEnums(new SEnumConverter convert (ee, sourceName)) case _ => - // we only care about classes. Types will be registered as soon as they are needed as - // attributes + // we only care about classes. Types will be registered as soon as they are needed as + // attributes } contents = source.eAllContents().asScala println("Second run add references, attributes, and class hierarchies") @@ -42,8 +46,8 @@ class SModelGenerator extends Converter[EPackage, SModel] { //println(ec) model.addModelClass(new SClassConverter convert (ec, sourceName)) case _ => - // we only care about classes. Types will be registered as soon as they are needed as - // attributes + // we only care about classes. Types will be registered as soon as they are needed as + // attributes } println("... Conversion finished") println(s"Generated model: $model") diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala index 83e4317f43d8975107c6e49862b32e7a7e938022..b89a9df127a862d32f6c81302fb1c459724d2012 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriter.scala @@ -12,7 +12,7 @@ import org.rosi_project.model_sync.generator.PackageNames * * @author Rico Bergmann */ -class SClassWriter(val modelClass: SClass, val isObject: Boolean) { +class SClassWriter(val modelClass: SClass) { private val isView: Boolean = modelClass.isInstanceOf[SViewClass] private val pckg: String = if (modelClass.isDefaultPackage) "" else s"package ${modelClass.sPackage}" @@ -126,7 +126,7 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) { protected def generateInternalClazzFixture: String = { var result = ""; modelClass.getInternalClasses.foreach(intCls => { - var sw: SClassWriter = new SClassWriter(intCls, false) + var sw: SClassWriter = new SClassWriter(intCls) var s = sw.internalStringify; result = result + s + "\n"; }) @@ -191,7 +191,7 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) { if (modelClass.isInterface) { baseFixture = s"trait ${modelClass.getName}" - } else if (isObject) { + } else if (modelClass.isObject) { baseFixture = s"object ${modelClass.getName}" } else { baseFixture = s"class ${modelClass.getName}" diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala index 17d26a0a5d21f05e592a59088f412cd401ff9cc7..535439a1495f6972d78e9f973a3b7672869915cb 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala @@ -59,12 +59,11 @@ class SModelFSWriter( override def visit(sModel: SModel): Unit = { sModel.getModelEnums.foreach(writeEnum(_)) - sModel.getModelClasses.foreach(writeClass(_, false)) - sModel.getJoinClasses.foreach(writeClass(_, false)) - sModel.getJoinObjects.foreach(writeClass(_, true)) //TODO - sModel.getRelationalCompartments.foreach(writeClass(_, false)) - sModel.getViewCompartments.foreach(writeClass(_, false)) - sModel.getProviderClasses.foreach(writeClass(_, false)) + sModel.getModelClasses.foreach(writeClass(_)) + sModel.getJoinClasses.foreach(writeClass(_)) + sModel.getRelationalCompartments.foreach(writeClass(_)) + sModel.getViewCompartments.foreach(writeClass(_)) + sModel.getProviderClasses.foreach(writeClass(_)) //println(s"... Wrote files (sources) $sFilesToCompile") println("... Starting compilation") @@ -102,11 +101,11 @@ class SModelFSWriter( } } - private def writeClass(sClass: SClass, isObject: Boolean): Unit = { + private def writeClass(sClass: SClass): Unit = { try { println(s"Writing class $sClass") val classNameWithPath = workingDir.toAbsolute.toString() + File.separator + pckg2Path(sClass.getPackage) + File.separator + s"${sClass.getName}.scala" - val writer = new SClassWriter(sClass, isObject) + val writer = new SClassWriter(sClass) val classFile = File(classNameWithPath) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceCombiGenerator.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceCombiGenerator.scala index 4194f049ae4ea57e06091d6f17905ec34e9f1337..4843488e23d1d3e7369034d284244364c2b7d71e 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceCombiGenerator.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceCombiGenerator.scala @@ -16,7 +16,7 @@ class InstanceCombiGenerator(val clsins: ClassAndInstance) extends SModelVisitor override def visit(sModel: SModel): Unit = { //println("++++++++++++++++++++++++++++++++++++++++++++++") - val example = new SClass("ExampleCombiCase", PackageNames.examplePkgName) + val example = new SClass("ExampleCombiCase", PackageNames.examplePkgName, SClassType.normalObject) val contents = clsins.obj.eAllContents().asScala var counter = 0 var lines: Seq[InstanceLine] = Seq.empty @@ -97,7 +97,7 @@ class InstanceCombiGenerator(val clsins: ClassAndInstance) extends SModelVisitor example.addParent(PredefTypes.App) - sModel.addJoinObject(example) + sModel.addProviderClass(example) //println("++++++++++++++++++++++++++++++++++++++++++++++") // pass diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceGenerator.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceGenerator.scala index 0ca45b307360e460de231f226161b4c907f2f7df..241f424cb0c2c1baa56978180d6199e17b76e66c 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceGenerator.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/InstanceGenerator.scala @@ -21,7 +21,7 @@ class InstanceGenerator(val clsins: ClassAndInstance) extends SModelVisitor { override def visit(sModel: SModel): Unit = { //println("++++++++++++++++++++++++++++++++++++++++++++++") - val example = new SClass("ExampleCase", PackageNames.examplePkgName) + val example = new SClass("ExampleCase", PackageNames.examplePkgName, SClassType.normalObject) val contents = clsins.obj.eAllContents().asScala var counter = 0 var lines: Seq[InstanceLine] = Seq.empty @@ -70,7 +70,7 @@ class InstanceGenerator(val clsins: ClassAndInstance) extends SModelVisitor { }) }) example.addParent(PredefTypes.App) - sModel.addJoinObject(example) + sModel.addProviderClass(example) //println("++++++++++++++++++++++++++++++++++++++++++++++") // pass diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/JoinGeneratingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/JoinGeneratingVisitor.scala index 88f4c2acd8ba80b38579ed0e54d4684f9b1b8f4d..d3c9b884e1cfae0040219ce86bb14d2f93adf5eb 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/JoinGeneratingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/JoinGeneratingVisitor.scala @@ -76,7 +76,7 @@ class JoinGeneratingVisitor(joinExpression: ModelJoinExpression) extends SModelV println("B: " + otherAttsBase) println("O: " + otherAttsOther) - val joinObject = new SClass(j.getTarget().getResourceName + "Object", j.getTarget().getResourcePath) + val joinObject = new SClass(j.getTarget().getResourceName + "Object", j.getTarget().getResourcePath, SClassType.normalObject) val joinClass = new SJoinClass(j.getTarget().getResourceName, j.getTarget().getResourcePath, base = baseClass, other = otherClass, joinType = rsumJoinType, joinAttributes = joinAtts, innerAttributes = joinAtts ++ otherAttsBase ++ otherAttsOther, joinObject) @@ -122,7 +122,7 @@ class JoinGeneratingVisitor(joinExpression: ModelJoinExpression) extends SModelV joinClass.addMethod(ToStringMethods.joinToStringMethod(joinClass.getName)) sModel.addJoinClass(joinClass) - sModel.addJoinObject(joinObject) + sModel.addJoinClass(joinObject) //add in Type Registry STypeRegistry.addType(joinClass, null) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ModelJoinViewGeneratingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ModelJoinViewGeneratingVisitor.scala index 760c8b6762b6f02c1d851110bdcb68398665a4d5..9cea21c63baf358e2a26168561af82376dc8bea3 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ModelJoinViewGeneratingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ModelJoinViewGeneratingVisitor.scala @@ -88,8 +88,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend } else { refClasses = refClasses :+ cls internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.viewRolePostName, - _isAbstract = cls.isAbstract, - _isInterface = cls.isInterface, + _sClassType = cls.sClassType, _externalClass = viewCompartment, sumSource = cls) newInternalRoles = newInternalRoles :+ internalClass diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryGeneratingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryGeneratingVisitor.scala index d40d5ad26600f869b70cc975c1225f8a5941a5d1..8b51551fe6bddf6c58fc6f9894c4648d2f5bd3ab 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryGeneratingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/QueryGeneratingVisitor.scala @@ -24,8 +24,6 @@ class QueryGeneratingVisitor extends SModelVisitor { //Iterate over all Model classes and create natural internal role classes sModel.getModelClasses.filter(!_.getName.startsWith(PackageNames.queryHelperPrefix)).foreach(cls => { val internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.queryRolePostName, - _isAbstract = false, - _isInterface = false, _externalClass = viewCompartment, sumSource = cls) //sets the attributes from the source class diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala index 8afc83f974852c771ba77158d271648634f9e732..989aa9f2e10e0d7f66fa221da3b07bf312451d18 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala @@ -4,6 +4,7 @@ import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.PackageNames import org.rosi_project.model_sync.generator.acr_model.types.PredefEcoreTypes import org.rosi_project.model_sync.generator.acr_model.types.PredefTypes +import org.rosi_project.model_sync.generator.acr_model.types.GenericSequence /** * Read EMF and Ecore models. @@ -98,6 +99,11 @@ class SumModelReadingVisitor() extends SModelVisitor { SMethodStatement(content = s"val s1 = mapping.get(s).get.asInstanceOf[${rc.sClass.getName}]"), SMethodStatement(content = s"val t1 = mapping.get(t).get.asInstanceOf[${rc.tClass.getName}]"), SMethodStatement(content = s"(new ${rc.getName}(s1, t1)).initialize()", usedTypes = Set(rc, rc.sClass, rc.tClass)))) + if (rc.connectedRef.getTypeElement.isInstanceOf[GenericSequence]) { + //add -> add method + } else { + //add -> set method + } creator.addMethod(method) createRefImpl = createRefImpl :+ SMethodStatement(content = s"""if (o1Name.contains("${rc.sClass.getName}") && sfName == "${rc.connectedRef.getName}" && o2Name.contains("${rc.tClass.getName}")) {""") @@ -115,8 +121,8 @@ class SumModelReadingVisitor() extends SModelVisitor { loader.addMethod(createRef) //add the new classes as model classes - sModel.addModelClass(creator) - sModel.addModelClass(loader) + sModel.addProviderClass(creator) + sModel.addProviderClass(loader) } override def visit(sClass: SClass): Unit = { diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewGeneratingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewGeneratingVisitor.scala index aef0d4ebd62c1a18f86b4f12402cea1528075d15..3faa3e4272fdca44b2cc00ba74ed27fb4a4ac38a 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewGeneratingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewGeneratingVisitor.scala @@ -16,8 +16,7 @@ class ViewGeneratingVisitor extends SModelVisitor { //Iterate over all Model classes and create natural internal role classes sModel.getModelClasses.foreach(cls => { val internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.viewRolePostName, - _isAbstract = cls.isAbstract, - _isInterface = cls.isInterface, + _sClassType = cls.sClassType, _externalClass = viewCompartment, sumSource = cls) //sets the attributes from the source class diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala index c0a9dfcfa204a016f11616cec69f11cf6c0bd96b..e83db03ca0e43e14eafaa8484475e403d38634b9 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala @@ -44,74 +44,62 @@ object ApplicationTest extends App { } def runTTCLive2019(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BibTeX.ecore", "assets/models/DocBook.ecore", "assets/models/NMetaChanges.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BibTeX.ecore", "assets/models/DocBook.ecore", "assets/models/NMetaChanges.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTTC2019(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BDD.ecore", "assets/models/BDDv2.ecore", "assets/models/TT.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BDD.ecore", "assets/models/BDDv2.ecore", "assets/models/TT.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runShrinkingModel(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ShrinkingModel.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/shrinking.modeljoin"); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ShrinkingModel.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/shrinking.modeljoin", create = cre); new Generator(config).run() } def runCombinedTest(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/IMDBDatabase.ecore", "assets/models/ModelJoinLibrary.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/simple.modeljoin"); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/IMDBDatabase.ecore", "assets/models/ModelJoinLibrary.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/simple.modeljoin", create = cre); new Generator(config).run() } def runTestFamily(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Family.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Family.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestSimplePerson(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/SimplePerson.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/SimplePerson.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestPerson(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Person.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Person.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestLibrary(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Library.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/manager.modeljoin"); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/Library.ecore"), false, new File("assets/models"), modelJoin = "assets/model_join/manager.modeljoin", create = cre); new Generator(config).run() } def runTestShrinkingModel(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ShrinkingModel.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ShrinkingModel.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestAML(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/AML.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/AML.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestIMDB(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/IMDBDatabase.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/IMDBDatabase.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } def runTestModelJoinLib(cre: Creation.Value): Unit = { - var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ModelJoinLibrary.ecore"), false, new File("assets/models")); - config.setCreate(cre) + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ModelJoinLibrary.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run() } diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/SClassWriterTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/SClassWriterTest.scala index cd514fca498f49e1a7b031080b083af02f22ca3b..b1b1d6761a8515bb00253410a90ea4e4ebb2f5c0 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/test/SClassWriterTest.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/test/SClassWriterTest.scala @@ -13,7 +13,7 @@ object SClassWriterTest/* extends App */{ val stringType = SType("String") val attrs = Seq(SAttribute("name", stringType)) val sayHelloMethod = new SMethod("sayHello", stringType, Seq.empty, Seq(SMethodStatement("s\"Hello $name\""))) - val modelClass = new SClass("Person", "", false, false) + val modelClass = new SClass("Person", "foo") modelClass.setAttributes(attrs) modelClass.addMethod(sayHelloMethod) @@ -23,7 +23,7 @@ object SClassWriterTest/* extends App */{ val syncNotificationVisitor = new SyncEnhancingVisitor modelClass.accept(syncNotificationVisitor) - val writer = new SClassWriter(modelClass, false) + val writer = new SClassWriter(modelClass) println(writer.stringify) diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala index 6f6a3c3711bbba1215657464f505b75ebffbaf9e..b7f00b87273be3a934316afc6f13327d65fd795a 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/test/SModelFSWriterTest.scala @@ -14,7 +14,7 @@ object SModelFSWriterTest/* extends App */{ val personAttrs = Seq(SAttribute("name", stringType)) val personSayHelloMethod = new SMethod("sayHello", stringType, Seq.empty, Seq(SMethodStatement("s\"Hello $name\""))) - val personClass = new SClass("Person", "foo", false, false) + val personClass = new SClass("Person", "foo") personClass.setAttributes(personAttrs) personClass.addMethod(personSayHelloMethod)