diff --git a/AlgebraicDataflowArchitectureModel/src/application/SimulatorWindow.java b/AlgebraicDataflowArchitectureModel/src/application/SimulatorWindow.java index 36f6d6b..e36dbd1 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/SimulatorWindow.java +++ b/AlgebraicDataflowArchitectureModel/src/application/SimulatorWindow.java @@ -26,6 +26,7 @@ import application.actions.SimulateAction; import application.editor.DataTransferModelingCellEditor; import application.editor.Editor; +import application.editor.InputEventCellEditor; import application.layouts.DAGLayout; import generators.JavaCodeGenerator; import models.Edge; @@ -46,8 +47,15 @@ import models.dataFlowModel.DataTransferModel; import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; import models.dataFlowModel.ResourceNode; +import parser.Parser; import parser.ParserDTRAM; +import parser.exceptions.ExpectedColon; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.WrongJsonExpression; +import parser.Parser.TokenStream; +import simulator.Event; import simulator.Resource; +import simulator.ResourceIdentifier; import simulator.Simulator; public class SimulatorWindow extends JFrame{ @@ -116,43 +124,58 @@ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setSize(870,640); setVisible(true); - - simulator = new Simulator(editor.getModel()); - - constructSimulateGraph(simulator.getCurState().getRootResources()); - - graphComponent.setCellEditor(new DataTransferModelingCellEditor(graphComponent, editor)); + + + simulator = new Simulator(this.editor.getModel()); + constructSimulateGraph(simulator.getCurState().getRootResources(), this.editor.getModel(),this.editor.getDataFlowGraph()); + + graphComponent.setCellEditor(new InputEventCellEditor(graphComponent, this.editor)); //new DataTransferModelingCellEditor(graphComponent, editor); - simulator.transition(null); + //TokenStream stream = new Parser.TokenStream(); + //Parser parser = new Parser(stream); +// stream.addLine("addCompany(\"1\", \"Osaka\")"); +// try { +// Expression message = parser.parseTerm(stream, editor.getModel()); +// //Event addCompany = new Event(cio_addCompany, message, companies, initialState.getResource(ResourceIdentifier.createFrom(companies))); +// //simulator.transition(null); +// } catch (ExpectedRightBracket | WrongJsonExpression | ExpectedColon e) { +// // TODO 自動生成された catch ブロック +// e.printStackTrace(); +// } + for(Resource resource: simulator.getCurState().getRootResources()) { - System.out.println(resource.getResourcePath().toString()); + System.out.println(resource.getResourceIdentifier().toString()); System.out.println(resource.getResourceHierarchy().getChildren()); } } - public mxGraph constructSimulateGraph(Set simulateRes) { //sample + + public mxGraph constructSimulateGraph(Set simulateRes, DataTransferModel model, DataFlowGraph dataFlowGraph) { bReflectingArchitectureModel = true; ((mxGraphModel) graph.getModel()).clear(); Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); - Map resources = new HashMap<>(); - - // create resource vertices - for (Resource resNode: simulateRes) { - int w = 80; - int h = 30; - ResourcePath res = resNode.getResourcePath(); - Object resource = graph.insertVertex(parent, null, - res.getResourceName(), 20, 20, w, h, - "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a vertex - resources.put(resNode, resource); - createChildResourceVerticiesSample(resource, resNode, resources, w, h); - } + try { + Map resources = new HashMap<>(); - graph.getModel().endUpdate(); + // create resource vertices + for (Resource resNode: simulateRes) { + int w = 80; + int h = 30; + ResourcePath res = resNode.getResourceIdentifier(); + Object resource = graph.insertVertex(parent, null, + res.getResourceName(), 20, 20, w, h, + "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a vertex + resources.put(resNode, resource); + createChildResourceVerticiesSample(resource, resNode, resources, w, h); + } + + } finally { + graph.getModel().endUpdate(); + } bReflectingArchitectureModel = false; return graph; @@ -163,7 +186,7 @@ if(resNode.getChildren() != null) { for (Resource childNode: resNode.getChildren()) { - ResourcePath childRes = childNode.getResourcePath(); + ResourcePath childRes = childNode.getResourceIdentifier(); Object childResource = graph.insertVertex(resource, null, childRes.getName(), 0, 0, w, h, "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a vertex @@ -184,5 +207,81 @@ public void setEditor(Editor editor) { this.editor = editor; } + + public Set> getResourceDependencyForChannel(DataTransferChannel ch, DataTransferModel model, DataFlowGraph dataFlowGraph) { + Set> resourceDpendency = new HashSet<>(); + try { + Map>> dependency = ch.fillOutsideResourcePaths(ch.getOutputChannelMembers().iterator().next(), JavaCodeGenerator.pullAccessor); + for (ChannelMember srcMem: dependency.keySet()) { + ResourceNode srcNode = dataFlowGraph.getResourceNode(srcMem.getResource()); + if (srcNode != null) { + for (ChannelMember dstMem: dependency.get(srcMem).getValue()) { + ResourceNode dstNode = dataFlowGraph.getResourceNode(dstMem.getResource()); + while (srcNode.getResourceHierarchy().getNumParameters() == 0 && srcNode.getParent() != null) { + srcNode = srcNode.getParent(); + } + resourceDpendency.add(new AbstractMap.SimpleEntry<>(srcNode, dstNode)); + } + } + } + } catch (ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage + | UnificationFailed | ValueUndefined e) { + e.printStackTrace(); + } + return resourceDpendency; + } + + public void updateEdgeAttiributes(DataFlowGraph dataFlowGraph) { + Object parent = graph.getDefaultParent(); + graph.getModel().beginUpdate(); + try { + // add input, output and reference edges + for (Edge e : dataFlowGraph.getEdges()) { + if (e instanceof DataFlowEdge) { + DataFlowEdge dataFlow = (DataFlowEdge) e; + if (!dataFlow.isChannelToResource()) { + ResourceNode srcRes = (ResourceNode) dataFlow.getSource(); + DataTransferChannel channel = ((ChannelNode) dataFlow.getDestination()).getChannel(); + // input edge + for (Object edge: graph.getChildEdges(parent)) { + mxCell edgeCell = (mxCell) edge; + if (edgeCell.getValue() instanceof SrcDstAttribute) { + SrcDstAttribute edgeAttr = (SrcDstAttribute) edgeCell.getValue(); + if (srcRes.getPrimaryResourcePath().equals(edgeAttr.getSource()) && channel.equals(edgeAttr.getDestination())) { + edgeCell.setValue(dataFlow.getAttribute()); + break; + } + } + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } + graph.refresh(); + } + + public class SrcDstAttribute extends EdgeAttribute { + private Object src; + private Object dst; + + public SrcDstAttribute(Object src, Object dst) { + this.src = src; + this.dst = dst; + } + + public Object getSource() { + return src; + } + + public Object getDestination() { + return dst; + } + + public String toString() { + return ""; + } + } }