diff --git a/AlgebraicDataflowArchitectureModel/.classpath b/AlgebraicDataflowArchitectureModel/.classpath index 58dc636..5d3b090 100644 --- a/AlgebraicDataflowArchitectureModel/.classpath +++ b/AlgebraicDataflowArchitectureModel/.classpath @@ -1,6 +1,6 @@ - + diff --git a/AlgebraicDataflowArchitectureModel/models/POS.dtram b/AlgebraicDataflowArchitectureModel/models/POS.dtram new file mode 100644 index 0000000..dc3d2d1 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/POS.dtram @@ -0,0 +1,27 @@ +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 +} \ No newline at end of file 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/models/WOS.dtram b/AlgebraicDataflowArchitectureModel/models/WOS.dtram new file mode 100644 index 0000000..45f640c --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/WOS.dtram @@ -0,0 +1,25 @@ +model { +channel CIO2 { + out highest(h:Double, reset(v)) == v +} +channel CIO1 { + out temp_f(p:Double, observe(x)) == x +} +channel C1{ + in temp_f(q:Double, conversion(y)) == y + out temp_c(r:Double, conversion(z)) == (z-32) / 1.8 +} +channel C2{ + in temp_f(q:Double, update(y)) == y + out highest(h:Double, update(z)) == if(gt(z, h), z, h) +} +} +geometry { + node c C1:500,200,30,30 + node c C2:500,100,30,30 + node r highest:650,100,80,30 + node r temp_c:650,200,80,30 + node r temp_f:250,100,80,30 + node ioc CIO2:100,300,30,30 + node ioc CIO1:100,100,30,30 +} \ No newline at end of file diff --git a/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model b/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model index 0a14140..2cd84d7 100644 --- a/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model +++ b/AlgebraicDataflowArchitectureModel/models/WeatherObservationSystem.model @@ -1,17 +1,14 @@ -channel CIO1 { - out temp_f(p:Double, observe(x)) == x -} - channel CIO2 { out highest(h:Double, reset(v)) == v } - +channel CIO1 { + out temp_f(p:Double, observe(x)) == x +} channel C1{ in temp_f(q:Double, conversion(y)) == y out temp_c(r:Double, conversion(z)) == (z-32) / 1.8 } - channel C2{ in temp_f(q:Double, update(y)) == y out highest(h:Double, update(z)) == if(gt(z, h), z, h) -} \ No newline at end of file +} diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java index 05a90ca..d8ce78e 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/SaveAsAction.java @@ -35,10 +35,9 @@ // Adds file filter for supported file format FileFilter defaultFilter = new FileFilter() { - public boolean accept(File file) { String lcase = file.getName().toLowerCase(); - return lcase.endsWith(".model"); + return lcase.endsWith(".model"); } @Override @@ -46,15 +45,33 @@ return null; } }; + fc.addChoosableFileFilter(defaultFilter); fc.addChoosableFileFilter(model); fc.addChoosableFileFilter(dtram); int rc = fc.showDialog(null, "Save Model File"); + + // 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 = ""; + if(fc.getFileFilter() instanceof FileNameExtensionFilter) { + FileNameExtensionFilter selectedFilter = (FileNameExtensionFilter)fc.getFileFilter(); + extension = "." + selectedFilter.getExtensions()[0].toString(); + } + lastDir = fc.getSelectedFile().getParent(); - editor.setCurFilePath(fc.getSelectedFile().getAbsolutePath()); + + String fileName = fc.getSelectedFile().getAbsolutePath() + extension; + + // checking file duplicates + if(! (fc.getSelectedFile().exists())) editor.setCurFilePath(fileName); + + // overwriting file 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 9a0a8a0..b8e8984 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -45,37 +45,40 @@ import models.dataFlowModel.ResourceDependencyGraph; import models.dataFlowModel.ResourceNode; import models.visualModel.FormulaChannelGenerator; -import parser.ExpectedAssignment; -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.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedFormulaChannel; +import parser.exceptions.ExpectedGeometry; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedIoChannel; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedModel; +import parser.exceptions.ExpectedNode; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedResource; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; import parser.ParserDTRAM; -import parser.WrongLHSExpression; -import parser.WrongRHSExpression; public class Editor { final int PORT_DIAMETER = 8; final int PORT_RADIUS = PORT_DIAMETER / 2; - private mxGraph graph = null; - private String curFileName = null; - private String curFilePath = null; - private DataFlowModel model = null; - private ResourceDependencyGraph resourceDependencyGraph = null; - private ArrayList codes = null; + protected String curFileName = null; + protected String curFilePath = null; + protected ArrayList codes = null; + + protected DataFlowModel model = null; + protected mxGraph graph = null; + + protected ResourceDependencyGraph resourceDependencyGraph = null; + public Editor(mxGraph graph) { this.graph = graph; @@ -158,18 +161,16 @@ String extension =""; if(file != null && file.exists()) { - //�t�@�C�������擾 + // get a file's name String name = file.getName(); - //�g���q���擾 + // get a file's extension 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); @@ -215,70 +216,35 @@ } return null; } - + /**-------------------------------------------------------------------------------- + * save + /**-------------------------------------------------------------------------------- + * + */ public void save() { if (curFilePath != null) { try { File file = new File(curFilePath); String extension = ""; if(file != null && file.exists()) { - //�t�@�C�������擾 + // get a file's name String name = file.getName(); - //�g���q���擾 + // 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()); - 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 @@ -376,7 +392,7 @@ return graph; } - + public void setDAGLayout() { Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); @@ -588,12 +604,14 @@ public void setChannelCode(DataflowChannelGenerator ch, String code) { ch.setSourceText(code); - TokenStream stream = new TokenStream(); + TokenStream stream = new Parser.TokenStream(); + Parser parser = new Parser(stream); + for (String line: code.split("\n")) { stream.addLine(line); } try { - DataflowChannelGenerator ch2 = Parser.parseChannel(stream, getModel()); + DataflowChannelGenerator ch2 = parser.parseChannel(getModel()); for (ChannelMember chm2: ch2.getInputChannelMembers()) { for (ChannelMember chm: ch.getInputChannelMembers()) { if (chm2.getIdentifierTemplate() == chm.getIdentifierTemplate()) { diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java index 688631e..a4d1d06 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java @@ -1,18 +1,13 @@ package graphicalrefactor.views; -import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.awt.GridLayout; -import java.awt.Panel; import java.awt.Rectangle; import java.util.EventObject; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JComboBox; -import javax.swing.JEditorPane; -import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -34,30 +29,30 @@ import models.dataFlowModel.PushPullAttribute; import models.dataFlowModel.PushPullValue; import models.visualModel.FormulaChannelGenerator; -import parser.ExpectedRightBracket; import parser.Parser; import parser.Parser.TokenStream; +import parser.exceptions.ExpectedRightBracket; public class GraphicalRefactorCellEditor implements mxICellEditor { public int DEFAULT_MIN_WIDTH = 70; public int DEFAULT_MIN_HEIGHT = 30; public double DEFAULT_MINIMUM_EDITOR_SCALE = 1; - + protected double minimumEditorScale = DEFAULT_MINIMUM_EDITOR_SCALE; protected int minimumWidth = DEFAULT_MIN_WIDTH; protected int minimumHeight = DEFAULT_MIN_HEIGHT; - + private Object editingCell; private EventObject trigger; private JComboBox comboBox; private mxGraphComponent graphComponent; private Editor editor; - + public GraphicalRefactorCellEditor(mxGraphComponent graphComponent, Editor editor) { this.graphComponent = graphComponent; this.editor = editor; } - + @Override public Object getEditingCell() { return editingCell; @@ -68,7 +63,7 @@ if (editingCell != null) { stopEditing(true); } - + if (!graphComponent.getGraph().getModel().isEdge(cell)) { DataFlowModel model = editor.getModel(); DataflowChannelGenerator ch = (DataflowChannelGenerator) model.getChannelGenerator((String) ((mxCell) cell).getValue()); @@ -79,51 +74,54 @@ return; } } - + if(ch instanceof FormulaChannelGenerator) { - + JPanel panel = new JPanel(); JLabel label1 = new JLabel("Formula: "); JLabel label2 = new JLabel("Source: "); GridBagLayout layout = new GridBagLayout(); panel.setLayout(layout); GridBagConstraints gbc = new GridBagConstraints(); - + gbc.gridx = 0; gbc.gridy = 0; layout.setConstraints(label1, gbc); panel.add(label1); - + gbc.gridx = 1; gbc.gridy = 0; JTextField formulaText = new JTextField(((FormulaChannelGenerator) ch).getFormula(),15); layout.setConstraints(formulaText, gbc); panel.add(formulaText); - + gbc.gridx = 0; gbc.gridy = 1; layout.setConstraints(label2, gbc); panel.add(label2); - + gbc.gridx = 1; gbc.gridy = 1; JTextArea textArea = new JTextArea(ch.getSourceText(),7,15); textArea.setEditable(false); layout.setConstraints(textArea, gbc); panel.add(textArea); - + int r = JOptionPane.showConfirmDialog( - null, // �I�[�i�[�E�B���h�E - panel, // ���b�Z�[�W - "Edit Formula Channel", // �E�B���h�E�^�C�g�� - JOptionPane.OK_CANCEL_OPTION, // �I�v�V�����i�{�^���̎�ށj - JOptionPane.QUESTION_MESSAGE); // ���b�Z�[�W�^�C�v�i�A�C�R���̎�ށj + null, // owner window + panel, // message + "Edit Formula Channel", // window's title + JOptionPane.OK_CANCEL_OPTION, // option (button types) + JOptionPane.QUESTION_MESSAGE); // message type (icon types) if(r == JOptionPane.OK_OPTION) { + TokenStream stream = new Parser.TokenStream(); + Parser parser = new Parser(stream); + String formula = formulaText.getText(); - TokenStream stream = new TokenStream(); stream.addLine(formula.split(Parser.EQUALS)[1]); + try { - Expression exp = Parser.parseTerm(stream, editor.getModel()); + Expression exp = parser.parseTerm(stream, editor.getModel()); ((FormulaChannelGenerator) ch).setFormula(formula); ((FormulaChannelGenerator) ch).setFormulaTerm(exp); } catch (ExpectedRightBracket e) { @@ -131,24 +129,24 @@ } } }else { - JPanel panel = new JPanel(); - JTextArea textArea = new JTextArea(ch.getSourceText(), 10, 20); - panel.add(textArea); -// JEditorPane panel = new JEditorPane("text/plain", ch.toString()); -// panel.setEditable(true); - int ret = JOptionPane.showConfirmDialog(null, panel, "Channel Code", JOptionPane.OK_CANCEL_OPTION); - if (ret == JOptionPane.OK_OPTION) { - editor.setChannelCode(ch, textArea.getText()); - } + JPanel panel = new JPanel(); + JTextArea textArea = new JTextArea(ch.getSourceText(), 10, 20); + panel.add(textArea); + // JEditorPane panel = new JEditorPane("text/plain", ch.toString()); + // panel.setEditable(true); + int ret = JOptionPane.showConfirmDialog(null, panel, "Channel Code", JOptionPane.OK_CANCEL_OPTION); + if (ret == JOptionPane.OK_OPTION) { + editor.setChannelCode(ch, textArea.getText()); } - return; } + return; + } mxCellState state = graphComponent.getGraph().getView().getState(cell); if (state != null && state.getLabel() != null && !state.getLabel().equals("")) { editingCell = cell; trigger = evt; - + double scale = Math.max(minimumEditorScale, graphComponent.getGraph().getView().getScale()); Object value = graphComponent.getGraph().getModel().getValue(cell); if (value != null && value instanceof PushPullAttribute) { @@ -203,7 +201,7 @@ graphComponent.requestFocusInWindow(); } } - + public String getCurrentValue() { return (String) comboBox.getSelectedItem(); } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java index 1e29a75..7c0d477 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java @@ -4,10 +4,9 @@ import javax.swing.JMenuBar; import graphicalrefactor.actions.CircleLayoutAction; -import graphicalrefactor.actions.DeleteAction; import graphicalrefactor.actions.DAGLayoutAction; +import graphicalrefactor.actions.DeleteAction; import graphicalrefactor.actions.ExitAction; -import graphicalrefactor.actions.OpenAction; import graphicalrefactor.actions.JavaPrototypeGenerateAction; import graphicalrefactor.actions.JerseyPrototypeGenerateAction; import graphicalrefactor.actions.NewChannelAction; @@ -15,6 +14,7 @@ import graphicalrefactor.actions.NewIOChannelAction; import graphicalrefactor.actions.NewModelAction; import graphicalrefactor.actions.NewResourceAction; +import graphicalrefactor.actions.OpenAction; import graphicalrefactor.actions.SaveAction; import graphicalrefactor.actions.SaveAsAction; import graphicalrefactor.actions.TreeLayoutAction; @@ -24,7 +24,7 @@ public class GraphicalRefactorMenuBar extends JMenuBar { private static final long serialVersionUID = 4811536194182272888L; - + private GraphicalRefactor graphicalModelRefactor = null; private NewResourceAction newResourceAction = null; private NewChannelAction newChannelAction = null; @@ -36,15 +36,18 @@ private DAGLayoutAction dagLayoutAction = null; private TreeLayoutAction treeLayoutAction = null; private CircleLayoutAction circleLayoutAction = null; - + public GraphicalRefactorMenuBar(GraphicalRefactor graphicalModelRefactor) { this.graphicalModelRefactor = graphicalModelRefactor; JMenu newMenu = new JMenu("New"); + newMenu.add(new NewModelAction(graphicalModelRefactor)); + newMenu.add(newResourceAction = new NewResourceAction(graphicalModelRefactor.getEditor())); newMenu.add(newChannelAction = new NewChannelAction(graphicalModelRefactor.getEditor())); newMenu.add(newIOChannelAction = new NewIOChannelAction(graphicalModelRefactor.getEditor())); newMenu.add(newFormulaChannelAction = new NewFormulaChannelAction(graphicalModelRefactor.getEditor())); + JMenu menu = null; menu = add(new JMenu("File")); menu.add(newMenu); @@ -54,20 +57,20 @@ menu.add(new SaveAsAction(graphicalModelRefactor)); menu.addSeparator(); menu.add(new ExitAction()); - + menu = add(new JMenu("Edit")); menu.add(deleteAction = new DeleteAction(graphicalModelRefactor.getEditor())); - - + + menu = add(new JMenu("Layout")); menu.add(dagLayoutAction = new DAGLayoutAction(graphicalModelRefactor.getEditor())); menu.add(treeLayoutAction = new TreeLayoutAction(graphicalModelRefactor.getEditor())); menu.add(circleLayoutAction = new CircleLayoutAction(graphicalModelRefactor.getEditor())); - + menu = add(new JMenu("View")); menu.add(new ZoomInAction(graphicalModelRefactor.getGraphComponent())); menu.add(new ZoomOutAction(graphicalModelRefactor.getGraphComponent())); - + menu = add(new JMenu("Generate")); menu.add(javaPrototypeGenerateAction = new JavaPrototypeGenerateAction(graphicalModelRefactor.getEditor())); menu.add(jerseyPrototypeGenerateAction = new JerseyPrototypeGenerateAction(graphicalModelRefactor.getEditor())); diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedAssignment.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedAssignment.java deleted file mode 100644 index 2b7a495..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedAssignment.java +++ /dev/null @@ -1,8 +0,0 @@ -package parser; - -public class ExpectedAssignment extends ParseException { - - public ExpectedAssignment(int line) { - super(line); - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannel.java deleted file mode 100644 index e80a4b8..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannel.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedChannel extends ParseException { - - public ExpectedChannel(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannelName.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannelName.java deleted file mode 100644 index e802150..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedChannelName.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedChannelName extends ParseException { - - public ExpectedChannelName(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedEquals.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedEquals.java deleted file mode 100644 index 89640fd..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedEquals.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedEquals extends ParseException { - - public ExpectedEquals(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java deleted file mode 100644 index 420655e..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedFormulaChannel extends ParseException { - - public ExpectedFormulaChannel(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java deleted file mode 100644 index b7927e0..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedGeometry extends ParseException { - - public ExpectedGeometry(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedInOrOutOrRefKeyword.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedInOrOutOrRefKeyword.java deleted file mode 100644 index bb10522..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedInOrOutOrRefKeyword.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedInOrOutOrRefKeyword extends ParseException { - - public ExpectedInOrOutOrRefKeyword(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java deleted file mode 100644 index d6885fd..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedIoChannel extends ParseException { - - public ExpectedIoChannel(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedLeftCurlyBracket.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedLeftCurlyBracket.java deleted file mode 100644 index 7f14ae0..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedLeftCurlyBracket.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedLeftCurlyBracket extends ParseException { - - public ExpectedLeftCurlyBracket(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java deleted file mode 100644 index d3758e3..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedModel extends ParseException { - - public ExpectedModel(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java deleted file mode 100644 index c82a553..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedNode extends ParseException { - - public ExpectedNode(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRHSExpression.java deleted file mode 100644 index 2f315a5..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRHSExpression.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedRHSExpression extends ParseException { - - public ExpectedRHSExpression(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java deleted file mode 100644 index b462e21..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedResource extends ParseException { - - public ExpectedResource(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRightBracket.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRightBracket.java deleted file mode 100644 index 34ac65b..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedRightBracket.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedRightBracket extends ParseException { - - public ExpectedRightBracket(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedStateTransition.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedStateTransition.java deleted file mode 100644 index 0a50c12..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedStateTransition.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class ExpectedStateTransition extends ParseException { - - public ExpectedStateTransition(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParseException.java b/AlgebraicDataflowArchitectureModel/src/parser/ParseException.java deleted file mode 100644 index c9dcf30..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/ParseException.java +++ /dev/null @@ -1,10 +0,0 @@ -package parser; - -public class ParseException extends Exception { - protected int line; - - public ParseException(int line) { - super("at line " + (line + 1)); - this.line = line; - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java index 77effe9..96eac7b 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java @@ -1,5 +1,6 @@ package parser; +import java.awt.image.DataBufferDouble; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; @@ -17,9 +18,21 @@ import models.dataConstraintModel.StateTransition; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; -public class Parser { - protected BufferedReader reader; +public class Parser { + protected TokenStream stream; + public static final String CHANNEL = "channel"; public static final String INIT = "init"; public static final String LEFT_CURLY_BRACKET = "{"; @@ -46,14 +59,14 @@ public static final String ASSIGNMENT = "="; public static final String COMMA = ","; public static final String COLON = ":"; - - public Parser(BufferedReader reader) { - this.reader = reader; + + + public Parser(final TokenStream stream) { + this.stream = stream; } - - public DataFlowModel doParse() - throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { - TokenStream stream = new TokenStream(); + + public Parser(final BufferedReader reader) { + this.stream = new TokenStream(); try { String line; while ((line = reader.readLine()) != null) { @@ -62,17 +75,19 @@ reader.close(); } catch (IOException e) { e.printStackTrace(); - return null; } - - return parseDataFlowModel(stream); + } + + public DataFlowModel doParse() + throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { + return parseDataFlowModel(); } - public static DataFlowModel parseDataFlowModel(TokenStream stream) + public DataFlowModel parseDataFlowModel() throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { DataFlowModel model = new DataFlowModel(); DataflowChannelGenerator channel; - while ((channel = parseChannel(stream, model)) != null) { + while ((channel = parseChannel(model)) != null) { if (channel.getInputChannelMembers().size() == 0) { model.addIOChannelGenerator(channel); } else { @@ -82,41 +97,47 @@ return model; } - public static DataflowChannelGenerator parseChannel(TokenStream stream, DataFlowModel model) - throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { + public DataflowChannelGenerator parseChannel(DataFlowModel model) + throws + ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment, + ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, + ExpectedChannel, ExpectedChannelName, ExpectedInOrOutOrRefKeyword, + ExpectedStateTransition, ExpectedEquals + { if (!stream.hasNext()) return null; - if (stream.checkNext().equals(RIGHT_CURLY_BRACKET)) { - 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()); - parseInit(stream, model); + parseInit(model); channelOrInitKeyword = stream.next(); } if (!stream.hasNext()) throw new ExpectedChannelName(stream.getLine()); + String channelName = stream.next(); if (channelName.equals(LEFT_CURLY_BRACKET)) throw new ExpectedChannelName(stream.getLine()); - + int fromLine = stream.getLine(); DataflowChannelGenerator channel = new DataflowChannelGenerator(channelName); String leftBracket = stream.next(); if (!leftBracket.equals(LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); + String inOrOutOrRef = null; while (stream.hasNext() && !(inOrOutOrRef = stream.next()).equals(RIGHT_CURLY_BRACKET)) { ChannelMember channelMember = null; if (inOrOutOrRef.equals(IN)) { - channelMember = parseChannelMember(stream, model, inOrOutOrRef); + channelMember = parseChannelMember(model, inOrOutOrRef); if (channelMember != null) { channel.addChannelMemberAsInput(channelMember); } } else if (inOrOutOrRef.equals(OUT)) { - channelMember = parseChannelMember(stream, model, inOrOutOrRef); + channelMember = parseChannelMember(model, inOrOutOrRef); if (channelMember != null) { channel.addChannelMemberAsOutput(channelMember); } } else if (inOrOutOrRef.equals(REF)) { - channelMember = parseChannelMember(stream, model, inOrOutOrRef); + channelMember = parseChannelMember(model, inOrOutOrRef); if (channelMember != null) { channel.addChannelMemberAsReference(channelMember); } @@ -129,7 +150,10 @@ return channel; } - public static void parseInit(TokenStream stream, DataFlowModel model) throws ExpectedLeftCurlyBracket, ExpectedAssignment, ExpectedRHSExpression, WrongRHSExpression, ExpectedRightBracket { + public void parseInit(DataFlowModel model) + throws + ExpectedLeftCurlyBracket, ExpectedAssignment, ExpectedRHSExpression, WrongRHSExpression, ExpectedRightBracket + { String leftBracket = stream.next(); if (!leftBracket.equals(LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); String resourceName = null; @@ -140,42 +164,45 @@ identifier = new IdentifierTemplate(resourceName, 0); model.addIdentifierTemplate(identifier); } - + if (!stream.hasNext()) throw new ExpectedAssignment(stream.getLine()); String colon = stream.next(); if (!colon.equals(COLON)) throw new ExpectedAssignment(stream.getLine()); if (!stream.hasNext()) throw new ExpectedAssignment(stream.getLine()); String equals = stream.next(); if (!equals.equals(ASSIGNMENT)) throw new ExpectedAssignment(stream.getLine()); - + int toLine = stream.getLine(); Expression rightTerm = null; if (!stream.hasNext()) throw new ExpectedRHSExpression(stream.getLine()); rightTerm = parseTerm(stream, model); if (rightTerm == null) throw new WrongRHSExpression(stream.getLine()); - + identifier.setInitialValue(rightTerm); identifier.setInitText(stream.getSourceText(fromLine, toLine)); } } - public static ChannelMember parseChannelMember(TokenStream stream, DataFlowModel model, String inOrOutOrRef) - throws ExpectedRightBracket, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression { + public ChannelMember parseChannelMember(DataFlowModel model, final String inOrOutOrRef) + throws + ExpectedRightBracket, ExpectedStateTransition, ExpectedEquals, + ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression + { if (!stream.hasNext()) throw new ExpectedStateTransition(stream.getLine()); Expression leftTerm = parseTerm(stream, model); if (leftTerm == null || !(leftTerm instanceof Term)) throw new WrongLHSExpression(stream.getLine()); Expression rightTerm = null; - + if (!inOrOutOrRef.equals(REF)) { if (!stream.hasNext()) throw new ExpectedEquals(stream.getLine()); String equals = stream.next(); if (!equals.equals(EQUALS)) throw new ExpectedEquals(stream.getLine()); - + if (!stream.hasNext()) throw new ExpectedRHSExpression(stream.getLine()); rightTerm = parseTerm(stream, model); if (rightTerm == null) throw new WrongRHSExpression(stream.getLine()); } - + String resourceName = ((Term) leftTerm).getSymbol().getName(); IdentifierTemplate identifier = model.getIdentifierTemplate(resourceName); if (identifier == null) { @@ -212,7 +239,9 @@ return channelMember; } - public static Expression parseTerm(TokenStream stream, DataFlowModel model) throws ExpectedRightBracket { + public Expression parseTerm(TokenStream stream, DataFlowModel model) + throws ExpectedRightBracket + { ArrayList expressions = new ArrayList<>(); ArrayList operators = new ArrayList<>(); String operator = null; @@ -343,17 +372,35 @@ return firstMonomial; } + /**-------------------------------------------------------------------------------- + * [protected] + /**-------------------------------------------------------------------------------- + * checking the token has a token. + * + * @param token + * @param specificTokenName + */ + protected Boolean isMatchKeyword(final String token, final String specificTokenName) { + if(token == null) return false; + if(specificTokenName == null) return false; + return token.equals(specificTokenName); + } + + /**-------------------------------------------------------------------------------- + * [inner class] + * "TokenStream" has a token what is read from description of "Architecture Language Model". + */ public static class TokenStream { private ArrayList> tokens = new ArrayList<>(); private ArrayList lines = new ArrayList<>(); private int line = 0; private int n = 0; - + public TokenStream() { line = 0; n = 0; } - + public void addLine(String line) { lines.add(line); line = line.trim(); @@ -393,8 +440,8 @@ RIGHT_CURLY_BRACKET, RIGHT_CURLY_BRACKET_REGX)); } - - private ArrayList splitBy(List tokens, String delimiter, String delimiterRegx) { + + private ArrayList splitBy(final List tokens, final String delimiter, final String delimiterRegx) { ArrayList newTokens = new ArrayList<>(); for (String token: tokens) { String[] splitTokens = token.split(delimiterRegx); @@ -415,7 +462,7 @@ } return newTokens; } - + public String next() { if (line >= tokens.size()) return null; while (n >= tokens.get(line).size()) { @@ -427,7 +474,7 @@ n++; return token; } - + public String checkNext() { if (line >= tokens.size()) return null; while (n >= tokens.get(line).size()) { @@ -437,7 +484,7 @@ } return tokens.get(line).get(n); } - + public boolean hasNext() { if (line >= tokens.size()) return false; while (n >= tokens.get(line).size()) { @@ -447,11 +494,11 @@ } return true; } - + public int getLine() { return line; } - + public String getSourceText(int from, int to) { String text = ""; for (int l = from; l <= to; l++) { diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java index 0012395..c2ab83b 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java @@ -10,145 +10,166 @@ import com.mxgraph.view.mxGraph; import com.mxgraph.view.mxGraphView; - import models.dataFlowModel.DataFlowModel; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedFormulaChannel; +import parser.exceptions.ExpectedGeometry; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedIoChannel; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedModel; +import parser.exceptions.ExpectedNode; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedResource; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class ParserDTRAM extends Parser { + private static final String MODEL_GROUP = "model"; + private static final String GEOMETRY_GROUP = "geometry"; + private static final String GEOMETORY_NODE = "node"; + private static final String RESOURCE_NODE = "r"; + private static final String CHANNEL_NODE = "c"; + private static final String FORMULA_CHANNEL_NODE = "fc"; + private static final String IO_CHANNEL_NODE = "ioc"; - private static TokenStream stream; - - public static final String MODEL = "model"; - public static final String GEOMETRY = "geometry"; - public static final String NODE = "node"; - public static final String RESOURCE = "r"; - public static final String CHANNEL = "c"; - public static final String FORMULA_CHANNEL = "fc"; - public static final String IO_CHANNEL = "ioc"; - - - public ParserDTRAM(BufferedReader reader) { + /**-------------------------------------------------------------------------------- + * [Constructor] + /**-------------------------------------------------------------------------------- + * + * @param stream + */ + public ParserDTRAM(final TokenStream stream) { + super(stream); + } + /**-------------------------------------------------------------------------------- + * + * @param reader + */ + public ParserDTRAM(final BufferedReader reader) { super(reader); } + /**-------------------------------------------------------------------------------- + * [public] + /**-------------------------------------------------------------------------------- + * + * @param reader + */ public DataFlowModel doParseModel() throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { - stream = new TokenStream(); - try { - String line; - while ((line = reader.readLine()) != null) { - stream.addLine(line); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - DataFlowModel model = parseModel(stream); + DataFlowModel model = getParsedModel(); return model; } + /**-------------------------------------------------------------------------------- + * + * @param graph + */ public void doParseGeometry(mxGraph graph) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry, ExpectedNode, ExpectedResource, ExpectedFormulaChannel, ExpectedIoChannel{ - parseGeometry(stream, graph); + parseGeometry(graph); } - public static DataFlowModel parseModel(TokenStream stream) + /**-------------------------------------------------------------------------------- + * [private] + /**-------------------------------------------------------------------------------- + * + * @param stream + */ + private DataFlowModel getParsedModel() throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { - if (!stream.hasNext()) { - return null; - } + if (!stream.hasNext()) throw new NullPointerException(); String modelKeyword = stream.next(); - if (!modelKeyword.equals(MODEL)) { - throw new ExpectedModel(stream.getLine()); - } - - if (!stream.hasNext()) { - throw new ExpectedModel(stream.getLine()); - } - + if (!modelKeyword.equals(MODEL_GROUP)) throw new ExpectedModel(stream.getLine()); + if (!stream.hasNext()) throw new ExpectedModel(stream.getLine()); + String leftBracket = stream.next(); - if (!leftBracket.equals(LEFT_CURLY_BRACKET)) { - throw new ExpectedLeftCurlyBracket(stream.getLine()); - } - - DataFlowModel model = Parser.parseDataFlowModel(stream); - + if (!leftBracket.equals(LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); + + DataFlowModel model = parseDataFlowModel(); + String rightBracket = stream.next(); - if(!rightBracket.equals(RIGHT_CURLY_BRACKET)) { - throw new ExpectedRightBracket(stream.getLine()); - } + if(!rightBracket.equals(RIGHT_CURLY_BRACKET))throw new ExpectedRightBracket(stream.getLine()); + return model; } - public static void parseGeometry(TokenStream stream, mxGraph graph) + /**-------------------------------------------------------------------------------- + * change graph's geometries from "DTRAM" file. + * @param stream + * @param graph + */ + private void parseGeometry(mxGraph graph) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment,ExpectedModel, ExpectedGeometry, ExpectedNode, ExpectedResource, ExpectedFormulaChannel, ExpectedIoChannel { - - String geometry = stream.next(); - if (!geometry.equals(GEOMETRY)) { - throw new ExpectedGeometry(stream.getLine()); - } + if (!isMatchKeyword(stream.next(), GEOMETRY_GROUP)) throw new ExpectedGeometry(stream.getLine()); - String leftBracket = stream.next(); - if(!leftBracket.equals(LEFT_CURLY_BRACKET)) { - throw new ExpectedLeftCurlyBracket(stream.getLine()); - } - + if (!isMatchKeyword(stream.next(), LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); + String node = stream.next(); - while (node.equals(NODE)) { + while (node.equals(GEOMETORY_NODE)) { + String rOrFcOrIocOrC = stream.next(); - if (!rOrFcOrIocOrC.equals(RESOURCE) &&!rOrFcOrIocOrC.equals(FORMULA_CHANNEL) &&!rOrFcOrIocOrC.equals(IO_CHANNEL) &&!rOrFcOrIocOrC.equals(CHANNEL)) { + if (!rOrFcOrIocOrC.equals(RESOURCE_NODE) + && !rOrFcOrIocOrC.equals(FORMULA_CHANNEL_NODE) + && !rOrFcOrIocOrC.equals(CHANNEL_NODE) + && !rOrFcOrIocOrC.equals(IO_CHANNEL_NODE)) throw new ExpectedNode(stream.getLine()); - } - + String name = stream.next(); - - String colon = stream.next(); - + + if (!isMatchKeyword(stream.next(), COLON)) throw new ExpectedAssignment(stream.getLine()); + String x = stream.next(); - int xC = Integer.parseInt(x); // C = Coordinate(���W) - - String comma1 = stream.next(); - + int xC = Integer.parseInt(x); // C = Coordinate(x,y,w,h) + + if (!isMatchKeyword(stream.next(), COMMA))throw new ExpectedAssignment(stream.getLine()); + String y = stream.next(); int yC = Integer.parseInt(y); - - String comma2 = stream.next(); - + + if (!isMatchKeyword(stream.next(), COMMA))throw new ExpectedAssignment(stream.getLine()); + String w = stream.next(); int wC = Integer.parseInt(w); - - String comma3 = stream.next(); - + + if (!isMatchKeyword(stream.next(), COMMA))throw new ExpectedAssignment(stream.getLine()); + String h = stream.next(); int hC = Integer.parseInt(h); - + Object root = graph.getDefaultParent(); mxIGraphModel graphModel = graph.getModel(); for (int i = 0; i < graph.getModel().getChildCount(root); i++) { + Object cell = graph.getModel().getChildAt(root, i); - if (graph.getModel().isVertex(cell)) { - mxGeometry geom = (mxGeometry) ((mxCell) cell).getGeometry().clone(); - mxGraphView view = graph.getView(); - mxCellState state = view.getState(cell); - if (name.equals(state.getLabel())){ - geom.setX(xC); - geom.setY(yC); - graphModel.setGeometry(cell, geom); - } - } + 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); } node = stream.next(); } - if (!node.equals(RIGHT_CURLY_BRACKET)) { - throw new ExpectedRightBracket(stream.getLine()); - } + + if (!node.equals(RIGHT_CURLY_BRACKET)) throw new ExpectedRightBracket(stream.getLine()); } } - diff --git a/AlgebraicDataflowArchitectureModel/src/parser/WrongLHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/WrongLHSExpression.java deleted file mode 100644 index 0d99ec1..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/WrongLHSExpression.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class WrongLHSExpression extends ParseException { - - public WrongLHSExpression(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/WrongRHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/WrongRHSExpression.java deleted file mode 100644 index 9c52885..0000000 --- a/AlgebraicDataflowArchitectureModel/src/parser/WrongRHSExpression.java +++ /dev/null @@ -1,9 +0,0 @@ -package parser; - -public class WrongRHSExpression extends ParseException { - - public WrongRHSExpression(int line) { - super(line); - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedAssignment.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedAssignment.java new file mode 100644 index 0000000..90a6c3e --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedAssignment.java @@ -0,0 +1,8 @@ +package parser.exceptions; + +public class ExpectedAssignment extends ParseException { + + public ExpectedAssignment(int line) { + super(line); + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannel.java new file mode 100644 index 0000000..385248a --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannel.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedChannel extends ParseException { + + public ExpectedChannel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannelName.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannelName.java new file mode 100644 index 0000000..72d0336 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedChannelName.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedChannelName extends ParseException { + + public ExpectedChannelName(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedEquals.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedEquals.java new file mode 100644 index 0000000..ed322d8 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedEquals.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedEquals extends ParseException { + + public ExpectedEquals(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedFormulaChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedFormulaChannel.java new file mode 100644 index 0000000..e1e9f2b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedFormulaChannel.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedFormulaChannel extends ParseException { + + public ExpectedFormulaChannel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedGeometry.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedGeometry.java new file mode 100644 index 0000000..1521507 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedGeometry.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedGeometry extends ParseException { + + public ExpectedGeometry(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedInOrOutOrRefKeyword.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedInOrOutOrRefKeyword.java new file mode 100644 index 0000000..a44a604 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedInOrOutOrRefKeyword.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedInOrOutOrRefKeyword extends ParseException { + + public ExpectedInOrOutOrRefKeyword(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedIoChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedIoChannel.java new file mode 100644 index 0000000..fba4cc7 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedIoChannel.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedIoChannel extends ParseException { + + public ExpectedIoChannel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedLeftCurlyBracket.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedLeftCurlyBracket.java new file mode 100644 index 0000000..30f92b0 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedLeftCurlyBracket.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedLeftCurlyBracket extends ParseException { + + public ExpectedLeftCurlyBracket(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedModel.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedModel.java new file mode 100644 index 0000000..222522a --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedModel.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedModel extends ParseException { + + public ExpectedModel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedNode.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedNode.java new file mode 100644 index 0000000..b3af50c --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedNode.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedNode extends ParseException { + + public ExpectedNode(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRHSExpression.java new file mode 100644 index 0000000..994bf77 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRHSExpression.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedRHSExpression extends ParseException { + + public ExpectedRHSExpression(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedResource.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedResource.java new file mode 100644 index 0000000..dd5f00a --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedResource.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedResource extends ParseException { + + public ExpectedResource(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRightBracket.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRightBracket.java new file mode 100644 index 0000000..627c57b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedRightBracket.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedRightBracket extends ParseException { + + public ExpectedRightBracket(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedStateTransition.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedStateTransition.java new file mode 100644 index 0000000..02d27b4 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ExpectedStateTransition.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class ExpectedStateTransition extends ParseException { + + public ExpectedStateTransition(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ParseException.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ParseException.java new file mode 100644 index 0000000..be5aade --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/ParseException.java @@ -0,0 +1,10 @@ +package parser.exceptions; + +public class ParseException extends Exception { + protected int line; + + public ParseException(int line) { + super("at line " + (line + 1)); + this.line = line; + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongLHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongLHSExpression.java new file mode 100644 index 0000000..0ed087a --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongLHSExpression.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class WrongLHSExpression extends ParseException { + + public WrongLHSExpression(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongRHSExpression.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongRHSExpression.java new file mode 100644 index 0000000..0a82a6c --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/WrongRHSExpression.java @@ -0,0 +1,9 @@ +package parser.exceptions; + +public class WrongRHSExpression extends ParseException { + + public WrongRHSExpression(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedBaseURL.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedBaseURL.java new file mode 100644 index 0000000..1136029 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedBaseURL.java @@ -0,0 +1,11 @@ +package parser.exceptions.webService; + +import parser.exceptions.ParseException; + +public class ExpectedBaseURL extends ParseException{ + + public ExpectedBaseURL(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedResources.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedResources.java new file mode 100644 index 0000000..ec01cf1 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedResources.java @@ -0,0 +1,11 @@ +package parser.exceptions.webService; + +import parser.exceptions.ParseException; + +public class ExpectedResources extends ParseException{ + + public ExpectedResources(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedWebService.java b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedWebService.java new file mode 100644 index 0000000..29e8557 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/exceptions/webService/ExpectedWebService.java @@ -0,0 +1,11 @@ +package parser.exceptions.webService; + +import parser.exceptions.ParseException; + +public class ExpectedWebService extends ParseException{ + + public ExpectedWebService(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java index bd733d1..6791346 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java @@ -11,6 +11,17 @@ import code.ast.TypeDeclaration; import models.dataFlowModel.*; import parser.*; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class CodeGeneratorTest { public static void main(String[] args) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java index b02dbb5..8bb75ca 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java @@ -9,13 +9,24 @@ import models.Node; import models.dataFlowModel.*; import parser.*; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class DataStorageDecisionTest { public static void main(String[] args) { File file = new File("models/POS2.model"); try { Parser parser = new Parser(new BufferedReader(new FileReader(file))); - DataFlowModel model; + DataFlowModel model = null; try { model = parser.doParse(); System.out.println(model); diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java index 6682f4c..feed8ab 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java @@ -8,18 +8,18 @@ import algorithms.NecessityOfStoringResourceStates; import models.Node; import models.dataFlowModel.*; -import parser.ExpectedAssignment; -import parser.ExpectedChannel; -import parser.ExpectedChannelName; -import parser.ExpectedEquals; -import parser.ExpectedInOrOutOrRefKeyword; -import parser.ExpectedLeftCurlyBracket; -import parser.ExpectedRHSExpression; -import parser.ExpectedRightBracket; -import parser.ExpectedStateTransition; import parser.Parser; -import parser.WrongLHSExpression; -import parser.WrongRHSExpression; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class DataStorageNecessityTest { public static void main(String[] args) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java b/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java index 4bec80a..f4d9077 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java @@ -9,6 +9,17 @@ import models.Edge; import models.dataFlowModel.*; import parser.*; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class EdgeTransitionSelectableTest { public static void main(String[] args) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java index 5196688..277948d 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java @@ -4,6 +4,10 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.util.HashMap; import org.junit.Test; @@ -12,9 +16,9 @@ import models.algebra.Position; import models.algebra.Variable; import models.dataFlowModel.DataFlowModel; -import parser.ExpectedRightBracket; import parser.Parser; import parser.Parser.TokenStream; +import parser.exceptions.ExpectedRightBracket; public class InverseTest { @Test @@ -23,13 +27,17 @@ DataFlowModel model = new DataFlowModel(); try { String rhs = "(a * x + b) * c"; - TokenStream stream = new TokenStream(); - stream.addLine(rhs); - Expression rhsExp = Parser.parseTerm(stream, model); + + TokenStream stream = new Parser.TokenStream(); + Parser parser = new Parser(stream); + stream.addLine(rhs); + + Expression rhsExp = parser.parseTerm(stream, model); System.out.println(lhs + " = " + rhsExp); + HashMap rhsVars = rhsExp.getVariables(); assertEquals(4, rhsVars.size()); - + // Solve {y = (a * x + b) + c} for a, b, c, x Variable y = new Variable(lhs); for (Position vPos: rhsVars.keySet()) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java deleted file mode 100644 index 9df3bcd..0000000 --- a/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package tests; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; - -import models.Edge; -import models.algebra.InvalidMessage; -import models.algebra.ParameterizedIdentifierIsFutureWork; -import models.algebra.UnificationFailed; -import models.algebra.ValueUndefined; -import models.dataConstraintModel.ChannelGenerator; -import models.dataConstraintModel.ChannelMember; -import models.dataFlowModel.*; -import parser.ExpectedAssignment; -import parser.ExpectedChannel; -import parser.ExpectedChannelName; -import parser.ExpectedEquals; -import parser.ExpectedInOrOutOrRefKeyword; -import parser.ExpectedLeftCurlyBracket; -import parser.ExpectedRHSExpression; -import parser.ExpectedRightBracket; -import parser.ExpectedStateTransition; -import parser.Parser; -import parser.WrongLHSExpression; -import parser.WrongRHSExpression; - -public class ParseTest { - - public static void main(String[] args) { - File file = new File("models/POS.model"); - try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); - DataFlowModel model; - try { - model = parser.doParse(); - System.out.println(model); - - for (ChannelGenerator c: model.getChannelGenerators()) { - for (ChannelMember out: ((DataflowChannelGenerator) c).getOutputChannelMembers()) { - String[] sideEffects = new String[] {""}; - System.out.println("next" + out.getIdentifierTemplate().getResourceName() + " = " + ((DataflowChannelGenerator) c).deriveUpdateExpressionOf(out).toImplementation(sideEffects)); - } - } - - System.out.println(); - - ResourceDependencyGraph resourceDependencyGraph = model.getResourceDependencyGraph(); - for (Edge e: resourceDependencyGraph.getEdges()) { - System.out.println(e.getSource() + "-(" + e + ")->" + e.getDestination()); - } - } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutOrRefKeyword - | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression - | WrongRHSExpression | ExpectedRightBracket | ParameterizedIdentifierIsFutureWork - | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage - | UnificationFailed | ValueUndefined | ExpectedAssignment e) { - e.printStackTrace(); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java index 3b80d63..30c985c 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java @@ -7,18 +7,18 @@ import algorithms.*; import models.dataFlowModel.DataFlowModel; -import parser.ExpectedAssignment; -import parser.ExpectedChannel; -import parser.ExpectedChannelName; -import parser.ExpectedEquals; -import parser.ExpectedInOrOutOrRefKeyword; -import parser.ExpectedLeftCurlyBracket; -import parser.ExpectedRHSExpression; -import parser.ExpectedRightBracket; -import parser.ExpectedStateTransition; import parser.Parser; -import parser.WrongLHSExpression; -import parser.WrongRHSExpression; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; public class UpdateConflictCheckTest { public static void main(String[] args) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java new file mode 100644 index 0000000..f7d923b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java @@ -0,0 +1,65 @@ +package tests.parser; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; + +import models.Edge; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; +import models.dataConstraintModel.ChannelGenerator; +import models.dataConstraintModel.ChannelMember; +import models.dataFlowModel.*; +import parser.Parser; +import parser.exceptions.ExpectedAssignment; +import parser.exceptions.ExpectedChannel; +import parser.exceptions.ExpectedChannelName; +import parser.exceptions.ExpectedEquals; +import parser.exceptions.ExpectedInOrOutOrRefKeyword; +import parser.exceptions.ExpectedLeftCurlyBracket; +import parser.exceptions.ExpectedRHSExpression; +import parser.exceptions.ExpectedRightBracket; +import parser.exceptions.ExpectedStateTransition; +import parser.exceptions.WrongLHSExpression; +import parser.exceptions.WrongRHSExpression; + +public class ParseTest { + + public static void main(String[] args) { + File file = new File("models/POS.model"); + try { + Parser parser = new Parser(new BufferedReader(new FileReader(file))); + DataFlowModel model; + try { + model = parser.doParse(); + System.out.println(model); + + for (ChannelGenerator c: model.getChannelGenerators()) { + for (ChannelMember out: ((DataflowChannelGenerator) c).getOutputChannelMembers()) { + String[] sideEffects = new String[] {""}; + System.out.println("next" + out.getIdentifierTemplate().getResourceName() + " = " + ((DataflowChannelGenerator) c).deriveUpdateExpressionOf(out).toImplementation(sideEffects)); + } + } + + System.out.println(); + + ResourceDependencyGraph resourceDependencyGraph = model.getResourceDependencyGraph(); + for (Edge e: resourceDependencyGraph.getEdges()) { + System.out.println(e.getSource() + "-(" + e + ")->" + e.getDestination()); + } + } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutOrRefKeyword + | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression + | WrongRHSExpression | ExpectedRightBracket | ParameterizedIdentifierIsFutureWork + | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage + | UnificationFailed | ValueUndefined | ExpectedAssignment e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + +}