Merge lp:~jonathan-r-beaumont/workcraft/trunk-bug-1537854 into lp:workcraft

Proposed by Jonny Beaumont
Status: Merged
Merged at revision: 728
Proposed branch: lp:~jonathan-r-beaumont/workcraft/trunk-bug-1537854
Merge into: lp:workcraft
Diff against target: 355 lines (+119/-59)
6 files modified
CpogsPlugin/src/org/workcraft/plugins/cpog/CustomToolsProvider.java (+1/-1)
CpogsPlugin/src/org/workcraft/plugins/cpog/VisualCPOG.java (+21/-0)
CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogParsingTool.java (+2/-1)
CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogSelectionTool.java (+53/-13)
CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerImportTool.java (+25/-26)
CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerSelectedGraphsExtractionTool.java (+17/-18)
To merge this branch: bzr merge lp:~jonathan-r-beaumont/workcraft/trunk-bug-1537854
Reviewer Review Type Date Requested Status
Danil Sokolov Approve
Review via email: mp+284005@code.launchpad.net

Description of the change

Fixed bug 1537854. This includes a clear message when a user attempts to extract concurrency of a selected graph not grouped as a scenario, and some code refinements for when trimming whitespace from strings.

To post a comment you must log in.
Revision history for this message
Danil Sokolov (danilovesky) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/CustomToolsProvider.java'
2--- CpogsPlugin/src/org/workcraft/plugins/cpog/CustomToolsProvider.java 2015-02-05 21:35:30 +0000
3+++ CpogsPlugin/src/org/workcraft/plugins/cpog/CustomToolsProvider.java 2016-01-26 16:51:52 +0000
4@@ -17,7 +17,7 @@
5 {
6 ArrayList<GraphEditorTool> result = new ArrayList<GraphEditorTool>();
7
8- result.add(new CpogSelectionTool(true));
9+ result.add(new CpogSelectionTool());
10 result.add(new CommentGeneratorTool());
11 result.add(new ConnectionTool());
12
13
14=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/VisualCPOG.java'
15--- CpogsPlugin/src/org/workcraft/plugins/cpog/VisualCPOG.java 2015-08-04 18:28:42 +0000
16+++ CpogsPlugin/src/org/workcraft/plugins/cpog/VisualCPOG.java 2016-01-26 16:51:52 +0000
17@@ -31,6 +31,7 @@
18 import org.workcraft.dom.Container;
19 import org.workcraft.dom.Node;
20 import org.workcraft.dom.math.MathConnection;
21+import org.workcraft.dom.math.PageNode;
22 import org.workcraft.dom.visual.AbstractVisualModel;
23 import org.workcraft.dom.visual.SelectionHelper;
24 import org.workcraft.dom.visual.TransformHelper;
25@@ -289,5 +290,25 @@
26 ((VisualGroup) node.getParent()).removeWithoutNotify(node);
27 }
28 }
29+
30+ public VisualScenarioPage groupScenarioPageSelection(String graphName) {
31+ VisualScenarioPage scenario = null;
32+ PageNode pageNode = new PageNode();
33+ Collection<Node> nodes = SelectionHelper.getGroupableCurrentLevelSelection(this);
34+ if (nodes.size() >= 1) {
35+ scenario = new VisualScenarioPage(pageNode);
36+ if (graphName != null) {
37+ scenario.setLabel(graphName);
38+ }
39+ getCurrentLevel().add(scenario);
40+ getCurrentLevel().reparent(nodes, scenario);
41+ Point2D centre = TransformHelper.getSnappedCentre(nodes);
42+ VisualModelTransformer.translateNodes(nodes, -centre.getX(), -centre.getY());
43+ scenario.setPosition(centre);
44+ select(scenario);
45+ }
46+ return scenario;
47+
48+ }
49
50 }
51
52=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogParsingTool.java'
53--- CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogParsingTool.java 2015-11-09 11:00:13 +0000
54+++ CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogParsingTool.java 2016-01-26 16:51:52 +0000
55@@ -365,7 +365,8 @@
56 }
57 }
58
59-
60+ if (total.endsWith("+")) total = total.substring(0, total.length() - 1);
61+ total = total.trim();
62
63
64 return total;
65
66=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogSelectionTool.java'
67--- CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogSelectionTool.java 2016-01-18 13:36:55 +0000
68+++ CpogsPlugin/src/org/workcraft/plugins/cpog/tools/CpogSelectionTool.java 2016-01-26 16:51:52 +0000
69@@ -2,6 +2,7 @@
70
71 import java.awt.BorderLayout;
72 import java.awt.Checkbox;
73+import java.awt.Component;
74 import java.awt.Font;
75 import java.awt.Rectangle;
76 import java.awt.event.ActionEvent;
77@@ -78,6 +79,7 @@
78 import org.workcraft.plugins.cpog.optimisation.BooleanFormula;
79 import org.workcraft.plugins.cpog.optimisation.booleanvisitors.FormulaToString;
80 import org.workcraft.plugins.stg.VisualNamedTransition;
81+import org.workcraft.util.GUI;
82 import org.workcraft.workspace.WorkspaceEntry;
83
84
85@@ -106,14 +108,13 @@
86
87 private GraphEditor editor;
88 protected boolean cancelInPlaceEdit;
89+
90+ int scenarioNo = 0;
91
92 public CpogSelectionTool() {
93- super();
94+ super(false);
95 }
96
97- public CpogSelectionTool(boolean enablePages) {
98- super(enablePages);
99- }
100
101 @Override
102 public void createInterfacePanel(final GraphEditor editor) {
103@@ -270,8 +271,53 @@
104 interfacePanel.add(expressionScroll, BorderLayout.CENTER);
105 interfacePanel.add(buttonPanel, BorderLayout.SOUTH);
106
107+ scenarioPageGroupButton(getGroupPanel());
108+
109+
110 renderTypeChangeHandler();
111 }
112+
113+ public void scenarioPageGroupButton(JPanel groupPanel) {
114+ JButton groupPageButton = GUI.createIconButton(GUI.createIconFromSVG(
115+ "images/icons/svg/selection-page.svg"), "Combine selection as a scenario (Alt+G)");
116+ groupPageButton.addActionListener(new ActionListener(){
117+ @Override
118+ public void actionPerformed(ActionEvent e) {
119+ VisualCPOG visualCpog = (VisualCPOG)editor.getWorkspaceEntry().getModelEntry().getVisualModel();
120+ visualCpog.groupScenarioPageSelection("scenario" + scenarioNo);
121+ scenarioNo++;
122+ editor.requestFocus();
123+ }
124+ });
125+ groupPanel.add(groupPageButton, 1);
126+ }
127+
128+ public JPanel getGroupPanel() {
129+ Component[] comps = interfacePanel.getComponents();
130+ JPanel groupPanel = null;
131+ for (int i = 0; i < comps.length; i++) {
132+ if (comps[i] instanceof JPanel) {
133+ JPanel panel = (JPanel) comps[i];
134+ Component[] cmp = panel.getComponents();
135+ for (int j = 0; j < cmp.length; j++) {
136+ if (cmp[j] instanceof JPanel) {
137+ JPanel pan = (JPanel) cmp[j];
138+ Component[] c = pan.getComponents();
139+ for (int k = 0; k < c.length; k++) {
140+ if (c[k] instanceof JButton) {
141+ JButton b = (JButton) c[k];
142+ System.out.println(b.getText());
143+ if (b.getToolTipText() != null && b.getToolTipText() == "Group selection (Ctrl+G)") {
144+ groupPanel = pan;
145+ }
146+ }
147+ }
148+ }
149+ }
150+ }
151+ }
152+ return groupPanel;
153+ }
154
155 public HashMap<String, VisualVertex> insertExpression(String text, final VisualCPOG visualCpog,
156 final boolean createDuplicates, boolean getVertList, boolean zoomFit, boolean blockTransitiveRemoval) {
157@@ -289,9 +335,9 @@
158
159 if (text.contains("=")) {
160 name = text.substring(0, text.indexOf("="));
161- while (name.endsWith(" ")) name = name.substring(0, name.length() - 1);
162+ name = name.trim();
163 text = text.substring(text.indexOf("=") + 1);
164- while (text.startsWith(" ")) text = text.substring(1);
165+ text = text.trim();
166 }
167
168 CpogFormula f = null;
169@@ -914,13 +960,7 @@
170
171 String newExpression = parsingTool.getExpressionFromGraph(visualCpog);
172 newExpression = newExpression.replace("\n", "");
173- while (newExpression.startsWith(" ")) {
174- newExpression = newExpression.substring(1);
175- }
176- while (newExpression.endsWith(" ")) {
177- newExpression = newExpression.substring(0, newExpression.length() - 1);
178- }
179-
180+ newExpression = newExpression.trim();
181 GraphReference g = referenceMap.get(page.getLabel());
182
183 int eqLocation;
184
185=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerImportTool.java'
186--- CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerImportTool.java 2015-11-01 11:50:12 +0000
187+++ CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerImportTool.java 2016-01-26 16:51:52 +0000
188@@ -53,7 +53,6 @@
189 }
190
191 try {
192-
193 File inputFile = File.createTempFile("input", ".tr");
194 int c = 0;
195 File originalFile = new File(dialog.getFilePath());
196@@ -73,6 +72,7 @@
197 c++;
198 }
199 k.close();
200+
201 HashSet<String> visitedEvents;
202 int i = 0;
203 String[] newLines = new String[lines.length];
204@@ -116,45 +116,44 @@
205 @Override
206 public void run(WorkspaceEntry we) {
207
208-
209 File inputFile;
210 inputFile = getInputFile(we);
211+
212+ final Framework framework = Framework.getInstance();
213+ final GraphEditorPanel editor = framework.getMainWindow().getCurrentEditor();
214+ final ToolboxPanel toolbox = editor.getToolBox();
215+ final CpogSelectionTool tool = toolbox.getToolInstance(CpogSelectionTool.class);
216+
217+
218 try {
219 if (inputFile != null) {
220
221 if (dialog.getExtractConcurrency()) {
222 PGMinerTask task = new PGMinerTask(inputFile, dialog.getSplit());
223
224- final Framework framework = Framework.getInstance();
225+
226 PGMinerResultHandler result = new PGMinerResultHandler((VisualCPOG) we.getModelEntry().getVisualModel(), we, false);
227 framework.getTaskManager().queue(task, "PGMiner", result);
228 } else {
229-
230- final Framework framework = Framework.getInstance();
231- final GraphEditorPanel editor = framework.getMainWindow().getCurrentEditor();
232- final ToolboxPanel toolbox = editor.getToolBox();
233- final CpogSelectionTool tool = toolbox.getToolInstance(CpogSelectionTool.class);
234-
235- Scanner k;
236-
237- k = new Scanner(inputFile);
238- int i = 0;
239- double yPos = tool.getLowestVertex((VisualCPOG) editor.getWorkspaceEntry().getModelEntry().getVisualModel()).getY() + 3;
240- editor.getWorkspaceEntry().captureMemento();
241- while (k.hasNext()) {
242- String line = k.nextLine();
243-
244- tool.insertEventLog((VisualCPOG) editor.getWorkspaceEntry().getModelEntry().getVisualModel(), i++, line.split(" "), yPos);
245-
246- yPos = yPos + 5;
247-
248- }
249- k.close();
250- editor.getWorkspaceEntry().saveMemento();
251+ Scanner k;
252+
253+ k = new Scanner(inputFile);
254+ int i = 0;
255+ double yPos = tool.getLowestVertex((VisualCPOG) editor.getWorkspaceEntry().getModelEntry().getVisualModel()).getY() + 3;
256+ editor.getWorkspaceEntry().captureMemento();
257+ while (k.hasNext()) {
258+ String line = k.nextLine();
259+
260+ tool.insertEventLog((VisualCPOG) editor.getWorkspaceEntry().getModelEntry().getVisualModel(), i++, line.split(" "), yPos);
261+
262+ yPos = yPos + 5;
263+ }
264+ k.close();
265+ editor.getWorkspaceEntry().saveMemento();
266 }
267 }
268 } catch (Exception e) {
269-
270+ editor.getWorkspaceEntry().cancelMemento();
271 }
272 }
273
274
275=== modified file 'CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerSelectedGraphsExtractionTool.java'
276--- CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerSelectedGraphsExtractionTool.java 2015-11-01 11:50:12 +0000
277+++ CpogsPlugin/src/org/workcraft/plugins/cpog/tools/PGMinerSelectedGraphsExtractionTool.java 2016-01-26 16:51:52 +0000
278@@ -41,53 +41,51 @@
279 String allGraphs = CpogParsingTool.getExpressionFromGraph(visualCpog);
280 ArrayList<String> tempGraphs = new ArrayList<>();
281 ArrayList<String> graphs = new ArrayList<>();
282- String prefix = "input", suffix = ".tr";
283 inputFile = File.createTempFile("input", ".tr");
284
285- PrintStream expressions = new PrintStream(inputFile);
286+
287
288 int i = allGraphs.indexOf(" + ");
289 while (i > -1) {
290 allGraphs = allGraphs.substring(0, i) + "\n" + allGraphs.substring(i + 2);
291 i = allGraphs.indexOf(" + ");
292 }
293+ allGraphs = allGraphs + "\n";
294 allGraphs = allGraphs.replaceAll(" -> ", " ");
295
296- while (allGraphs.contains("\n")) {
297- int index = allGraphs.indexOf("\n");
298- String graph = (allGraphs.substring(0, index));
299- allGraphs = allGraphs.substring(index + 1);
300- tempGraphs.add(graph);
301- }
302+ String[] graphList = allGraphs.split("\n");
303
304- //tempGraphs.add(allGraphs);
305+ for (String g : graphList) tempGraphs.add(g);
306
307 for (String graph : tempGraphs) {
308 int index = graph.indexOf("= ");
309 if (index >= 0) {
310 graph = graph.substring(index + 2);
311- }
312- while (graph.startsWith(" ")) {
313- graph = graph.substring(1);
314- }
315- while (graph.endsWith(" ")) {
316- graph = graph.substring(0, graph.length() - 1);
317- }
318+ } else {
319+ JOptionPane.showMessageDialog(null,
320+ "Error: A graph which is not a scenario has been selected.\n"
321+ + "Please remove this from the selection, or group this as a page to continue",
322+ "Error",
323+ JOptionPane.ERROR_MESSAGE);
324+ return null;
325+ }
326+ graph = graph.trim();
327 graphs.add(graph);
328 }
329
330+ PrintStream expressions = new PrintStream(inputFile);
331+
332 for (String graph : graphs) {
333 expressions.println(graph);
334 }
335
336 expressions.close();
337
338-
339 } catch (IOException exception) {
340 exception.printStackTrace();
341 } catch (ArrayIndexOutOfBoundsException e2) {
342 JOptionPane.showMessageDialog(null,
343- "Error: No graphs have been selected",
344+ "Error: No scenarios have been selected",
345 "Error",
346 JOptionPane.ERROR_MESSAGE);
347 throw e2;
348@@ -102,6 +100,7 @@
349 try {
350
351 File inputFile = getInputFile(we);
352+ if (inputFile == null) return;
353 PGMinerTask task = new PGMinerTask(inputFile, false);
354
355 final Framework framework = Framework.getInstance();

Subscribers

People subscribed via source and target branches