diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java index 70f2248..c3de0e1 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java @@ -1,5 +1,32 @@ package algorithm; -public class DerivingStorageResources { +import models.algebra.Expression; +import models.algebra.Position; +import models.algebra.Type; +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).getName().equals(nextexp.getVariables().get(nextpos).getName())) { + member.getIdentifierTemplate().setResourceStateType(new Type("PUSH", "push")); + } + } + } + } + } + } } diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java b/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java index 490a783..080ec7b 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/UpdateConflictCheck.java @@ -3,7 +3,11 @@ 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; public class UpdateConflictCheck { private int index = 0; @@ -55,12 +59,23 @@ public boolean run(DataFlowModel model) { init(); + boolean check = true; for (Node node : model.getResourceDependencyGraph().getNodes()) { if (ids.containsKey(node)) { strongconnect(node); } } System.out.println(strong.size() + " " +model.getResourceDependencyGraph().getNodes().size()); - return strong.size() == 0; + for(ChannelGenerator cg:model.getChannelGenerators()) { + DataflowChannelGenerator data = (DataflowChannelGenerator)cg; + for(ChannelMember channel:data.getChannelMembers()) { + for(ChannelMember another:data.getChannelMembers()) { + if(!channel.equals(another)) { + check = channel.getIdentifierTemplate() != another.getIdentifierTemplate(); + } + } + } + } + return strong.size() == 0 && check; } } diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java new file mode 100644 index 0000000..e149c02 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java @@ -0,0 +1,64 @@ +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.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 { + 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(); + } + } +}