diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java index 8245aa8..05a90ca 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java @@ -32,7 +32,6 @@ JFileChooser fc = new JFileChooser(wd); FileFilter model = new FileNameExtensionFilter("model","model"); FileFilter dtram = new FileNameExtensionFilter("dtram", "dtram"); - String extension = ""; // Adds file filter for supported file format FileFilter defaultFilter = new FileFilter() { @@ -54,21 +53,6 @@ if (rc == JFileChooser.APPROVE_OPTION) { lastDir = fc.getSelectedFile().getParent(); editor.setCurFilePath(fc.getSelectedFile().getAbsolutePath()); - - File file = fc.getSelectedFile(); - - if(file != null && file.exists()) { - //�t�@�C�������擾 - String name = file.getName(); - - //�g���q���擾 - extension = name.substring(name.lastIndexOf(".")); - - } - if( extension.contains(".model")) { - editor.saveModel(); - System.out.println("extension"); - } editor.save(); frame.setTitle(frame.title + " - " + fc.getSelectedFile().getAbsolutePath()); } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index b0b2394..cf5040b 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -7,6 +7,7 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -19,7 +20,9 @@ import com.mxgraph.model.mxGraphModel; import com.mxgraph.util.mxConstants; import com.mxgraph.util.mxPoint; +import com.mxgraph.view.mxCellState; import com.mxgraph.view.mxGraph; +import com.mxgraph.view.mxGraphView; import algorithms.NecessityOfStoringResourceStates; import algorithms.SelectableDataTransfers; @@ -95,7 +98,7 @@ updateEdgeAttiributes(resourceDependencyGraph); return resourceDependencyGraph; } - + public void resetResourceDependencyGraph() { resourceDependencyGraph = null; } @@ -115,7 +118,7 @@ public String getCurFileName() { return curFileName; } - + public String getCurFilePath() { return curFilePath; } @@ -124,7 +127,7 @@ this.curFilePath = curFilePath; this.curFileName = new File(curFilePath).getName(); } - + public void clear() { model = null; ((mxGraphModel) graph.getModel()).clear(); @@ -160,39 +163,85 @@ } return null; } - + public void save() { if (curFilePath != null) { try { - File file = new File(curFilePath); - FileWriter filewriter = new FileWriter(file); - filewriter.write("model {\n"); - filewriter.write(model.getSourceText()); - - filewriter.write("}\n"); - filewriter.write("geometry {\n"); + File file = new File(curFilePath); + String extension = ""; + if(file != null && file.exists()) { + //�t�@�C�������擾 + String name = file.getName(); - filewriter.write("}\n"); - filewriter.close(); + //�g���q���擾 + extension = name.substring(name.lastIndexOf(".")); + } + if(extension.contains(".model")) { + saveModel(file); + } else { + + FileWriter filewriter = new FileWriter(file); + filewriter.write("model {\n"); + filewriter.write(model.getSourceText()); + filewriter.write("}\n"); + filewriter.write("geometry {\n"); + + + Object root = graph.getDefaultParent(); + for (int i = 0; i < graph.getModel().getChildCount(root); i++) { + Object cell = graph.getModel().getChildAt(root, i); + if (graph.getModel().isVertex(cell)) { + mxGraphView view = graph.getView(); + mxCellState state = view.getState(cell); + double x = state.getX(); + double y = state.getY(); + double w = state.getWidth(); + double h = state.getHeight(); + + for(ChannelGenerator ch: model.getChannelGenerators()) { + if(ch instanceof FormulaChannelGenerator && state.getLabel().equals(ch.getChannelName())) { + filewriter.write("node fc " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h+"\n"); + } else if(ch instanceof ChannelGenerator && state.getLabel().equals(ch.getChannelName())) { + filewriter.write("node c " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h+"\n"); + } + } + + for (IdentifierTemplate res: model.getIdentifierTemplates()){ + if(res instanceof IdentifierTemplate && state.getLabel().equals(res.getResourceName())) + filewriter.write("node r " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h + "\n"); + } + + for (ChannelGenerator ioC: model.getIOChannelGenerators()) { + if(ioC instanceof ChannelGenerator && state.getLabel().equals(ioC.getChannelName())) { + filewriter.write("node IOc " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h + "\n"); + } + } + } + } + + filewriter.write("}\n"); + filewriter.close(); + } } catch (IOException e) { e.printStackTrace(); } } + } - public void saveModel() { + public void saveModel(File file) { if (curFilePath != null) { try { - File file = new File(curFilePath); - FileWriter filewriter = new FileWriter(file); - filewriter.write(model.getSourceText()); - filewriter.close(); +// File file = new File(curFilePath); + FileWriter filewriter = new FileWriter(file); + filewriter.write(model.getSourceText()); + filewriter.close(); } catch (IOException e) { e.printStackTrace(); } } } - + /** * Construct a mxGraph from DataFlowModel and DataFlowModel * @param model @@ -239,7 +288,7 @@ "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a vertex resources.put(res, resource); } - + // add input, output and reference edges for (ChannelGenerator ch: model.getChannelGenerators()) { DataflowChannelGenerator channelGen = (DataflowChannelGenerator) ch; @@ -256,7 +305,7 @@ graph.insertEdge(parent, null, null, resources.get(refRes), channelsIn.get(channelGen), "dashed=true;movable=false"); } } - + for (ChannelGenerator ioChannelGen: model.getIOChannelGenerators()) { if (channelsOut.get(ioChannelGen) == null) { Object channel = graph.insertVertex(parent, null, ioChannelGen.getChannelName(), 150, 20, 30, 30); // insert an I/O channel as a vertex @@ -276,7 +325,7 @@ return graph; } - + public void updateEdgeAttiributes(ResourceDependencyGraph resourceDependencyGraph) { Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); @@ -312,7 +361,7 @@ try { mxCompactTreeLayout ctl = new mxCompactTreeLayout(graph); ctl.setLevelDistance(100); -// ctl.setHorizontal(false); + // ctl.setHorizontal(false); ctl.setEdgeRouting(false); ctl.execute(parent); } finally { @@ -357,7 +406,7 @@ mxGeometry geo2 = new mxGeometry(1.0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo2.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); geo2.setRelative(true); - + Object channel = graph.insertVertex(parent, null, channelGen.getChannelName(), 150, 20, 30, 30); // insert a channel as a vertex mxCell port_in = new mxCell(null, geo1, "shape=ellipse;perimter=ellipsePerimeter"); port_in.setVertex(true); @@ -379,7 +428,7 @@ mxGeometry geo2 = new mxGeometry(1.0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo2.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); geo2.setRelative(true); - + Object channel = graph.insertVertex(parent, null, ioChannelGen.getChannelName(), 150, 20, 30, 30); // insert an I/O channel as a vertex mxCell port_out = new mxCell(null, geo2, "shape=ellipse;perimter=ellipsePerimeter"); port_out.setVertex(true); @@ -388,7 +437,7 @@ graph.getModel().endUpdate(); } } - + public void addFormulaChannelGenerator(FormulaChannelGenerator formulaChannelGen) { getModel().addChannelGenerator(formulaChannelGen); resetResourceDependencyGraph(); @@ -402,7 +451,7 @@ mxGeometry geo2 = new mxGeometry(1.0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo2.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); geo2.setRelative(true); - + Object channel = graph.insertVertex(parent, null, formulaChannelGen.getChannelName(), 150, 20, 30, 30); // insert a channel as a vertex mxCell port_in = new mxCell(null, geo1, "shape=ellipse;perimter=ellipsePerimeter"); port_in.setVertex(true); @@ -417,31 +466,31 @@ public boolean connectEdge(mxCell edge, mxCell src, mxCell dst) { DataFlowModel model = getModel(); - ChannelGenerator srcCh = model.getChannelGenerator((String) src.getValue()); - if (srcCh == null) { - srcCh = model.getIOChannelGenerator((String) src.getValue()); - if (srcCh == null) { - IdentifierTemplate srcRes = model.getIdentifierTemplate((String) src.getValue()); - ChannelGenerator dstCh = model.getChannelGenerator((String) dst.getValue()); - if (srcRes == null || dstCh == null) return false; - // resource to channel edge - ChannelMember srcCm = new ChannelMember(srcRes); - ((DataflowChannelGenerator ) dstCh).addChannelMemberAsInput(srcCm); - edge.setValue(new SrcDstAttribute(srcRes, dstCh)); - resetResourceDependencyGraph(); - return true; - } - } - IdentifierTemplate dstRes = model.getIdentifierTemplate((String) dst.getValue()); - if (dstRes == null) return false; - // channel to resource edge - ChannelMember dstCm = new ChannelMember(dstRes); - ((DataflowChannelGenerator) srcCh).addChannelMemberAsOutput(dstCm); + ChannelGenerator srcCh = model.getChannelGenerator((String) src.getValue()); + if (srcCh == null) { + srcCh = model.getIOChannelGenerator((String) src.getValue()); + if (srcCh == null) { + IdentifierTemplate srcRes = model.getIdentifierTemplate((String) src.getValue()); + ChannelGenerator dstCh = model.getChannelGenerator((String) dst.getValue()); + if (srcRes == null || dstCh == null) return false; + // resource to channel edge + ChannelMember srcCm = new ChannelMember(srcRes); + ((DataflowChannelGenerator ) dstCh).addChannelMemberAsInput(srcCm); + edge.setValue(new SrcDstAttribute(srcRes, dstCh)); + resetResourceDependencyGraph(); + return true; + } + } + IdentifierTemplate dstRes = model.getIdentifierTemplate((String) dst.getValue()); + if (dstRes == null) return false; + // channel to resource edge + ChannelMember dstCm = new ChannelMember(dstRes); + ((DataflowChannelGenerator) srcCh).addChannelMemberAsOutput(dstCm); edge.setValue(new SrcDstAttribute(srcCh, dstRes)); resetResourceDependencyGraph(); - return true; + return true; } - + public void delete() { for (Object obj: graph.getSelectionCells()) { mxCell cell = (mxCell) obj; @@ -514,24 +563,24 @@ e.printStackTrace(); } } - + private class SrcDstAttribute extends EdgeAttribute { private Object src; private Object dst; - + public SrcDstAttribute(Object src, Object dst) { this.src = src; this.dst = dst; } - + public Object getSrouce() { return src; } - + public Object getDestination() { return dst; } - + public String toString() { return ""; }