diff --git a/AlgebraicDataflowArchitectureModel/models/WOS b/AlgebraicDataflowArchitectureModel/models/WOS deleted file mode 100644 index c92713e..0000000 --- a/AlgebraicDataflowArchitectureModel/models/WOS +++ /dev/null @@ -1,32 +0,0 @@ -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 -} - -services{ - service WOS{ - baseURL:"https://WOS/" - resources: temp_f, temp_c, highest - } -} diff --git a/AlgebraicDataflowArchitectureModel/models/WOS.dtram b/AlgebraicDataflowArchitectureModel/models/WOS.dtram new file mode 100644 index 0000000..6b79a46 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/WOS.dtram @@ -0,0 +1,32 @@ +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:150,20,30,30 +node c C2:150,20,30,30 +node r highest:300,20,80,30 +node r temp_c:20,20,80,30 +node r temp_f:370,220,80,30 +node ioc CIO2:160,150,30,30 +node ioc CIO1:140,170,30,30 +} + +services{ + service A{ + baseURL:https + resources:temp_f,temp_c,highest + } +} \ No newline at end of file diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index fffe8da..c242bcc 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -65,21 +65,22 @@ import parser.exceptions.WrongLHSExpression; import parser.exceptions.WrongRHSExpression; import parser.ParserDTRAM; +import parser.ParserDTRAMForWebService; public class Editor { final int PORT_DIAMETER = 8; final int PORT_RADIUS = PORT_DIAMETER / 2; - private String curFileName = null; - private String curFilePath = 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; } @@ -170,11 +171,9 @@ if(extension.contains(".model")) { openModel(file); } else { - - ParserDTRAM parserDTRAM = new ParserDTRAM(new BufferedReader(new FileReader(file))); - + ParserDTRAM parserDTRAM = new ParserDTRAM(); try { - model = parserDTRAM.doParseModel(); + model = parserDTRAM.doParseModel(new BufferedReader(new FileReader(file))); graph = constructGraph(model); parserDTRAM.doParseGeometry(graph); curFilePath = file.getAbsolutePath(); @@ -198,10 +197,10 @@ public DataFlowModel openModel(File file) { try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Parser parser = new Parser(); try { - model = parser.doParse(); + model = parser.doParse(new BufferedReader(new FileReader(file))); curFilePath = file.getAbsolutePath(); curFileName = file.getName(); if (!UpdateConflictCheck.run(model)) return null; @@ -218,7 +217,7 @@ } return null; } - + public void save() { if (curFilePath != null) { @@ -379,7 +378,7 @@ return graph; } - + public void setDAGLayout() { Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); @@ -591,12 +590,14 @@ public void setChannelCode(DataflowChannelGenerator ch, String code) { ch.setSourceText(code); - TokenStream stream = new TokenStream(); + Parser parser = new Parser(); + TokenStream stream = parser.new TokenStream(); + for (String line: code.split("\n")) { stream.addLine(line); } try { - DataflowChannelGenerator ch2 = Parser.parseChannel(stream, getModel()); + DataflowChannelGenerator ch2 = parser.parseChannel(stream, getModel()); for (ChannelMember chm2: ch2.getInputChannelMembers()) { for (ChannelMember chm: ch.getInputChannelMembers()) { if (chm2.getIdentifierTemplate() == chm.getIdentifierTemplate()) { diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java index 2c9cde3..124e0b7 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/WebServiceEditor.java @@ -1,13 +1,41 @@ package graphicalrefactor.editor; +import java.io.BufferedReader; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; + +import javax.management.remote.SubjectDelegationPermission; import com.mxgraph.view.mxGraph; +import algorithms.UpdateConflictCheck; import models.dataFlowModel.DataFlowModel; import models.webServices.WebServicesInfo; +import parser.ParserDTRAM; +import parser.ParserDTRAMForWebService; +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.exceptions.webService.ExpectedBaseURL; +import parser.exceptions.webService.ExpectedResources; +import parser.exceptions.webService.ExpectedWebService; -/** +/**-------------------------------------------------------------------------------- * this class is called when you design of Web services. * * @author k-Fujii @@ -16,23 +44,62 @@ public class WebServiceEditor extends Editor{ private WebServicesInfo webServices = null; - - /** + + /**-------------------------------------------------------------------------------- * [Constructor] + /**-------------------------------------------------------------------------------- * * @param graph : the editor of generate prototype tool. * */ - public WebServiceEditor(mxGraph graph) { + public WebServiceEditor(final mxGraph graph) { super(graph); - + this.webServices = new WebServicesInfo(this.model); } - - /** - * @Override + + /**-------------------------------------------------------------------------------- + * public + /**-------------------------------------------------------------------------------- + /** + * @param file */ - public DataFlowModel open(File file) { + @Override + public DataFlowModel open(final File file) { + String extension =""; + + if(file != null && file.exists()) { + String name = file.getName(); + extension = name.substring(name.lastIndexOf(".")); + } + if(extension.contains(".model")) { + openModel(file); + } else { + ParserDTRAMForWebService parser = new ParserDTRAMForWebService(); + try { + model = parser.doParseModel(new BufferedReader(new FileReader(file))); + graph = constructGraph(model); + + parser.doParseGeometry(graph); + parser.doParseWebService(this,model); + + 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 | FileNotFoundException + | ExpectedModel | ExpectedGeometry | ExpectedNode | ExpectedResource | ExpectedFormulaChannel | ExpectedIoChannel + | ExpectedWebService | ExpectedBaseURL| ExpectedResources e) { + e.printStackTrace(); + } + } + return null; } } diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java index 32a97f4..2849211 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorCellEditor.java @@ -42,22 +42,22 @@ 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 +68,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 +79,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, // �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 if(r == JOptionPane.OK_OPTION) { + Parser parser = new Parser(); + TokenStream stream = parser.new TokenStream(); + 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 +134,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 +206,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..42067b7 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/views/GraphicalRefactorMenuBar.java @@ -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,7 +36,7 @@ private DAGLayoutAction dagLayoutAction = null; private TreeLayoutAction treeLayoutAction = null; private CircleLayoutAction circleLayoutAction = null; - + public GraphicalRefactorMenuBar(GraphicalRefactor graphicalModelRefactor) { this.graphicalModelRefactor = graphicalModelRefactor; JMenu newMenu = new JMenu("New"); @@ -54,20 +54,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/Parser.java b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java index d2be315..1bf402b 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java @@ -29,8 +29,7 @@ import parser.exceptions.WrongLHSExpression; import parser.exceptions.WrongRHSExpression; -public class Parser { - protected BufferedReader reader; +public class Parser { public static final String CHANNEL = "channel"; public static final String INIT = "init"; public static final String LEFT_CURLY_BRACKET = "{"; @@ -57,12 +56,9 @@ public static final String ASSIGNMENT = "="; public static final String COMMA = ","; public static final String COLON = ":"; - - public Parser(BufferedReader reader) { - this.reader = reader; - } - public DataFlowModel doParse() + + public DataFlowModel doParse(final BufferedReader reader) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { TokenStream stream = new TokenStream(); try { @@ -79,7 +75,7 @@ return parseDataFlowModel(stream); } - public static DataFlowModel parseDataFlowModel(TokenStream stream) + public DataFlowModel parseDataFlowModel(final TokenStream stream) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment { DataFlowModel model = new DataFlowModel(); DataflowChannelGenerator channel; @@ -93,7 +89,7 @@ return model; } - public static DataflowChannelGenerator parseChannel(TokenStream stream, DataFlowModel model) + public DataflowChannelGenerator parseChannel(final TokenStream stream, final 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)) { @@ -140,7 +136,8 @@ return channel; } - public static void parseInit(TokenStream stream, DataFlowModel model) throws ExpectedLeftCurlyBracket, ExpectedAssignment, ExpectedRHSExpression, WrongRHSExpression, ExpectedRightBracket { + public void parseInit(final TokenStream stream, final 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; @@ -170,7 +167,7 @@ } } - public static ChannelMember parseChannelMember(TokenStream stream, DataFlowModel model, String inOrOutOrRef) + public ChannelMember parseChannelMember(final TokenStream stream, final 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); @@ -222,8 +219,8 @@ } return channelMember; } - - public static Expression parseTerm(TokenStream stream, DataFlowModel model) throws ExpectedRightBracket { + + public Expression parseTerm(final TokenStream stream, final DataFlowModel model) throws ExpectedRightBracket { ArrayList expressions = new ArrayList<>(); ArrayList operators = new ArrayList<>(); String operator = null; @@ -354,7 +351,7 @@ return firstMonomial; } - public static class TokenStream { + public class TokenStream { private ArrayList> tokens = new ArrayList<>(); private ArrayList lines = new ArrayList<>(); private int line = 0; @@ -405,7 +402,7 @@ 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); diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java index b40dc25..16e6702 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java @@ -34,23 +34,21 @@ public class ParserDTRAM extends Parser { - protected 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"; + protected TokenStream stream = null; - - public ParserDTRAM(BufferedReader reader) { - super(reader); - } + private static final String MODEL = "model"; + private static final String GEOMETRY = "geometry"; + private static final String NODE = "node"; + private static final String RESOURCE = "r"; + private static final String CHANNEL = "c"; + private static final String FORMULA_CHANNEL = "fc"; + private static final String IO_CHANNEL = "ioc"; - public DataFlowModel doParseModel() + /**-------------------------------------------------------------------------------- + * + * @param reader + */ + public DataFlowModel doParseModel(final BufferedReader reader) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { stream = new TokenStream(); try { @@ -63,17 +61,27 @@ e.printStackTrace(); return null; } - DataFlowModel model = parseModel(stream); + DataFlowModel model = getParsedModel(stream); return model; } - public void doParseGeometry(mxGraph graph) + /**-------------------------------------------------------------------------------- + * + * @param graph + */ + public void doParseGeometry(final mxGraph graph) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry, ExpectedNode, ExpectedResource, ExpectedFormulaChannel, ExpectedIoChannel{ parseGeometry(stream, graph); } - - public static DataFlowModel parseModel(TokenStream stream) + + /**-------------------------------------------------------------------------------- + * private + /**-------------------------------------------------------------------------------- + * + * @param stream + */ + private DataFlowModel getParsedModel(final TokenStream stream) throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { if (!stream.hasNext()) { @@ -84,18 +92,18 @@ if (!modelKeyword.equals(MODEL)) { 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); - + + DataFlowModel model = parseDataFlowModel(stream); + String rightBracket = stream.next(); if(!rightBracket.equals(RIGHT_CURLY_BRACKET)) { throw new ExpectedRightBracket(stream.getLine()); @@ -103,10 +111,14 @@ return model; } - public static void parseGeometry(TokenStream stream, mxGraph graph) + /**-------------------------------------------------------------------------------- + * change graph's geometries from "DTRAM" file. + * @param stream + * @param graph + */ + private void parseGeometry(final TokenStream stream, final 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()); @@ -116,36 +128,36 @@ if(!leftBracket.equals(LEFT_CURLY_BRACKET)) { throw new ExpectedLeftCurlyBracket(stream.getLine()); } - + String node = stream.next(); while (node.equals(NODE)) { String rOrFcOrIocOrC = stream.next(); if (!rOrFcOrIocOrC.equals(RESOURCE) &&!rOrFcOrIocOrC.equals(FORMULA_CHANNEL) &&!rOrFcOrIocOrC.equals(IO_CHANNEL) &&!rOrFcOrIocOrC.equals(CHANNEL)) { throw new ExpectedNode(stream.getLine()); } - + String name = stream.next(); - + String colon = stream.next(); - + String x = stream.next(); int xC = Integer.parseInt(x); // C = Coordinate(���W) - + String comma1 = stream.next(); - + String y = stream.next(); int yC = Integer.parseInt(y); - + String comma2 = stream.next(); - + String w = stream.next(); int wC = Integer.parseInt(w); - + String comma3 = stream.next(); - + 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++) { diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAMForWebService.java b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAMForWebService.java index c90c3ea..d9e150e 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAMForWebService.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAMForWebService.java @@ -1,115 +1,102 @@ package parser; -import java.io.BufferedReader; -import java.util.ArrayList; - -import com.mxgraph.view.mxGraph; - import graphicalrefactor.editor.WebServiceEditor; import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.DataFlowModel; import models.webServices.Service; -import models.webServices.WebServicesInfo; -import parser.Parser.TokenStream; import parser.exceptions.ExpectedAssignment; import parser.exceptions.ExpectedLeftCurlyBracket; import parser.exceptions.ExpectedRightBracket; -import parser.exceptions.ParseException; import parser.exceptions.webService.ExpectedBaseURL; import parser.exceptions.webService.ExpectedResources; import parser.exceptions.webService.ExpectedWebService; public class ParserDTRAMForWebService extends ParserDTRAM { - - public static final String SERVICES = "serviecs"; - public static final String SERVICE = "service"; - public static final String BASE_URL = "baseURL"; - public static final String RESOURCES = "resources"; + + private static final String SERVICES = "services"; + private static final String SERVICE = "service"; + private static final String BASE_URL = "baseURL"; + private static final String RESOURCES = "resources"; /**-------------------------------------------------------------------------------- - * [Constructor] - * - * @param reader - * - */ - public ParserDTRAMForWebService(BufferedReader reader) { - super(reader); - - } - + * public /**-------------------------------------------------------------------------------- * execute to parse the DTRAM file. * - * @param graph + * @param editor + * @param model */ public void doParseWebService(final WebServiceEditor editor, final DataFlowModel model) - throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, - ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment + throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, + ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment { - doParseWebService(stream, editor, model); + parseWebService(stream, editor, model); } - + + /**-------------------------------------------------------------------------------- + * private /**-------------------------------------------------------------------------------- * parse to Web service's options in the DTRAM file. * * @param stream - * */ - public static void doParseWebService( - final TokenStream stream, final WebServiceEditor editor, final DataFlowModel model) - throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, - ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment + private void parseWebService(final TokenStream stream, final WebServiceEditor editor, final DataFlowModel model) + throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, + ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment { - // check the token name is "services" + // check the token name is "services" if(!hasSpecificToken(stream.next(), SERVICES)) throw new ExpectedWebService(stream.getLine()); - // check the token is "{" + // check the token is "{" if(!hasSpecificToken(stream.next(), LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); - while(hasSpecificToken(stream.next(), SERVICE)) { + while(true) { + if(!hasSpecificToken(stream.checkNext(), SERVICE)) break; - // it gets a service name here. - String name = stream.next(); + stream.next(); // advance to stream's index - // check the token is "{" + String name = stream.next(); // it gets a service name here. + + // check the token is "{" if(!hasSpecificToken(stream.next(), LEFT_CURLY_BRACKET)) throw new ExpectedLeftCurlyBracket(stream.getLine()); - + // check the token is "baseURL" if(!hasSpecificToken(stream.next(), BASE_URL)) throw new ExpectedBaseURL(stream.getLine()); - + // check the token is ":" if(!hasSpecificToken(stream.next(), COLON)) throw new ExpectedAssignment(stream.getLine()); // it gets a service's base URL here. String baseURL = stream.next(); - + // check the token is "resources" if(!hasSpecificToken(stream.next(), RESOURCES)) throw new ExpectedResources(stream.getLine()); - + // check the token is ":" if(!hasSpecificToken(stream.next(), COLON)) throw new ExpectedAssignment(stream.getLine()); - + // get service Service service = new Service(name, baseURL); String resourceName = ""; - // if it doesn't have a token "COMMA", - // then it's going to break for iteration. - do { + while(true) { // get here. resourceName = stream.next(); - IdentifierTemplate identifierTemplate = model.getIdentifierTemplate(resourceName); service = service.addIdentifireTemplate(identifierTemplate); + + // check the token is "," + if(!hasSpecificToken(stream.checkNext(), COMMA)) break; + + stream.next(); // advance to stream's index } - while(hasSpecificToken(stream.next(), COMMA)); // check the token is "}" if(!hasSpecificToken(stream.next(), RIGHT_CURLY_BRACKET)) @@ -127,8 +114,8 @@ * @param token * @param specificTokenName */ - private static Boolean hasSpecificToken(final String token, final String specificTokenName) { + private Boolean hasSpecificToken(final String token, final String specificTokenName) { + if(token == null) return false; return (token.equals(specificTokenName)); } - } diff --git a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java index 6791346..31d2a31 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java @@ -27,10 +27,10 @@ public static void main(String[] args) { File file = new File("models/POS.model"); try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Parser parser = new Parser(); DataFlowModel model; try { - model = parser.doParse(); + model = parser.doParse(new BufferedReader(new FileReader(file))); ResourceDependencyGraph graph = NecessityOfStoringResourceStates.doDecide(model); SelectableDataTransfers.init(graph); FinalDecisionOfStoringResourceStates.doDecide(graph); diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java index d3ab1e4..c3169c6 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageDecisionTest.java @@ -25,10 +25,10 @@ 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; + Parser parser = new Parser(); + DataFlowModel model = null; try { - model = parser.doParse(); + model = parser.doParse(new BufferedReader(new FileReader(file))); System.out.println(model); ResourceDependencyGraph graph = NecessityOfStoringResourceStates.doDecide(model); SelectableDataTransfers.init(graph); diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java index feed8ab..6aaf67a 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DataStorageNecessityTest.java @@ -25,10 +25,10 @@ public static void main(String[] args) { File file = new File("models/POS2.model"); try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Parser parser = new Parser(); DataFlowModel model; try { - model = parser.doParse(); + model = parser.doParse(new BufferedReader(new FileReader(file))); System.out.println(model); ResourceDependencyGraph graph = NecessityOfStoringResourceStates.doDecide(model); for (Node n:graph.getNodes()) { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java b/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java index f4d9077..293a555 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/EdgeTransitionSelectableTest.java @@ -25,10 +25,10 @@ public static void main(String[] args) { File file = new File("models/POS2.model"); try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Parser parser = new Parser(); DataFlowModel model; try { - model = parser.doParse(); + model = parser.doParse(new BufferedReader(new FileReader(file))); System.out.println(model); ResourceDependencyGraph graph = NecessityOfStoringResourceStates.doDecide(model); SelectableDataTransfers.init(graph); diff --git a/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java index d8e4c36..8935d9b 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; @@ -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); + + Parser parser = new Parser(); + TokenStream stream = parser.new TokenStream(); + 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 903a582..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.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(); - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java index 30c985c..957774e 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/UpdateConflictCheckTest.java @@ -24,9 +24,9 @@ public static void main(String[] args) { File file = new File("models/POS2.model"); try { - Parser parser = new Parser(new BufferedReader(new FileReader(file))); + Parser parser = new Parser(); try { - DataFlowModel model = parser.doParse(); + DataFlowModel model = parser.doParse(new BufferedReader(new FileReader(file))); System.out.println(UpdateConflictCheck.run(model)); } catch (ExpectedRightBracket e) { // TODO Auto-generated catch block diff --git a/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParseTest.java new file mode 100644 index 0000000..102aedf --- /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(); + DataFlowModel model; + try { + model = parser.doParse(new BufferedReader(new FileReader(file))); + 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/parser/ParserDTRAMForWebServiceTest.java b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParserDTRAMForWebServiceTest.java new file mode 100644 index 0000000..1b83f50 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/tests/parser/ParserDTRAMForWebServiceTest.java @@ -0,0 +1,43 @@ +package tests.parser; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; + +import org.junit.Test; + +import com.mxgraph.view.mxGraph; + +import graphicalrefactor.editor.WebServiceEditor; +import models.dataFlowModel.DataFlowModel; +import parser.ParserDTRAMForWebService; + +public class ParserDTRAMForWebServiceTest { + + @Test + public void test() { +// File file = new File("models/WOS.dtram"); +// +// try { +// mxGraph graph = new mxGraph(); +// WebServiceEditor editor = new WebServiceEditor(graph); +// +// ParserDTRAMForWebService parser = new ParserDTRAMForWebService(new BufferedReader(new FileReader(file))); +// +// try { +// editor.open(file); +// parser.doParseGeometry(graph); +// parser.doParseWebService(, model) +// }catch() { +// +// } +// } +// catch(FileNotFoundException e) { +// e.printStackTrace(); +// } + } + +}