diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 248124e..41e4dc2 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -14,9 +14,9 @@ ObjectNode customers = new ObjectNode("customers"); ObjectNode customer = new ObjectNode("customer"); ObjectNode address = new ObjectNode("string"); - ReferenceEdge srcEdge = new ReferenceEdge(companies, company, "company"); + ReferenceEdge srcEdge = new ReferenceEdge(companies, company, "company", MultiplicityValue.OneToMany); srcEdges.add(srcEdge); - ReferenceEdge dstEdge = new ReferenceEdge(customers, customer, "customer"); + ReferenceEdge dstEdge = new ReferenceEdge(customers, customer, "customer", MultiplicityValue.OneToMany); dstEdges.add(dstEdge); List relations = new ArrayList<>(); Relation transferRelation = new Relation(srcEdges, dstEdges, MultiplicityValue.OneToMany); diff --git a/src/main/java/ast/Assignment.java b/src/main/java/ast/Assignment.java index 98f87a0..78cc19e 100644 --- a/src/main/java/ast/Assignment.java +++ b/src/main/java/ast/Assignment.java @@ -37,6 +37,6 @@ @Override public String toString() { - return left.toString() + " " + "+" + " " + right.toString(); + return left.toString() + " " + "=" + " " + right.toString(); } } diff --git a/src/main/java/generators/ASTGenerator.java b/src/main/java/generators/ASTGenerator.java index a751df5..5acd940 100644 --- a/src/main/java/generators/ASTGenerator.java +++ b/src/main/java/generators/ASTGenerator.java @@ -55,18 +55,19 @@ models.algebra.Type type1 = codebase.getComponentType(name1); models.algebra.Type type2 = codebase.getComponentType(name2); models.algebra.Type type3 = codebase.getComponentType(name3); - FieldDeclaration field12 = createField(class1, toVariableName(name2), type2); // class1 -> class2 (PULL) - FieldDeclaration field23 = createField(class2, toVariableName(name3), type3); // class2 -> class3 (PULL) - FieldDeclaration field13 = createField(class1, toVariableName(name3), type3); // class1 -> class3 (create) + FieldDeclaration field12 = createField(class1, pullEdge1.getName(), type2); // class1 -> class2 (PULL) + FieldDeclaration field23 = createField(class2, pullEdge2.getName(), type3); // class2 -> class3 (PULL) + FieldDeclaration field13 = createField(class1, pullEdge2.getName(), type3); // class1 -> class3 (create) // Construct getter method - MethodDeclaration getter = createMethod(class2, getterPrefix + toComponentName(name3)); + MethodDeclaration getter = createMethod(class2, getterPrefix + toComponentName(pullEdge2.getName())); ReturnStatement return23 = new ReturnStatement(); return23.setExpression(new FieldAccess(new ThisExpression(), field23.getName())); // return this.name3; getter.addStatement(return23); + getter.setReturnType(type3); // Construct coordinator method - MethodDeclaration coordionator = createMethod(class1, getterPrefix + toComponentName(name3)); + MethodDeclaration coordionator = createMethod(class1, getterPrefix + toComponentName(pullEdge2.getName())); FieldAccess field3 = new FieldAccess(new ThisExpression(), field13.getName()); // this.name3 FieldAccess field2 = new FieldAccess(field12.getName()); MethodInvocation callGetter = new MethodInvocation(field2, getter.getName()); // name2.getName3() @@ -89,16 +90,16 @@ models.algebra.Type type1 = codebase.getComponentType(name1); models.algebra.Type type2 = codebase.getComponentType(name2); models.algebra.Type type3 = codebase.getComponentType(name3); - FieldDeclaration field12 = createField(class1, toVariableName(name2), type2); // class1 -> class2 (PULL) - FieldDeclaration field13 = createField(class1, toVariableName(name3), type3); // class1 -> class3 (PUSH) - FieldDeclaration field32 = createField(class3, toVariableName(name2), type2); // class3 -> class2 (create) + FieldDeclaration field12 = createField(class1, pullEdge.getName(), type2); // class1 -> class2 (PULL) + FieldDeclaration field13 = createField(class1, pushEdge.getName(), type3); // class1 -> class3 (PUSH) + FieldDeclaration field32 = createField(class3, pullEdge.getName(), type2); // class3 -> class2 (create) // Construct setter method MethodDeclaration setter = createMethod(class3, setterPrefix + toComponentName(name2)); VariableDeclaration param2 = new VariableDeclaration(type2, name2); setter.addParameter(param2); FieldAccess field2 = new FieldAccess(new ThisExpression(), field32.getName()); // this.name2 - Assignment assignment = new Assignment(field2, new Variable(name2)); // this.name2 = name2; + Assignment assignment = new Assignment(field2, new Variable(toVariableName(name2))); // this.name2 = name2; ExpressionStatement assignmentStatement = new ExpressionStatement(assignment); setter.addStatement(assignmentStatement); @@ -125,8 +126,8 @@ models.algebra.Type type1 = codebase.getComponentType(name1); models.algebra.Type type2 = codebase.getComponentType(name2); models.algebra.Type type3 = codebase.getComponentType(name3); - FieldDeclaration field12 = createField(class1, toVariableName(name2), type2); // class1 -> class2 (PUSH) - FieldDeclaration field23 = createField(class2, toVariableName(name3), type3); // class2 -> class3 (PUSH) + FieldDeclaration field12 = createField(class1, pushEdge1.getName(), type2); // class1 -> class2 (PUSH) + FieldDeclaration field23 = createField(class2, pushEdge2.getName(), type3); // class2 -> class3 (PUSH) FieldDeclaration field31 = createField(class3, toVariableName(name1), type1); // class3 -> class1 (create) // Construct setter in class3 @@ -134,18 +135,18 @@ VariableDeclaration param1 = new VariableDeclaration(type1, name1); setter3.addParameter(param1); FieldAccess field1 = new FieldAccess(new ThisExpression(), field31.getName()); // this.name1 - Assignment assignment = new Assignment(field1, new Variable(name1)); // this.name1 = name1; + Assignment assignment = new Assignment(field1, new Variable(toVariableName(name1))); // this.name1 = name1; ExpressionStatement assignmentStatement = new ExpressionStatement(assignment); setter3.addStatement(assignmentStatement); // Construct setter in class2 MethodDeclaration setter2 = createMethod(class2, setterPrefix + toComponentName(name1)); - param1 = new VariableDeclaration(type1, name1); + param1 = new VariableDeclaration(type1, toVariableName(name1)); setter2.addParameter(param1); FieldAccess field3 = new FieldAccess(field23.getName()); List args = new ArrayList<>(); args.add(new Variable(param1.getName())); - MethodInvocation callSetter = new MethodInvocation(field3, setter3.getName(), args); // name3.setName1(name1) + MethodInvocation callSetter = new MethodInvocation(field3, setter3.getName(), args); // name3.setName1(name1) setter2.addStatement(new ExpressionStatement(callSetter)); // Construct coordinator method diff --git a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java index f64fd4e..6297026 100644 --- a/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java +++ b/src/main/java/models/objectOrientedTransfer/DataTransferDesign.java @@ -29,22 +29,14 @@ // Construct all deltas. Stack deltaStack = new Stack<>(); ReferenceEdge bottomReference = constructDefaultDeltas(transferContext, deltaStack); - Delta dataTransferDelta = null; - if (!deltaStack.isEmpty()) { - dataTransferDelta = deltaStack.pop(); - } + // Add the data transfer delta. ObjectNode srcObj = (ObjectNode) bottomReference.getSource(); ObjectNode dstObj = (ObjectNode) transferContext.getDataType(); - String dataName = dstObj.getName(); - dataName = dataName.substring(0, 1).toLowerCase() + dataName.substring(1); + String dataName = transferContext.getDataName(); ReferenceEdge dataEdge = new ReferenceEdge(srcObj, dstObj, dataName); PrimitivePullPushDelta primDelta = new PrimitivePullPushDelta(dataEdge, bottomReference, dataName); // PUSH data transfer - if (dataTransferDelta == null) { - dataTransferDelta = new Delta(primDelta); - } else { - dataTransferDelta = dataTransferDelta.combine(primDelta); - } + Delta dataTransferDelta = new Delta(primDelta); DeltaComplex deltaComplex = new DeltaComplex(dataTransferDelta); // Add initialization deltas. @@ -63,22 +55,14 @@ // Construct all deltas. Stack deltaStack = new Stack<>(); ReferenceEdge bottomReference = constructDefaultDeltas(transferContext, deltaStack); - Delta dataTransferDelta = null; - if (!deltaStack.isEmpty()) { - dataTransferDelta = deltaStack.pop(); - } + // Add the data transfer delta. ObjectNode srcObj = (ObjectNode) bottomReference.getDestination(); ObjectNode dstObj = (ObjectNode) transferContext.getDataType(); - String dataName = dstObj.getName(); - dataName = dataName.substring(0, 1).toLowerCase() + dataName.substring(1); + String dataName = transferContext.getDataName(); ReferenceEdge dataEdge = new ReferenceEdge(srcObj, dstObj, dataName); PrimitivePullDelta primDelta = new PrimitivePullDelta(bottomReference, dataEdge, dataName); // PULL data transfer - if (dataTransferDelta == null) { - dataTransferDelta = new Delta(primDelta); - } else { - dataTransferDelta = dataTransferDelta.combine(primDelta); - } + Delta dataTransferDelta = new Delta(primDelta); DeltaComplex deltaComplex = new DeltaComplex(dataTransferDelta); // Add initialization deltas. diff --git a/src/main/java/models/objectOrientedTransfer/Delta.java b/src/main/java/models/objectOrientedTransfer/Delta.java index 33b87b4..1a8a80d 100644 --- a/src/main/java/models/objectOrientedTransfer/Delta.java +++ b/src/main/java/models/objectOrientedTransfer/Delta.java @@ -84,6 +84,9 @@ } public Delta copy() { + if (subDelta == null) { + return new Delta(bottomDelta.copy()); + } return new Delta(bottomDelta.copy(), subDelta.copy()); } } diff --git a/src/main/java/models/objectOrientedTransfer/DeltaComplex.java b/src/main/java/models/objectOrientedTransfer/DeltaComplex.java index 363f7fe..7f7751d 100644 --- a/src/main/java/models/objectOrientedTransfer/DeltaComplex.java +++ b/src/main/java/models/objectOrientedTransfer/DeltaComplex.java @@ -62,7 +62,9 @@ } public DeltaComplex copy() { - DeltaComplex newComplex = new DeltaComplex(frontierDelta.copy(), subComplex.copy()); - return newComplex; + if (subComplex == null) { + return new DeltaComplex(frontierDelta.copy()); + } + return new DeltaComplex(frontierDelta.copy(), subComplex.copy()); } } diff --git a/src/main/java/models/objectOrientedTransfer/ReferenceEdge.java b/src/main/java/models/objectOrientedTransfer/ReferenceEdge.java index 7ffd092..6337ce9 100644 --- a/src/main/java/models/objectOrientedTransfer/ReferenceEdge.java +++ b/src/main/java/models/objectOrientedTransfer/ReferenceEdge.java @@ -11,6 +11,12 @@ this.name = name; this.multiplicity = MultiplicityValue.OneToOne; } + + public ReferenceEdge(ObjectNode src, ObjectNode dst, String name, MultiplicityValue multiplicity) { + super(src, dst); + this.name = name; + this.multiplicity = multiplicity; + } public String getName() { return name;