diff --git a/AlgebraicDataflowArchitectureModel/prototypes/JAX-RS/VotingSystem/Counts.java b/AlgebraicDataflowArchitectureModel/prototypes/JAX-RS/VotingSystem/Counts.java index a60f29e..f841a6f 100644 --- a/AlgebraicDataflowArchitectureModel/prototypes/JAX-RS/VotingSystem/Counts.java +++ b/AlgebraicDataflowArchitectureModel/prototypes/JAX-RS/VotingSystem/Counts.java @@ -15,7 +15,10 @@ @GET public Map getValue() { Map v0 = new HashMap<>(); - for (String aid: accounts.getValue().keySet()) { + Map> accounts_json = client.target("http://localhost:8080").path("/accounts").request().get(HashMap.class); + Map> accounts = new HashMap<>(); + accounts = accounts_json; + for (String aid: accounts.keySet()) { String vote = client.target("http://localhost:8080").path("/accounts."+aid+".vote").request().get(String.class); v0.put(aid,vote); } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java index 11ba6a0..706eec2 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java @@ -954,15 +954,19 @@ } insideResPath = insideResPath.getParent(); String parent = null; - if (JerseyCodeGenerator.generatesComponent(insideResPath.getResourceHierarchy())) { - Expression parentGetter = JerseyCodeGenerator.pullAccessor.getDirectStateAccessorFor(insideResPath, src.getPrimaryResourcePath()); - Term valueGetter = new Term(new Symbol("getValue", 1, Symbol.Type.METHOD)); - valueGetter.addChild(parentGetter); - parent = valueGetter.toImplementation(new String[] {}); - } else { - parent = JerseyCodeGenerator.pullAccessor.getDirectStateAccessorFor(insideResPath, src.getPrimaryResourcePath()).toImplementation(new String[] {}); - } if (insideResPath != null) { + if (insideResPath.getCommonPrefix(dst.getInSideResource(ch)) != null) { + if (JerseyCodeGenerator.generatesComponent(insideResPath.getResourceHierarchy())) { + Expression parentGetter = JerseyCodeGenerator.pullAccessor.getDirectStateAccessorFor(insideResPath, dst.getInSideResource(ch)); + Term valueGetter = new Term(new Symbol("getValue", 1, Symbol.Type.METHOD)); + valueGetter.addChild(parentGetter); + parent = valueGetter.toImplementation(new String[] {}); + } else { + parent = JerseyCodeGenerator.pullAccessor.getDirectStateAccessorFor(insideResPath, dst.getInSideResource(ch)).toImplementation(new String[] {}); + } + } else { + parent = JerseyCodeGenerator.toVariableName(JerseyCodeGenerator.getComponentName(insideResPath.getResourceHierarchy())); + } if (selType.equals(DataConstraintModel.typeInt)) { // make a for loop (for a list) for data collecting. getter.addFirstStatement("for (int " + varName + " = 0; " + varName +" < " + parent + ".size(); " + varName + "++) {"); @@ -970,6 +974,12 @@ // make a for loop (for a map) for data collecting. getter.addFirstStatement("for (String " + varName + ": " + parent + ".keySet()) {"); } + if (insideResPath.getCommonPrefix(dst.getInSideResource(ch)) == null) { + Type parentResType = insideResPath.getResourceStateType(); + String parentResName = JerseyCodeGenerator.toVariableName(JerseyCodeGenerator.getComponentName(insideResPath.getResourceHierarchy())); + String parentResPath = insideResPath.toString().replaceAll(":.*\\}","\\}").replaceAll("\\{", "\"+").replaceAll("\\}", "+\""); + generatePullDataTransfer(getter, parentResName, parentResPath, parentResType); + } } } // initialize the variables to hold side effects within the loop diff --git a/AlgebraicDataflowArchitectureModel/src/tests/JAXRSCodeGeneratorTest.java b/AlgebraicDataflowArchitectureModel/src/tests/JAXRSCodeGeneratorTest.java index 8f64cd8..f72baa9 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/JAXRSCodeGeneratorTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/JAXRSCodeGeneratorTest.java @@ -1145,7 +1145,7 @@ Map.ofEntries(Map.entry("getValue", Map.entry(Set.of("@Produces(MediaType.APPLICATION_JSON)","@GET"), Map.entry("Map", Map.entry(List.of(), - 6)))), + 8)))), Map.entry("Counts", Map.entry(Set.of(), Map.entry("void", Map.entry(List.of("Map"),