diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/JavaCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/JavaCodeGenerator.java index d75e568..7e4df1b 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/JavaCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/JavaCodeGenerator.java @@ -198,7 +198,7 @@ // Declare input methods in resources and the main type. for (ChannelGenerator cg : model.getIOChannelGenerators()) { for (ChannelMember cm : cg.getChannelMembers()) { - if (cm.getIdentifierTemplate().getResourceName().equals(type.getTypeName().toLowerCase())) { + if (cm.getIdentifierTemplate().equals(rn.getIdentifierTemplate())) { Expression message = cm.getStateTransition().getMessageExpression(); if (message.getClass() == Term.class) { ArrayList params = new ArrayList<>(); diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/JavaMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/JavaMethodBodyGenerator.java index b553446..b36ae42 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/JavaMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/JavaMethodBodyGenerator.java @@ -190,14 +190,14 @@ getter.addStatement("return value;"); } // methods for input events - Map.Entry> ioChannelAndMembers = getIOChannelAndMembers(resource, model); - if (ioChannelAndMembers != null) { - Set outs = ioChannelAndMembers.getValue(); + Map> ioChannelsAndMembers = getIOChannelsAndMembers(resource, model); + for (Map.Entry> entry: ioChannelsAndMembers.entrySet()) { + Set outs = entry.getValue(); for (ChannelMember out: outs) { MethodDeclaration input = getInputMethod(type, out); if (input != null) { String[] sideEffects = new String[] {""}; - Expression updateExp = ioChannelAndMembers.getKey().deriveUpdateExpressionOf(out, JavaCodeGenerator.pushAccessor); + Expression updateExp = entry.getKey().deriveUpdateExpressionOf(out, JavaCodeGenerator.pushAccessor); String newState = updateExp.toImplementation(sideEffects); String updateStatement; if (updateExp instanceof Term && ((Term) updateExp).getSymbol().isImplWithSideEffect()) { @@ -259,23 +259,25 @@ return null; } - private static Map.Entry> getIOChannelAndMembers(ResourceNode resource, DataFlowModel model) { - Set channelMembers = new HashSet<>(); - DataflowChannelGenerator channel = null; + private static Map> getIOChannelsAndMembers(ResourceNode resource, DataFlowModel model) { + Map> ioChannelsAndMembers = new HashMap<>(); for (ChannelGenerator c: model.getIOChannelGenerators()) { DataflowChannelGenerator ch = (DataflowChannelGenerator) c; // I/O channel for (ChannelMember out: ch.getOutputChannelMembers()) { if (out.getIdentifierTemplate().equals(resource.getIdentifierTemplate())) { if (out.getStateTransition().getMessageExpression() instanceof Term || out.getStateTransition().getMessageExpression() instanceof Variable) { - channel = ch; + Set channelMembers = ioChannelsAndMembers.get(ch); + if (channelMembers == null) { + channelMembers = new HashSet<>(); + ioChannelsAndMembers.put(ch, channelMembers); + } channelMembers.add(out); } } } } - if (channel == null) return null; - return new AbstractMap.SimpleEntry<>(channel, channelMembers); + return ioChannelsAndMembers; } private static List getInputMethods(TypeDeclaration type, ResourceNode resource, DataFlowModel model) { diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyCodeGenerator.java index 58cc392..b6d8f0f 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyCodeGenerator.java @@ -151,7 +151,7 @@ // Declare input methods in resources. for (ChannelGenerator cg : model.getIOChannelGenerators()) { for (ChannelMember cm : cg.getChannelMembers()) { - if (cm.getIdentifierTemplate().getResourceName().equals(type.getTypeName().toLowerCase())) { + if (cm.getIdentifierTemplate().equals(rn.getIdentifierTemplate())) { Expression message = cm.getStateTransition().getMessageExpression(); if (message.getClass() == Term.class) { ArrayList params = new ArrayList<>(); diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java index b691e8a..4004486 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/JerseyMethodBodyGenerator.java @@ -303,13 +303,13 @@ getter.addStatement("return value;"); } // methods for input events - Map.Entry> ioChannelAndMembers = getIOChannelAndMembers(resource, model); - if (ioChannelAndMembers != null) { - Set outs = ioChannelAndMembers.getValue(); + Map> ioChannelsAndMembers = getIOChannelsAndMembers(resource, model); + for (Map.Entry> entry: ioChannelsAndMembers.entrySet()) { + Set outs = entry.getValue(); for (ChannelMember out: outs) { MethodDeclaration input = getInputMethod(type, out); if (input != null) { - Expression updateExp = ioChannelAndMembers.getKey().deriveUpdateExpressionOf(out, JerseyCodeGenerator.pushAccessor); + Expression updateExp = entry.getKey().deriveUpdateExpressionOf(out, JerseyCodeGenerator.pushAccessor); String[] sideEffects = new String[] {""}; String newState = updateExp.toImplementation(sideEffects); String updateStatement; @@ -539,23 +539,25 @@ return null; } - private static Map.Entry> getIOChannelAndMembers(ResourceNode resource, DataFlowModel model) { - Set channelMembers = new HashSet<>(); - DataflowChannelGenerator channel = null; + private static Map> getIOChannelsAndMembers(ResourceNode resource, DataFlowModel model) { + Map> ioChannelsAndMembers = new HashMap<>(); for (ChannelGenerator c: model.getIOChannelGenerators()) { DataflowChannelGenerator ch = (DataflowChannelGenerator) c; // I/O channel for (ChannelMember out: ch.getOutputChannelMembers()) { if (out.getIdentifierTemplate().equals(resource.getIdentifierTemplate())) { if (out.getStateTransition().getMessageExpression() instanceof Term || out.getStateTransition().getMessageExpression() instanceof Variable) { - channel = ch; + Set channelMembers = ioChannelsAndMembers.get(ch); + if (channelMembers == null) { + channelMembers = new HashSet<>(); + ioChannelsAndMembers.put(ch, channelMembers); + } channelMembers.add(out); } } } } - if (channel == null) return null; - return new AbstractMap.SimpleEntry<>(channel, channelMembers); + return ioChannelsAndMembers; } private static List getInputMethods(TypeDeclaration type, ResourceNode resource, DataFlowModel model) {