Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/cybertivity/powerjournal/DatabaseOptionsView.java


1   package com.cybertivity.powerjournal;
2   import java.awt.BorderLayout;
3   import java.awt.BorderLayout;
4   import java.awt.Color;
5   import java.awt.FlowLayout;
6   import java.awt.Insets;
7   import java.awt.event.ActionEvent;
8   import java.awt.event.ActionListener;
9   import java.awt.event.KeyEvent;
10  import java.awt.event.WindowAdapter;
11  import java.awt.event.WindowEvent;
12  import java.util.ArrayList;
13  import javax.swing.BorderFactory;
14  import javax.swing.BoxLayout;
15  import javax.swing.ButtonGroup;
16  import javax.swing.JButton;
17  import javax.swing.JLabel;
18  import javax.swing.JPanel;
19  import javax.swing.JFrame;
20  import javax.swing.JPasswordField;
21  import javax.swing.JRadioButton;
22  import javax.swing.JTextField;
23  import com.cybertivity.powerjournal.framework.DialogView;
24  import com.cybertivity.powerjournal.framework.Dialogs;
25  import com.cybertivity.powerjournal.framework.ModelEvent;
26  import com.cybertivity.powerjournal.gridpanel.*;
27  import com.cybertivity.powerjournal.database.*;
28  /**
29   * Title:        PowerJournal
30   * Description:  $Id: DatabaseOptionsView.java,v 1.4 2001/12/04 02:35:15 arrowood Exp $
31   * Copyright:    Copyright (c) 2001
32   * Company:      <A HREF="http://www.cybertivity.com">Cybertivity</A>
33   *
34   * @author <A HREF="mailto:chris.arrowood@cybertivity.com">Chris Arrowood</A>
35   * @created November 25, 2001
36   * @version 1.0
37   */
38  
39  public class DatabaseOptionsView extends DialogView {
40  
41    /**
42     */
43    public final static String HSQL_OPTION = "hSQL";
44    /**
45     */
46    public final static String MYSQL_OPTION = "MySQL";
47    /**
48     */
49    public final static String EVENT_CANCEL = "DatabaseOptionsView_Cancel";
50    /**
51     */
52    public final static String EVENT_OK = "DatabaseOptionsView_Ok";
53    private JTextField dbAddressTextField = null;
54    private JTextField dbPortTextField = null;
55    private JTextField dbUsernameTextField = null;
56    private JTextField dbPasswordTextField1 = null;
57    private JTextField dbPasswordTextField2 = null;
58    private JPanel databaseConfigPanel = null;
59    private ConfigManager configManager = null;
60    private JButton okButton = null;
61    private JButton cancelButton = null;
62    private static DatabaseOptionsView instance = null;
63    private JRadioButton dbChoiceHSQL = null;
64    private JRadioButton dbChoiceMySQL = null;
65    private boolean dbChanged = false;
66    private ButtonGroup group = null;
67    private String originalDBAddress = "";
68    private String originalDBPort = "";
69    private String originalDBPassword = "";
70    private String originalDBUsername = "";
71    private String originalDBType = "";
72  
73  
74    private DatabaseOptionsView(JFrame parent) throws DBException {
75      super(parent,true);
76      configManager = ConfigManager.getInstance();
77      createWindow();
78      content.setResizable(false);
79      content.setTitle("Database Options");
80      content.addWindowListener(new DeadlyWindowListener());
81      content.pack();
82      moveToCenter();
83    }
84  
85  
86    public static DatabaseOptionsView getInstance(JFrame parent) throws DBException {
87      if (instance == null) {
88        instance = new DatabaseOptionsView(parent);
89      }
90      return instance;
91    }
92  
93  
94    public void setVisible(boolean arg) {
95      if (arg) {
96        autoPopulateFromDB();
97        dbChanged = false;
98      }
99      super.setVisible(arg);
100   }
101 
102 
103   protected void cleanUp() { }
104 
105 
106   private void createWindow() throws DBException {
107     content.getContentPane().add(createDatabaseTypePanel());
108   }
109 
110 
111   private JPanel createDatabaseTypePanel() throws DBException {
112     JPanel panel = null;
113     try {
114       JPanel buttonPanel = createButtonPanel();
115       Insets insets = new Insets(2, 10, 0, 2);
116       GridPanelColumn leftColumn = createMainPanelLeftColumn();
117       GridPanelColumn rightColumn = createMainPanelRightColumn();
118       ArrayList columns = new ArrayList();
119       columns.add(0, leftColumn);
120       columns.add(1, rightColumn);
121       panel = GridPanelBuilder.createGridPanel(insets, columns, buttonPanel, BorderLayout.SOUTH);
122       panel.setBorder(BorderFactory.createEtchedBorder());
123     } catch (GridPanelException ex) {
124       panel = new JPanel();
125     }
126     return panel;
127   }
128 
129 
130   private JPanel createButtonPanel() {
131     JPanel buttonPanel = new JPanel();
132 //    BoxLayout layout = new BoxLayout(buttonPanel,BoxLayout.X_AXIS);
133     FlowLayout layout = new FlowLayout();
134     buttonPanel.setLayout(layout);
135     okButton = makeButton("OK", EVENT_OK, null);
136     cancelButton = makeButton("Cancel", EVENT_CANCEL, null);
137     buttonPanel.add(okButton);
138     buttonPanel.add(cancelButton);
139     return buttonPanel;
140   }
141 
142 
143   private GridPanelColumn createMainPanelLeftColumn() {
144     GridPanelColumn column = new GridPanelColumn();
145     column.add(new JLabel("Type:"), false, false);
146     column.add(new JLabel("Config:"), false, false);
147     return column;
148   }
149 
150 
151   private GridPanelColumn createMainPanelRightColumn() throws DBException {
152     GridPanelColumn column = new GridPanelColumn();
153     column.add(createDBConfigPanel(), false, false);
154     column.add(0, createDBChoicesPanel(), false, false);
155     return column;
156   }
157 
158 
159   private JPanel createDBConfigPanel() {
160     databaseConfigPanel = new JPanel();
161     try {
162       Insets insets = new Insets(2, 10, 0, 2);
163       GridPanelColumn rightColumn = createDBConfigRightColumn();
164       GridPanelColumn leftColumn = createDBConfigLeftColumn();
165       ArrayList columns = new ArrayList();
166       columns.add(0, leftColumn);
167       columns.add(1, rightColumn);
168       databaseConfigPanel = GridPanelBuilder.createGridPanel(insets, columns);
169       databaseConfigPanel.setBorder(BorderFactory.createEtchedBorder());
170 //      autoPopulateFromDB();
171     } catch (GridPanelException ex) {
172       databaseConfigPanel = new JPanel();
173     }
174     return databaseConfigPanel;
175   }
176 
177 
178   private void autoPopulateFromDB() {
179     try {
180       //cache values from db
181       originalDBAddress = configManager.getParameter(ConfigManager.KEY_DB_ADDRESS);
182       originalDBPort = configManager.getParameter(ConfigManager.KEY_DB_PORT);
183       originalDBPassword = configManager.getParameter(ConfigManager.KEY_DB_PASSWORD);
184       originalDBUsername = configManager.getParameter(ConfigManager.KEY_DB_USERNAME);
185       originalDBType = configManager.getParameter(ConfigManager.KEY_DB_TYPE);
186       //populate fields
187       dbAddressTextField.setText(originalDBAddress);
188       dbPortTextField.setText(originalDBPort);
189       dbUsernameTextField.setText(originalDBUsername);
190       dbPasswordTextField1.setText(originalDBPassword);
191       dbPasswordTextField2.setText(originalDBPassword);
192 
193       if (originalDBType.equals(HSQL_OPTION)) {
194         dbChoiceHSQL.setSelected(true);
195         setDBConfigPanelEnabled(false);
196       } else if (originalDBType.equals(MYSQL_OPTION)) {
197         dbChoiceMySQL.setSelected(true);
198         setDBConfigPanelEnabled(true);
199       }
200     } catch (DBException e) {
201       Dialogs.showError(content, "Database Error", "Your selections could not be displayed due to an error!\n\n" + e.getMessage());
202     }
203 
204   }
205 
206 
207   private GridPanelColumn createDBConfigLeftColumn() {
208     GridPanelColumn column = new GridPanelColumn();
209     column.add(new JLabel("Address:"), false, false);
210     column.add(new JLabel("Port:"), false, false);
211     column.add(new JLabel("Username:"), false, false);
212     column.add(new JLabel("Password:"), false, false);
213     column.add(new JLabel("Confirm:"), false, false);
214     return column;
215   }
216 
217 
218   private GridPanelColumn createDBConfigRightColumn() {
219     GridPanelColumn column = new GridPanelColumn();
220     dbAddressTextField = new JTextField(25);
221     dbPortTextField = new JTextField(5);
222     dbUsernameTextField = new JTextField(10);
223     dbPasswordTextField1 = new JPasswordField(10);
224     dbPasswordTextField2 = new JPasswordField(10);
225     column.add(dbAddressTextField, false, false);
226     column.add(dbPortTextField, false, false);
227     column.add(dbUsernameTextField, false, false);
228     column.add(dbPasswordTextField1, false, false);
229     column.add(dbPasswordTextField2, false, false);
230     return column;
231   }
232 
233 
234   public boolean saveConfig() {
235     boolean isSaved = false;
236     try {
237       String currentDBType = configManager.getParameter(ConfigManager.KEY_DB_TYPE);
238       if (dbChoiceHSQL.isSelected()) {
239         //see if selection changes
240         if (!ConfigManager.VALUE_DB_VERSION_HSQL.equals(currentDBType)) {
241           dbChanged = true;
242         }
243         configManager.setParameter(ConfigManager.KEY_DB_TYPE, ConfigManager.VALUE_DB_VERSION_HSQL);
244         isSaved = true;
245       } else if (dbChoiceMySQL.isSelected()) {
246         if (dbPasswordTextField1.getText().equals(dbPasswordTextField2.getText())) {
247           //see if selection changes
248           if (!ConfigManager.VALUE_DB_VERSION_MYSQL.equals(currentDBType)) {
249             dbChanged = true;
250           }
251           configManager.setParameter(ConfigManager.KEY_DB_TYPE, ConfigManager.VALUE_DB_VERSION_MYSQL);
252           configManager.setParameter(ConfigManager.KEY_DB_ADDRESS, dbAddressTextField.getText());
253           configManager.setParameter(ConfigManager.KEY_DB_PASSWORD, dbPasswordTextField1.getText());
254           configManager.setParameter(ConfigManager.KEY_DB_PORT, dbPortTextField.getText());
255           configManager.setParameter(ConfigManager.KEY_DB_USERNAME, dbUsernameTextField.getText());
256           isSaved = true;
257         } else {
258           isSaved = false;
259           Dialogs.showWarning(content, "Error", "The passwords do not match!");
260         }
261       }
262     } catch (DBException e) {
263       Dialogs.showError(content, "Database Error", "Your selections were not saved due to an error!\n\n" + e.getMessage());
264     }
265     return isSaved;
266   }
267 
268 
269   private JPanel createDBChoicesPanel() throws DBException {
270     JPanel panel = new JPanel();
271     BoxLayout box = new BoxLayout(panel, BoxLayout.Y_AXIS);
272     panel.setLayout(box);
273 
274     // Create the radio buttons.
275     dbChoiceHSQL = new JRadioButton(ConfigManager.VALUE_DB_VERSION_HSQL + " (Default)");
276     dbChoiceHSQL.setActionCommand(HSQL_OPTION);
277     dbChoiceMySQL = new JRadioButton(ConfigManager.VALUE_DB_VERSION_MYSQL);
278     dbChoiceMySQL.setActionCommand(MYSQL_OPTION);
279 
280     // Group the radio buttons.
281     group = new ButtonGroup();
282     group.add(dbChoiceHSQL);
283     group.add(dbChoiceMySQL);
284 
285     // Register a listener for the radio buttons.
286     RadioListener myListener = new RadioListener();
287     dbChoiceHSQL.addActionListener(myListener);
288     dbChoiceMySQL.addActionListener(myListener);
289 
290     panel.add(dbChoiceHSQL);
291     panel.add(dbChoiceMySQL);
292     return panel;
293   }
294 
295 
296   private void setDBConfigPanelEnabled(boolean arg) {
297     dbAddressTextField.setEnabled(arg);
298     dbPortTextField.setEnabled(arg);
299     dbUsernameTextField.setEnabled(arg);
300     dbPasswordTextField1.setEnabled(arg);
301     dbPasswordTextField2.setEnabled(arg);
302   }
303 
304 
305   private class DeadlyWindowListener extends WindowAdapter {
306     public void windowClosing(WindowEvent evt) {
307       fireEvent(EVENT_CANCEL);
308     }
309   }
310 
311 
312   class RadioListener implements ActionListener {
313     public void actionPerformed(ActionEvent e) {
314       if (e.getActionCommand().equals(HSQL_OPTION)) {
315         setDBConfigPanelEnabled(false);
316       } else if (e.getActionCommand().equals(MYSQL_OPTION)) {
317         setDBConfigPanelEnabled(true);
318       }
319     }
320   }
321 
322 
323   private JButton makeButton(String name, final String action, Color color) {
324     JButton btn = new JButton();
325     btn.setText(name);
326     if (color != null) {
327       btn.setForeground(color);
328     }
329 
330     btn.addActionListener(
331       new java.awt.event.ActionListener() {
332         //private final String actionFinal = action;
333         public void actionPerformed(ActionEvent e) {
334           fireEvent(action);
335         }
336       });
337     return btn;
338   }
339 
340 
341   protected void handleModelEvent(ModelEvent event) { }
342 
343 
344   /**
345    *  True if the database options were successfully written to the config db
346    *
347    * @return The dbChanged value
348    */
349   public boolean getDbChanged() {
350     return dbChanged;
351   }
352 
353 
354   public boolean formHasChanged() {
355     boolean formHasChanged = false;
356     if (!originalDBAddress.equals(dbAddressTextField.getText())) {
357       formHasChanged = true;
358     }
359     if (!originalDBPort.equals(dbPortTextField.getText())) {
360       formHasChanged = true;
361     }
362     if (!originalDBPassword.equals(dbPasswordTextField1.getText())) {
363       formHasChanged = true;
364     }
365     if (!originalDBPassword.equals(dbPasswordTextField2.getText())) {
366       formHasChanged = true;
367     }
368     if (!originalDBUsername.equals(dbUsernameTextField.getText())) {
369       formHasChanged = true;
370     }
371     if (dbChoiceHSQL.isSelected()) {
372       if (!originalDBType.equals(HSQL_OPTION)) {
373         formHasChanged = true;
374       }
375     } else if (dbChoiceMySQL.isSelected()) {
376       if (!originalDBType.equals(MYSQL_OPTION)) {
377         formHasChanged = true;
378       }
379     }
380     return formHasChanged;
381   }
382 
383 
384   public String getDbAddressText() {
385     return dbAddressTextField.getText();
386   }
387 
388 
389   public String getDbPortText() {
390     return dbPortTextField.getText();
391   }
392 
393 
394   public String getDbUsernameText() {
395     return dbUsernameTextField.getText();
396   }
397 
398 
399   public String getDbPasswordText() {
400     return dbPasswordTextField1.getText();
401   }
402   public String getDbPasswordConfirmText() {
403     return dbPasswordTextField2.getText();
404   }
405 
406   public String getDbType() {
407     if (dbChoiceHSQL.isSelected()) {
408       return ConfigManager.VALUE_DB_VERSION_HSQL;
409     } else if (dbChoiceMySQL.isSelected()) {
410       return ConfigManager.VALUE_DB_VERSION_MYSQL;
411     } else {
412       throw new UnsupportedOperationException();
413     }
414   }
415 
416 
417   public String getOriginalDBAddress() {
418     return originalDBAddress;
419   }
420 
421 
422   public String getOriginalDBPort() {
423     return originalDBPort;
424   }
425 
426 
427   public String getOriginalDBPassword() {
428     return originalDBPassword;
429   }
430 
431 
432   public String getOriginalDBUsername() {
433     return originalDBUsername;
434   }
435 
436 
437   public String getOriginalDBType() {
438     return originalDBType;
439   }
440 }