From 54529b4279f7c2f19be9da88a13ecb794877fb74 Mon Sep 17 00:00:00 2001
From: Chrissi <christopher@hbsc-werner.de>
Date: Thu, 17 Oct 2019 12:17:41 +0200
Subject: [PATCH] remove bug because of to late setting the parent relation in
 the roles in the views

---
 .../model_sync/generator/acr_model/SClass.scala           | 2 +-
 .../generator/sync/QueryGeneratingVisitor.scala           | 1 +
 .../model_sync/generator/sync/ViewGeneratingVisitor.scala | 8 ++++++--
 .../model_sync/generator/sync/ViewMethods.scala           | 2 +-
 4 files changed, 9 insertions(+), 4 deletions(-)

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 6d72049..8344eb7 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
@@ -400,6 +400,6 @@ class SClass(_name: String,
     state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b)
   }
 
-  override def toString: String = s"SC: $getName($sPackage, ${attributes.map(_.getName).mkString(", ")}, $isAbstract, $isInterface)"
+  override def toString: String = s"SC: $getName($sPackage, ${attributes.map(_.getName).mkString(", ")} ## ${getOnlyDeepAttributes.map(_.getName).mkString(", ")} || $isAbstract, $isInterface)"
 
 }
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 8b51551..2f7f50f 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
@@ -39,6 +39,7 @@ class QueryGeneratingVisitor extends SModelVisitor {
       viewCompartment.addInternalClass(internalClass)
     })
     
+    //TODO: can be necessary to add all parents in one loop first
     //Now fill all natural internal roles with functionality
     newInternalRoles.foreach(inner => {
       val cls = inner.sumSource
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 3faa3e4..c290a7a 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
@@ -32,7 +32,7 @@ class ViewGeneratingVisitor extends SModelVisitor {
       viewCompartment.addInternalClass(internalClass)
     })
     
-    //Now fill all natural internal roles with functionality
+    //Now add the parents to all natural internal roles first
     newInternalRoles.foreach(inner => {
       val cls = inner.sumSource
       //set inheritance to abstract view role
@@ -45,7 +45,11 @@ class ViewGeneratingVisitor extends SModelVisitor {
         if (!existing.isEmpty) {
           inner.addParent(existing.get)
         }
-      })  
+      })
+    })
+    
+    //add now the messages because they can depend on the parents
+    newInternalRoles.foreach(inner => {
       //add initialize method if necessary
       if (!inner.isAbstract && !inner.isInterface) {
         inner.addMethod(ViewMethods.getIsRelationalMethod(false))
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
index 7801577..ed616df 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/ViewMethods.scala
@@ -87,7 +87,7 @@ object ViewMethods {
       method.implementation = Seq(SMethodStatement(content = s"return new ${jcls.getName}(new ${jcls.base.getName}(" + 
           s"${jcls.base.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")}), new ${jcls.other.getName}(" +
           s"${jcls.other.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")}))", usedTypes = Set(jcls.other, jcls.base)))
-    } else {      
+    } else {  
       method.implementation = Seq(SMethodStatement(content = s"return new ${nat.sumSource.getName}(" + 
           s"${nat.sumSource.getAllConstructorParameters.map(HelperFunctions.initialAttributeDoing(_, nat.getDeepStructuralFeatures)).mkString(", ")})"))
     }
-- 
GitLab