001 package hep.aida.ref.sql.JAS3Plugin;
002
003 import hep.aida.ref.sql.AIDAURL;
004
005 // AIDA
006 import hep.aida.IAnalysisFactory;
007
008 // FreeHEP
009 import org.freehep.application.Application;
010 import org.freehep.swing.wizard.Finishable;
011 import org.freehep.swing.wizard.WizardPage;
012 import org.freehep.application.RecentItemTextField;
013
014 // Java
015 import java.io.IOException;
016 import java.awt.GridBagConstraints;
017 import java.awt.GridBagLayout;
018 import java.awt.Insets;
019 import javax.swing.JLabel;
020 import javax.swing.border.EmptyBorder;
021 import javax.swing.JTextField;
022 import javax.swing.JPasswordField;
023
024 /** <code>SQLTupleWizardPage</code> is a Wizard to establish connection
025 * to SQL database using SQLTuple.
026 * <p><font color="#880088">
027 * $Id: SQLTupleWizardPage.java,v 1.21 2007/06/11 14:02:29 hrivnac Exp $
028 * <pre>
029 * $Log: SQLTupleWizardPage.java,v $
030 * Revision 1.21 2007/06/11 14:02:29 hrivnac
031 * better support for tags in Oracle
032 *
033 * Revision 1.20 2007/05/23 16:38:45 hrivnac
034 * logical connections for Plotter; better UML
035 *
036 * Revision 1.19 2006/12/19 14:31:08 hrivnac
037 * news added into WS
038 *
039 * Revision 1.18 2006/12/13 16:38:51 hrivnac
040 * derby works in JAS3 Plugin
041 *
042 * Revision 1.17 2005/09/28 16:21:06 hrivnac
043 * code cleaning
044 *
045 * Revision 1.16 2005/03/08 17:05:51 hrivnac
046 * ...
047 *
048 * Revision 1.15 2004/12/08 10:56:51 hrivnac
049 * ITree created with sensible name for Oracle
050 *
051 * Revision 1.14 2004/12/08 10:25:19 hrivnac
052 * ITree created with sensible name for Oracle
053 *
054 * Revision 1.13 2004/12/08 10:15:39 hrivnac
055 * ITree created with sensible name for Oracle
056 *
057 * Revision 1.12 2004/12/07 01:04:56 hrivnac
058 * name pattern can be specified
059 *
060 * Revision 1.11 2004/12/01 16:07:15 hrivnac
061 * better support for ColMan JAS3 plugin
062 *
063 * Revision 1.10 2004/11/30 15:13:20 hrivnac
064 * support for ColMan JAS3Plugin
065 *
066 * Revision 1.9 2004/11/26 17:52:28 hrivnac
067 * JAS3Plugin can use customised StmtSrc
068 *
069 * Revision 1.8 2004/11/24 14:32:32 hrivnac
070 * better support for schemas
071 *
072 * Revision 1.7 2004/11/19 16:04:39 hrivnac
073 * JAS3 plugin supports empty password
074 *
075 * Revision 1.6 2004/10/29 22:27:25 hrivnac
076 * imports corrected
077 *
078 * Revision 1.5 2004/10/22 15:33:00 hrivnac
079 * cleaned
080 *
081 * Revision 1.4 2004/10/20 23:02:29 hrivnac
082 * Types mapping simplified
083 *
084 * Revision 1.3 2004/10/13 12:25:40 hrivnac
085 * defaults work fine
086 *
087 * Revision 1.2 2004/10/12 19:26:59 hrivnac
088 * MySQL Connector 3.0.14
089 *
090 * Revision 1.1 2004/10/08 22:20:50 hrivnac
091 * JAS3Plugin works from JAS3 Menu
092 *
093 * </pre>
094 * </font></p>
095 * @opt attributes
096 * @opt operations
097 * @opt types
098 * @opt visibility
099 * @version $Id: SQLTupleWizardPage.java,v 1.21 2007/06/11 14:02:29 hrivnac Exp $
100 * @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */
101 public class SQLTupleWizardPage extends WizardPage
102 implements Finishable {
103
104 /** Construct. */
105 public SQLTupleWizardPage() {
106 initComponents();
107 }
108
109 /** Connect to the SQL database when "Finish" is requested. */
110 public void onFinish() {
111 AIDAURL aidaurl = new AIDAURL(_urlField.getText());
112 String db = aidaurl.db();
113 String schema = _schemaField.getText();
114 String name = _nameField.getText();
115 String user = _userField.getText();
116 String passwd = new String(_passwordField.getPassword());
117 String stmtSrc = null;
118 if (_stmtSrcField != null) {
119 stmtSrc = _stmtSrcField.getText();
120 }
121 String options = "hep.aida.ref.sql.db=" + db + ";"
122 + "hep.aida.ref.sql.user=" + user;
123 if (schema != null && !schema.trim().equals("")) {
124 options += ";hep.aida.ref.sql.schema=" + schema;
125 }
126 else if (aidaurl.protocol().equals("oracle")) {
127 options += ";hep.aida.ref.sql.schema=" + user.toUpperCase();
128 }
129 if (name != null && !name.trim().equals("")) {
130 options += ";hep.aida.ref.sql.name=" + name;
131 }
132 if (passwd != null && !passwd.trim().equals("")) {
133 options += ";hep.aida.ref.sql.passwd=" + passwd;
134 }
135 if (stmtSrc != null && !stmtSrc.trim().equals("")) {
136 options += ";hep.aida.ref.sql.src=" + stmtSrc;
137 }
138 options += ";hep.aida.ref.sql.forwardonly=true";
139 _urlField.saveState();
140 _schemaField.saveState();
141 _nameField.saveState();
142 _userField.saveState();
143 String id = aidaurl.name();
144 if (schema != null && !schema.trim().equals("")) {
145 id += "_" + schema;
146 }
147 if (aidaurl.protocol() != null && !aidaurl.protocol().trim().equals("")) {
148 id += "(" + aidaurl.protocol() + ")";
149 }
150 try {
151 IAnalysisFactory.create().createTreeFactory().create(id, "sql", true, false, options);
152 }
153 catch (IOException e) {
154 Application.getApplication().error(this, "Error connect to " + db, e);
155 }
156 dispose();
157 }
158
159 /** Create panel. */
160 private void initComponents() {
161
162 GridBagConstraints gridBagConstraints;
163 setLayout(new GridBagLayout());
164
165 JLabel urlLabel = new JLabel();
166 urlLabel.setText("Database URL:");
167 setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));
168 gridBagConstraints = new GridBagConstraints();
169 gridBagConstraints.insets = new Insets(0, 0, 0, 5);
170 gridBagConstraints.anchor = GridBagConstraints.EAST;
171 add(urlLabel, gridBagConstraints);
172
173 _urlField = new RecentItemTextField("sqltuple.url.last", 10, true);
174 _urlField.setMaxWidth(50);
175 gridBagConstraints = new GridBagConstraints();
176 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
177 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
178 gridBagConstraints.weightx = 1.0;
179 add(_urlField, gridBagConstraints);
180
181 JLabel schemaLabel = new JLabel();
182 schemaLabel.setText("Schema Pattern (optional):");
183 setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));
184 gridBagConstraints = new GridBagConstraints();
185 gridBagConstraints.insets = new Insets(0, 0, 0, 5);
186 gridBagConstraints.anchor = GridBagConstraints.EAST;
187 add(schemaLabel, gridBagConstraints);
188
189 _schemaField = new RecentItemTextField("sqltuple.schema.last", 10, true);
190 gridBagConstraints = new GridBagConstraints();
191 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
192 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
193 gridBagConstraints.weightx = 1.0;
194 add(_schemaField, gridBagConstraints);
195
196 JLabel nameLabel = new JLabel();
197 nameLabel.setText("Name Pattern (optional):");
198 setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));
199 gridBagConstraints = new GridBagConstraints();
200 gridBagConstraints.insets = new Insets(0, 0, 0, 5);
201 gridBagConstraints.anchor = GridBagConstraints.EAST;
202 add(nameLabel, gridBagConstraints);
203
204 _nameField = new RecentItemTextField("sqltuple.name.last", 10, true);
205 gridBagConstraints = new GridBagConstraints();
206 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
207 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
208 gridBagConstraints.weightx = 1.0;
209 add(_nameField, gridBagConstraints);
210
211 JLabel userLabel = new JLabel();
212 userLabel.setText("Username:");
213 gridBagConstraints = new GridBagConstraints();
214 gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
215 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
216 add(userLabel, gridBagConstraints);
217
218 _userField = new RecentItemTextField("sqltuple.user.last", 10, true);
219 if (_userField.getText().equals("")) {
220 _userField.setText(System.getProperty("user.name"));
221 }
222 gridBagConstraints = new GridBagConstraints();
223 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
224 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
225 gridBagConstraints.weightx = 1.0;
226 add(_userField, gridBagConstraints);
227
228 JLabel passwordLabel = new JLabel();
229 passwordLabel.setText("Password (optional):");
230 gridBagConstraints = new GridBagConstraints();
231 gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
232 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
233 add(passwordLabel, gridBagConstraints);
234
235 _passwordField = new javax.swing.JPasswordField();
236 gridBagConstraints = new GridBagConstraints();
237 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
238 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
239 gridBagConstraints.weightx = 1.0;
240 add(_passwordField, gridBagConstraints);
241
242 if (_stmtSrc != null) {
243 JLabel stmtSrcLabel = new JLabel();
244 stmtSrcLabel.setText("Customised StmtSrc (optional):");
245 gridBagConstraints = new GridBagConstraints();
246 gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
247 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
248 add(stmtSrcLabel, gridBagConstraints);
249 _stmtSrcField = new JTextField();
250 _stmtSrcField.setText(_stmtSrc);
251 gridBagConstraints = new GridBagConstraints();
252 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
253 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
254 gridBagConstraints.weightx = 1.0;
255 add(_stmtSrcField, gridBagConstraints);
256 }
257
258 }
259
260 /** Set customised {@link hep.aida.ref.sql.StmtSrc} properties.
261 * @param stmtSrc The customised {@link hep.aida.ref.sql.StmtSrc} properties. */
262 public static void setStmtSrc(String stmtSrc) {
263 _stmtSrc = stmtSrc;
264 }
265
266 private static String _stmtSrc;
267
268 private RecentItemTextField _urlField;
269
270 private RecentItemTextField _schemaField;
271
272 private RecentItemTextField _nameField;
273
274 private RecentItemTextField _userField;
275
276 private JPasswordField _passwordField;
277
278 private JTextField _stmtSrcField;
279
280 }