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

Add generated info in generated files

+ add for rsum case the option to get references as normal list
parent 99147c52
No related branches found
No related tags found
No related merge requests found
...@@ -45,6 +45,10 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) { ...@@ -45,6 +45,10 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) {
|${imports.map(i => s"import $i").mkString("\n")} |${imports.map(i => s"import $i").mkString("\n")}
|${viewImports} |${viewImports}
| |
|/**
| * This file is automatically generated from the code generator
| * for the role-based model management framework.
| */
|${clazzFixture} { |${clazzFixture} {
| |
| ${if (PackageNames.multiInhertitanceWithTraits) s"${generateAttributeFixture}" else ""} | ${if (PackageNames.multiInhertitanceWithTraits) s"${generateAttributeFixture}" else ""}
...@@ -95,7 +99,12 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) { ...@@ -95,7 +99,12 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) {
protected def generateCompanionFixture: String = { protected def generateCompanionFixture: String = {
if (isView) { if (isView) {
val viewClass = modelClass.asInstanceOf[SViewClass] val viewClass = modelClass.asInstanceOf[SViewClass]
s"""object ${modelClass.getName} extends ${PredefRsumTypes.VIEWTYPE_INFO_STYPE.getName} { s"""
|/**
| * This file is automatically generated from the code generator
| * for the role-based model management framework.
| */
|object ${modelClass.getName} extends ${PredefRsumTypes.VIEWTYPE_INFO_STYPE.getName} {
| |
| override def getViewName(): String = "${modelClass.getName}" | override def getViewName(): String = "${modelClass.getName}"
| |
......
...@@ -14,6 +14,10 @@ class SEnumWriter(val modelEnum: SEnum) { ...@@ -14,6 +14,10 @@ class SEnumWriter(val modelEnum: SEnum) {
def stringify: String = { def stringify: String = {
s"""$pckg s"""$pckg
| |
|/**
| * This file is automatically generated from the code generator
| * for the role-based model management framework.
| */
|object ${modelEnum.getName} extends Enumeration { |object ${modelEnum.getName} extends Enumeration {
| |
| val ${modelEnum.enums.mkString(", ")} = Value | val ${modelEnum.enums.mkString(", ")} = Value
......
package org.rosi_project.model_sync.generator.sync package org.rosi_project.model_sync.generator.sync
import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.acr_model._
import org.rosi_project.model_sync.generator.acr_model.types.GenericSequence
class ReferenceMethodCreationVisitor extends SModelVisitor { class ReferenceMethodCreationVisitor extends SModelVisitor {
override def visit(sModel: SModel): Unit = { override def visit(sModel: SModel): Unit = {
var typeName = "Set.empty"
var addElement = "result +="
sModel.getRelationalCompartments.foreach(cls => { sModel.getRelationalCompartments.foreach(cls => {
val relComp = cls.asInstanceOf[SRelationalCompartmentClass] val relComp = cls.asInstanceOf[SRelationalCompartmentClass]
//iterate over all relational compartments //iterate over all relational compartments
val methodSrc = new SMethod( val methodSrc = new SMethod(
name = relComp.connectedRef.getName, name = s"get${relComp.connectedRef.getName.capitalize}",
result = relComp.connectedRef.getTypeElement, result = relComp.connectedRef.getTypeElement,
params = Seq.empty, params = Seq.empty,
implementation = Seq.empty) implementation = Seq.empty)
//proof return type
if (relComp.connectedRef.getTypeElement.isInstanceOf[GenericSequence]) {
typeName = "Set.empty"
addElement = "result +="
} else {
typeName = "null"
addElement = "result ="
}
//make impl
var implSrc: Seq[SMethodStatement] = Seq.empty var implSrc: Seq[SMethodStatement] = Seq.empty
implSrc :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.getTypeElement} = Set.empty") implSrc = implSrc :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.getTypeElement.getName} = ${typeName}", usedTypes = Set(PredefRsumTypes.IRELATIONROLE_STYPE))
implSrc :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] && implSrc = implSrc :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] &&
r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.isInstanceOf[${relComp.getName}]) r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.isInstanceOf[${relComp.getName}])
.foreach(r => { .foreach(r => {
list += r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.getTargetIns.asInstanceOf[${relComp.tClass.getName}] ${addElement} r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.getTargetIns.asInstanceOf[${relComp.tClass.getName}]
})""") })""")
implSrc :+ SMethodStatement(content = "result") implSrc = implSrc :+ SMethodStatement(content = "result")
methodSrc.implementation = implSrc methodSrc.implementation = implSrc
relComp.sClass.asInstanceOf[SClass].addMethod(methodSrc) relComp.sClass.asInstanceOf[SClass].addMethod(methodSrc)
//proof opposite reference //proof opposite reference
if (relComp.connectedRef.hasOpposite) { if (relComp.connectedRef.hasOpposite) {
val methodTrg = new SMethod( val methodTrg = new SMethod(
name = relComp.connectedRef.oppositeRef.getName, name = s"get${relComp.connectedRef.oppositeRef.getName.capitalize}",
result = relComp.connectedRef.oppositeRef.getTypeElement, result = relComp.connectedRef.oppositeRef.getTypeElement,
params = Seq.empty, params = Seq.empty,
implementation = Seq.empty) implementation = Seq.empty)
//proof return type
if (relComp.connectedRef.oppositeRef.getTypeElement.isInstanceOf[GenericSequence]) {
typeName = "Set.empty"
addElement = "result +="
} else {
typeName = "null"
addElement = "result ="
}
//make impl
var implTrg: Seq[SMethodStatement] = Seq.empty var implTrg: Seq[SMethodStatement] = Seq.empty
implTrg :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.oppositeRef.getTypeElement} = Set.empty") implTrg = implTrg :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.oppositeRef.getTypeElement.getName} = ${typeName}", usedTypes = Set(PredefRsumTypes.IRELATIONROLE_STYPE))
implTrg :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] && implTrg = implTrg :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] &&
r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.isInstanceOf[${relComp.getName}]) r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.isInstanceOf[${relComp.getName}])
.foreach(r => { .foreach(r => {
list += r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.getSourceIns.asInstanceOf[${relComp.sClass.getName}] ${addElement} r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.getSourceIns.asInstanceOf[${relComp.sClass.getName}]
})""") })""")
implTrg :+ SMethodStatement(content = "result") implTrg = implTrg :+ SMethodStatement(content = "result")
methodTrg.implementation = implTrg methodTrg.implementation = implTrg
relComp.tClass.asInstanceOf[SClass].addMethod(methodTrg) relComp.tClass.asInstanceOf[SClass].addMethod(methodTrg)
} }
}) })
sModel.getModelClasses.foreach(cls => {
//iterate over all references and add new method to class
cls.getReferences().foreach(ref => {
val method = new SMethod(
name = ref.getName,
result = ref.getTypeElement,
params = Seq.empty,
implementation = Seq.empty)
var impl: Seq[SMethodStatement] = Seq.empty
impl :+ SMethodStatement(content = s"var result: ${ref.getTypeElement} = Set.empty")
impl :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[IRelationRole] &&
r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.isInstanceOf[VideoCassetteCastPerson])
.foreach(r => {
list += r.asInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}].getOuterCompartment.getTargetIns.asInstanceOf[Person]
})""")
impl :+ SMethodStatement(content = "result")
method.implementation = impl
cls.addMethod(method)
})
})
} }
override def visit(sClass: SClass): Unit = { override def visit(sClass: SClass): Unit = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment