From 05e3c13198fa41c0391ca575bcce8960a3a9d88b Mon Sep 17 00:00:00 2001
From: apvrille <ludovic.apvrille@eurecom.fr>
Date: Wed, 7 Jun 2017 09:15:23 +0200
Subject: [PATCH] First countermeasure working. Still need to make the icons
 and the right shape

---
 src/ui/ActionPerformer.java              |   4 +
 src/ui/TGComponentManager.java           |  13 ++
 src/ui/TGUIAction.java                   |   8 +-
 src/ui/atd/ATDAttack.java                |  16 +-
 src/ui/atd/ATDCountermeasure.java        |  28 ++--
 src/ui/atd/AttackTreeDiagramToolbar.java |   9 ++
 src/ui/window/JDialogCountermeasure.java | 181 +++++++++++++++++++++++
 7 files changed, 240 insertions(+), 19 deletions(-)
 create mode 100755 src/ui/window/JDialogCountermeasure.java

diff --git a/src/ui/ActionPerformer.java b/src/ui/ActionPerformer.java
index 46f67b0925..2b315414fd 100755
--- a/src/ui/ActionPerformer.java
+++ b/src/ui/ActionPerformer.java
@@ -894,12 +894,16 @@ public class ActionPerformer {
             mgui.actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.ATD_BLOCK);
         } else if (command.equals(mgui.actions[TGUIAction.ATD_ATTACK].getActionCommand())) {
             mgui.actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.ATD_ATTACK);
+	} else if (command.equals(mgui.actions[TGUIAction.ATD_COUNTERMEASURE].getActionCommand())) {
+            mgui.actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.ATD_COUNTERMEASURE);
         } else if (command.equals(mgui.actions[TGUIAction.ATD_CONSTRAINT].getActionCommand())) {
             mgui.actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.ATD_CONSTRAINT);
         } else if (command.equals(mgui.actions[TGUIAction.ATD_COMPOSITION_CONNECTOR].getActionCommand())) {
             mgui.actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.ATD_COMPOSITION_CONNECTOR);
         } else if (command.equals(mgui.actions[TGUIAction.ATD_ATTACK_CONNECTOR].getActionCommand())) {
             mgui.actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.ATD_ATTACK_CONNECTOR);
+	} else if (command.equals(mgui.actions[TGUIAction.ATD_COUNTERMEASURE_CONNECTOR].getActionCommand())) {
+            mgui.actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.ATD_COUNTERMEASURE_CONNECTOR);
 
             // TURTLE-OS
         } else if (command.equals(mgui.actions[TGUIAction.TOS_TCLASS].getActionCommand())) {
diff --git a/src/ui/TGComponentManager.java b/src/ui/TGComponentManager.java
index 50e4b7d1e0..419cb5488a 100755
--- a/src/ui/TGComponentManager.java
+++ b/src/ui/TGComponentManager.java
@@ -149,6 +149,7 @@ public class TGComponentManager {
 
     public static final int ATD_COMPOSITION_CONNECTOR = 132;
     public static final int ATD_ATTACK_CONNECTOR = 133;
+    public static final int ATD_COUNTERMEASURE_CONNECTOR = 137;
 
     public static final int CONNECTOR_MESSAGE_ASYNC_SDZV = 134;
     public static final int CONNECTOR_MESSAGE_SYNC_SDZV = 135;
@@ -296,6 +297,7 @@ public class TGComponentManager {
     public static final int ATD_BLOCK = 1400;
     public static final int ATD_ATTACK = 1401;
     public static final int ATD_CONSTRAINT = 1402;
+    public static final int ATD_COUNTERMEASURE = 1403;
 
     // TML Communication patterns and TMLSD
     public static final int TMLCP_CHOICE = 1500;
@@ -998,6 +1000,9 @@ public class TGComponentManager {
         case ATD_CONSTRAINT:
             tgc = new ATDConstraint(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
             break;
+	case ATD_COUNTERMEASURE:
+            tgc = new ATDCountermeasure(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
+            break;
         case DIPLODODUSMETHODOLOGY_REF_APPLICATION:
             tgc = new DiplodocusMethodologyDiagramReferenceToApplication(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp);
             break;
@@ -1745,12 +1750,16 @@ public class TGComponentManager {
             return ATD_BLOCK;
         } else if (tgc instanceof ATDAttack) {
             return ATD_ATTACK;
+	} else if (tgc instanceof ATDCountermeasure) {
+            return ATD_COUNTERMEASURE;
         } else if (tgc instanceof ATDConstraint) {
             return ATD_CONSTRAINT;
         } else if (tgc instanceof ATDCompositionConnector) {
             return ATD_COMPOSITION_CONNECTOR;
         } else if (tgc instanceof ATDAttackConnector) {
             return ATD_ATTACK_CONNECTOR;
+	} else if (tgc instanceof ATDCountermeasureConnector) {
+            return ATD_COUNTERMEASURE_CONNECTOR;
         } else if (tgc instanceof DiplodocusMethodologyDiagramReferenceToApplication) {
             return DIPLODODUSMETHODOLOGY_REF_APPLICATION;
         } else if (tgc instanceof DiplodocusMethodologyDiagramReferenceToCP) {
@@ -2205,6 +2214,10 @@ public class TGComponentManager {
         case ATD_ATTACK_CONNECTOR:
             tgc = new ATDAttackConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
             break;
+	case ATD_COUNTERMEASURE_CONNECTOR:
+            tgc = new ATDCountermeasureConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
+            break;
+	    
 
         case DIPLODOCUSMETHODOLOGY_CONNECTOR:
             tgc = new DiplodocusMethodologyConnector(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp, p1, p2, listPoint);
diff --git a/src/ui/TGUIAction.java b/src/ui/TGUIAction.java
index 6f341c06a3..040fdd5d8f 100755
--- a/src/ui/TGUIAction.java
+++ b/src/ui/TGUIAction.java
@@ -348,6 +348,8 @@ public class TGUIAction extends AbstractAction {
     public static final int ATD_ATTACK_CONNECTOR = 286;
     public static final int ATD_COMPOSITION_CONNECTOR = 288;
     public static final int ATD_CONSTRAINT = 287;
+    public static final int ATD_COUNTERMEASURE = 456;
+    public static final int ATD_COUNTERMEASURE_CONNECTOR = 457;
 
     // AVATAR Block Diagram
     public static final int ABD_BLOCK = 289;
@@ -600,7 +602,7 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_INTERNAL_SEARCH = 415;
     //--
 
-    public static final int NB_ACTION = 456;
+    public static final int NB_ACTION = 458;
 
     private  static final TAction [] actions = new TAction[NB_ACTION];
 
@@ -1069,10 +1071,12 @@ public class TGUIAction extends AbstractAction {
 
         // Attack Tree Diagrams
         actions[ATD_BLOCK] = new TAction("atd-block", "Add a block", IconManager.imgic1070, IconManager.imgic1070, "Block", "Add a SysML Block to the currently opened attack tree diagram", 0);
-        actions[ATD_ATTACK] = new TAction("atd-attack", "Add an attack", IconManager.imgic1072, IconManager.imgic1072, " Attack", "Add an attack (i.e. a SysML value type) to the currently opened attack tree diagram", 0);
+        actions[ATD_ATTACK] = new TAction("atd-attack", "Add an attack", IconManager.imgic1072, IconManager.imgic1072, "Attack", "Add an attack (i.e. a SysML value type) to the currently opened attack tree diagram", 0);
         actions[ATD_ATTACK_CONNECTOR] = new TAction("atd-attack-connector", "Add a connector between attacks /constraints", IconManager.imgic1080, IconManager.imgic1080, "Connector", "Add a connector between attacks / constraints of the currently opened attack tree diagram", 0);
         actions[ATD_COMPOSITION_CONNECTOR] = new TAction("atd-composition-connector", "Add a composition connector between blocks", IconManager.imgic1076, IconManager.imgic1076, "Composition connector", "Add a composition between blocks of the currently opened attack tree diagram", 0);
         actions[ATD_CONSTRAINT] = new TAction("atd-constraint", "Add an constraint", IconManager.imgic1078, IconManager.imgic1078, "Constraint", "Add a constraint to the currently opened attack tree diagram", 0);
+	actions[ATD_COUNTERMEASURE] = new TAction("atd-countermeasure", "Add a countermeasure", IconManager.imgic1072, IconManager.imgic1072, "Countermeasure", "Add a countermeasure to the currently opened attack tree diagram", 0);
+	actions[ATD_COUNTERMEASURE_CONNECTOR] = new TAction("atd-countermeasure-connector", "Add a connector between attacks / countermeasures", IconManager.imgic1080, IconManager.imgic1080, "Connector", "Add a connector between attacks / countermeasures of the currently opened attack tree diagram", 0);
 
         // TURTLE-OS
         actions[TOS_TCLASS] = new TAction("add-tclass-os", "Add Tclass", IconManager.imgic104, IconManager.imgic104, "Tclass", "Add a TClass to the currently opened class diagram", 0);
diff --git a/src/ui/atd/ATDAttack.java b/src/ui/atd/ATDAttack.java
index 04168746f1..ec4b3ce9d3 100755
--- a/src/ui/atd/ATDAttack.java
+++ b/src/ui/atd/ATDAttack.java
@@ -83,8 +83,8 @@ public class ATDAttack extends TGCScalableWithInternalComponent implements Swall
         height = (int)(40 * tdp.getZoom());
         minWidth = 100;
 
-        nbConnectingPoint = 12;
-        connectingPoint = new TGConnectingPoint[12];
+        nbConnectingPoint = 24;
+        connectingPoint = new TGConnectingPoint[24];
 
         connectingPoint[0] = new ATDAttackConnectingPoint(this, 0, 0, true, true, 0.5, 0.0);
         connectingPoint[1] = new ATDAttackConnectingPoint(this, 0, 0, true, true, 0.0, 0.5);
@@ -98,6 +98,18 @@ public class ATDAttack extends TGCScalableWithInternalComponent implements Swall
         connectingPoint[9] = new ATDAttackConnectingPoint(this, 0, 0, true, true, 1.0, 0.75);
         connectingPoint[10] = new ATDAttackConnectingPoint(this, 0, 0, true, true, 0.25, 1.0);
         connectingPoint[11] = new ATDAttackConnectingPoint(this, 0, 0, true, true, 0.75, 1.0);
+	connectingPoint[12] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.5, 0.0);
+        connectingPoint[13] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.5);
+        connectingPoint[14] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.5);
+        connectingPoint[15] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.5, 1.0);
+        connectingPoint[16] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.25, 0.0);
+        connectingPoint[17] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.75, 0.0);
+        connectingPoint[18] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.25);
+        connectingPoint[19] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.25);
+        connectingPoint[20] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.75);
+        connectingPoint[21] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.75);
+        connectingPoint[22] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.25, 1.0);
+        connectingPoint[23] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.75, 1.0);
         //addTGConnectingPointsComment();
 
         moveable = true;
diff --git a/src/ui/atd/ATDCountermeasure.java b/src/ui/atd/ATDCountermeasure.java
index 0f17fe962d..1751168ecc 100755
--- a/src/ui/atd/ATDCountermeasure.java
+++ b/src/ui/atd/ATDCountermeasure.java
@@ -51,7 +51,7 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import ui.*;
-import ui.window.JDialogAttack;
+import ui.window.JDialogCountermeasure;
 
 import javax.swing.*;
 import java.awt.*;
@@ -84,17 +84,17 @@ public class ATDCountermeasure extends TGCScalableWithInternalComponent implemen
         connectingPoint = new TGConnectingPoint[12];
 
         connectingPoint[0] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.5, 0.0);
-        connectingPoint[1] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.0, 0.5);
-        connectingPoint[2] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 1.0, 0.5);
-        connectingPoint[3] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.5, 1.0);
-        connectingPoint[4] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.25, 0.0);
-        connectingPoint[5] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.75, 0.0);
-        connectingPoint[6] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.0, 0.25);
-        connectingPoint[7] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 1.0, 0.25);
-        connectingPoint[8] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.0, 0.75);
-        connectingPoint[9] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 1.0, 0.75);
-        connectingPoint[10] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.25, 1.0);
-        connectingPoint[11] = new ATDCountermeasureAttackConnectingPoint(this, 0, 0, true, true, 0.75, 1.0);
+        connectingPoint[1] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.5);
+        connectingPoint[2] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.5);
+        connectingPoint[3] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.5, 1.0);
+        connectingPoint[4] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.25, 0.0);
+        connectingPoint[5] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.75, 0.0);
+        connectingPoint[6] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.25);
+        connectingPoint[7] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.25);
+        connectingPoint[8] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.0, 0.75);
+        connectingPoint[9] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 1.0, 0.75);
+        connectingPoint[10] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.25, 1.0);
+        connectingPoint[11] = new ATDCountermeasureConnectingPoint(this, 0, 0, true, true, 0.75, 1.0);
         //addTGConnectingPointsComment();
 
         moveable = true;
@@ -244,7 +244,7 @@ public class ATDCountermeasure extends TGCScalableWithInternalComponent implemen
         String tmp;
         boolean error = false;
 
-        JDialogAttack dialog = new JDialogAttack(frame, "Setting attack attributes", this);
+        JDialogCountermeasure dialog = new JDialogCountermeasure(frame, "Setting countermeasure attributes", this);
    //     dialog.setSize(450, 350);
         GraphicLib.centerOnParent(dialog, 450, 350);
         dialog.setVisible( true ); // blocked until dialog has been closed
@@ -271,8 +271,6 @@ public class ATDCountermeasure extends TGCScalableWithInternalComponent implemen
             description = dialog.getDescription();
         }
 
-        isRootAttack = dialog.isRootAttack();
-
         if (error) {
             JOptionPane.showMessageDialog(frame,
                                           "Name is non-valid",
diff --git a/src/ui/atd/AttackTreeDiagramToolbar.java b/src/ui/atd/AttackTreeDiagramToolbar.java
index c3318ef1a5..e07734001e 100755
--- a/src/ui/atd/AttackTreeDiagramToolbar.java
+++ b/src/ui/atd/AttackTreeDiagramToolbar.java
@@ -82,6 +82,9 @@ public class AttackTreeDiagramToolbar extends TToolBar {
 
         mgui.actions[TGUIAction.ATD_CONSTRAINT].setEnabled(b);
 
+	mgui.actions[TGUIAction.ATD_COUNTERMEASURE].setEnabled(b);
+	mgui.actions[TGUIAction.ATD_COUNTERMEASURE_CONNECTOR].setEnabled(b);
+
         mgui.actions[TGUIAction.ACT_TOGGLE_ATTR].setEnabled(b);
 	mgui.actions[TGUIAction.ACT_MODEL_CHECKING].setEnabled(b);
 
@@ -124,6 +127,12 @@ public class AttackTreeDiagramToolbar extends TToolBar {
         button = this.add(mgui.actions[TGUIAction.ATD_ATTACK_CONNECTOR]);
         button.addMouseListener(mgui.mouseHandler);
 
+	this.addSeparator();
+	button = this.add(mgui.actions[TGUIAction.ATD_COUNTERMEASURE]);
+        button.addMouseListener(mgui.mouseHandler);
+	button = this.add(mgui.actions[TGUIAction.ATD_COUNTERMEASURE_CONNECTOR]);
+        button.addMouseListener(mgui.mouseHandler);
+	
         this.addSeparator();
         this.addSeparator();
 
diff --git a/src/ui/window/JDialogCountermeasure.java b/src/ui/window/JDialogCountermeasure.java
new file mode 100755
index 0000000000..983efb5b9f
--- /dev/null
+++ b/src/ui/window/JDialogCountermeasure.java
@@ -0,0 +1,181 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ *
+ * ludovic.apvrille AT enst.fr
+ *
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ *
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ *
+ * /**
+ * Class JDialogAttack
+ * Dialog for managing atatck attributes
+ * Creation: 07/06/2017
+ * @version 1.0 07/06/2017
+ * @author Ludovic APVRILLE
+ * @see
+ */
+
+package ui.window;
+
+import ui.IconManager;
+import ui.atd.ATDCountermeasure;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+//import javax.swing.event.*;
+
+
+public class JDialogCountermeasure extends javax.swing.JDialog implements ActionListener  {
+
+    private boolean regularClose;
+
+    private JPanel panel2;
+    private Frame frame;
+
+    //protected JTextField taskName;
+    protected JTextField name, description;
+
+    // Main Panel
+    private JButton closeButton;
+    private JButton cancelButton;
+
+    private ATDCountermeasure countermeasure;
+
+    /** Creates new form  */
+    public JDialogCountermeasure(Frame _frame, String _title, ATDCountermeasure _countermeasure) {
+        super(_frame, _title, true);
+        frame = _frame;
+        countermeasure = _countermeasure;
+
+        initComponents();
+        myInitComponents();
+        pack();
+    }
+
+    private void myInitComponents() {
+    }
+
+    private void initComponents() {
+        Container c = getContentPane();
+        GridBagLayout gridbag0 = new GridBagLayout();
+        GridBagLayout gridbag1 = new GridBagLayout();
+        GridBagLayout gridbag2 = new GridBagLayout();
+        GridBagConstraints c0 = new GridBagConstraints();
+        GridBagConstraints c1 = new GridBagConstraints();
+        GridBagConstraints c2 = new GridBagConstraints();
+
+        setFont(new Font("Helvetica", Font.PLAIN, 14));
+        c.setLayout(gridbag0);
+
+        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+
+        panel2 = new JPanel();
+        panel2.setLayout(gridbag2);
+        panel2.setBorder(new javax.swing.border.TitledBorder("Attack attributes"));
+        panel2.setPreferredSize(new Dimension(350, 250));
+
+        c1.gridwidth = 1;
+        c1.gridheight = 1;
+        c1.weighty = 1.0;
+        c1.weightx = 1.0;
+        c1.gridwidth = 1;
+        c1.fill = GridBagConstraints.HORIZONTAL;
+        panel2.add(new JLabel("Name:"), c2);
+        c1.gridwidth = GridBagConstraints.REMAINDER; //end row
+        name = new JTextField(countermeasure.getCountermeasureName());
+        panel2.add(name, c1);
+
+        c1.gridwidth = 1;
+        c1.fill = GridBagConstraints.HORIZONTAL;
+        panel2.add(new JLabel("Description:"), c2);
+        c1.gridwidth = GridBagConstraints.REMAINDER; //end row
+        description = new JTextField(countermeasure.getDescription());
+        panel2.add(description, c1);
+
+        // main panel;
+        c0.gridheight = 10;
+        c0.weighty = 1.0;
+        c0.weightx = 1.0;
+        c0.gridwidth = GridBagConstraints.REMAINDER; //end row
+        c.add(panel2, c0);
+
+        c0.gridwidth = 1;
+        c0.gridheight = 1;
+        c0.fill = GridBagConstraints.HORIZONTAL;
+        closeButton = new JButton("Save and Close", IconManager.imgic25);
+        //closeButton.setPreferredSize(new Dimension(600, 50));
+        closeButton.addActionListener(this);
+        c.add(closeButton, c0);
+        c0.gridwidth = GridBagConstraints.REMAINDER; //end row
+        cancelButton = new JButton("Cancel", IconManager.imgic27);
+        cancelButton.addActionListener(this);
+        c.add(cancelButton, c0);
+    }
+
+    public void actionPerformed(ActionEvent evt)  {
+        String command = evt.getActionCommand();
+
+        // Compare the action command to the known actions.
+        if (command.equals("Save and Close"))  {
+            closeDialog();
+        } else if (command.equals("Cancel")) {
+            cancelDialog();
+        }
+    }
+
+    public void closeDialog() {
+        regularClose = true;
+        dispose();
+    }
+
+    public void cancelDialog() {
+        dispose();
+    }
+
+    public boolean isRegularClose() {
+        return regularClose;
+    }
+
+    public String getDescription() {
+        return description.getText();
+    }
+
+    public String getName() {
+        return name.getText();
+    }
+
+ 
+}
-- 
GitLab