From 18311aa335ae167d6947440b9fb7deacbe406239 Mon Sep 17 00:00:00 2001
From: Chrissi <christopher@hbsc-werner.de>
Date: Sun, 4 Aug 2019 13:25:30 +0200
Subject: [PATCH] Add new abstract builder that collects the attributes of the
 compound keep expressions

---
 .../grammar/CompoundKeepBuilder.java          | 37 +++++++++++++++++++
 .../grammar/KeepReferenceExpression.java      | 24 +-----------
 .../grammar/KeepSubTypeExpression.java        | 25 +------------
 .../grammar/KeepSuperTypeExpression.java      | 23 +-----------
 4 files changed, 41 insertions(+), 68 deletions(-)
 create mode 100644 src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/CompoundKeepBuilder.java

diff --git a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/CompoundKeepBuilder.java b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/CompoundKeepBuilder.java
new file mode 100644
index 0000000..2315a3a
--- /dev/null
+++ b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/CompoundKeepBuilder.java
@@ -0,0 +1,37 @@
+package org.rosi_project.model_sync.model_join.representation.grammar;
+
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+import org.rosi_project.model_sync.model_join.representation.core.ClassResource;
+
+public abstract class CompoundKeepBuilder {
+
+	protected ClassResource target;
+	@Nonnull
+	protected List<KeepExpression> keeps;
+	
+	/**
+     * Specifies the name of the class that should be generated for the subtype instances.
+     */
+    @Nonnull
+    public CompoundKeepBuilder as(@Nonnull ClassResource target) {
+      this.target = target;
+      return this;
+    }
+
+    /**
+     * Adds a {@link KeepExpression keep statement} for the subtype-class. The described attribute
+     * will be initialized for each instantiated subtype element.
+     */
+    @Nonnull
+    public CompoundKeepBuilder keep(@Nonnull KeepExpression keep) {
+      this.keeps.add(keep);
+      return this;
+    }
+    
+    @Nonnull
+    public abstract KeepExpression buildExpression();
+
+}
diff --git a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepReferenceExpression.java b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepReferenceExpression.java
index 5d6f0f3..307be52 100644
--- a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepReferenceExpression.java
+++ b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepReferenceExpression.java
@@ -53,14 +53,10 @@ public class KeepReferenceExpression extends CompoundKeepExpression {
    *
    * @author Rico Bergmann
    */
-  public static class KeepReferenceBuilder {
+  public static class KeepReferenceBuilder extends CompoundKeepBuilder {
 
     private ReferenceDirection referenceDirection;
     private AttributePath attribute;
-    private ClassResource target;
-
-    @Nonnull
-    private List<KeepExpression> keeps;
 
     /**
      * Default constructor.
@@ -89,24 +85,6 @@ public class KeepReferenceExpression extends CompoundKeepExpression {
       return this;
     }
 
-    /**
-     * Specifies the name of the attribute in the target join.
-     */
-    @Nonnull
-    public KeepReferenceBuilder as(@Nonnull ClassResource target) {
-      this.target = target;
-      return this;
-    }
-
-    /**
-     * Adds an attribute to the view for the referenced instances.
-     */
-    @Nonnull
-    public KeepReferenceBuilder keep(@Nonnull KeepExpression keepExpression) {
-      this.keeps.add(keepExpression);
-      return this;
-    }
-
     /**
      * Finishes the construction process.
      */
diff --git a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSubTypeExpression.java b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSubTypeExpression.java
index 76e8d60..f3b82c3 100644
--- a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSubTypeExpression.java
+++ b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSubTypeExpression.java
@@ -25,11 +25,9 @@ public class KeepSubTypeExpression extends CompoundKeepExpression {
    *
    * @author Rico Bergmann
    */
-  public static class KeepSubTypeBuilder {
+  public static class KeepSubTypeBuilder extends CompoundKeepBuilder {
 
     private ClassResource typeToKeep;
-    private ClassResource target;
-    private List<KeepExpression> keeps;
 
     /**
      * Default constructor.
@@ -45,26 +43,7 @@ public class KeepSubTypeExpression extends CompoundKeepExpression {
     public KeepSubTypeBuilder subtype(@Nonnull ClassResource type) {
       this.typeToKeep = type;
       return this;
-    }
-
-    /**
-     * Specifies the name of the class that should be generated for the subtype instances.
-     */
-    @Nonnull
-    public KeepSubTypeBuilder as(@Nonnull ClassResource target) {
-      this.target = target;
-      return this;
-    }
-
-    /**
-     * Adds a {@link KeepExpression keep statement} for the subtype-class. The described attribute
-     * will be initialized for each instantiated subtype element.
-     */
-    @Nonnull
-    public KeepSubTypeBuilder keep(@Nonnull KeepExpression keep) {
-      this.keeps.add(keep);
-      return this;
-    }
+    }    
 
     /**
      * Finishes the construction process.
diff --git a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSuperTypeExpression.java b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSuperTypeExpression.java
index 6c72a3d..e4b1b81 100644
--- a/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSuperTypeExpression.java
+++ b/src/main/java/org/rosi_project/model_sync/model_join/representation/grammar/KeepSuperTypeExpression.java
@@ -24,11 +24,9 @@ public class KeepSuperTypeExpression extends CompoundKeepExpression {
    *
    * @author Rico Bergmann
    */
-  public static class KeepSuperTypeBuilder {
+  public static class KeepSuperTypeBuilder extends CompoundKeepBuilder {
 
     private ClassResource typeToKeep;
-    private ClassResource target;
-    private List<KeepExpression> keeps;
 
     /**
      * Default constructor.
@@ -46,25 +44,6 @@ public class KeepSuperTypeExpression extends CompoundKeepExpression {
       return this;
     }
 
-    /**
-     * Specifies the name of the class that should be generated for the subtype instances.
-     */
-    @Nonnull
-    public KeepSuperTypeBuilder as(@Nonnull ClassResource target) {
-      this.target = target;
-      return this;
-    }
-
-    /**
-     * Adds a {@link KeepExpression keep statement} for the subtype-class. The described attribute
-     * will be initialized for each instantiated subtype element.
-     */
-    @Nonnull
-    public KeepSuperTypeBuilder keep(@Nonnull KeepExpression keep) {
-      this.keeps.add(keep);
-      return this;
-    }
-
     /**
      * Finishes the construction process.
      */
-- 
GitLab