diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/application/editor/Editor.java index 22c8ff0..db2fb6f 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/Editor.java @@ -14,7 +14,6 @@ import com.mxgraph.view.mxGraph; import com.mxgraph.view.mxGraphView; import models.EdgeAttribute; -import models.algebra.Expression; import models.algebra.Symbol; import models.algebra.Variable; import models.dataConstraintModel.Channel; @@ -277,8 +276,10 @@ fileString.append("geometry {\n"); Object root = graph.getDefaultParent(); - for (int i = 0; i < graph.getModel().getChildCount(root); i++) { - Object cell = graph.getModel().getChildAt(root, i); + mxCell dataFlowLayer = (mxCell) ((mxCell) root).getChildAt(Stage.DATA_FLOW_LAYER); + + for (int i = 0; i < graph.getModel().getChildCount(dataFlowLayer); i++) { + Object cell = graph.getModel().getChildAt(dataFlowLayer, i); if (graph.getModel().isVertex(cell)) { mxGraphView view = graph.getView(); mxCellState state = view.getState(cell); @@ -287,14 +288,6 @@ int w = (int) state.getWidth(); int h = (int) state.getHeight(); - for (Channel ch : model.getChannels()) { - if (ch instanceof FormulaChannel && state.getLabel().equals(ch.getChannelName())) { - fileString.append("\tnode fc ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); - } else if (ch != null && state.getLabel().equals(ch.getChannelName())) { - fileString.append("\tnode c ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); - } - } - for (ResourcePath res : model.getResourcePaths()) { if (res != null && state.getLabel().equals(res.getLeafResourceName())) fileString.append("\tnode r ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); @@ -305,6 +298,13 @@ fileString.append("\tnode ioc ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); } } + for (Channel ch : model.getChannels()) { + if (ch instanceof FormulaChannel && state.getLabel().equals(ch.getChannelName())) { + fileString.append("\tnode fc ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); + } else if (ch != null && state.getLabel().equals(ch.getChannelName())) { + fileString.append("\tnode c ").append(state.getLabel()).append(":").append(x).append(",").append(y).append(",").append(w).append(",").append(h).append("\n"); + } + } } } fileString.append("}\n"); @@ -313,11 +313,14 @@ public void setDAGLayout() { mxCell root = (mxCell) graph.getDefaultParent(); - + mxCell dataFlowLayer = (mxCell) root.getChildAt(Stage.DATA_FLOW_LAYER); graph.getModel().beginUpdate(); try { DAGLayout ctl = new DAGLayout(graph); - ctl.execute(root); + ctl.execute(dataFlowLayer); +// for(int i = 0; i < dataFlowLayer.getChildCount(); i++){ +// ctl.execute(dataFlowLayer.getChildAt(i)); +// } } finally { graph.getModel().endUpdate(); } @@ -325,7 +328,6 @@ public void setTreeLayout() { mxCell root = (mxCell) graph.getDefaultParent(); - graph.getModel().beginUpdate(); try { mxCompactTreeLayout ctl = new mxCompactTreeLayout(graph); @@ -342,7 +344,6 @@ public void setCircleLayout() { mxCell root = (mxCell) graph.getDefaultParent(); - graph.getModel().beginUpdate(); try { mxCircleLayout ctl = new mxCircleLayout(graph); diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DataFlowModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DataFlowModelingStage.java index 6c97196..d3a550e 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DataFlowModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DataFlowModelingStage.java @@ -98,6 +98,7 @@ model = null; ((mxGraphModel) graph.getModel()).clear(); + constructLayer(this.graph); } public DataTransferModel getModel() { @@ -159,9 +160,10 @@ graph.getModel().beginUpdate(); mxCell root = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) root.getChildAt(DATA_FLOW_LAYER); try { if (parentNode == null) { - mxCell resCell = (mxCell) graph.insertVertex(root, null, resourceNode.getPrimaryResourcePath().getName(), 20, 20, 80, 30, "shape=ellipse;perimeter=ellipsePerimeter;verticalAlign=top"); // insert a resource as a vertex + mxCell resCell = (mxCell) graph.insertVertex(layer, null, resourceNode.getPrimaryResourcePath().getName(), 20, 20, 80, 30, "shape=ellipse;perimeter=ellipsePerimeter;verticalAlign=top"); // insert a resource as a vertex resNodeToCell.put(resourceNode, resCell); cellToResNode.put(resCell, resourceNode); } else { @@ -182,6 +184,7 @@ graph.getModel().beginUpdate(); mxCell root = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) root.getChildAt(DATA_FLOW_LAYER); try { mxGeometry geo1 = new mxGeometry(0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo1.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); @@ -203,7 +206,7 @@ } channelName += ")"; } - Object chCell = graph.insertVertex(root, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert a channel as a vertex + Object chCell = graph.insertVertex(layer, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert a channel as a vertex mxCell port_in = new mxCell(null, geo1, "shape=ellipse;perimter=ellipsePerimeter"); port_in.setVertex(true); graph.addCell(port_in, chCell); // insert the input port of a channel @@ -224,6 +227,7 @@ graph.getModel().beginUpdate(); mxCell root = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) root.getChildAt(NODE_LAYER); try { mxGeometry geo2 = new mxGeometry(1.0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo2.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); @@ -241,7 +245,7 @@ } channelName += ")"; } - Object chCell = graph.insertVertex(root, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert an I/O channel as a vertex + Object chCell = graph.insertVertex(layer, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert an I/O channel as a vertex mxCell port_out = new mxCell(null, geo2, "shape=ellipse;perimter=ellipsePerimeter"); port_out.setVertex(true); graph.addCell(port_out, chCell); // insert the output port of a channel @@ -258,6 +262,7 @@ graph.getModel().beginUpdate(); mxCell root = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) root.getChildAt(DATA_FLOW_LAYER); try { mxGeometry geo1 = new mxGeometry(0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo1.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); @@ -279,7 +284,7 @@ } channelName += ")"; } - Object chCell = graph.insertVertex(root, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert a channel as a vertex + Object chCell = graph.insertVertex(layer, null, channelName, 150, 20, 30, 30, "verticalAlign=top"); // insert a channel as a vertex mxCell port_in = new mxCell(null, geo1, "shape=ellipse;perimter=ellipsePerimeter"); port_in.setVertex(true); graph.addCell(port_in, chCell); // insert the input port of a channel diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/PushPullSelectionStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/PushPullSelectionStage.java index b1e32e7..31def3f 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/PushPullSelectionStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/PushPullSelectionStage.java @@ -37,6 +37,7 @@ if (prevStage instanceof DataFlowModelingStage) { model = prevStage.getModel(); dataFlowGraph = analyzeDataTransferModel(model); + showOnlyLayer(DATA_FLOW_LAYER); } } @@ -83,15 +84,17 @@ DataFlowGraph flowGraph = DataTransferModelAnalyzer.createDataFlowGraphWithStateStoringAttribute(model); dataFlowGraph = DataTransferModelAnalyzer.annotateWithSelectableDataTransferAttiribute(flowGraph); mxCell parent = (mxCell) graph.getDefaultParent(); - if (parent.getChildCount() == 0) { - constructGraph(); // Construct data-flow graph (on file open action) - } + mxCell layer = (mxCell) parent.getChildAt(DATA_FLOW_LAYER); + if (layer.getChildCount() == 0) { + constructGraph(); // Construct data-flow graph (on file open action) + } // Construct data-flow graph (on file open action) updateEdgeAttributes(dataFlowGraph); // Update push/pull selection pull-downs return dataFlowGraph; } private void updateEdgeAttributes(DataFlowGraph dataFlowGraph) { mxCell root = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) root.getChildAt(DATA_FLOW_LAYER); graph.getModel().beginUpdate(); try { @@ -103,7 +106,7 @@ ResourceNode srcRes = (ResourceNode) dataFlow.getSource(); DataTransferChannel channel = ((ChannelNode) dataFlow.getDestination()).getChannel(); // input edge - for (Object edge : graph.getChildEdges(root)) { + for (Object edge : graph.getChildEdges(layer)) { mxCell edgeCell = (mxCell) edge; if (edgeCell.getValue() instanceof Editor.SrcDstAttribute) { Editor.SrcDstAttribute edgeAttr = (Editor.SrcDstAttribute) edgeCell.getValue(); @@ -127,7 +130,10 @@ */ public void constructGraph() { ((mxGraphModel) graph.getModel()).clear(); + constructLayer(this.graph); + mxCell parent = (mxCell) graph.getDefaultParent(); + mxCell layer = (mxCell) parent.getChildAt(DATA_FLOW_LAYER); graph.getModel().beginUpdate(); try { @@ -149,8 +155,9 @@ int w = 80; int h = 30; ResourcePath resourcePath = resourceNode.getPrimaryResourcePath(); - mxCell resourceCell = (mxCell) graph.insertVertex(parent, null, resourcePath.getLeafResourceName(), 20, 20, w, h, "shape=ellipse;perimeter=ellipsePerimeter;verticalAlign=top"); // insert a resource as a vertex + mxCell resourceCell = (mxCell) graph.insertVertex(layer, null, resourcePath.getLeafResourceName(), 20, 20, w, h, "shape=ellipse;perimeter=ellipsePerimeter;verticalAlign=top"); // insert a resource as a vertex resNodeToCell.put(resourceNode, resourceCell); + createChildResourceVertices(resourceCell, resourceNode, w, h); } @@ -178,7 +185,7 @@ w *= 2; h *= 2; } - mxCell channelCell = (mxCell) graph.insertVertex(parent, null, channelName, 150, 20, w, h, "verticalAlign=top"); // insert a channel as a vertex + mxCell channelCell = (mxCell) graph.insertVertex(layer, null, channelName, 150, 20, w, h, "verticalAlign=top"); // insert a channel as a vertex channelToCell.put(channel, channelCell); mxCell portIn = new mxCell(null, geoPortIn, "shape=ellipse;perimter=ellipsePerimeter"); @@ -213,7 +220,7 @@ w *= 2; h *= 2; } - mxCell channelCell = (mxCell) graph.insertVertex(parent, null, channelName, 150, 20, w, h, "verticalAlign=top"); // insert a channel as a vertex + mxCell channelCell = (mxCell) graph.insertVertex(layer, null, channelName, 150, 20, w, h, "verticalAlign=top"); // insert a channel as a vertex channelToCell.put(channel, channelCell); mxCell portOut = new mxCell(null, geoPortOut, "shape=ellipse;perimter=ellipsePerimeter"); diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java index eae7ac7..2ea990b 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java @@ -3,6 +3,7 @@ import java.io.BufferedReader; import java.io.IOException; +import application.editor.Stage; import com.mxgraph.model.mxCell; import com.mxgraph.model.mxGeometry; import com.mxgraph.model.mxIGraphModel; @@ -160,10 +161,27 @@ int hC = Integer.parseInt(h); Object root = graph.getDefaultParent(); + mxCell nodeLayer = (mxCell) ((mxCell) root).getChildAt(Stage.NODE_LAYER); + mxCell dataFlowLayer = (mxCell) ((mxCell) root).getChildAt(Stage.DATA_FLOW_LAYER); mxIGraphModel graphModel = graph.getModel(); - for (int i = 0; i < graph.getModel().getChildCount(root); i++) { + for (int i = 0; i < graph.getModel().getChildCount(nodeLayer); i++) { - Object cell = graph.getModel().getChildAt(root, i); + Object cell = graph.getModel().getChildAt(nodeLayer, i); + if (!graph.getModel().isVertex(cell)) continue; + + mxGeometry geom = (mxGeometry) ((mxCell) cell).getGeometry().clone(); + mxGraphView view = graph.getView(); + mxCellState state = view.getState(cell); + + if (!name.equals(state.getLabel())) continue; + + geom.setX(xC); + geom.setY(yC); + graphModel.setGeometry(cell, geom); + } + for (int i = 0; i < graph.getModel().getChildCount(dataFlowLayer); i++) { + + Object cell = graph.getModel().getChildAt(dataFlowLayer, i); if (!graph.getModel().isVertex(cell)) continue; mxGeometry geom = (mxGeometry) ((mxCell) cell).getGeometry().clone();