Skip to content
Snippets Groups Projects
Commit 2f58e066 authored by Chrissi's avatar Chrissi
Browse files

refactoring

- remove isInterface and isAbstract as parameter in sclass
parent 3c02f11e
Branches
No related tags found
No related merge requests found
Showing
with 82 additions and 101 deletions
......@@ -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()) {
......
......@@ -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
......
......@@ -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
}
......
......@@ -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
......
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
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"
......
......@@ -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")
......
......@@ -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")
......
......@@ -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")
......
......@@ -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`.
......
......@@ -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
......@@ -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)
......
......@@ -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)"
}
......@@ -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))
......
......@@ -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 => {
......
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")
......
......@@ -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}"
......
......@@ -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)
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment