diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageDecision.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageDecision.java index b6576d6..78df79b 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageDecision.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageDecision.java @@ -16,7 +16,7 @@ } static private void trackNode(ResourceNode resource) { - if(arrivedNode.contains(resource)) return; + if (arrivedNode.contains(resource)) return; arrivedNode.add(resource); boolean flag = false; for (Edge e : resource.getInEdges()) { @@ -25,6 +25,7 @@ flag = true; } } + if (resource.getInEdges().size() == 0) flag = true; ((StoreAttribute) resource.getAttribute()).setStored(flag); } } diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java b/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java index 080ec7b..109dd6f 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java @@ -3,21 +3,18 @@ import java.util.*; import models.*; -import models.dataConstraintModel.ChannelGenerator; -import models.dataConstraintModel.ChannelMember; -import models.dataConstraintModel.IdentifierTemplate; -import models.dataFlowModel.DataFlowModel; -import models.dataFlowModel.DataflowChannelGenerator; +import models.dataConstraintModel.*; +import models.dataFlowModel.*; public class UpdateConflictCheck { - private int index = 0; - private Deque stack = new ArrayDeque<>(); - private Set> strong = new HashSet<>(); - private Map ids = new HashMap<>(); - private Map lowlink = new HashMap<>(); - private Map onStack = new HashMap<>(); + private static int index = 0; + private static Deque stack = new ArrayDeque<>(); + private static Set> strong = new HashSet<>(); + private static Map ids = new HashMap<>(); + private static Map lowlink = new HashMap<>(); + private static Map onStack = new HashMap<>(); - private void init() { + static private void init() { index = 0; stack = new ArrayDeque<>(); strong = new HashSet<>(); @@ -26,7 +23,7 @@ onStack = new HashMap<>(); } - private void strongconnect(Node node) { + static private void strongconnect(Node node) { ids.put(node, index); lowlink.put(node, index); index++; @@ -57,7 +54,7 @@ } } - public boolean run(DataFlowModel model) { + static public boolean run(DataFlowModel model) { init(); boolean check = true; for (Node node : model.getResourceDependencyGraph().getNodes()) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java index e3271d8..3a5010f 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java @@ -1,26 +1,12 @@ package tests; -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.DataStorageNecessity; -import models.Edge; import models.Node; -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.*; import parser.ExpectedChannel; import parser.ExpectedChannelName; diff --git a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java index b945cd5..bd07347 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java @@ -1,103 +1,65 @@ package tests; -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.UpdateConflictCheck; -import models.Edge; -import models.dataConstraintModel.ChannelMember; -import models.dataConstraintModel.ChannelSelector; -import models.dataConstraintModel.GroupSelector; -import models.dataConstraintModel.IdentifierTemplate; +import algorithm.*; import models.dataFlowModel.DataFlowModel; -import models.dataFlowModel.DataflowChannelGenerator; -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 UpdateConflictCheckTest { - @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"); + try { + Parser parser = new Parser(new BufferedReader(new FileReader(file))); + try { + DataFlowModel model = parser.doParse(); + UpdateConflictCheck.run(model); + } catch (ExpectedRightBracket e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedChannel e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedChannelName e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedLeftCurlyBracket e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedInOrOutKeyword e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedStateTransition e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedEquals e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExpectedRHSExpression e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (WrongLHSExpression e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (WrongRHSExpression e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); } - UpdateConflictCheck check = new UpdateConflictCheck(); - boolean f = check.run(model); - System.out.println(f); - assertEquals(true,f); } }