diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java index 062e93b..c3de0e1 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java @@ -6,18 +6,22 @@ import models.dataConstraintModel.ChannelGenerator; import models.dataConstraintModel.ChannelMember; import models.dataConstraintModel.DataConstraintModel; +import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.DataFlowModel; public class DerivingStorageResources { public void run(DataFlowModel model) { DataConstraintModel dcmodel = (DataConstraintModel) model; + for(IdentifierTemplate resource:dcmodel.getIdentifierTemplates()) { + resource.setResourceStateType(new Type("PULL","pull")); + } for (ChannelGenerator generator : dcmodel.getChannelGenerators()) { for (ChannelMember member : generator.getChannelMembers()) { Expression curexp = member.getStateTransition().getCurStateExpression(); Expression nextexp = member.getStateTransition().getNextStateExpression(); for (Position cuspos : curexp.getVariables().keySet()) { for (Position nextpos : nextexp.getVariables().keySet()) { - if (curexp.getVariables().get(cuspos) == nextexp.getVariables().get(nextpos)) { + if (curexp.getVariables().get(cuspos).getName().equals(nextexp.getVariables().get(nextpos).getName())) { member.getIdentifierTemplate().setResourceStateType(new Type("PUSH", "push")); } } diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java index 15e00e8..e149c02 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java @@ -2,100 +2,63 @@ import static org.junit.Assert.assertEquals; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; + import org.junit.Test; import algorithm.DerivingStorageResources; import models.Edge; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; +import models.dataConstraintModel.ChannelGenerator; import models.dataConstraintModel.ChannelMember; import models.dataConstraintModel.ChannelSelector; import models.dataConstraintModel.GroupSelector; import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; +import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; import models.dataFlowModel.ResourceDependencyGraph; +import parser.ExpectedChannel; +import parser.ExpectedChannelName; +import parser.ExpectedEquals; +import parser.ExpectedInOrOutKeyword; +import parser.ExpectedLeftCurlyBracket; +import parser.ExpectedRHSExpression; +import parser.ExpectedRightBracket; +import parser.ExpectedStateTransition; +import parser.Parser; +import parser.WrongLHSExpression; +import parser.WrongRHSExpression; public class DerivingStorageResourcesTest { - @Test - public void test() { - // Construct a data-flow architecture model. - DataFlowModel model = new DataFlowModel(); - IdentifierTemplate customer_off = new IdentifierTemplate("customers.{customer_id}.off", 1); // an identifier template to specify a customer's - // office resource - IdentifierTemplate company_add = new IdentifierTemplate("companies.{company_id}.add", 1); // an identifier template to specify a companie's - // address resource - IdentifierTemplate customer_add = new IdentifierTemplate("customers.{customer_id}.add", 1); // an identifier template to specify a customer's - // address resource - - // === gin_1 === - // - // {x1}.customer_off(c, set(x)) = x - // {x1}.customer_off(c, e) = c - // - DataflowChannelGenerator gin_1 = new DataflowChannelGenerator("gin_1"); // set customer's office (an input channel) - GroupSelector x1 = new GroupSelector(); - ChannelMember customer_off_1 = new ChannelMember(customer_off); - customer_off_1.addSelector(x1); // x1 is determined by the path parameter in customer's office template, and - // serves as a group selector in this channel - gin_1.addChannelMember(customer_off_1); - assertEquals(customer_off.getNumberOfParameters(), customer_off_1.getSelectors().size()); - - // === gin_2 === - // - // {x2}.company_add(a, set(y)) = y - // {x2}.company_add(a, e) = a - // - DataflowChannelGenerator gin_2 = new DataflowChannelGenerator("gin_2"); // set companie's address (an input channel) - GroupSelector x2 = new GroupSelector(); - ChannelMember company_add_1 = new ChannelMember(company_add); - company_add_1.addSelector(x2); // x2 is determined by the path parameter in companie's address template, and - // serves as a group selector in this channel - gin_2.addChannelMember(company_add_1); - assertEquals(company_add.getNumberOfParameters(), company_add_1.getSelectors().size()); - - // === g === - // - // {x3}.customer_off( c, update(y, z)) = y - // {y}.company_add( a1, update(y, z)) = z - // {x3}.customer_add(a2, update(y, z)) = z - // - DataflowChannelGenerator g = new DataflowChannelGenerator("g"); // update customer's address - GroupSelector x3 = new GroupSelector(); - ChannelSelector y = new ChannelSelector(); - ChannelMember customer_off_2 = new ChannelMember(customer_off); - ChannelMember company_add_2 = new ChannelMember(company_add); - ChannelMember customer_add_2 = new ChannelMember(customer_add); - customer_off_2.addSelector(x3); // x3 is determined by the path parameter in customer's office template, and - // serves as a group selector in this channel - company_add_2.addSelector(y); // y is determined by the value of the customer's office resource, and serves as - // a channel selector in this channel - customer_add_2.addSelector(x3); // x3 determines the path parameter in customer's address template to update - g.addChannelMemberAsInput(customer_off_2); - g.addChannelMemberAsInput(customer_add_2); - g.addChannelMemberAsOutput(company_add_2); - assertEquals(customer_off.getNumberOfParameters(), customer_off_2.getSelectors().size()); - assertEquals(customer_add.getNumberOfParameters(), customer_add_2.getSelectors().size()); - assertEquals(company_add.getNumberOfParameters(), company_add_2.getSelectors().size()); - - // Construct a data-flow architecture model. - model.addIOChannelGenerator(gin_1); - model.addIOChannelGenerator(gin_2); - model.addChannelGenerator(g); - - // Check the model. - assertEquals(3, model.getIdentifierTemplates().size()); - assertEquals(2, model.getIOChannelGenerators().size()); - assertEquals(1, model.getChannelGenerators().size()); - - // Extract the resource dependency graph. - ResourceDependencyGraph resourceDependencyGraph = model.getResourceDependencyGraph(); - - // Check the graph. - assertEquals(3, resourceDependencyGraph.getNodes().size()); - assertEquals(2, resourceDependencyGraph.getEdges().size()); - for (Edge e : resourceDependencyGraph.getEdges()) { - System.out.println(e.getSource() + "->" + e.getDestination()); + public static void main(String[] args) { + File file = new File("models/POS2.model"); + DerivingStorageResources deriving = new DerivingStorageResources(); + try { + Parser parser = new Parser(new BufferedReader(new FileReader(file))); + DataFlowModel model; + try { + model = parser.doParse(); + System.out.println(model); + deriving.run(model); + for (ChannelGenerator c: model.getChannelGenerators()) { + for(IdentifierTemplate resource:c.getIdentifierTemplates()) { + System.out.println(resource.getResourceStateType().getTypeName()); + } + } + } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutKeyword + | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression + | WrongRHSExpression | ExpectedRightBracket e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); } - DerivingStorageResources storage = new DerivingStorageResources(); - storage.run(model); } }