diff --git a/AlgebraicDataflowArchitectureModel/models/POS.dtram b/AlgebraicDataflowArchitectureModel/models/POS.dtram new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/POS.dtram diff --git a/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram b/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram new file mode 100644 index 0000000..d9b924c --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/POS.dtram.dtram @@ -0,0 +1,21 @@ +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/src/graphicalrefactor/actions/SaveAsAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java index 1d96d65..e95b848 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java @@ -51,17 +51,29 @@ fc.addChoosableFileFilter(dtram); int rc = fc.showDialog(null, "Save Model File"); - // choose file extentions from a dialog. + // choose a file extension from a dialog. if (rc == JFileChooser.APPROVE_OPTION) { - FileNameExtensionFilter selectedFilter = (FileNameExtensionFilter)fc.getFileFilter(); - String extension = "." + selectedFilter.getExtensions()[0].toString(); + + // if extension filter is filled, then attaching extension by choosing filter. + // but if it's not filled, then using default extension name. + 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); editor.save(); - frame.setTitle(frame.title + " - " + fc.getSelectedFile().getAbsolutePath()); + frame.setTitle(GraphicalRefactor.title + " - " + fc.getSelectedFile().getAbsolutePath()); } } } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index 3aa1250..03ffad4 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -65,7 +65,6 @@ import parser.exceptions.WrongLHSExpression; import parser.exceptions.WrongRHSExpression; import parser.ParserDTRAM; -import parser.ParserDTRAMForWebService; public class Editor { final int PORT_DIAMETER = 8; @@ -165,7 +164,7 @@ // get a file's name String name = file.getName(); - // get a file's extention + // get a file's extension extension = name.substring(name.lastIndexOf(".")); } if(extension.contains(".model")) { @@ -228,14 +227,12 @@ // get a file's name String name = file.getName(); - // get a file's extention + // get a file's extension 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()); diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java index 8391c6b..d4a9470 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java @@ -6,16 +6,16 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.util.Iterator; +import com.mxgraph.model.mxGraphModel; import com.mxgraph.view.mxCellState; import com.mxgraph.view.mxGraph; import com.mxgraph.view.mxGraphView; import algorithms.UpdateConflictCheck; -import models.dataConstraintModel.ChannelGenerator; import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.DataFlowModel; -import models.visualModel.FormulaChannelGenerator; import models.webServices.Service; import models.webServices.WebServicesInfo; import parser.ParserDTRAMForWebService; @@ -48,7 +48,7 @@ */ public class WebServiceEditor extends Editor{ - private WebServicesInfo webServices = null; + private WebServicesInfo webServicesInfo = null; /**-------------------------------------------------------------------------------- * [constructor] @@ -58,8 +58,8 @@ */ public WebServiceEditor(final mxGraph graph) { super(graph); + this.webServicesInfo = new WebServicesInfo(); - this.webServices = new WebServicesInfo(); } /**-------------------------------------------------------------------------------- @@ -118,67 +118,77 @@ @Override public void save() { super.save(); -// if (curFilePath != null) { -// try { -// File file = new File(curFilePath); -// String extension = ""; -// if(file != null && file.exists()) { -// // get a file's name -// String name = file.getName(); -// -// // get a file's extention -// extension = name.substring(name.lastIndexOf(".")); -// } 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.close(); -// } -// } catch (IOException e) { -// e.printStackTrace(); -// } -// } + + // 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(", "); + } + } + } + filewriter.write("\n\t}\n"); + // end loop + filewriter.write("}\n"); + filewriter.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } - - + + + /**-------------------------------------------------------------------------------- + * default + */ + private void constructWebServiceGraph() { + ((mxGraphModel)this.graph.getModel()).clear(); + + Object parent = graph.getDefaultParent(); + this.graph.getModel().beginUpdate(); + + try { + + } + finally { + this.graph.getModel().endUpdate(); + } + + } + /**-------------------------------------------------------------------------------- * setter /**-------------------------------------------------------------------------------- @@ -186,6 +196,6 @@ * @param service */ public void addWebService(final Service service) { - this.webServices.addService(service); + this.webServicesInfo.addService(service); } }