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 2765ba3ded1417883c05b881a4c4394602d428e0..83e4317f43d8975107c6e49862b32e7a7e938022 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 @@ -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}" | diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SEnumWriter.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SEnumWriter.scala index 63684d0fcc2f42baaac3b7f485927bf45a1fb813..b9e21dc5fccb925f2a6a86c0483267cebc0a4034 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/io/SEnumWriter.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SEnumWriter.scala @@ -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 diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ReferenceMethodCreationVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ReferenceMethodCreationVisitor.scala index e3ef7b31f16abe2fe6dc2688db98b3326b1edad1..b7edd70c85258c5786c55284098685bf93324788 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ReferenceMethodCreationVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ReferenceMethodCreationVisitor.scala @@ -1,67 +1,71 @@ 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 = {