diff --git a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java index 782548a..9d8ccd1 100644 --- a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java +++ b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java @@ -11,11 +11,12 @@ * */ public class DataTransferDesign { - private DataTransferContext transferContext; + private List transferContexts; private DeltaComplex deltaComplex; public DataTransferDesign(DataTransferContext transferContext) throws IllegalRelationException { - this.transferContext = transferContext; + this.transferContexts = new ArrayList<>(); + this.transferContexts.add(transferContext); this.deltaComplex = createDefaultDeltaComlex(transferContext); } @@ -223,12 +224,17 @@ } return prevReference; } - + public DeltaComplex getDeltaComplex() { return deltaComplex; } - - public DataTransferContext getTransferContext() { - return transferContext; + + public void addTransferContext(DataTransferContext transferContext) throws IllegalRelationException { + transferContexts.add(transferContext); + deltaComplex.mergeFront(createDefaultDeltaComlex(transferContext)); + } + + public List getTransferContexts() { + return transferContexts; } } diff --git a/src/main/java/models/objectOrientedTransfer/Delta.java b/src/main/java/models/objectOrientedTransfer/Delta.java index 1a8a80d..d5ed3db 100644 --- a/src/main/java/models/objectOrientedTransfer/Delta.java +++ b/src/main/java/models/objectOrientedTransfer/Delta.java @@ -43,10 +43,10 @@ /** * binding composition - * (this + delta) + * (this * delta) * * @param delta - * @return this + delta + * @return this * delta */ public Delta combine(PrimitiveDelta delta) { return new Delta(delta, this); @@ -54,10 +54,10 @@ /** * binding composition - * (this + delta) + * (this * delta) * * @param delta - * @return this + delta + * @return this * delta */ public Delta combine(Delta delta) { Delta preDelta = this.copy(); @@ -68,7 +68,7 @@ } /** - * if this = d1 + d2 + ... + dn + * if this = d1 * d2 * ... * dn * * @return [d1, d2, ..., dn] */ diff --git a/src/main/java/models/objectOrientedTransfer/DeltaComplex.java b/src/main/java/models/objectOrientedTransfer/DeltaComplex.java index f301548..81ce625 100644 --- a/src/main/java/models/objectOrientedTransfer/DeltaComplex.java +++ b/src/main/java/models/objectOrientedTransfer/DeltaComplex.java @@ -32,6 +32,17 @@ this.subComplex = this.copy(); this.frontierDelta = delta; } + + /** + * if this = d1 | d2 | ... | dn + * and deltaComplex = c1 | c2 | ... | cm, + * this = c1 | c2 | ... | cm | d1 | d2 | ... | dn + */ + public void mergeFront(DeltaComplex deltaComplex) { + for (Delta delta: deltaComplex.split().reversed()) { + attach(delta); + } + } /** * if this = d1 | d2 | ... | dn @@ -48,7 +59,12 @@ deltaSequence.add(0, frontierDelta); return deltaSequence; } - + + /** + * if this = (d11 * d12 * ... * d1m1) | (d21 * d22 * ... * d2m2) | ... | (dn1 * dn2 * ... * dnmn) + * + * @return d11 | d12 | ... | d1m1 | d21 | d22 | ... | d2m2 | ... | dn1 | dn2 | ... | dnmn + **/ public DeltaComplex flatten() { DeltaComplex flattenComplex = subComplex; if (flattenComplex != null) { @@ -59,7 +75,12 @@ } return flattenComplex; } - + + /** + * if this = d1 | d2 | ... | dn + * + * @return d1 * d2 * ... * dn + */ public Delta collapse() { Delta allDelta = null; for (Delta delta: this.split()) { diff --git a/src/test/java/generator/TestMultipleContexts.java b/src/test/java/generator/TestMultipleContexts.java new file mode 100644 index 0000000..cf40d61 --- /dev/null +++ b/src/test/java/generator/TestMultipleContexts.java @@ -0,0 +1,44 @@ +package generator; + +import generators.ASTGenerator; +import models.objectOrientedTransfer.*; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TestMultipleContexts { + @Test + public void testMultipleContexts() { + try { + List srcEdges = new ArrayList<>(); + List dstEdges = new ArrayList<>(); + ObjectNode main = new ObjectNode("Main"); + ObjectNode star = new ObjectNode("Star"); + ObjectNode states = new ObjectNode("States"); + ObjectNode memento = new ObjectNode("Memento"); + ReferenceEdge srcEdge = new ReferenceEdge(main, star, "star"); + srcEdges.add(srcEdge); + ReferenceEdge dstEdge = new ReferenceEdge(main, states, "states"); + dstEdges.add(dstEdge); + List relations = new ArrayList<>(); + Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToOne); + DataTransferContext context = new DataTransferContext(relations, transferRelation, memento, "memento", PushPullValue.PULL); + DataTransferDesign design = new DataTransferDesign(context); + + List srcEdges2 = new ArrayList<>(); + List dstEdges2 = new ArrayList<>(); + ReferenceEdge srcEdge2 = new ReferenceEdge(main, states, "states"); + srcEdges2.add(srcEdge2); + ReferenceEdge dstEdge2 = new ReferenceEdge(main, star, "star"); + dstEdges2.add(dstEdge2); + Relation transferRelation2 = new Relation(srcEdges2, dstEdges2, MultiplicityValue.OneToOne); + DataTransferContext context2 = new DataTransferContext(relations, transferRelation2, memento, "memento", PushPullValue.PUSH); + design.addTransferContext(context2); + + System.out.println(ASTGenerator.generate(design)); + } catch (IllegalRelationException e) { + e.printStackTrace(); + } + } +}