package co.codewizards.cloudstore.local.db;
import static co.codewizards.cloudstore.core.util.AssertUtil.*;
import static co.codewizards.cloudstore.core.util.StringUtil.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import co.codewizards.cloudstore.local.PersistencePropertiesEnum;
import co.codewizards.cloudstore.local.PersistencePropertiesProvider;
public class DerbyDatabaseAdapter extends AbstractDatabaseAdapter {
private static final Logger logger = LoggerFactory.getLogger(DerbyDatabaseAdapter.class);
private Map<String, String> persistenceProperties;
private String connectionURL;
private String connectionDriverName;
private String connectionUserName;
private String connectionPassword;
@Override
protected void createDatabase() throws Exception {
initProperties();
initDriverClass();
connectionURL = assertNotNull(connectionURL, "connectionURL").trim() + ";create=true";
Connection connection = createConnection();
connection.close();
}
private void initDriverClass() {
if (isEmpty(connectionDriverName))
return;
try {
Class.forName(connectionDriverName);
} catch (Throwable e) { // Might theoretically be a link error (i.e. a sub-class of Error instead of Exception) => catch Throwable
logger.warn("initDriverClass" + e, e);
}
}
public Connection createConnection() throws SQLException {
if (isEmpty(connectionUserName) && isEmpty(connectionPassword))
return DriverManager.getConnection(connectionURL);
else
return DriverManager.getConnection(connectionURL, connectionUserName, connectionPassword);
}
private void initProperties() {
PersistencePropertiesProvider persistencePropertiesProvider = new PersistencePropertiesProvider(getRepositoryIdOrFail(), getLocalRootOrFail());
persistenceProperties = persistencePropertiesProvider.getPersistenceProperties();
connectionDriverName = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_DRIVER_NAME.key);
connectionURL = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_URL.key);
connectionUserName = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_USER_NAME.key);
connectionPassword = persistenceProperties.get(PersistencePropertiesEnum.CONNECTION_PASSWORD.key);
}
}