001package co.codewizards.cloudstore.local.db; 002 003import static co.codewizards.cloudstore.core.util.StringUtil.*; 004import static java.util.Objects.*; 005 006import java.sql.Connection; 007import java.sql.DriverManager; 008import java.sql.SQLException; 009import java.util.Map; 010 011import org.slf4j.Logger; 012import org.slf4j.LoggerFactory; 013 014import co.codewizards.cloudstore.local.PersistencePropertiesEnum; 015import co.codewizards.cloudstore.local.PersistencePropertiesProvider; 016 017public class DerbyDatabaseAdapter extends AbstractDatabaseAdapter { 018 private static final Logger logger = LoggerFactory.getLogger(DerbyDatabaseAdapter.class); 019 020 private Map<String, String> persistenceProperties; 021 022 private String connectionURL; 023 024 private String connectionDriverName; 025 026 private String connectionUserName; 027 028 private String connectionPassword; 029 030 @Override 031 protected void createDatabase() throws Exception { 032 initProperties(); 033 initDriverClass(); 034 035 connectionURL = requireNonNull(connectionURL, "connectionURL").trim() + ";create=true"; 036 Connection connection = createConnection(); 037 connection.close(); 038 } 039 040 private void initDriverClass() { 041 if (isEmpty(connectionDriverName)) 042 return; 043 044 try { 045 Class.forName(connectionDriverName); 046 } catch (Throwable e) { // Might theoretically be a link error (i.e. a sub-class of Error instead of Exception) => catch Throwable 047 logger.warn("initDriverClass" + e, e); 048 } 049 } 050 051 public Connection createConnection() throws SQLException { 052 if (isEmpty(connectionUserName) && isEmpty(connectionPassword)) 053 return DriverManager.getConnection(connectionURL); 054 else 055 return DriverManager.getConnection(connectionURL, connectionUserName, connectionPassword); 056 } 057 058 private void initProperties() { 059 PersistencePropertiesProvider persistencePropertiesProvider = new PersistencePropertiesProvider(getRepositoryIdOrFail(), getLocalRootOrFail()); 060 persistenceProperties = persistencePropertiesProvider.getPersistenceProperties(); 061 062 connectionDriverName = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_DRIVER_NAME.key); 063 connectionURL = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_URL.key); 064 connectionUserName = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_USER_NAME.key); 065 connectionPassword = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_PASSWORD.key); 066 } 067}