source: scenarios/InTheWild/cmionInTheWild/src/cmion/inTheWild/woz/ITWEmysWozFrame.java @ 1470

Revision 1470, 31.3 KB checked in by muk7, 7 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1/*     
2    CMION classes for "in the wild" scenario
3        Copyright(C) 2009 Heriot Watt University
4
5        This library is free software; you can redistribute it and/or
6        modify it under the terms of the GNU Lesser General Public
7        License as published by the Free Software Foundation; either
8        version 2.1 of the License, or (at your option) any later version.
9
10        This library is distributed in the hope that it will be useful,
11        but WITHOUT ANY WARRANTY; without even the implied warranty of
12        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13        Lesser General Public License for more details.
14
15        You should have received a copy of the GNU Lesser General Public
16        License along with this library; if not, write to the Free Software
17        Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18
19        Authors:  Michael Kriegel
20
21        Revision History:
22  ---
23  27/11/2009      Michael Kriegel <mk95@hw.ac.uk>
24  First version.
25  --- 
26*/
27
28package cmion.inTheWild.woz;
29import java.awt.BorderLayout;
30import java.awt.event.ActionEvent;
31import java.awt.event.ActionListener;
32import java.io.File;
33import java.io.FileNotFoundException;
34import java.io.FileOutputStream;
35import java.io.IOException;
36import java.text.SimpleDateFormat;
37import java.util.ArrayList;
38import java.util.Calendar;
39import java.util.HashMap;
40import java.util.LinkedList;
41
42import javax.swing.BorderFactory;
43
44import javax.swing.AbstractAction;
45import javax.swing.ComboBoxModel;
46import javax.swing.DefaultComboBoxModel;
47import javax.swing.JButton;
48import javax.swing.JComboBox;
49import javax.swing.JFileChooser;
50import javax.swing.JLabel;
51import javax.swing.JMenu;
52import javax.swing.JMenuBar;
53import javax.swing.JMenuItem;
54import javax.swing.JPanel;
55import javax.swing.JScrollPane;
56import javax.swing.JSpinner;
57import javax.swing.JTable;
58import javax.swing.JTextArea;
59import javax.swing.JTextField;
60import javax.swing.KeyStroke;
61import javax.swing.SpinnerListModel;
62
63import javax.swing.WindowConstants;
64import javax.swing.border.BevelBorder;
65import javax.swing.event.ListSelectionEvent;
66import javax.swing.event.ListSelectionListener;
67import javax.swing.table.AbstractTableModel;
68import javax.swing.table.DefaultTableModel;
69import javax.swing.table.TableModel;
70import javax.swing.SwingUtilities;
71import javax.xml.parsers.DocumentBuilder;
72import javax.xml.parsers.DocumentBuilderFactory;
73import javax.xml.parsers.ParserConfigurationException;
74
75import org.w3c.dom.Document;
76import org.w3c.dom.Element;
77import org.w3c.dom.NamedNodeMap;
78import org.w3c.dom.NodeList;
79import org.w3c.dom.Text;
80import org.xml.sax.SAXException;
81
82import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
83import com.sun.org.apache.xml.internal.serialize.*;
84
85import cmion.level3.MindAction;
86
87
88/**
89* The main frame for the Woz interface for the in the wild scenario
90*
91* This code was edited or generated using CloudGarden's Jigloo
92* SWT/Swing GUI Builder, which is free for non-commercial
93* use. If Jigloo is being used commercially (ie, by a corporation,
94* company or business for any purpose whatever) then you
95* should purchase a license for each developer using Jigloo.
96* Please visit www.cloudgarden.com for details.
97* Use of Jigloo implies acceptance of these licensing terms.
98* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
99* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
100* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
101*/
102public class ITWEmysWozFrame extends javax.swing.JFrame implements ActionListener, ListSelectionListener
103{
104
105        /** a class to associate names to phone numbers */
106        public class Person
107        {
108                private String phoneNo;
109               
110                private String name;
111               
112                public Person(String phoneNo)
113                {
114                        this.phoneNo = phoneNo;
115                        this.name = "";
116                }
117
118                public String getPhoneNo() {
119                        return phoneNo;
120                }
121
122                public void setName(String name) {
123                        this.name = name;
124                }
125
126                public String getName() {
127                        return name;
128                }
129               
130                public boolean hasName()
131                {
132                        if (!name.trim().equals(""))
133                                return true;
134                        else
135                                return false;
136                }
137               
138                @Override
139                public String toString()
140                {
141                        if (hasName())
142                                return name;
143                        else
144                                return phoneNo;
145                }       
146               
147        }
148
149        /** custom table model class for the chat log table */
150        private class ChatLogTableModel extends AbstractTableModel
151        {
152                private static final long serialVersionUID = 1L;
153               
154                private LinkedList<ArrayList<Object>> data;
155            private String[] columnNames;
156               
157            public ChatLogTableModel()
158            {
159                columnNames = new String[] { "Sender", "Message", "Time" };     
160                data = new LinkedList<ArrayList<Object>>();
161            }
162           
163           
164           
165            public void addRow(Person sender, String message, String time)
166            {
167                ArrayList<Object> newRow = new ArrayList<Object>();
168                newRow.add(sender);
169                newRow.add(message);
170                newRow.add(time);
171                data.addFirst(newRow);
172                this.fireTableRowsInserted(0, 0);
173            }
174           
175            @Override
176            public int getColumnCount() {
177                return columnNames.length;
178            }
179
180            @Override
181            public int getRowCount() {
182                return data.size();
183            }
184
185            @Override
186            public String getColumnName(int col) {
187                return columnNames[col];
188            }
189
190            @Override
191            public Object getValueAt(int row, int col) {
192                return data.get(row).get(col);
193            }
194
195        }
196
197        {
198                //Set Look & Feel
199                try {
200                        javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
201                } catch(Exception e) {
202                        e.printStackTrace();
203                }
204        }
205
206
207        private static final long serialVersionUID = 1L;
208
209        private JPanel jPanel1;
210        private JLabel jLabel4;
211        private JLabel jLabel5;
212        private JLabel jLabel11;
213        private JLabel jLabel10;
214        private JLabel jLabel9;
215        private JComboBox comboBoxReceiver;
216        private JLabel jLabel8;
217        private JComboBox comboBoxCommon;
218        private JLabel lblLeft;
219        private JButton btnSetGaze;
220        private JComboBox comboBoxTask;
221        private JLabel jLabel20;
222        private JComboBox comboBoxDontUnderstand;
223        private JLabel jLabel19;
224        private JComboBox comboBoxSmallTalk;
225        private JLabel jLabel18;
226        private JComboBox comboBoxLocations;
227        private JLabel jLabel17;
228        private JLabel jLabel16;
229        private JLabel jLabel15;
230        private JSpinner jSpinnerWhichTemplate;
231        private JComboBox comboBoxGaze;
232        private JLabel jLabel14;
233        private JButton btnMigrate;
234        private JComboBox comboBoxMigrate;
235        private JLabel jLabel13;
236        private JLabel lblRight;
237        private JTextField txtFieldRight;
238        private JTextField txtFieldLeft;
239        private JTable jTable1;
240        private JScrollPane jScrollPane1;
241        private JMenuItem menuItemSave;
242        private JMenuItem menuItemLoad;
243        private JMenu menuFile;
244        private JMenuBar jMenuBar1;
245        private JButton btnNewTemplate;
246        private JLabel jLabel12;
247        private JLabel jLabel6;
248        private JTextField txtFieldPhoneBookName;
249        private JButton btnSetAlias;
250        private JTextField txtFieldPhoneBookNo;
251        private JLabel jLabel7;
252        private JButton btnSendText;
253        private JButton btnTalk;
254        private JTextArea jTextAreaTalk;
255        private JButton btnShowChoice;
256        private JComboBox comboBoxEmotion;
257        private JButton btnSetEmotion;
258        private JLabel jLabel3;
259        private JLabel jLabel2;
260        private JLabel jLabel1;
261
262        /** the cmion component that owns this window */
263        private ITWEmysWoz parentMindConnector;
264       
265        /** the table model that stores the table data */
266        private ChatLogTableModel tableModel;
267       
268        /** all known persons indexed by their phone no */
269        private HashMap<String,Person> phonebook;
270       
271        /** the person representing sarah */
272        private Person sarahPerson;
273       
274        private HashMap<String, JComboBox> templateCategories;
275       
276        /** file chooser for selecting files to save to and load from*/
277        final JFileChooser fc; 
278       
279        /**
280        * Auto-generated main method to display this JFrame
281        */
282        public static void main(String[] args) {
283                SwingUtilities.invokeLater(new Runnable() {
284                        public void run() {
285                                ITWEmysWozFrame inst = new ITWEmysWozFrame(null);
286                                inst.setLocationRelativeTo(null);
287                                inst.setVisible(true);
288                        }
289                });
290        }
291       
292        public ITWEmysWozFrame(ITWEmysWoz parentMindConnector)
293        {
294                super();
295                this.parentMindConnector = parentMindConnector;
296                tableModel = new ChatLogTableModel();
297                phonebook = new HashMap<String,Person>();
298                sarahPerson = new Person("----");
299                sarahPerson.setName("Sarah");
300                fc = new JFileChooser();
301                /*
302                FileFilter ff = new FileFilter()
303                {
304
305                        @Override
306                        public boolean accept(File arg0) {
307                                if (arg0.getName().endsWith(".xml"))
308                                        return true;
309                                else
310                                        return false;
311                        }
312
313                        @Override
314                        public String getDescription() {
315                                return "XML Files";
316                        }
317                };
318                fc.setFileFilter(ff); */
319               
320                initGUI();
321               
322                prepareTemplates();
323                prepareTable();
324                updateReceiverList();
325        }
326       
327        private void prepareTemplates()
328        {
329                // associate the combo boxes for categories with the category names
330                templateCategories = new HashMap<String,JComboBox>();
331                templateCategories.put("Common", comboBoxCommon);
332                templateCategories.put("Locations", comboBoxLocations);
333                templateCategories.put("SmallTalk", comboBoxSmallTalk);
334                templateCategories.put("DontUnderstand", comboBoxDontUnderstand);
335                templateCategories.put("Task", comboBoxTask);
336               
337                // put the category names in the spinner
338                SpinnerListModel jSpinnerWhichTemplateModel =
339                        new SpinnerListModel(templateCategories.keySet().toArray());
340                jSpinnerWhichTemplate.setModel(jSpinnerWhichTemplateModel);
341
342        }
343       
344        private void prepareTable()
345        {
346                // set the table model (associate table data with view)
347                jTable1.setModel(tableModel);
348               
349                // set single item selection for table
350                jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
351               
352                // set this class as list selection listener for table
353                jTable1.getSelectionModel().addListSelectionListener(this);
354               
355        }
356       
357        /** update the combo box for choosing receivers of sent sms */
358        private void updateReceiverList()
359        {
360                ComboBoxModel comboBoxReceiverModel =
361                        new DefaultComboBoxModel( phonebook.values().toArray() );
362                comboBoxReceiver.setModel(comboBoxReceiverModel);
363                if (phonebook.size() == 0)
364                        this.btnSendText.setEnabled(false);
365                else
366                        this.btnSendText.setEnabled(true);
367        }
368
369        private void initGUI() {
370                try {
371                        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
372                        this.setTitle("WoZ interface: in the wild");
373                        {
374                                jPanel1 = new JPanel();
375                                getContentPane().add(jPanel1, BorderLayout.CENTER);
376                                jPanel1.setLayout(null);
377                                jPanel1.setPreferredSize(new java.awt.Dimension(637, 445));
378                                jPanel1.setBackground(new java.awt.Color(128,128,128));
379                                jPanel1.setForeground(new java.awt.Color(0,0,0));
380                                {
381                                        jLabel1 = new JLabel();
382                                        jPanel1.add(jLabel1);
383                                        jLabel1.setText("chat log (txt messages + Sarah talk):");
384                                        jLabel1.setBounds(10, 7, 226, 14);
385                                        jLabel1.setFont(new java.awt.Font("Tahoma",1,11));
386                                        jLabel1.setForeground(new java.awt.Color(255,255,255));
387                                }
388                                {
389                                        jLabel2 = new JLabel();
390                                        jPanel1.add(jLabel2);
391                                        jLabel2.setText("remote control Sarah:");
392                                        jLabel2.setFont(new java.awt.Font("Tahoma",1,11));
393                                        jLabel2.setBounds(10, 143, 169, 14);
394                                        jLabel2.setForeground(new java.awt.Color(255,255,255));
395                                }
396                                {
397                                        jLabel3 = new JLabel();
398                                        jPanel1.add(jLabel3);
399                                        jLabel3.setText("emotion:");
400                                        jLabel3.setBounds(29, 166, 55, 14);
401                                        jLabel3.setForeground(new java.awt.Color(255,255,255));
402                                }
403                                {
404                                        btnSetEmotion = new JButton();
405                                        jPanel1.add(btnSetEmotion);
406                                        btnSetEmotion.setText("resend");
407                                        btnSetEmotion.setBounds(209, 160, 71, 23);
408                                        btnSetEmotion.addActionListener(this);
409                                }
410                                {
411                                        jLabel4 = new JLabel();
412                                        jPanel1.add(jLabel4);
413                                        jLabel4.setText("display binary choice");
414                                        jLabel4.setBounds(16, 225, 182, 14);
415                                        jLabel4.setForeground(new java.awt.Color(255,255,255));
416                                }
417                                {
418                                        ComboBoxModel comboBoxEmotionModel =
419                                                new DefaultComboBoxModel(
420                                                                new String[] { "Anger1", "Anger2", "Anger3", "Anger4", "Anger5",
421                                                                                "Disgust1", "Disgust2", "Disgust3", "Disgust4", "Disgust5",
422                                                                                "Joy1", "Joy2", "Joy3", "Joy4", "Joy5",
423                                                                                "Sadness1", "Sadness2", "Sadness3", "Sadness4", "Sadness5",
424                                                                                "Fear1", "Fear2", "Fear3", "Fear4", "Fear5",
425                                                                                "Surprise1", "Surprise2", "Surprise3", "Surprise4", "Surprise5"});
426                                        comboBoxEmotion = new JComboBox();
427                                        jPanel1.add(comboBoxEmotion);
428                                        comboBoxEmotion.setModel(comboBoxEmotionModel);
429                                        comboBoxEmotion.setBounds(83, 161, 120, 23);
430                                        comboBoxEmotion.addActionListener(this);
431                                }
432                                {
433                                        btnShowChoice = new JButton();
434                                        jPanel1.add(btnShowChoice);
435                                        btnShowChoice.setText("display");
436                                        btnShowChoice.setBounds(418, 221, 83, 22);
437                                        btnShowChoice.addActionListener(this);
438                                }
439                                {
440                                        jLabel5 = new JLabel();
441                                        jPanel1.add(jLabel5);
442                                        jLabel5.setText("talk:");
443                                        jLabel5.setBounds(6, 276, 29, 14);
444                                        jLabel5.setForeground(new java.awt.Color(255,255,255));
445                                }
446                                {
447                                        jTextAreaTalk = new JTextArea();
448                                        jPanel1.add(jTextAreaTalk);
449                                        jTextAreaTalk.setBounds(43, 250, 417, 68);
450                                        jTextAreaTalk.setLineWrap(true);
451                                        jTextAreaTalk.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
452                                        jTextAreaTalk.getActionMap().put(jTextAreaTalk.getInputMap().get(KeyStroke.getKeyStroke("ENTER")), new TextAreaPressEnterAction());
453                                }
454                                {
455                                        btnTalk = new JButton();
456                                        jPanel1.add(btnTalk);
457                                        btnTalk.setText("talk as Sarah");
458                                        btnTalk.setBounds(514, 234, 123, 23);
459                                        btnTalk.addActionListener(this);
460                                }
461                                {
462                                        btnSendText = new JButton();
463                                        jPanel1.add(btnSendText);
464                                        btnSendText.setText("send as sms");
465                                        btnSendText.setBounds(514, 263, 121, 23);
466                                        btnSendText.addActionListener(this);
467                                }
468                                {
469                                        comboBoxReceiver = new JComboBox();
470                                        jPanel1.add(comboBoxReceiver);
471                                        comboBoxReceiver.setBounds(514, 287, 120, 23);
472                                }
473                                {
474                                        jLabel7 = new JLabel();
475                                        jPanel1.add(jLabel7);
476                                        jLabel7.setText("to");
477                                        jLabel7.setBounds(493, 292, 21, 14);
478                                        jLabel7.setForeground(new java.awt.Color(255,255,255));
479                                }
480                                {
481                                        comboBoxCommon = new JComboBox();
482                                        jPanel1.add(comboBoxCommon);
483                                        comboBoxCommon.setBounds(6, 374, 628, 23);
484                                        comboBoxCommon.addActionListener(this);
485                                }
486                                {
487                                        jLabel8 = new JLabel();
488                                        jPanel1.add(jLabel8);
489                                        jLabel8.setText("type above or select a template below");
490                                        jLabel8.setBounds(43, 324, 277, 14);
491                                        jLabel8.setForeground(new java.awt.Color(255,255,255));
492                                }
493                                {
494                                        jLabel9 = new JLabel();
495                                        jPanel1.add(jLabel9);
496                                        jLabel9.setText("phone book:");
497                                        jLabel9.setFont(new java.awt.Font("Tahoma",1,11));
498                                        jLabel9.setBounds(10, 89, 82, 14);
499                                        jLabel9.setForeground(new java.awt.Color(255,255,255));
500                                }
501                                {
502                                        jLabel10 = new JLabel();
503                                        jPanel1.add(jLabel10);
504                                        jLabel10.setText("phone no:");
505                                        jLabel10.setBounds(54, 114, 58, 14);
506                                        jLabel10.setForeground(new java.awt.Color(255,255,255));
507                                }
508                                {
509                                        jLabel11 = new JLabel();
510                                        jPanel1.add(jLabel11);
511                                        jLabel11.setText("person name:");
512                                        jLabel11.setBounds(296, 114, 80, 14);
513                                        jLabel11.setForeground(new java.awt.Color(255,255,255));
514                                }
515                                {
516                                        txtFieldPhoneBookNo = new JTextField();
517                                        jPanel1.add(txtFieldPhoneBookNo);
518                                        txtFieldPhoneBookNo.setBounds(112, 109, 165, 23);
519                                        txtFieldPhoneBookNo.setEditable(false);
520                                        txtFieldPhoneBookNo.setEnabled(false);
521                                }
522                                {
523                                        btnSetAlias = new JButton();
524                                        jPanel1.add(btnSetAlias);
525                                        btnSetAlias.setText("set");
526                                        btnSetAlias.setBounds(564, 110, 52, 23);
527                                        btnSetAlias.addActionListener(this);
528                                }
529                                {
530                                        txtFieldPhoneBookName = new JTextField();
531                                        jPanel1.add(txtFieldPhoneBookName);
532                                        txtFieldPhoneBookName.setBounds(382, 109, 176, 23);
533                                }
534                                {
535                                        jLabel6 = new JLabel();
536                                        jPanel1.add(jLabel6);
537                                        jLabel6.setText("or");
538                                        jLabel6.setBounds(493, 267, 21, 14);
539                                        jLabel6.setForeground(new java.awt.Color(255,255,255));
540                                }
541                                {
542                                        jLabel12 = new JLabel();
543                                        jPanel1.add(jLabel12);
544                                        jLabel12.setText("or");
545                                        jLabel12.setForeground(new java.awt.Color(255,255,255));
546                                        jLabel12.setBounds(493, 318, 21, 14);
547                                }
548                                {
549                                        btnNewTemplate = new JButton();
550                                        jPanel1.add(btnNewTemplate);
551                                        btnNewTemplate.setText("add template");
552                                        btnNewTemplate.setBounds(514, 314, 117, 24);
553                                        btnNewTemplate.addActionListener(this);
554                                }
555                                {
556                                        jScrollPane1 = new JScrollPane();
557                                        jPanel1.add(jScrollPane1);
558                                        jScrollPane1.setBounds(10, 21, 605, 63);
559                                        {
560                                                TableModel jTable1Model =
561                                                        new DefaultTableModel(
562                                                                        new String[][] { { "One", "Two" }, { "Three", "Four" } },
563                                                                        new String[] { "Column 1", "Column 2" });
564                                                jTable1 = new JTable();
565                                                jScrollPane1.setViewportView(jTable1);
566                                                jTable1.setModel(jTable1Model);
567                                        }
568                                }
569                                {
570                                        lblLeft = new JLabel();
571                                        jPanel1.add(lblLeft);
572                                        lblLeft.setText("left:");
573                                        lblLeft.setBounds(157, 224, 19, 16);
574                                        lblLeft.setForeground(new java.awt.Color(255,255,255));
575                                }
576                                {
577                                        txtFieldLeft = new JTextField();
578                                        jPanel1.add(txtFieldLeft);
579                                        txtFieldLeft.setBounds(180, 218, 91, 28);
580                                }
581                                {
582                                        txtFieldRight = new JTextField();
583                                        jPanel1.add(txtFieldRight);
584                                        txtFieldRight.setBounds(314, 218, 91, 28);
585                                }
586                                {
587                                        lblRight = new JLabel();
588                                        jPanel1.add(lblRight);
589                                        lblRight.setText("right:");
590                                        lblRight.setForeground(new java.awt.Color(255,255,255));
591                                        lblRight.setBounds(280, 224, 28, 16);
592                                }
593                                {
594                                        jLabel13 = new JLabel();
595                                        jPanel1.add(jLabel13);
596                                        jLabel13.setText("migrate to:");
597                                        jLabel13.setForeground(new java.awt.Color(255,255,255));
598                                        jLabel13.setBounds(322, 161, 60, 25);
599                                }
600                                {
601                                        ComboBoxModel jComboBox1Model =
602                                                new DefaultComboBoxModel(
603                                                                new String[] { "Robot", "Phone" });
604                                        comboBoxMigrate = new JComboBox();
605                                        jPanel1.add(comboBoxMigrate);
606                                        comboBoxMigrate.setModel(jComboBox1Model);
607                                        comboBoxMigrate.setBounds(388, 161, 120, 23);
608                                }
609                                {
610                                        btnMigrate = new JButton();
611                                        jPanel1.add(btnMigrate);
612                                        btnMigrate.setText("migrate");
613                                        btnMigrate.setBounds(520, 161, 83, 22);
614                                        btnMigrate.addActionListener(this);
615                                }
616                                {
617                                        jLabel14 = new JLabel();
618                                        jPanel1.add(jLabel14);
619                                        jLabel14.setText("gaze at:");
620                                        jLabel14.setForeground(new java.awt.Color(255,255,255));
621                                        jLabel14.setBounds(34, 196, 55, 14);
622                                }
623                                {
624                                        ComboBoxModel comboBoxGazeModel =
625                                                new DefaultComboBoxModel(
626                                                                new String[] { "user", "deskbob", "deskpaul", "screen" });
627                                        comboBoxGaze = new JComboBox();
628                                        jPanel1.add(comboBoxGaze);
629                                        comboBoxGaze.setModel(comboBoxGazeModel);
630                                        comboBoxGaze.setBounds(86, 191, 150, 25);
631                                        comboBoxGaze.addActionListener(this);
632                                }
633                                {
634                                        jSpinnerWhichTemplate = new JSpinner();
635                                        jPanel1.add(jSpinnerWhichTemplate);
636                                        jSpinnerWhichTemplate.setBounds(465, 341, 167, 28);
637                                }
638                                {
639                                        jLabel15 = new JLabel();
640                                        jPanel1.add(jLabel15);
641                                        jLabel15.setText("to");
642                                        jLabel15.setForeground(new java.awt.Color(255,255,255));
643                                        jLabel15.setBounds(446, 349, 21, 14);
644                                }
645                                {
646                                        jLabel16 = new JLabel();
647                                        jPanel1.add(jLabel16);
648                                        jLabel16.setText("Common Utterances:");
649                                        jLabel16.setBounds(9, 354, 143, 16);
650                                        jLabel16.setFont(new java.awt.Font("SansSerif",1,12));
651                                        jLabel16.setForeground(new java.awt.Color(255,255,255));
652                                }
653                                {
654                                        jLabel17 = new JLabel();
655                                        jPanel1.add(jLabel17);
656                                        jLabel17.setText("Refering to Office Locations:");
657                                        jLabel17.setFont(new java.awt.Font("SansSerif",1,12));
658                                        jLabel17.setForeground(new java.awt.Color(255,255,255));
659                                        jLabel17.setBounds(11, 400, 175, 16);
660                                }
661                                {
662                                        comboBoxLocations = new JComboBox();
663                                        jPanel1.add(comboBoxLocations);
664                                        comboBoxLocations.setBounds(6, 421, 628, 23);
665                                        comboBoxLocations.addActionListener(this);
666                                }
667                                {
668                                        jLabel18 = new JLabel();
669                                        jPanel1.add(jLabel18);
670                                        jLabel18.setText("Small Talk:");
671                                        jLabel18.setFont(new java.awt.Font("SansSerif",1,12));
672                                        jLabel18.setForeground(new java.awt.Color(255,255,255));
673                                        jLabel18.setBounds(12, 450, 175, 16);
674                                }
675                                {
676                                        comboBoxSmallTalk = new JComboBox();
677                                        jPanel1.add(comboBoxSmallTalk);
678                                        comboBoxSmallTalk.setBounds(5, 472, 628, 23);
679                                        comboBoxSmallTalk.addActionListener(this);
680                                }
681                                {
682                                        jLabel19 = new JLabel();
683                                        jPanel1.add(jLabel19);
684                                        jLabel19.setText("I Don't Understand:");
685                                        jLabel19.setFont(new java.awt.Font("SansSerif",1,12));
686                                        jLabel19.setForeground(new java.awt.Color(255,255,255));
687                                        jLabel19.setBounds(11, 504, 175, 16);
688                                }
689                                {
690                                        comboBoxDontUnderstand = new JComboBox();
691                                        jPanel1.add(comboBoxDontUnderstand);
692                                        comboBoxDontUnderstand.setBounds(6, 525, 628, 23);
693                                        comboBoxDontUnderstand.addActionListener(this);
694                                }
695                                {
696                                        jLabel20 = new JLabel();
697                                        jPanel1.add(jLabel20);
698                                        jLabel20.setText("Task Related:");
699                                        jLabel20.setFont(new java.awt.Font("SansSerif",1,12));
700                                        jLabel20.setForeground(new java.awt.Color(255,255,255));
701                                        jLabel20.setBounds(11, 554, 175, 16);
702                                }
703                                {
704                                        comboBoxTask = new JComboBox();
705                                        jPanel1.add(comboBoxTask);
706                                        comboBoxTask.setBounds(7, 575, 628, 23);
707                                        comboBoxTask.addActionListener(this);
708                                }
709                                {
710                                        btnSetGaze = new JButton();
711                                        jPanel1.add(btnSetGaze);
712                                        btnSetGaze.setText("resend");
713                                        btnSetGaze.setBounds(247, 191, 71, 23);
714                                        btnSetGaze.addActionListener(this);
715                                }
716                        }
717                        {
718                                jMenuBar1 = new JMenuBar();
719                                setJMenuBar(jMenuBar1);
720                                {
721                                        menuFile = new JMenu();
722                                        jMenuBar1.add(menuFile);
723                                        menuFile.setText("File");
724                                        {
725                                                menuItemLoad = new JMenuItem();
726                                                menuFile.add(menuItemLoad);
727                                                menuItemLoad.setText("Load");
728                                                menuItemLoad.addActionListener(this);
729                                        }
730                                        {
731                                                menuItemSave = new JMenuItem();
732                                                menuFile.add(menuItemSave);
733                                                menuItemSave.setText("Save");
734                                                menuItemSave.addActionListener(this);
735                                        }
736                                }
737                        }
738                        pack();
739                        this.setSize(645, 680);
740                } catch (Exception e) {
741                        e.printStackTrace();
742                }
743        }
744
745        /** new incoming sms */
746        public void newLogLine(String sender, String text)
747        {
748                // obtain current time
749            Calendar cal = Calendar.getInstance();
750            SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm:ss");
751               
752        Person person = null;
753           
754            if (sender.equals("Greta"))
755                person = sarahPerson;
756        else
757            {
758                // user action in the log, check if user is already in the phonebook
759                if (phonebook.containsKey(sender))
760                        person = phonebook.get(sender);
761                else
762                {
763                        person = new Person(sender);
764                        phonebook.put(sender, person);
765                        updateReceiverList();
766                }               
767            }
768            tableModel.addRow(person, text, sdf.format(cal.getTime()));
769        }
770       
771       
772        /** action listener method */
773        @Override
774        public void actionPerformed(ActionEvent arg0)
775        {
776                ArrayList<String> parameters = new ArrayList<String>();
777                if (arg0.getSource() == btnTalk)
778                {
779                        // first parameter: text to speak
780                        parameters.add(jTextAreaTalk.getText());
781                        MindAction mindAction = new MindAction("Sarah", "wozTalk", parameters);
782                        parentMindConnector.newAction(mindAction);                     
783                }
784                else if (arg0.getSource() == btnShowChoice)
785                {
786                        parameters.add(txtFieldLeft.getText());
787                        parameters.add(txtFieldRight.getText());                       
788                        MindAction mindAction = new MindAction("Sarah", "wozQuestion", parameters);
789                        parentMindConnector.newAction(mindAction);
790                }               
791                else if ((arg0.getSource() == comboBoxEmotion) || (arg0.getSource() == btnSetEmotion))
792                {
793                        // first parameter: emotion to display
794                        parameters.add(comboBoxEmotion.getSelectedItem().toString());
795                        MindAction mindAction = new MindAction("Sarah", "wozEmotion", parameters);
796                        parentMindConnector.newAction(mindAction);             
797                }       
798                else if (arg0.getSource() == btnSetAlias)
799                {
800                        // obtain selected person
801                        Person person = phonebook.get(this.txtFieldPhoneBookNo.getText());
802                        if (person!=null)
803                        {
804                                person.setName(this.txtFieldPhoneBookName.getText().trim());
805                                updateReceiverList();
806                                tableModel.fireTableDataChanged();             
807                        }
808                }
809                else if (templateCategories.values().contains(arg0.getSource()))
810                {
811                        //quicker gui, directly talk
812                        JComboBox selectedBox = (JComboBox) arg0.getSource();
813                        String s = selectedBox.getSelectedItem().toString();
814                        if (! s.trim().equals(""))
815                        {
816                                parameters.add(s);
817                                MindAction mindAction = new MindAction("Sarah", "wozTalk", parameters);
818                                parentMindConnector.newAction(mindAction);                     
819                        }
820                        //this.jTextAreaTalk.setText(selectedBox.getSelectedItem().toString());
821                }
822                else if (arg0.getSource() == btnNewTemplate)
823                {
824                        // determine which combo box to add the template to, by looking at the spinner
825                        JComboBox whichBox = null;
826                        if (templateCategories.containsKey(jSpinnerWhichTemplate.getValue()))
827                                        whichBox = templateCategories.get(jSpinnerWhichTemplate.getValue());
828                        if (whichBox!=null)
829                                whichBox.addItem(jTextAreaTalk.getText());
830                }
831                else if (arg0.getSource() == menuItemSave)
832                {
833                        saveData();
834                }
835                else if (arg0.getSource() == menuItemLoad)
836                {
837                        loadData();
838                }
839                else if (arg0.getSource() == btnSendText)
840                {
841                        // check if a valid receiver was selected
842                        if (comboBoxReceiver.getSelectedItem() instanceof Person)
843                        {
844                                Person receiver = (Person) comboBoxReceiver.getSelectedItem();
845                                // first parameter: phone no of receiver
846                                parameters.add(receiver.getPhoneNo());
847                                // second parameter: text to send
848                                parameters.add(jTextAreaTalk.getText());
849                       
850                                MindAction mindAction = new MindAction("Sarah", "wozSendSMS", parameters);
851                                parentMindConnector.newAction(mindAction);             
852                        }
853                }
854                else if (arg0.getSource() == btnMigrate)
855                {
856                        if (comboBoxMigrate.getSelectedItem() != null)
857                        {
858                                String target = comboBoxMigrate.getSelectedItem().toString();
859                                parameters.add(target);
860                                MindAction mindAction = new MindAction("Sarah", "migrate", parameters);
861                                parentMindConnector.newAction(mindAction);             
862                        }                       
863                }
864                else if ((arg0.getSource() == comboBoxGaze) || arg0.getSource() == btnSetGaze)
865                {
866                        String gazeTarget = comboBoxGaze.getSelectedItem().toString();
867                        parameters.add(gazeTarget);
868                        MindAction mindAction = new MindAction("Sarah", "wozGaze", parameters);
869                        parentMindConnector.newAction(mindAction);             
870                }
871        }
872
873        // load log, phone book, and sentence templates from a file     
874        private void loadData() {
875                if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
876                {
877                        File file = fc.getSelectedFile();
878                        try
879                        {
880
881                                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
882                                DocumentBuilder docBuilder;
883                                docBuilder = docBuilderFactory.newDocumentBuilder();
884                                Document doc = docBuilder.parse(file);
885
886                                // normalize text representation
887                                doc.getDocumentElement().normalize();
888                               
889                                // empty phonebook
890                                phonebook.clear();
891                               
892                                // read phonebook entries
893                                NodeList phonebooklist = doc.getElementsByTagName("phonebook");         
894                                for (int i=0; i<phonebooklist.getLength(); i++)
895                                {
896                                        NamedNodeMap attribs = phonebooklist.item(i).getAttributes();
897                                        String phoneNo = attribs.getNamedItem("no").getNodeValue();
898                                        String name = attribs.getNamedItem("name").getNodeValue();
899                                        Person p = new Person(phoneNo);
900                                        p.setName(name);
901                                        phonebook.put(phoneNo, p);
902                                }
903                                // remove all combo box listeners and empty templates
904                                for (JComboBox comboBox : templateCategories.values())
905                                {
906                                        comboBox.removeActionListener(this);
907                                        comboBox.removeAllItems();                                     
908                                }
909                               
910                                // read templates
911                                NodeList templatelist = doc.getElementsByTagName("template");
912                                for (int i=0; i<templatelist.getLength(); i++)
913                                {
914                                        String template = templatelist.item(i).getTextContent();
915                                        String catName = templatelist.item(i).getAttributes().getNamedItem("category").getNodeValue();
916                                        JComboBox comboBox = templateCategories.get(catName);
917                                        comboBox.addItem(template);
918                                }
919
920                                // add action listeners again
921                                for (JComboBox comboBox : templateCategories.values())
922                                        comboBox.addActionListener(this);
923
924                               
925                                // read log lines
926                                NodeList loglinelist = doc.getElementsByTagName("logline");             
927                                for (int i=0; i<loglinelist.getLength(); i++)
928                                {
929                                        NamedNodeMap attribs = loglinelist.item(i).getAttributes();
930                                        String who = attribs.getNamedItem("who").getNodeValue();
931                                        String what = attribs.getNamedItem("what").getNodeValue();
932                                        String when = attribs.getNamedItem("when").getNodeValue();
933                                        Person p;
934                                        if (who.equals("----")) p = sarahPerson;
935                                        else if (phonebook.containsKey(who)) p = phonebook.get(who);
936                                        else
937                                        {
938                                                p = new Person("who");
939                                                phonebook.put(who, p);
940                                        }
941                                        tableModel.addRow(p, what, when);                       
942                                }
943                               
944                                // update list of sms receivers
945                                updateReceiverList();
946                       
947                        }
948                        catch (ParserConfigurationException e) {
949                                e.printStackTrace();
950                        } catch (SAXException e) {
951                                // TODO Auto-generated catch block
952                                e.printStackTrace();
953                        } catch (IOException e) {
954                                // TODO Auto-generated catch block
955                                e.printStackTrace();
956                        }
957
958
959                       
960                }               
961        }
962
963        // save log, phone book, and sentence templates to a file
964        private void saveData()
965        {
966                if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)
967                {
968                        File file = fc.getSelectedFile();
969                        try {
970                               
971                                // create dom
972                                Document xmldoc= new DocumentImpl();
973                                // Root element.
974                                Element root = xmldoc.createElement("wozdata");
975                               
976                                // write phonebook entries
977                                for (String phoneNo : phonebook.keySet())
978                                {
979                                        String name = phonebook.get(phoneNo).getName();
980                                        Element e = xmldoc.createElement("phonebook");
981                                        e.setAttribute("no", phoneNo);
982                                        e.setAttribute("name", name);
983                                        root.appendChild(e);
984                                }
985                               
986                                // write templates                             
987                                for (String catName : templateCategories.keySet())
988                                {
989                                        JComboBox comboBox = templateCategories.get(catName);
990                                        for (int i=0; i<comboBox.getItemCount(); i++)
991                                        {
992                                                String template = comboBox.getItemAt(i).toString();
993                                                Element e = xmldoc.createElement("template");
994                                                Text n = xmldoc.createTextNode(template);
995                                                e.appendChild(n);
996                                                e.setAttribute("category", catName);
997                                                root.appendChild(e);
998                                        }
999                                }
1000                                                                       
1001                                // write log lines
1002                                for (int i=tableModel.getRowCount()-1; i >= 0; i--)
1003                                {
1004                                        Element e = xmldoc.createElement("logline");
1005                                        String who = ((Person)tableModel.getValueAt(i, 0)).getPhoneNo();
1006                                        String what = tableModel.getValueAt(i, 1).toString();
1007                                        String when = tableModel.getValueAt(i, 2).toString();                           
1008                                        e.setAttribute("who", who);
1009                                        e.setAttribute("what", what);
1010                                        e.setAttribute("when", when);                                   
1011                                        root.appendChild(e);
1012                                }                       
1013                               
1014                                xmldoc.appendChild(root);
1015                               
1016                                // serialize to xml
1017                                FileOutputStream fos = new FileOutputStream(file);
1018                                OutputFormat of = new OutputFormat("XML","ISO-8859-1",true);
1019                                of.setIndent(1);
1020                                of.setIndenting(true);
1021                                XMLSerializer serializer = new XMLSerializer(fos,of);
1022                                // As a DOM Serializer
1023                                serializer.asDOMSerializer();
1024                                serializer.serialize(xmldoc.getDocumentElement() );
1025                                fos.close();                           
1026                       
1027                        } catch (FileNotFoundException e) {
1028                                e.printStackTrace();
1029                        } catch (IOException e) {
1030                                e.printStackTrace();
1031                        }
1032       
1033                       
1034                       
1035                }
1036               
1037        }
1038
1039        /** invoked when user selects an item in the table */
1040        @Override
1041        public void valueChanged(ListSelectionEvent arg0)
1042        {
1043                if (jTable1.getSelectedRow()!=-1)
1044                {
1045                        int row = jTable1.getSelectedRow();
1046                        if (tableModel.getValueAt(row, 0) instanceof Person)
1047                        {
1048                                Person selectedPerson = (Person) tableModel.getValueAt(row, 0);
1049                                if (selectedPerson != sarahPerson)
1050                                {
1051                                        this.txtFieldPhoneBookName.setText(selectedPerson.getName());
1052                                        this.txtFieldPhoneBookNo.setText(selectedPerson.getPhoneNo());
1053                                }
1054                        }
1055                }
1056               
1057        }
1058
1059        // Action for pressing enter in the text area
1060        private class TextAreaPressEnterAction extends AbstractAction
1061        {
1062
1063                private static final long serialVersionUID = 1L;
1064
1065                @Override
1066                public void actionPerformed(ActionEvent e)
1067                {
1068                        ArrayList<String> parameters = new ArrayList<String>();                 
1069                        parameters.add(jTextAreaTalk.getText());
1070                        MindAction mindAction = new MindAction("Sarah", "wozTalk", parameters);
1071                        parentMindConnector.newAction(mindAction);     
1072                        jTextAreaTalk.setText("");
1073                }
1074               
1075               
1076        }
1077       
1078}
Note: See TracBrowser for help on using the repository browser.