source: trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swing/DlgInsert.java @ 164

Last change on this file since 164 was 164, checked in by jhall, 13 years ago

Implemented a new way to build the tree view - work in progress

  • Property svn:mime-type set to text/plain
File size: 12.7 KB
RevLine 
[132]1package de.ugoe.cs.eventbench.swing;
2
3import java.awt.BorderLayout;
[155]4import java.util.ArrayList;
[164]5import java.util.Enumeration;
[132]6import java.util.List;
[134]7
8import de.ugoe.cs.eventbench.assertions.AssertEvent;
9import de.ugoe.cs.eventbench.assertions.FileEqualsReplay;
10import de.ugoe.cs.eventbench.assertions.TextEqualsReplay;
[132]11import de.ugoe.cs.eventbench.data.Event;
[144]12import de.ugoe.cs.eventbench.data.GlobalDataContainer;
13import de.ugoe.cs.util.console.Console;
[132]14
15import javax.swing.JButton;
16import javax.swing.JDialog;
17import javax.swing.JPanel;
18import javax.swing.border.EmptyBorder;
19import javax.swing.JComboBox;
20import javax.swing.JLabel;
21import javax.swing.JTextField;
22import javax.swing.DefaultComboBoxModel;
23import javax.swing.JOptionPane;
24import javax.swing.JFileChooser;
25import java.awt.event.MouseAdapter;
26import java.awt.event.MouseEvent;
27import java.io.File;
28import java.awt.event.ActionListener;
29import java.awt.event.ActionEvent;
30import javax.swing.JScrollPane;
31import javax.swing.JList;
[155]32import javax.swing.border.EtchedBorder;
33import javax.swing.JTree;
34import javax.swing.tree.DefaultTreeModel;
35import javax.swing.tree.DefaultMutableTreeNode;
[164]36import javax.swing.tree.TreePath;
37import javax.swing.event.TreeSelectionListener;
38import javax.swing.event.TreeSelectionEvent;
[132]39
40public class DlgInsert extends JDialog {
[139]41
[134]42        /**
43         * Id for object serialization.
44         */
45        private static final long serialVersionUID = 1L;
[132]46
47        private final JPanel contentPanel = new JPanel();
48        private JTextField textFieldExpectedValue;
[134]49        private JTextField textFieldActualFile;
50        private JTextField textFieldExpectedFile;
[132]51
52        /**
53         * Launch the application.
54         */
[139]55        public static void showDialog(List<Event<?>> sequences, int selectedIndex,
56                        final boolean insertBefore) {
[132]57                try {
[139]58                        DlgInsert dialog = new DlgInsert(sequences, selectedIndex,
59                                        insertBefore);
[132]60                        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
61                        dialog.setVisible(true);
62                } catch (Exception e) {
63                        e.printStackTrace();
64                }
65        }
66
67        /**
68         * Create the dialog.
69         */
[144]70        @SuppressWarnings("unchecked")
[139]71        public DlgInsert(final List<Event<?>> sequences, final int selectedIndex,
72                        final boolean insertBefore) {
73
[132]74                final javax.swing.DefaultListModel modelListTargets = new javax.swing.DefaultListModel();
[139]75
[132]76                setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
77                setTitle("Insert testcase");
[139]78
[132]79                setModal(true);
[155]80                setBounds(100, 100, 530, 631);
[132]81                getContentPane().setLayout(new BorderLayout());
82                contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
83                getContentPane().add(contentPanel, BorderLayout.CENTER);
84                contentPanel.setLayout(null);
85                final JComboBox comboBoxTestcase = new JComboBox();
86                final JPanel panelTextEquals = new JPanel();
[164]87                panelTextEquals.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null,
88                                null));
[132]89                final JPanel panelFileEquals = new JPanel();
[164]90                panelFileEquals.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null,
91                                null));
[139]92
[132]93                // JComboBox: comboBoxTestcase
94                comboBoxTestcase.addActionListener(new ActionListener() {
95                        public void actionPerformed(ActionEvent arg0) {
96                                if ("comboBoxChanged".equals(arg0.getActionCommand())) {
[139]97
98                                        // TextEquals
99                                        if (comboBoxTestcase.getSelectedIndex() == 0) {
[132]100                                                panelTextEquals.setVisible(true);
101                                                panelFileEquals.setVisible(false);
102                                        }
[139]103                                        // FileEquals
104                                        else if (comboBoxTestcase.getSelectedIndex() == 1) {
[132]105                                                panelTextEquals.setVisible(false);
106                                                panelFileEquals.setVisible(true);
107                                        }
108                                }
109                        }
110                });
[139]111                comboBoxTestcase.setModel(new DefaultComboBoxModel(new String[] {
112                                "TextEquals", "OutputFileEquals" }));
[132]113                comboBoxTestcase.setSelectedIndex(0);
[155]114                comboBoxTestcase.setBounds(91, 11, 178, 20);
[132]115                contentPanel.add(comboBoxTestcase);
116                // ***
[139]117
118                // JLabel
[132]119                JLabel label = new JLabel("Testcase:");
[155]120                label.setBounds(12, 14, 86, 14);
[132]121                contentPanel.add(label);
[139]122
[132]123                JLabel label_1 = new JLabel("Expected value:");
[155]124                label_1.setBounds(10, 11, 96, 14);
[139]125
[132]126                JLabel label_2 = new JLabel("Target:");
127                label_2.setBounds(10, 38, 86, 14);
128                // ***
[139]129
[132]130                // JTextField: textFieldExpectedValue
131                textFieldExpectedValue = new JTextField();
132                textFieldExpectedValue.setColumns(10);
133                textFieldExpectedValue.setBounds(116, 8, 368, 20);
134                // ***
[139]135
[132]136                // JPanel: panel
137                panelTextEquals.setLayout(null);
[155]138                panelTextEquals.setBounds(10, 39, 494, 350);
[132]139                contentPanel.add(panelTextEquals);
140                panelTextEquals.add(label_1);
141                panelTextEquals.add(label_2);
142                panelTextEquals.add(textFieldExpectedValue);
[139]143
[132]144                JScrollPane scrollPane = new JScrollPane();
[155]145                scrollPane.setBounds(421, 36, 63, 14);
[132]146                panelTextEquals.add(scrollPane);
[139]147
[164]148                final JList listTargets = new JList(modelListTargets);
[132]149                scrollPane.setViewportView(listTargets);
[164]150
[155]151                JScrollPane scrollPane_1 = new JScrollPane();
152                scrollPane_1.setBounds(10, 63, 474, 276);
153                panelTextEquals.add(scrollPane_1);
[139]154
[164]155                // JTree to hold the targets
156                final JTree tree = new JTree();
157                tree.addTreeSelectionListener(new TreeSelectionListener() {
158                        public void valueChanged(TreeSelectionEvent arg0) {
159                                TreePath path = tree.getSelectionPath();
160                                textFieldExpectedValue.setText(path.toString());
161                        }
162                });
163                DefaultTreeModel treeModel = new DefaultTreeModel(null);
164                DefaultMutableTreeNode root = new DefaultMutableTreeNode("Targets");
165                treeModel.setRoot(root);
166                tree.setModel(treeModel);
167
168                // List<DefaultMutableTreeNode> nodes = new
169                // ArrayList<DefaultMutableTreeNode>();
170                List<String> listTargets1 = new ArrayList<String>(); // targets out of
171                                                                                                                                // GlobalDataContainer
172                List<String> sortedTargets = new ArrayList<String>(); // targets will be
173                                                                                                                                // sorted by
174                                                                                                                                // number of
175                                                                                                                                // parts,
176                                                                                                                                // splitted at
177                                                                                                                                // "/>"
178
179                try {
180                        listTargets1 = (List<String>) GlobalDataContainer.getInstance()
181                                        .getData("ListTargets");
182                } catch (ClassCastException e) {
183                        Console.println("Not able to cast data in GlobalDataContainer to List of Strings");
184                }
185
186                int parts = 1;
187                while (sortedTargets.size() < listTargets1.size()) {
188                        for (int i = 0; i < listTargets1.size(); i++) {
189                                String splitted[] = listTargets1.get(i).split("/>");
190
191                                // sort targets by number of parts
192                                if (splitted.length != parts)
193                                        continue;
194
195                                sortedTargets.add(listTargets1.get(i));
196
197                                // insert in tree
198                                DefaultMutableTreeNode node = compareTargetWithNode(root,
199                                                listTargets1.get(i));
200
201                                if (node == null) {
202                                        DefaultMutableTreeNode newNode[] = new DefaultMutableTreeNode[splitted.length];
203
204                                        for (int j = 0; j < splitted.length; j++) {
205                                                newNode[j] = new DefaultMutableTreeNode(splitted[j]
206                                                                + "/>");
207
208                                                if (j == 0) {
209                                                        root.add(newNode[0]);
210                                                } else {
211                                                        newNode[j - 1].add(newNode[j]);
212                                                }
[155]213                                        }
[164]214                                } else {
215                                        for (int j = 0; j < splitted.length; j++) {
216                                                if (node.toString().compareTo(splitted[j] + "/>") != 0)
217                                                        continue;
218
219                                                DefaultMutableTreeNode newNode[] = new DefaultMutableTreeNode[splitted.length
220                                                                - j - 1];
221                                                for (int k = 0; k < newNode.length; k++) {
222                                                        newNode[k] = new DefaultMutableTreeNode(splitted[j
223                                                                        + k + 1]
224                                                                        + "/>");
225
226                                                        if (k == 0) {
227                                                                node.add(newNode[0]);
228                                                        } else {
229                                                                newNode[k - 1].add(newNode[k]);
[155]230                                                        }
231                                                }
232                                        }
233                                }
[144]234                        }
[164]235                        parts++;
236                }
[155]237                scrollPane_1.setViewportView(tree);
[144]238
239                if (listTargets.getComponentCount() > 0)
240                        listTargets.setSelectedIndex(0);
241
[155]242                panelFileEquals.setBounds(12, 400, 494, 120);
[132]243                contentPanel.add(panelFileEquals);
244                panelFileEquals.setLayout(null);
245                panelFileEquals.setVisible(false);
[139]246
[134]247                JLabel lblNewLabel = new JLabel("Actual file:");
248                lblNewLabel.setBounds(10, 11, 89, 14);
[132]249                panelFileEquals.add(lblNewLabel);
[139]250
[134]251                textFieldActualFile = new JTextField();
[155]252                textFieldActualFile.setBounds(10, 30, 474, 20);
[134]253                panelFileEquals.add(textFieldActualFile);
254                textFieldActualFile.setColumns(10);
[139]255
[132]256                JButton btnNewButton = new JButton("Search file");
257                btnNewButton.addMouseListener(new MouseAdapter() {
258                        public void mouseClicked(MouseEvent arg0) {
259                                final JFileChooser fc = new JFileChooser();
[139]260                                if (fc.showOpenDialog(contentPanel) == 0) {
261                                        textFieldExpectedFile.setText(fc.getSelectedFile()
262                                                        .getAbsolutePath());
263                                }
[132]264                        }
265                });
[155]266                btnNewButton.setBounds(93, 61, 89, 23);
[132]267                panelFileEquals.add(btnNewButton);
[139]268
[134]269                JLabel lblNewLabel_1 = new JLabel("Expected file:");
[155]270                lblNewLabel_1.setBounds(10, 70, 89, 14);
[132]271                panelFileEquals.add(lblNewLabel_1);
[139]272
[134]273                textFieldExpectedFile = new JTextField();
274                textFieldExpectedFile.setColumns(10);
[155]275                textFieldExpectedFile.setBounds(10, 88, 474, 20);
[134]276                panelFileEquals.add(textFieldExpectedFile);
[132]277                {
278                        JPanel buttonPane = new JPanel();
[164]279                        buttonPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null,
280                                        null));
[155]281                        buttonPane.setBounds(12, 531, 494, 51);
282                        contentPanel.add(buttonPane);
[132]283                        {
284                                // JButton: okButton
285                                JButton okButton = new JButton("Insert");
[155]286                                okButton.setBounds(349, 11, 135, 31);
[132]287                                okButton.addMouseListener(new MouseAdapter() {
288                                        public void mouseClicked(MouseEvent arg0) {
[139]289
290                                                // FileEquals
291                                                if (panelFileEquals.isVisible()) {
292                                                        if (textFieldActualFile.getText().length() == 0)
293                                                                JOptionPane.showMessageDialog(null,
294                                                                                "Please declare an actual file.",
295                                                                                "No actual file declared",
296                                                                                JOptionPane.OK_OPTION);
297                                                        else if (!new File(textFieldExpectedFile.getText())
298                                                                        .exists()) {
299                                                                if (textFieldExpectedFile.getText().length() == 0)
300                                                                        JOptionPane.showMessageDialog(null,
301                                                                                        "Please choose an expected file.",
302                                                                                        "No expected file chosen",
303                                                                                        JOptionPane.OK_OPTION);
304                                                                else
305                                                                        JOptionPane.showMessageDialog(
306                                                                                        null,
307                                                                                        "The expected file \""
308                                                                                                        + textFieldActualFile
309                                                                                                                        .getText()
310                                                                                                        + "\" does not exist.",
311                                                                                        "Expected file does not exist",
312                                                                                        JOptionPane.OK_OPTION);
[132]313                                                                return;
[139]314                                                        } else {
[134]315                                                                FileEqualsReplay file = new FileEqualsReplay();
[139]316                                                                file.setActualFile(textFieldActualFile
317                                                                                .getText());
318                                                                file.setExpectedFile(textFieldExpectedFile
319                                                                                .getText());
320
321                                                                AssertEvent<FileEqualsReplay> e = new AssertEvent<FileEqualsReplay>(
322                                                                                "FileEquals");
[134]323                                                                e.addReplayEvent(file);
[132]324                                                                e.setTarget(" ");
[139]325                                                                if (insertBefore)
326                                                                        sequences.add(selectedIndex, e);
327                                                                else
328                                                                        sequences.add(selectedIndex + 1, e);
[132]329                                                        }
330                                                }
[139]331                                                // TextEquals
[132]332                                                else {
[139]333                                                        if (textFieldExpectedValue.getText().length() == 0) {
334                                                                JOptionPane
335                                                                                .showMessageDialog(
336                                                                                                null,
337                                                                                                "\"Expected value\" is missing.",
338                                                                                                "Expected value",
339                                                                                                JOptionPane.OK_OPTION);
[132]340                                                                return;
[139]341                                                        } else if (listTargets.getSelectedIndex() == -1) {
342                                                                JOptionPane.showMessageDialog(null,
343                                                                                "Please select a target.",
344                                                                                "No target selected",
345                                                                                JOptionPane.OK_OPTION);
[134]346                                                                return;
[139]347                                                        } else {
[134]348                                                                TextEqualsReplay text = new TextEqualsReplay();
[139]349                                                                text.setExpectedValue(textFieldExpectedValue
350                                                                                .getText());
351                                                                text.setTarget(modelListTargets.get(
352                                                                                listTargets.getSelectedIndex())
353                                                                                .toString());
354
355                                                                AssertEvent<TextEqualsReplay> e = new AssertEvent<TextEqualsReplay>(
356                                                                                "TextEquals");
[134]357                                                                e.addReplayEvent(text);
[132]358                                                                e.setTarget(" ");
[139]359                                                                if (insertBefore)
360                                                                        sequences.add(selectedIndex, e);
361                                                                else
362                                                                        sequences.add(selectedIndex + 1, e);
[132]363                                                        }
364                                                }
[139]365
[132]366                                                dispose();
367                                        }
368                                });
[155]369                                buttonPane.setLayout(null);
[132]370                                okButton.setActionCommand("OK");
371                                buttonPane.add(okButton);
372                                getRootPane().setDefaultButton(okButton);
373                                // ***
374                        }
[139]375
[132]376                        {
377                                // JButton: cancelButton
378                                JButton cancelButton = new JButton("Cancel");
[155]379                                cancelButton.setBounds(10, 11, 135, 31);
[132]380                                cancelButton.addMouseListener(new MouseAdapter() {
[139]381
382                                        public void mouseClicked(MouseEvent arg0) {
383                                                dispose();
384                                        }
[132]385                                });
386                                cancelButton.setActionCommand("Cancel");
387                                buttonPane.add(cancelButton);
388                                // ***
389                        }
390                }
391                // ***
392        }
[164]393
394        DefaultMutableTreeNode compareTargetWithNode(DefaultMutableTreeNode node,
395                        String target) {
396
397                if (node.isLeaf()) {
398                        if (target.contains(node.toString()))
399                                return node;
400                        else
401                                return null;
402                } else {
403                        for (@SuppressWarnings("unchecked")
404                        Enumeration<DefaultMutableTreeNode> e = node.children(); e
405                                        .hasMoreElements();) {
406                                DefaultMutableTreeNode nodeReturn = compareTargetWithNode(
407                                                e.nextElement(), target);
408                                if (nodeReturn == null) {
409                                        if (target.contains(node.toString()))
410                                                return node;
411                                } else
412                                        return nodeReturn;
413                        }
414                }
415
416                return null;
417        }
418}
Note: See TracBrowser for help on using the repository browser.