KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > wminstaller > screens > ScreenDBSetup


1 package de.webman.wminstaller.screens;
2
3 import de.webman.wminstaller.app.*;
4 import javax.swing.*;
5 import java.awt.*;
6 import java.awt.event.*;
7 import de.webman.wminstaller.tools.WholeNumberField;
8 import java.sql.*;
9 import de.webman.db.*;
10
11 /**
12  * Implementierung des Datenbank Setup screens
13  *
14  * @author <a HREF="mailto:ulf@webman.de">Ulf Goldammer</a>
15  * @version $Revision: 1.3 $
16  **/

17 public class ScreenDBSetup extends InstallerScreen
18 {
19     /* $Id: ScreenDBSetup.java,v 1.3 2002/02/15 10:55:46 gregor Exp $ */
20
21     final JPanel dbPanel = new JPanel();
22
23     JPanel optionsPanel = null;
24     JComboBox optDBType = null;
25     WholeNumberField optDBLicences = null;
26     JTextField optDBUser = null;
27     JPasswordField optDBPassword1 = null;
28     JPasswordField optDBPassword2 = null;
29     JTextField optDBName = null;
30     JTextField optDBServer = null;
31     WholeNumberField optDBPort = null;
32
33
34     private void addLine(String JavaDoc label, Component c) {
35         JPanel helper = new JPanel( new BorderLayout());
36         helper.add( c, BorderLayout.WEST);
37         dbPanel.add( new JLabel( label, javax.swing.SwingConstants.RIGHT));
38         dbPanel.add( helper);
39     }
40
41     public final static String JavaDoc SUPDB_SYBASE = "Sybase";
42     public final static String JavaDoc SUPDB_ORACLE8I = "Oracle8i";
43     public final static String JavaDoc SUPDB_POSTGRESQL = "Postgresql";
44     static String JavaDoc[] dbTypes = {SUPDB_SYBASE,
45                                SUPDB_ORACLE8I,
46                                SUPDB_POSTGRESQL};
47
48     public final static int SYBASE_DEFAULT_PORT = 3000;
49     public final static int ORACLE8I_DEFAULT_PORT = 1521;
50     public final static int POSTGRESQL_DEFAULT_PORT = 5432;
51     
52     public ScreenDBSetup( Installer wmi, int bt) {
53         super( wmi, bt);
54         
55         dbPanel.setLayout( new GridLayout( 8, 2, 5, 8));
56         
57         optDBType = new JComboBox(dbTypes);
58         addLine("DB-Typ", optDBType);
59         
60         optDBLicences = new WholeNumberField(0, 4);
61         addLine("Anzahl der DB-Lizenzen", optDBLicences);
62         
63         optDBUser = new JTextField( "", 12);
64         addLine("DB-Nutzername", optDBUser);
65                 
66         optDBPassword1 = new JPasswordField( "", 12);
67         addLine("DB-Passwort", optDBPassword1);
68         
69         optDBPassword2 = new JPasswordField( "", 12);
70         addLine("DB-Passwort (nochmals)", optDBPassword2);
71         
72         optDBName = new JTextField( "", 12);
73         addLine("DB-Name", optDBName);
74         
75         optDBServer = new JTextField( "", 12);
76         addLine("DB-Servername", optDBServer);
77                 
78         optDBPort = new WholeNumberField(0, 5);
79         addLine("DB-Serverport", optDBPort);
80
81
82         /* setup action listeners for the combobox */
83         optDBType.addActionListener(new ActionListener() {
84                 public void actionPerformed(ActionEvent e) {
85                     JComboBox cb = (JComboBox)e.getSource();
86                     String JavaDoc dbtype = (String JavaDoc)cb.getSelectedItem();
87                     
88                     if (SUPDB_SYBASE.equals(dbtype)) {
89                         /* hooks for sybase */
90                         int dbport = optDBPort.getValue();
91                         if (dbport == 0)
92                             optDBPort.setValue(SYBASE_DEFAULT_PORT);
93                         optDBName.setEnabled(false);
94                     }
95                     else if (SUPDB_ORACLE8I.equals(dbtype)) {
96                         /* hooks for oracle8i */
97                         int dbport = optDBPort.getValue();
98                         if (dbport == 0)
99                             optDBPort.setValue(ORACLE8I_DEFAULT_PORT);
100                         optDBName.setEnabled(true);
101                     }
102                     else if (SUPDB_POSTGRESQL.equals(dbtype)) {
103                         /* hooks for oracle8i */
104                         int dbport = optDBPort.getValue();
105                         if (dbport == 0)
106                             optDBPort.setValue(POSTGRESQL_DEFAULT_PORT);
107                         optDBName.setEnabled(true);
108                     }
109                 }
110             });
111
112
113         optionsPanel = new JPanel( new BorderLayout());
114         optionsPanel.add( dbPanel, BorderLayout.NORTH);
115         // optionsPanel.setBackground( Color.blue);
116
addScreen( "Angaben zur Datenbank", optionsPanel);
117     }
118
119     static final int MAX_WIDTH = 40;
120
121     public boolean storeValues() {
122         /* TODO:
123
124            1a. fetch the values from the GUI
125            
126            1b. check for their correctness (password, set user name, ...)
127            
128            1c. and store them into wmi.getDictionary()
129            
130            2. check that the database is available
131         
132            2a. if the database is not available popup dialog and ask if to continue anyway
133
134            2a.1 if answer="YES", store flag into wmi.getDictionary(),
135            switching off automatic sql-setup for the database!
136
137            2a.2 if answer="NO" return #false
138            
139            2b. if database is available, return #true
140         */

141
142         /* 1a. get the values */
143         String JavaDoc dbtype = (String JavaDoc)optDBType.getSelectedItem();
144         int licences = optDBLicences.getValue();
145         String JavaDoc dbuser = optDBUser.getText();
146         String JavaDoc dbname = optDBName.getText();
147         String JavaDoc dbserver = optDBServer.getText();
148         int dbport = optDBPort.getValue();
149         String JavaDoc passwd1 = optDBPassword1.getText();
150         String JavaDoc passwd2 = optDBPassword2.getText();
151
152
153         boolean retv = true;
154         StringBuffer JavaDoc errmsgs = new StringBuffer JavaDoc();
155
156         wmi.getDictionary().put(DictConstants.DB_INSTALL, "true");
157
158         /* 1b. check the values */
159         if (dbuser == null || dbuser.length() == 0) {
160             errmsgs.append("- Leerer Benutzername\n");
161             retv = false;
162         }
163         if (!SUPDB_SYBASE.equals(dbtype) &&
164             (dbname == null || dbname.length() == 0)) {
165             errmsgs.append("- kein Datenbank-Name\n");
166             retv = false;
167         }
168         if (dbserver == null || dbserver.length() == 0) {
169             errmsgs.append("- kein Datenbank-Server\n");
170             retv = false;
171         }
172         if (passwd1 == null || passwd1.length() == 0 ||
173             passwd2 == null || passwd2.length() == 0) {
174             errmsgs.append("- leere Passworte\n");
175             retv = false;
176         }
177         if (passwd1 != null && passwd2 != null &&
178             !passwd1.equals(passwd2)) {
179             errmsgs.append("- Passworte sind nicht identisch\n");
180             retv = false;
181         }
182
183         if (licences == 0) {
184             errmsgs.append("- keine Lizenzangabe\n");
185             retv = false;
186         }
187         if (dbport <= 0 || dbport > 65535) {
188             errmsgs.append("- kein oder unmöglicher Datenbank-Port\n");
189             retv = false;
190         }
191         
192         if (!retv) {
193             Object JavaDoc[] options = {"Korregieren", "Abbrechen"};
194             int n = JOptionPane.showOptionDialog(optionsPanel,
195                                                  "Einige Angaben waren falsch oder nicht\n" +
196                                                  "vollständig. Bitte überprüfen sie die\n" +
197                                                  "folgenden Felder:\n" + errmsgs.toString(),
198                                                  "Fehlerhafte Eingabe",
199                                                  JOptionPane.YES_NO_OPTION,
200                                                  JOptionPane.QUESTION_MESSAGE,
201                                                  null, //don't use a custom Icon
202
options, //the titles of buttons
203
options[0]); //default button title
204
switch (n) {
205             case JOptionPane.YES_OPTION:
206                 return false;
207             case JOptionPane.NO_OPTION:
208                 wmi.leave(-1);
209                 break;
210             }
211         }
212
213         /* try to connect the database server and check if it is
214            running. */

215         String JavaDoc[] dberrmsg = new String JavaDoc[1];
216         if (!isDatabaseOk(dbtype, dbuser, dbname, dbserver, dbport, passwd1, dberrmsg)) {
217             /* "database does not react" */
218             Object JavaDoc[] options = {"Korregieren", "Weiter, ohne DB-Install", "Abbrechen"};
219
220             /* if the errormessage is longer than the MAX_WIDTH, split it into pieces of equal length */
221             if (dberrmsg[0].length() > MAX_WIDTH) {
222                 StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
223                 int c;
224                 for (c = 0; c + MAX_WIDTH < dberrmsg[0].length(); c += MAX_WIDTH) {
225                     buf.append(dberrmsg[0].substring(c, c + MAX_WIDTH));
226                     buf.append("\n");
227                 }
228                 if (c < dberrmsg[0].length()) {
229                     buf.append(dberrmsg[0].substring(c));
230                 }
231                 dberrmsg[0] = buf.toString();
232             }
233
234             int n = JOptionPane.showOptionDialog(optionsPanel,
235                                                  "Die Datenbank reagiert nicht\n(" + dberrmsg[0] + ")\n" +
236                                                  "Wenn Sie jetzt fortfahren, kann die Datenbank nicht\n" +
237                                                  "für Einsatz mit Webman vorbereitet werden.",
238                                                  "Datenbankfehler",
239                                                  JOptionPane.YES_NO_CANCEL_OPTION,
240                                                  JOptionPane.QUESTION_MESSAGE,
241                                                  null, //don't use a custom Icon
242
options, //the titles of buttons
243
options[0]); //default button title
244
switch (n) {
245             case JOptionPane.YES_OPTION: // korregieren
246
wmi.getDictionary().put(DictConstants.DB_INSTALL, "true");
247                 retv = false;
248                 break;
249             case JOptionPane.NO_OPTION: // weiter
250
wmi.getDictionary().put(DictConstants.DB_INSTALL, "false");
251                 break;
252             case JOptionPane.CLOSED_OPTION: // cancel
253
wmi.leave(-1);
254                 break;
255             }
256         }
257
258         wmi.getDictionary().put(DictConstants.DB_TYPE, dbtype);
259         wmi.getDictionary().put(DictConstants.DB_LICENCES, new Integer JavaDoc(licences));
260         wmi.getDictionary().put(DictConstants.DB_USER, dbuser);
261         wmi.getDictionary().put(DictConstants.DB_NAME, dbname);
262         wmi.getDictionary().put(DictConstants.DB_SERVER, dbserver);
263         wmi.getDictionary().put(DictConstants.DB_PORT, new Integer JavaDoc(dbport));
264         wmi.getDictionary().put(DictConstants.DB_PASSWORD, passwd1);
265         
266         return retv;
267     }
268
269     public void onEnter() {
270     }
271
272
273
274
275     /* ----------------------------------------------------------------------
276        check the database
277        ---------------------------------------------------------------------- */

278     /* try to connect the database */
279     private boolean isDatabaseOk(String JavaDoc dbtype, String JavaDoc dbuser, String JavaDoc dbname, String JavaDoc dbserver,
280                                  int dbport, String JavaDoc passwd, String JavaDoc[] errmsg)
281     {
282         DBConnection con = null;
283         try {
284             con = DBConnectionMgr.getInstance().getConnection(dbtype,
285                                                               dbname, dbserver, dbport,
286                                                               dbuser, passwd);
287         }
288         catch (SQLException e) {
289             System.err.println("[" + e + "]");
290             errmsg[0] = e.getMessage();
291             return false;
292         }
293         
294         if (con != null) {
295             try {
296                 con.close();
297             }
298             catch (SQLException sqle) {
299                 System.err.println("[" + sqle + "]");
300                 errmsg[0] = sqle.getMessage();
301                 return false;
302             }
303         }
304         else {
305             errmsg[0] = "Unbekannte Datenbank";
306             return false;
307         }
308
309         return true;
310     }
311
312 }
313
Popular Tags