diff --git a/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model b/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model index 3f8df85..02ea307 100644 --- a/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model +++ b/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model @@ -1,10 +1,12 @@ channel CIO { out temp_f(p:Double, observe(x)) == x } + channel C1{ in temp_f(q:Double, conversion(y)) == y out temp_c(r:Double, conversion(z)) == (z-32) / 1.8 } + channel C2{ in temp_f(q:Double, update(y)) == y out highest(r:Double, update(z)) == if(gt(z, r), z, r) diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java index a88eea0..42f4707 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java @@ -125,7 +125,7 @@ } // src side (for a chain of update method invocations) String httpMethod = null; - if (((StoreAttribute) dst.getAttribute()).isStored()) { + if (((StoreAttribute) dst.getAttribute()).isNeeded()) { httpMethod = "post"; } else { httpMethod = "put"; diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/SelectableDataTransfers.java b/AlgebraicDataflowArchitectureModel/src/algorithms/SelectableDataTransfers.java index 5747583..cc1594b 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/SelectableDataTransfers.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/SelectableDataTransfers.java @@ -1,13 +1,18 @@ package algorithms; +import java.util.ArrayList; +import java.util.List; + import models.*; import models.dataFlowModel.*; public class SelectableDataTransfers { static public ResourceDependencyGraph init(ResourceDependencyGraph graph) { - for (Node n : graph.getNodes()) { - if (((StoreAttribute) ((ResourceNode) n).getAttribute()).isNeeded()) { - trackEdges(n); + List nodes = new ArrayList<>(graph.getNodes()); + for (Node n: graph.getNodes()) { + if (nodes.contains(n) && ((StoreAttribute) ((ResourceNode) n).getAttribute()).isNeeded()) { + nodes.remove(n); + trackEdges(n, nodes); } } for (Edge e : graph.getEdges()) { @@ -22,11 +27,16 @@ return graph; } - static private void trackEdges(Node n) { + static private void trackEdges(Node n, List nodes) { for (Edge e : ((ResourceNode) n).getInEdges()) { PushPullAttribute ppat = new PushPullAttribute(); ppat.addOption(PushPullValue.PUSH); ((ResourceDependency) e).setAttribute(ppat); + Node n2 = e.getSource(); + if (nodes.contains(n2)) { + nodes.remove(n2); + trackEdges(n2, nodes); + } } } }