diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/OpenAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/OpenAction.java index 50a0102..2fcfe73 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/OpenAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/OpenAction.java @@ -30,8 +30,8 @@ JFileChooser fc = new JFileChooser(wd); - FileFilter model = new FileNameExtensionFilter("model",".model"); - FileFilter dtram = new FileNameExtensionFilter("dtram", ".dtram"); + FileFilter model = new FileNameExtensionFilter("model","model"); + FileFilter dtram = new FileNameExtensionFilter("dtram", "dtram"); // Adds file filter for supported file format FileFilter defaultFilter = new FileFilter() { diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index cf5040b..3ddc0c5 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -45,13 +45,20 @@ import parser.ExpectedChannel; import parser.ExpectedChannelName; import parser.ExpectedEquals; +import parser.ExpectedFormulaChannel; +import parser.ExpectedGeometry; import parser.ExpectedInOrOutOrRefKeyword; +import parser.ExpectedIoChannel; import parser.ExpectedLeftCurlyBracket; +import parser.ExpectedModel; +import parser.ExpectedNode; import parser.ExpectedRHSExpression; +import parser.ExpectedResource; import parser.ExpectedRightBracket; import parser.ExpectedStateTransition; import parser.Parser; import parser.Parser.TokenStream; +import parser.ParserDTRAM; import parser.WrongLHSExpression; import parser.WrongRHSExpression; @@ -144,8 +151,49 @@ */ public DataFlowModel open(File file) { try { + + String extension =""; + if(file != null && file.exists()) { + //�t�@�C�������擾 + String name = file.getName(); + + //�g���q���擾 + extension = name.substring(name.lastIndexOf(".")); + } + if(extension.contains(".model")) { + openModel(file); + } else { + + ParserDTRAM parserDTRAM = new ParserDTRAM(new BufferedReader(new FileReader(file))); + + try { + model = parserDTRAM.doParseModel(); + graph = constructGraph(model); + parserDTRAM.doParseGeometry(graph); + curFilePath = file.getAbsolutePath(); + curFileName = file.getName(); + if (!UpdateConflictCheck.run(model)) return null; + updateResourceDependencyGraph(model); + return model; + } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutOrRefKeyword + | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression + | WrongRHSExpression | ExpectedRightBracket | ExpectedAssignment | ExpectedModel | ExpectedGeometry | ExpectedNode | ExpectedResource | ExpectedFormulaChannel | ExpectedIoChannel e) { + e.printStackTrace(); + } + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + return null; + } + + public DataFlowModel openModel(File file) { + try { + Parser parser = new Parser(new BufferedReader(new FileReader(file))); - try { + + try { model = parser.doParse(); curFilePath = file.getAbsolutePath(); curFileName = file.getName(); @@ -163,6 +211,7 @@ } return null; } + public void save() { if (curFilePath != null) { @@ -186,18 +235,17 @@ 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(); - + 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"); @@ -213,7 +261,7 @@ 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("node ioc " + state.getLabel() + ":" + x + "," + y + "," + w + "," + h + "\n"); } } } @@ -232,7 +280,6 @@ 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(); diff --git a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java index cf24fc9..77effe9 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java @@ -19,7 +19,7 @@ import models.dataFlowModel.DataflowChannelGenerator; public class Parser { - private BufferedReader reader; + protected BufferedReader reader; public static final String CHANNEL = "channel"; public static final String INIT = "init"; public static final String LEFT_CURLY_BRACKET = "{"; @@ -85,6 +85,9 @@ public static DataflowChannelGenerator parseChannel(TokenStream stream, DataFlowModel model) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { if (!stream.hasNext()) return null; + if (stream.checkNext().equals(RIGHT_CURLY_BRACKET)) { + return null; + } String channelOrInitKeyword = stream.next(); if (!channelOrInitKeyword.equals(CHANNEL)) { if (!channelOrInitKeyword.equals(INIT)) throw new ExpectedChannel(stream.getLine());