From 06524a41ffb68b0a4ea7225fa93212a2ce7e0547 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr> Date: Tue, 15 Mar 2022 10:34:10 +0100 Subject: [PATCH] Adding exception management in drawing TML --- src/main/java/cli/Action.java | 7 +- src/main/java/ui/DrawerTMLModeling.java | 91 ++++++++----------------- src/main/java/ui/MainGUI.java | 9 ++- 3 files changed, 41 insertions(+), 66 deletions(-) diff --git a/src/main/java/cli/Action.java b/src/main/java/cli/Action.java index f4aeaed791..e2019bc10a 100644 --- a/src/main/java/cli/Action.java +++ b/src/main/java/cli/Action.java @@ -865,8 +865,13 @@ public class Action extends Command { return Interpreter.BAD; } + try { + interpreter.mgui.drawTMLSpecification(tmlm, commands[0]); + } catch (MalformedTMLDesignException e) { + TraceManager.addDev("Exception in drawing spec: " + e.getMessage()); + return e.getMessage(); + } - interpreter.mgui.drawTMLSpecification(tmlm, commands[0]); return null; } diff --git a/src/main/java/ui/DrawerTMLModeling.java b/src/main/java/ui/DrawerTMLModeling.java index a429d90571..9a88f64067 100644 --- a/src/main/java/ui/DrawerTMLModeling.java +++ b/src/main/java/ui/DrawerTMLModeling.java @@ -80,8 +80,14 @@ public class DrawerTMLModeling { mgui = _mgui; } + private void check(boolean condition, String text) throws MalformedTMLDesignException { + if (!condition) { + throw new MalformedTMLDesignException(text); + } + } + // Not thread-safe - public void drawTMLModelingPanel(TMLModeling tmlspec, TMLComponentDesignPanel panel) { + public void drawTMLModelingPanel(TMLModeling tmlspec, TMLComponentDesignPanel panel) throws MalformedTMLDesignException{ TraceManager.addDev("Drawing TML spec"); taskMap = new HashMap<>(); @@ -115,21 +121,18 @@ public class DrawerTMLModeling { } - private boolean makeTasks(TMLModeling tmlspec, TMLComponentDesignPanel panel) { + private void makeTasks(TMLModeling tmlspec, TMLComponentDesignPanel panel) { int taskID = 0; int nbOfTasks = tmlspec.getTasks().size(); for(Object task: tmlspec.getTasks()) { if (task instanceof TMLTask) { - boolean ret = addTask((TMLTask) task, taskID, nbOfTasks, panel, taskID == 0); - if (!ret) return false; + addTask((TMLTask) task, taskID, nbOfTasks, panel, taskID == 0); taskID ++; } } - panel.tmlctdp.repaint(); - return true; } - private boolean addTask(TMLTask task, int id, int nbOfTasks, TMLComponentDesignPanel panel, boolean setDiagramName) { + private void addTask(TMLTask task, int id, int nbOfTasks, TMLComponentDesignPanel panel, boolean setDiagramName) { int myX = (int)(XCENTER + RADIUS * cos(2*Math.PI/nbOfTasks*id)); int myY = (int)(YCENTER + RADIUS * sin(2*Math.PI/nbOfTasks*id)); int myType = TGComponentManager.TMLCTD_PCOMPONENT; @@ -170,105 +173,70 @@ public class DrawerTMLModeling { } } - return true; } - private boolean makeChannels(TMLModeling tmlspec, TMLComponentDesignPanel panel) { + private void makeChannels(TMLModeling tmlspec, TMLComponentDesignPanel panel) throws MalformedTMLDesignException { for(Object o: tmlspec.getChannels()) { if (o instanceof TMLChannel) { - boolean ret = addChannel((TMLChannel) o, panel); - if (!ret) return false; + addChannel((TMLChannel) o, panel); } } - - return true; } - private boolean makeEvents(TMLModeling tmlspec, TMLComponentDesignPanel panel) { + private void makeEvents(TMLModeling tmlspec, TMLComponentDesignPanel panel) throws MalformedTMLDesignException { for(Object o: tmlspec.getEvents()) { if (o instanceof TMLEvent) { - boolean ret = addEvent((TMLEvent) o, panel); - if (!ret) return false; + addEvent((TMLEvent) o, panel); } } - - return true; } // Assumes 1 to 1 channel - private boolean addChannel(TMLChannel chan, TMLComponentDesignPanel panel) { + private void addChannel(TMLChannel chan, TMLComponentDesignPanel panel) throws MalformedTMLDesignException { TraceManager.addDev("Adding channel " + chan.getName()); TMLTask task1 = chan.getOriginTask(); TMLTask task2 = chan.getDestinationTask(); - if ((task1 == null) || (task2 == null)) { - return false; - } + check(task1 != null, "Invalid origin task for channel " + chan.getName()); + check(task2 != null, "Invalid destination task for channel " + chan.getName()); TMLCPrimitiveComponent c1 = taskMap.get(task1); TMLCPrimitiveComponent c2 = taskMap.get(task2); - if ((c1 == null) || (c2 == null)) { - return false; - } - - // Adding ports to tasks - int myX = c1.getX() + c1.getWidth() / 2; - int myY = c1.getY() + c2.getWidth() / 2; - int myType = TGComponentManager.TMLCTD_COPORT; - TraceManager.addDev("Adding port"); - TGComponent tgc = TGComponentManager.addComponent(myX, myY, myType, panel.tmlctdp); - - if (tgc == null) { - return false; - } - TMLCPrimitivePort comp = (TMLCPrimitivePort) tgc; - comp.setPortName(chan.getName()); - panel.tmlctdp.addBuiltComponent(tgc); - - - // Setting the characteristics - // Connecting the ports + check(c1 != null, "No component corresponding to task " + task1.getName()); + check(c2 != null, "No component corresponding to task " + task1.getName()); - return true; } // Assumes 1 to 1 event - private boolean addEvent(TMLEvent evt, TMLComponentDesignPanel panel) { + private void addEvent(TMLEvent evt, TMLComponentDesignPanel panel) throws MalformedTMLDesignException { TraceManager.addDev("Adding event " + evt.getName()); TMLTask task1 = evt.getOriginTask(); TMLTask task2 = evt.getDestinationTask(); - if ((task1 == null) || (task2 == null)) { - return false; - } + check(task1 != null, "Invalid origin task for channel " + evt.getName()); + check(task2 != null, "Invalid destination task for channel " + evt.getName()); TMLCPrimitiveComponent c1 = taskMap.get(task1); TMLCPrimitiveComponent c2 = taskMap.get(task2); - if ((c1 == null) || (c2 == null)) { - return false; - } + check(c1 != null, "No component corresponding to task " + task1.getName()); + check(c2 != null, "No component corresponding to task " + task1.getName()); // Adding ports to tasks TMLCChannelOutPort p1 = addPort(c1, evt.getName(),TMLCPrimitivePort.TML_PORT_EVENT, true, panel ); - if (p1 == null) { - return false; - } + check(p1 != null, "No free port available for setting output event " + evt.getName()); TMLCChannelOutPort p2 = addPort(c2, evt.getName(),TMLCPrimitivePort.TML_PORT_EVENT, false, panel ); - if (p2 == null) { - return false; - } + check(p2 != null, "No free port available for setting input event " + evt.getName()); // Connecting the ports addPortConnector(p1, p2, panel); - return true; } private TMLCChannelOutPort addPort(TGComponent tgc, String name, int portType, boolean isOrigin, TMLComponentDesignPanel panel) { @@ -276,8 +244,6 @@ public class DrawerTMLModeling { int myY = tgc.getY() + tgc.getHeight() / 2; int myType = TGComponentManager.TMLCTD_COPORT; - - TMLCChannelOutPort comp = new TMLCChannelOutPort(myX, myY, panel.tmlctdp.getMinX(), panel.tmlctdp.getMaxX(), panel.tmlctdp.getMinY(), panel.tmlctdp.getMaxY(), true, null, panel.tmlctdp); @@ -291,10 +257,11 @@ public class DrawerTMLModeling { ((SwallowTGComponent)tgc).addSwallowedTGComponent(comp, myX, myY); return comp; } + return null; } - private boolean addPortConnector(TMLCChannelOutPort p1, TMLCChannelOutPort p2, TMLComponentDesignPanel panel) { + private void addPortConnector(TMLCChannelOutPort p1, TMLCChannelOutPort p2, TMLComponentDesignPanel panel) { int myX = p1.getX() + p1.getWidth() / 2; int myY = p1.getY() + p1.getHeight() / 2; p1.getTGConnectingPointAtIndex(0).setFree(false); @@ -304,8 +271,6 @@ public class DrawerTMLModeling { true, null, panel.tmlctdp, p1.getTGConnectingPointAtIndex(0), p2.getTGConnectingPointAtIndex(0), null); panel.tmlctdp.addBuiltConnector(conn); - - return true; } diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index 7e8716f257..e02c8c96b1 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -1868,7 +1868,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per TraceManager.addDev("Draw Spec 4"); } - public void drawTMLSpecification(TMLModeling tmlm, String title) { + public void drawTMLSpecification(TMLModeling tmlm, String title) throws MalformedTMLDesignException { DateFormat dateFormat = new SimpleDateFormat("_yyyyMMdd_HHmmss"); Date date = new Date(); String dateAndTime = dateFormat.format(date); @@ -5404,7 +5404,12 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per return; } - drawTMLSpecification(ts.getTMLModeling(), tmlfile.getName()); + try { + drawTMLSpecification(ts.getTMLModeling(), tmlfile.getName()); + } catch (MalformedTMLDesignException e) { + TraceManager.addDev("Error in drawing spec: " + e.getMessage()); + status.setText("ERROR: " + e.getMessage()); + } } -- GitLab