diff --git a/AlgebraicDataflowArchitectureModel/models/POS.dtram b/AlgebraicDataflowArchitectureModel/models/POS.dtram index e69de29..68a3ac2 100644 --- a/AlgebraicDataflowArchitectureModel/models/POS.dtram +++ b/AlgebraicDataflowArchitectureModel/models/POS.dtram @@ -0,0 +1,33 @@ +model { +channel CIO { + out payment(p:Int, purchase(x:Int)) == x +} +channel C3 { + in history(h, update3(u)) == u + out total(t:Int, update3(u)) == sum(u) +} +channel C1 { + in payment(p, update1(y)) == y + out points(l:Int, update1(y)) == floor(y * 0.05) +} +channel C2 { + in payment(p, update2(z)) == z + out history(h:List, update2(z)) == cons(z, h) +} +} +geometry { + node c C3:850,90,30,30 + node c C1:500,20,30,30 + node c C2:500,90,30,30 + node r total:1000,90,80,30 + node r payment:300,55,80,30 + node r history:650,90,80,30 + node r points:650,20,80,30 + node ioc CIO:150,55,30,30 +} +services { + service SERVICE_NAME{ + baseURL : + resources: total, payment, history, points + } +} diff --git a/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram b/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram deleted file mode 100644 index d9b924c..0000000 --- a/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram +++ /dev/null @@ -1,21 +0,0 @@ -channel CIO { - out payment(p:Int, purchase(x:Int)) == x -} -channel C3 { - in history(h, update3(u)) == u - out total(t:Int, update3(u)) == sum(u) -} -channel C1 { - in payment(p, update1(y)) == y - out points(l:Int, update1(y)) == floor(y * 0.05) -} -channel C2 { - in payment(p, update2(z)) == z - out history(h:List, update2(z)) == cons(z, h) -} -services { - service SERVICE_NAME{ - baseURL : - resources: total, payment, history, points - } -} diff --git a/AlgebraicDataflowArchitectureModel/models/POS.model b/AlgebraicDataflowArchitectureModel/models/POS.model index 4e61b45..150c106 100644 --- a/AlgebraicDataflowArchitectureModel/models/POS.model +++ b/AlgebraicDataflowArchitectureModel/models/POS.model @@ -1,18 +1,15 @@ -channel CIO { - out payment(p:Int, purchase(x:Int)) == x -} - -channel C1 { - in payment(p, update1(y)) == y - out points(l:Int, update1(y)) == floor(y * 0.05) -} - -channel C2 { - in payment(p, update2(z)) == z - out history(h:List, update2(z)) == cons(z, h) -} - -channel C3 { - in history(h, update3(u)) == u - out total(t:Int, update3(u)) == sum(u) -} \ No newline at end of file +channel CIO { + out payment(p:Int, purchase(x:Int)) == x +} +channel C3 { + in history(h, update3(u)) == u + out total(t:Int, update3(u)) == sum(u) +} +channel C1 { + in payment(p, update1(y)) == y + out points(l:Int, update1(y)) == floor(y * 0.05) +} +channel C2 { + in payment(p, update2(z)) == z + out history(h:List, update2(z)) == cons(z, h) +} diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java index e95b848..f9db012 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java @@ -54,25 +54,24 @@ // choose a file extension from a dialog. if (rc == JFileChooser.APPROVE_OPTION) { - // if extension filter is filled, then attaching extension by choosing filter. // but if it's not filled, then using default extension name. - String extension = ""; - - // ファイル名が重複するかチェック + String extension = ""; if(fc.getFileFilter() instanceof FileNameExtensionFilter) { FileNameExtensionFilter selectedFilter = (FileNameExtensionFilter)fc.getFileFilter(); extension = "." + selectedFilter.getExtensions()[0].toString(); } - else { - extension = ".model"; - } - + lastDir = fc.getSelectedFile().getParent(); - - editor.setCurFilePath(fc.getSelectedFile().getAbsolutePath() + extension); + + String fileName = fc.getSelectedFile().getAbsolutePath() + extension; + + // checking file duplicates + if(! (fc.getSelectedFile().exists())) editor.setCurFilePath(fileName); + + + // overwriting file editor.save(); - frame.setTitle(GraphicalRefactor.title + " - " + fc.getSelectedFile().getAbsolutePath()); } } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index 03ffad4..b8e8984 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -217,7 +217,11 @@ return null; } - + /**-------------------------------------------------------------------------------- + * save + /**-------------------------------------------------------------------------------- + * + */ public void save() { if (curFilePath != null) { try { @@ -234,51 +238,13 @@ 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); - int x = (int) state.getX(); - int y = (int) state.getY(); - int w = (int) state.getWidth(); - int h = (int) 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.write(toOutputString()); filewriter.close(); } } catch (IOException e) { e.printStackTrace(); } } - } public void saveModel(File file) { @@ -293,6 +259,56 @@ } } + /**-------------------------------------------------------------------------------- + * get writing texts "dtram" file information is written. + * + * @return formatted "dtram" info texts. + */ + protected String toOutputString() { + String fileString = ""; + + fileString += "model {\n"; + fileString += this.model.getSourceText(); + fileString += "}\n"; + + fileString += "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); + int x = (int) state.getX(); + int y = (int) state.getY(); + int w = (int) state.getWidth(); + int h = (int) state.getHeight(); + + for(ChannelGenerator ch: model.getChannelGenerators()) { + if(ch instanceof FormulaChannelGenerator && state.getLabel().equals(ch.getChannelName())) { + fileString += "\tnode fc " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h+"\n"; + } else if(ch instanceof ChannelGenerator && state.getLabel().equals(ch.getChannelName())) { + fileString +="\tnode c " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h+"\n"; + } + } + + for (IdentifierTemplate res: model.getIdentifierTemplates()){ + if(res instanceof IdentifierTemplate && state.getLabel().equals(res.getResourceName())) + fileString += "\tnode r " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h + "\n"; + } + + for (ChannelGenerator ioC: model.getIOChannelGenerators()) { + if(ioC instanceof ChannelGenerator && state.getLabel().equals(ioC.getChannelName())) { + fileString += "\tnode ioc " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h + "\n"; + } + } + } + } + fileString += "}\n"; + + return fileString; + } + /** * Construct a mxGraph from DataFlowModel and DataFlowModel * @param model diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java index d4a9470..b2b31ab 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java @@ -117,51 +117,56 @@ */ @Override public void save() { - super.save(); - - // note: geometry の書き込みが消える. // 1. ファイルの情報をキャッシュしてもう一度書き込む // 2. 規定クラスでメソッド化して呼び出す. - if (curFilePath != null) { try { File file = new File(curFilePath); - try (FileWriter filewriter = new FileWriter(file)) { - filewriter.write(model.getSourceText()); - filewriter.write("services {\n"); - - // serviceNameが変わるまでリソースのリストに追加 - // serviceNameが変わったらキャッシュ - // サービス名とURLとリソースを書き出す - filewriter.write("\tservice " + "SERVICE_NAME" + "{\n"); - filewriter.write("\t\tbaseURL :\n"); - filewriter.write("\t\tresources: "); - - 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 cellState = view.getState(cell); - - // get resource's name - for (Iterator itr = model.getIdentifierTemplates().iterator(); itr.hasNext();){ - IdentifierTemplate resource = itr.next(); - - if( !(resource instanceof IdentifierTemplate)) continue; - if( !cellState.getLabel().equals(resource.getResourceName())) continue; - - filewriter.write(resource.getResourceName()); - if(itr.hasNext()) filewriter.write(", "); + String extension =""; + if(file != null && file.exists()) { + String name = file.getName(); + extension = name.substring(name.lastIndexOf(".")); + } + + if(extension.contains(".model")) saveModel(file); + else { + try (FileWriter filewriter = new FileWriter(file)) { + filewriter.write(toOutputString()); + filewriter.write("services {\n"); + + // serviceNameが変わるまでリソースのリストに追加 + // serviceNameが変わったらキャッシュ + // サービス名とURLとリソースを書き出す + filewriter.write("\tservice " + "SERVICE_NAME" + "{\n"); + filewriter.write("\t\tbaseURL :\n"); + filewriter.write("\t\tresources: "); + + 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 cellState = view.getState(cell); + + // get resource's name + for (Iterator itr = model.getIdentifierTemplates().iterator(); itr.hasNext();){ + IdentifierTemplate resource = itr.next(); + + if( !(resource instanceof IdentifierTemplate)) continue; + if( !cellState.getLabel().equals(resource.getResourceName())) continue; + + filewriter.write(resource.getResourceName()); + if(itr.hasNext()) filewriter.write(", "); + } } } + filewriter.write("\n\t}\n"); + // end loop + filewriter.write("}\n"); + filewriter.close(); } - filewriter.write("\n\t}\n"); - // end loop - filewriter.write("}\n"); - filewriter.close(); } } catch (IOException e) { e.printStackTrace();