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 }