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) {
|${imports.map(i => s"import $i").mkString("\n")}
|${viewImports}
|
|/**
| * This file is automatically generated from the code generator
| * for the role-based model management framework.
| */
|${clazzFixture} {
|
| ${if (PackageNames.multiInhertitanceWithTraits) s"${generateAttributeFixture}" else ""}
......@@ -95,7 +99,12 @@ class SClassWriter(val modelClass: SClass, val isObject: Boolean) {
protected def generateCompanionFixture: String = {
if (isView) {
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}"
|
......
......@@ -14,6 +14,10 @@ class SEnumWriter(val modelEnum: SEnum) {
def stringify: String = {
s"""$pckg
|
|/**
| * This file is automatically generated from the code generator
| * for the role-based model management framework.
| */
|object ${modelEnum.getName} extends Enumeration {
|
| val ${modelEnum.enums.mkString(", ")} = Value
......
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.types.GenericSequence
class ReferenceMethodCreationVisitor extends SModelVisitor {
override def visit(sModel: SModel): Unit = {
var typeName = "Set.empty"
var addElement = "result +="
sModel.getRelationalCompartments.foreach(cls => {
val relComp = cls.asInstanceOf[SRelationalCompartmentClass]
//iterate over all relational compartments
val methodSrc = new SMethod(
name = relComp.connectedRef.getName,
name = s"get${relComp.connectedRef.getName.capitalize}",
result = relComp.connectedRef.getTypeElement,
params = 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
implSrc :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.getTypeElement} = Set.empty")
implSrc :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] &&
implSrc = implSrc :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.getTypeElement.getName} = ${typeName}", usedTypes = Set(PredefRsumTypes.IRELATIONROLE_STYPE))
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}])
.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
relComp.sClass.asInstanceOf[SClass].addMethod(methodSrc)
//proof opposite reference
if (relComp.connectedRef.hasOpposite) {
val methodTrg = new SMethod(
name = relComp.connectedRef.oppositeRef.getName,
name = s"get${relComp.connectedRef.oppositeRef.getName.capitalize}",
result = relComp.connectedRef.oppositeRef.getTypeElement,
params = 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
implTrg :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.oppositeRef.getTypeElement} = Set.empty")
implTrg :+ SMethodStatement(content = s"""this.roles.filter(r => r.isInstanceOf[${PredefRsumTypes.IRELATIONROLE_STYPE.getName}] &&
implTrg = implTrg :+ SMethodStatement(content = s"var result: ${relComp.connectedRef.oppositeRef.getTypeElement.getName} = ${typeName}", usedTypes = Set(PredefRsumTypes.IRELATIONROLE_STYPE))
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}])
.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
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 = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment