1 19 20 package com.sslexplorer.networkplaces; 21 22 import java.io.File ; 23 import java.sql.ResultSet ; 24 import java.sql.Timestamp ; 25 import java.util.ArrayList ; 26 import java.util.Calendar ; 27 import java.util.List ; 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 49 public class JDBCNetworkPaceDatabase implements NetworkPlaceDatabase, CoreListener { 50 private static final Log log = LogFactory.getLog(JDBCNetworkPaceDatabase.class); 51 52 private JDBCDatabaseEngine db; 53 54 57 public JDBCNetworkPaceDatabase() { 58 } 59 60 65 public void open(CoreServlet controllingServlet) throws Exception { 66 throw new Exception ("Plugin databases need a PluginDefinition."); 67 } 68 69 74 public void close() throws Exception { 75 } 76 77 82 public void cleanup() throws Exception { 83 } 84 85 90 public void coreEvent(CoreEvent evt) { 91 } 92 93 101 public NetworkPlace createNetworkPlace(String scheme, String shortName, String description, String host, String uri, int port, 102 String username, String password, boolean readOnly, boolean allowResursive, boolean noDelete, boolean showHidden, int realmID) 103 throws Exception { 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 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 135 public NetworkPlace getNetworkPlace(int resourceId) throws Exception { 136 JDBCPreparedStatement ps = null; 137 ps = db.getStatement("getNetworkPlace.select"); 138 ps.setInt(1, resourceId); 139 try { 140 ResultSet 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 157 public NetworkPlace getNetworkPlace(String name, int realmID) throws Exception { 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 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 185 public void updateNetworkPlace(int resourceId, String scheme, String resourceName, String resourceDescription, String host, 186 String uri, int port, String username, String password, boolean readOnly, boolean allowResursive, 187 boolean noDelete, boolean showHidden) throws Exception { 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 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 216 public List <NetworkPlace> getNetworkPlaces() throws Exception { 217 List <NetworkPlace> v = new ArrayList <NetworkPlace>(); 218 JDBCPreparedStatement ps = db.getStatement("getNetworkPlaces.select"); 219 try { 220 ResultSet 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 239 public NetworkPlace deleteNetworkPlace(int id) throws Exception { 240 NetworkPlace np = getNetworkPlace(id); 241 if (np == null) { 242 throw new Exception ("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 262 NetworkPlace buildNetworkPlace(ResultSet rs) throws Exception { 263 Timestamp cd = rs.getTimestamp("date_created"); 264 Calendar c = Calendar.getInstance(); 265 c.setTimeInMillis(cd == null ? System.currentTimeMillis() : cd.getTime()); 266 Timestamp ad = rs.getTimestamp("date_amended"); 267 Calendar 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 278 public void open(CoreServlet controllingServlet, PluginDefinition def) throws Exception { 279 String dbName = System.getProperty("sslexplorer.systemDatabase.jdbc.dbName", "explorer_configuration"); 280 controllingServlet.addDatabase(dbName, ContextHolder.getContext().getDBDirectory()); 281 String jdbcUser = System.getProperty("sslexplorer.jdbc.username", "sa"); 282 String jdbcPassword = System.getProperty("sslexplorer.jdbc.password", ""); 283 String 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 upgradeDir = new File (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 306 public List <NetworkPlace> getNetworkPlaces(int realmID) throws Exception { 307 List <NetworkPlace> v = new ArrayList <NetworkPlace>(); 308 JDBCPreparedStatement ps = db.getStatement("getNetworkPlaces.realm.select"); 309 try { 310 ps.setInt(1, realmID); 311 ResultSet 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 |