KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > networkplaces > JDBCNetworkPaceDatabase


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.networkplaces;
21
22 import java.io.File JavaDoc;
23 import java.sql.ResultSet JavaDoc;
24 import java.sql.Timestamp JavaDoc;
25 import java.util.ArrayList JavaDoc;
26 import java.util.Calendar JavaDoc;
27 import java.util.List JavaDoc;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31
32 import com.sslexplorer.boot.ContextHolder;
33 import com.sslexplorer.core.CoreEvent;
34 import com.sslexplorer.core.CoreListener;
35 import com.sslexplorer.core.CoreServlet;
36 import com.sslexplorer.extensions.store.ExtensionStore;
37 import com.sslexplorer.extensions.types.PluginDefinition;
38 import com.sslexplorer.jdbc.DBUpgrader;
39 import com.sslexplorer.jdbc.JDBCDatabaseEngine;
40 import com.sslexplorer.jdbc.JDBCPreparedStatement;
41
42 /**
43  * Implementation of a {@link com.sslexplorer.security.SystemDatabase} that uses
44  * a JDBC compliant database to store SSL-Explorer's network place configuration
45  * and resources.
46  *
47  * @author James D Robinson <a HREF="mailto:james@3sp.com">&lt;james@3sp.com&gt;</a>
48  */

49 public class JDBCNetworkPaceDatabase implements NetworkPlaceDatabase, CoreListener {
50     private static final Log log = LogFactory.getLog(JDBCNetworkPaceDatabase.class);
51
52     private JDBCDatabaseEngine db;
53
54     /**
55      * Constructor
56      */

57     public JDBCNetworkPaceDatabase() {
58     }
59
60     /*
61      * (non-Javadoc)
62      *
63      * @see com.sslexplorer.core.Database#open(com.sslexplorer.core.CoreServlet)
64      */

65     public void open(CoreServlet controllingServlet) throws Exception JavaDoc {
66         throw new Exception JavaDoc("Plugin databases need a PluginDefinition.");
67     }
68
69     /*
70      * (non-Javadoc)
71      *
72      * @see com.sslexplorer.boot.Database#close()
73      */

74     public void close() throws Exception JavaDoc {
75     }
76
77     /*
78      * (non-Javadoc)
79      *
80      * @see com.sslexplorer.boot.Database#cleanup()
81      */

82     public void cleanup() throws Exception JavaDoc {
83     }
84
85     /*
86      * (non-Javadoc)
87      *
88      * @see com.sslexplorer.core.CoreListener#coreEvent(com.sslexplorer.core.CoreEvent)
89      */

90     public void coreEvent(CoreEvent evt) {
91     }
92
93     /*
94      * (non-Javadoc)
95      *
96      * @see com.sslexplorer.security.SystemDatabase#createNetworkPlace(java.lang.String,
97      * java.lang.String, java.lang.String, java.lang.String,
98      * java.lang.String, int, java.lang.String, java.lang.String, boolean,
99      * boolean, boolean, boolean)
100      */

101     public NetworkPlace createNetworkPlace(String JavaDoc scheme, String JavaDoc shortName, String JavaDoc description, String JavaDoc host, String JavaDoc uri, int port,
102                     String JavaDoc username, String JavaDoc password, boolean readOnly, boolean allowResursive, boolean noDelete, boolean showHidden, int realmID)
103                     throws Exception JavaDoc {
104         JDBCPreparedStatement ps = db.getStatement("createNetworkPlace.insert");
105         try {
106             ps.setString(1, scheme);
107             ps.setString(2, host);
108             ps.setString(3, uri);
109             ps.setInt(4, port);
110             ps.setString(5, username);
111             ps.setString(6, password);
112             ps.setString(7, shortName);
113             ps.setString(8, description);
114             ps.setInt(9, readOnly ? 1 : 0);
115             ps.setInt(10, allowResursive ? 1 : 0);
116             ps.setInt(11, noDelete ? 1 : 0);
117             ps.setInt(12, showHidden ? 1 : 0);
118             Calendar JavaDoc now = Calendar.getInstance();
119             ps.setString(13, db.formatTimestamp(now));
120             ps.setString(14, db.formatTimestamp(now));
121             ps.setInt(15, realmID);
122             ps.execute();
123             int id = db.getLastInsertId(ps, "createNetworkPlace.lastInsertId");
124             return this.getNetworkPlace(id);
125         } finally {
126             ps.releasePreparedStatement();
127         }
128     }
129
130     /*
131      * (non-Javadoc)
132      *
133      * @see com.sslexplorer.security.SystemDatabase#getNetworkPlace(int)
134      */

135     public NetworkPlace getNetworkPlace(int resourceId) throws Exception JavaDoc {
136         JDBCPreparedStatement ps = null;
137         ps = db.getStatement("getNetworkPlace.select");
138         ps.setInt(1, resourceId);
139         try {
140             ResultSet JavaDoc rs = ps.executeQuery();
141             try {
142                 if (rs.next()) {
143                     return buildNetworkPlace(rs);
144                 }
145                 return null;
146             } finally {
147                 rs.close();
148             }
149         } finally {
150             ps.releasePreparedStatement();
151         }
152     }
153
154     /* (non-Javadoc)
155      * @see com.sslexplorer.networkplaces.NetworkPlaceDatabase#getNetworkPlace(java.lang.String, int)
156      */

157     public NetworkPlace getNetworkPlace(String JavaDoc name, int realmID) throws Exception JavaDoc {
158         JDBCPreparedStatement ps = null;
159         ps = db.getStatement("getNetworkPlace.select.name");
160         ps.setString(1, name);
161         ps.setInt(2, realmID);
162         try {
163             ResultSet JavaDoc rs = ps.executeQuery();
164             try {
165                 if (rs.next()) {
166                     return buildNetworkPlace(rs);
167                 }
168                 return null;
169             } finally {
170                 rs.close();
171             }
172         } finally {
173             ps.releasePreparedStatement();
174         }
175     }
176     
177     /*
178      * (non-Javadoc)
179      *
180      * @see com.sslexplorer.security.SystemDatabase#updateNetworkPlace(int,
181      * java.lang.String, java.lang.String, java.lang.String,
182      * java.lang.String, java.lang.String, int, java.lang.String,
183      * java.lang.String, boolean, boolean, boolean, boolean)
184      */

185     public void updateNetworkPlace(int resourceId, String JavaDoc scheme, String JavaDoc resourceName, String JavaDoc resourceDescription, String JavaDoc host,
186                     String JavaDoc uri, int port, String JavaDoc username, String JavaDoc password, boolean readOnly, boolean allowResursive,
187                     boolean noDelete, boolean showHidden) throws Exception JavaDoc {
188         JDBCPreparedStatement ps = db.getStatement("updateNetworkPlace.update");
189         try {
190             ps.setString(1, resourceName);
191             ps.setString(2, scheme);
192             ps.setString(3, host);
193             ps.setString(4, uri);
194             ps.setInt(5, port);
195             ps.setString(6, username);
196             ps.setString(7, password);
197             ps.setString(8, resourceDescription);
198             ps.setInt(9, readOnly ? 1 : 0);
199             ps.setInt(10, allowResursive ? 1 : 0);
200             ps.setInt(11, noDelete ? 1 : 0);
201             ps.setInt(12, showHidden ? 1 : 0);
202             Calendar JavaDoc now = Calendar.getInstance();
203             ps.setString(13, db.formatTimestamp(now));
204             ps.setInt(14, resourceId);
205             ps.execute();
206         } finally {
207             ps.releasePreparedStatement();
208         }
209     }
210
211     /*
212      * (non-Javadoc)
213      *
214      * @see com.sslexplorer.security.SystemDatabase#getNetworkPlaces()
215      */

216     public List JavaDoc<NetworkPlace> getNetworkPlaces() throws Exception JavaDoc {
217         List JavaDoc<NetworkPlace> v = new ArrayList JavaDoc<NetworkPlace>();
218         JDBCPreparedStatement ps = db.getStatement("getNetworkPlaces.select");
219         try {
220             ResultSet JavaDoc rs = ps.executeQuery();
221             try {
222                 while (rs.next()) {
223                     v.add(buildNetworkPlace(rs));
224                 }
225             } finally {
226                 rs.close();
227             }
228         } finally {
229             ps.releasePreparedStatement();
230         }
231         return v;
232     }
233
234     /*
235      * (non-Javadoc)
236      *
237      * @see com.sslexplorer.security.SystemDatabase#deleteNetworkPlace(int)
238      */

239     public NetworkPlace deleteNetworkPlace(int id) throws Exception JavaDoc {
240         NetworkPlace np = getNetworkPlace(id);
241         if (np == null) {
242             throw new Exception JavaDoc("Network Place " + id + " doesn't exist.");
243         }
244         JDBCPreparedStatement ps = null;
245         ps = db.getStatement("deleteNetworkPlace.delete");
246         try {
247             ps.setInt(1, id);
248             ps.execute();
249         } finally {
250             ps.releasePreparedStatement();
251         }
252         return np;
253     }
254
255     /**
256      * Build the network place from the result set.
257      *
258      * @param rs
259      * @return NetworkPlace
260      * @throws Exception
261      */

262     NetworkPlace buildNetworkPlace(ResultSet JavaDoc rs) throws Exception JavaDoc {
263         Timestamp JavaDoc cd = rs.getTimestamp("date_created");
264         Calendar JavaDoc c = Calendar.getInstance();
265         c.setTimeInMillis(cd == null ? System.currentTimeMillis() : cd.getTime());
266         Timestamp JavaDoc ad = rs.getTimestamp("date_amended");
267         Calendar JavaDoc a = Calendar.getInstance();
268         a.setTimeInMillis(ad == null ? System.currentTimeMillis() : ad.getTime());
269         return new DefaultNetworkPlace(rs.getInt("realm_id"), rs.getInt("resource_id"), rs.getString("scheme"), rs.getString("short_name"), rs
270                         .getString("description"), rs.getString("host"), rs.getString("path"), rs.getInt("port"), rs
271                         .getString("username"), rs.getString("password"), NetworkPlace.TYPE_NORMAL, rs.getBoolean("read_only"), rs
272                         .getBoolean("allow_resursive"), rs.getBoolean("no_delete"), rs.getBoolean("show_hidden"), c, a);
273     }
274
275     /* (non-Javadoc)
276      * @see com.sslexplorer.plugin.PluginDatabase#open(com.sslexplorer.core.CoreServlet, com.sslexplorer.plugin.PluginDefinition)
277      */

278     public void open(CoreServlet controllingServlet, PluginDefinition def) throws Exception JavaDoc {
279         String JavaDoc dbName = System.getProperty("sslexplorer.systemDatabase.jdbc.dbName", "explorer_configuration");
280         controllingServlet.addDatabase(dbName, ContextHolder.getContext().getDBDirectory());
281         String JavaDoc jdbcUser = System.getProperty("sslexplorer.jdbc.username", "sa");
282         String JavaDoc jdbcPassword = System.getProperty("sslexplorer.jdbc.password", "");
283         String JavaDoc vendorDB = System.getProperty("sslexplorer.jdbc.vendorClass", "com.sslexplorer.jdbc.hsqldb.HSQLDBDatabaseEngine");
284
285         if (log.isInfoEnabled()) {
286             log.info("Network Places database is being opened...");
287             log.info("JDBC vendor class implementation is " + vendorDB);
288         }
289
290         db = (JDBCDatabaseEngine) Class.forName(vendorDB).newInstance();
291         db.init("networkPlacesDatabase", dbName, jdbcUser, jdbcPassword, getClass().getClassLoader());
292
293         File JavaDoc upgradeDir = new File JavaDoc(def.getDescriptor().getApplicationBundle().getBaseDir(), "upgrade");
294         DBUpgrader upgrader = new DBUpgrader(ExtensionStore.getInstance()
295             .getExtensionBundle(NetworkPlacePlugin.BUNDLE_ID)
296             .getVersion(), db, ContextHolder.getContext()
297                         .getDBDirectory(), upgradeDir);
298         upgrader.upgrade();
299
300         CoreServlet.getServlet().addCoreListener(this);
301     }
302
303     /* (non-Javadoc)
304      * @see com.sslexplorer.networkplaces.NetworkPlaceDatabase#getNetworkPlaces(int)
305      */

306     public List JavaDoc<NetworkPlace> getNetworkPlaces(int realmID) throws Exception JavaDoc {
307         List JavaDoc<NetworkPlace> v = new ArrayList JavaDoc<NetworkPlace>();
308         JDBCPreparedStatement ps = db.getStatement("getNetworkPlaces.realm.select");
309         try {
310             ps.setInt(1, realmID);
311             ResultSet JavaDoc rs = ps.executeQuery();
312             try {
313                 while (rs.next()) {
314                     v.add(buildNetworkPlace(rs));
315                 }
316             } finally {
317                 rs.close();
318             }
319         } finally {
320             ps.releasePreparedStatement();
321         }
322         return v;
323     }
324 }
325
Popular Tags