View Javadoc

1   package org.wcb.autohome;
2   
3   import org.wcb.autohome.interfaces.X10DeviceConstants;
4   import org.wcb.autohome.interfaces.MessageInterface;
5   import org.wcb.autohome.interfaces.I18nConstants;
6   import org.wcb.autohome.exceptions.HomeException;
7   import org.wcb.autohome.implementations.SerialPortBean;
8   import org.wcb.common.UIEditorDialog;
9   import org.wcb.common.GuiLib;
10  
11  import javax.swing.*;
12  import java.awt.*;
13  import java.awt.event.ActionListener;
14  import java.awt.event.ActionEvent;
15  
16  /***
17   * Copyright (C) 1999  Walter Bogaardt
18   *
19   * This library is free software; you can redistribute it and/or
20   * modify it under the terms of the GNU Lesser General Public
21   * License as published by the Free Software Foundation; either
22   * version 2 of the License, or (at your option) any later version.
23   *
24   * This library is distributed in the hope that it will be useful,
25   * but WITHOUT ANY WARRANTY; without even the implied warranty of
26   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
27   * Lesser General Public License for more details.
28   *
29   * You should have received a copy of the GNU Lesser General Public
30   * License along with this library; if not, write to the Free Software
31   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
32   *
33   * Project: Alice X10 Home Automation
34   *
35   *  GUI element that holds the user changable elements for connection
36   *  configuration.
37   *
38   * Date: Oct 9, 2003
39   * Time: 5:22:14 PM
40   *
41   *  $Log: SerialConfigurationPanel.java,v $
42   *  Revision 1.16  2004/07/22 02:38:37  wbogaardt
43   *  fixed serial panel configuration launch.
44   *
45   *  Revision 1.15  2004/06/09 18:52:34  wbogaardt
46   *  changed enum to enumr to avoid java keyword issue
47   *
48   *  Revision 1.14  2004/02/03 21:02:24  wbogaardt
49   *  moved DeviceFactory away from rmi creation and simplified interface between gateway
50   *
51   *  Revision 1.13  2004/02/03 00:35:06  wbogaardt
52   *  reogranized files so that serial port settings are maintained in a bean to interface with config file
53   *
54   *  Revision 1.12  2004/02/01 20:03:20  wbogaardt
55   *  removed reference to the Form layout and added javadoc comments to privat methods
56   *
57   *  Revision 1.11  2003/12/31 01:09:37  wbogaardt
58   *  removed dead string reference to jhome.prop
59   *
60   *  Revision 1.10  2003/12/30 18:47:40  wbogaardt
61   *  made labels so they are internationlized and fixed layout of trigger panel
62   *
63   *  Revision 1.9  2003/12/22 20:51:29  wbogaardt
64   *  refactored name assignments and formatted code for readability.
65   *
66   *  Revision 1.8  2003/12/20 20:13:01  wbogaardt
67   *  modified formating and some names for labels
68   *
69   *  Revision 1.7  2003/12/20 06:16:00  wbogaardt
70   *  moved most buttons text to i18n internationalization.
71   *
72   *  Revision 1.6  2003/12/18 00:02:50  wbogaardt
73   *  more javadoc comments
74   *
75   *  Revision 1.5  2003/12/17 21:27:06  wbogaardt
76   *  Improved error traping of CM11A send command to all house
77   *
78   *  Revision 1.4  2003/12/12 23:17:33  wbogaardt
79   *  javadoc comments refactored methods so they are more descriptive
80   *
81   *  Revision 1.3  2003/12/11 23:10:07  wbogaardt
82   *  cleaned up exception handeling and logging of system.out messages
83   *
84   *  Revision 1.2  2003/10/11 05:06:52  wbogaardt
85   *  modified connect and disconnect button to be one button for simplification of ui
86   *
87   *  Revision 1.1  2003/10/10 00:50:43  wbogaardt
88   *  decoupled the ConfigurationPanel to SerialConfigurationPanel
89   *
90   */
91  public class SerialConfigurationPanel extends JPanel implements X10DeviceConstants {
92  
93      private JComboBox interfaceCombo;
94      private JButton jbPortConnection;
95      private JButton jbConfigure;
96      private String[] sDeviceTypeArray = {"CM11A", "CM17A"};
97      private SerialPanel spSerialPanel;
98      private MessageInterface msgInterface;
99  
100     /***
101      * Creates and initilizes the configuration panel. The initial settings
102      * are from the parameters object.
103      * @param panel the panel instance where this will sit.
104      */
105     public SerialConfigurationPanel(SerialPanel panel)
106     {
107         msgInterface = AutoHomeAdminSession.getInstance().getMessageInterface();
108         this.spSerialPanel = panel;
109         jbConfigure = new JButton(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.CONFIGURE_BUTTON));
110         if(!AutoHomeAdminSession.getInstance().isX10GatwayConnected())
111         {
112             jbPortConnection = new JButton(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.CONNECT_BUTTON));
113         }
114         else
115         {
116             jbPortConnection = new JButton(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.DISCONNECT_BUTTON));
117         }
118         interfaceCombo = new JComboBox(sDeviceTypeArray);
119         this.setBorder(BorderFactory.
120                 createTitledBorder
121                 (BorderFactory.createLineBorder(Color.black),AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.SERIAL_PORT_TITLE_LABEL)));
122         JPanel configPanel = new JPanel();
123         configPanel.add(jbConfigure);
124         configPanel.add(new JLabel(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.INTERFACE_TYPE_LABEL)));
125         configPanel.add(interfaceCombo);
126         configPanel.add(jbPortConnection);
127         this.setupListeners();
128         this.add(configPanel);
129     }
130 
131     /***
132      * mutator to set the combo box for port settings
133      * to the value previously saved by the user
134      */
135     public void setPortValue()
136     {
137         if(AutoHomeAdminSession.getInstance().getX10GatewayType() == CM11A_TRANSMITTER)
138         {
139             interfaceCombo.setSelectedIndex(0);
140             spSerialPanel.timePanelEnable(true);
141         }
142         if(AutoHomeAdminSession.getInstance().getX10GatewayType() == CM17A_TRANSMITTER)
143         {
144             interfaceCombo.setSelectedIndex(1);
145             spSerialPanel.timePanelEnable(false);
146         }
147     }
148 
149     /***
150      * Get the currently select interface name from the JComboBox
151      * @return the integer value of the interface type.
152      */
153     public int getInterfaceType()
154     {
155         if (((String)interfaceCombo.getSelectedItem()).startsWith("CM11A"))
156         {
157             return CM11A_TRANSMITTER;
158         }
159         else
160         {
161             return CM17A_TRANSMITTER;
162         }
163     }
164 
165     /***
166      * This returns and instance of this panel so that outside components
167      * can have reference to this instance.
168      * @return The instance of this panel.
169      */
170     private SerialConfigurationPanel getPanel(){
171         return this;
172     }
173 
174     /***
175      * This setsup the action listeners to the buttons and drop downs
176      * so that the serial port can be enabled based on the user's action.
177      */
178    private void setupListeners()
179     {
180         ActionListener al = new ActionListener(){
181             public void actionPerformed(ActionEvent evt)
182             {
183                 Object src = evt.getSource();
184                 if (src == jbPortConnection)
185                 {
186                     if (AutoHomeAdminSession.getInstance().isX10GatwayConnected())
187                     {
188                         try
189                         {
190                             printMessage("Closing port");
191                             AutoHomeAdminSession.getInstance().closeSerialPort();
192                             jbPortConnection.setText(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.CONNECT_BUTTON));
193                         }
194                         catch(HomeException err)
195                         {
196                             printMessage("Failed");
197                             jbPortConnection.setText(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.CONNECT_BUTTON));
198                             printMessage(err.toString());
199                         }
200                     }
201                     else
202                     {
203                         if(connectToSerialPort())
204                         {
205                             spSerialPanel.setPort();
206                             jbPortConnection.setText(AutoHomeAdminSession.getInstance().getI18n().getString(I18nConstants.DISCONNECT_BUTTON));
207                         }
208                     }
209                 }
210                 if (src == interfaceCombo)
211                 {
212                     if (interfaceCombo.getSelectedIndex() == 0)
213                     {
214                         spSerialPanel.timePanelEnable(true);
215                     }
216                     else if (interfaceCombo.getSelectedIndex() == 1)
217                     {
218                         spSerialPanel.timePanelEnable(false);
219                     }
220                 }
221                 if (src == jbConfigure)
222                 {
223                     Frame fr = GuiLib.getFrameForComponent(getPanel());
224                     UIEditorDialog editor;
225                     if ((fr != null) && (fr instanceof JFrame))
226                     {
227                         JComponent rootC = ((JFrame)fr).getRootPane();
228                         editor = new UIEditorDialog(rootC);
229                         editor.setTitle("A.L.I.C.E Global Settings");
230                     }
231                     else 
232                     {
233                         new UIEditorDialog();
234                     }
235                     editor = new UIEditorDialog();
236                     editor.setLocationRelativeTo(SerialConfigurationPanel.this);
237                     editor.setVisible(true);
238                 }
239             }
240         };
241         jbPortConnection.addActionListener(al);
242         jbConfigure.addActionListener(al);
243         interfaceCombo.addActionListener(al);
244     }
245 
246     /***
247      * Connects the session object to the serial port.
248      *
249      * @return true indicates success.
250      */
251     private boolean connectToSerialPort(){
252         SerialPortBean serialBean = AutoHomeAdminSession.getInstance().getSerialPort();
253 
254         if (serialBean.getPort() != null)
255         {
256             try
257             {
258                 AutoHomeAdminSession.getInstance().connectPortToDevice(this.getInterfaceType());
259             }
260             catch(HomeException err)
261             {
262                 JOptionPane.showMessageDialog(null,"There appears to be an issue with \n"+
263                         "your X10 interface. Check your port \n"+
264                         "settings in the Global Options Menu.",
265                         "Missing Port ID",JOptionPane.WARNING_MESSAGE);
266                 return false;
267             }
268         }
269         else
270         {
271             JOptionPane.showMessageDialog(null,"There appears to be an issue with \n"+
272                     "your X10 interface. Check your port \n"+
273                     "settings in the Global Options Menu.",
274                     "Missing Port ID",JOptionPane.WARNING_MESSAGE);
275             return false;
276         }
277         return true;
278     }
279 
280      /***
281       * sends text information to the application statatus bar
282       * @param info the string to send to interface.
283       */
284     private void printMessage(String info)
285     {
286         if (msgInterface != null)
287             msgInterface.printMessage(info);
288     }
289 }