import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.config.ICdmSource;
import eu.etaxonomy.cdm.database.DbSchemaValidation;
import eu.etaxonomy.cdm.database.ICdmDataSource;
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
private Language language;
- private ICdmDataSource cdmDatasource;
+ private ICdmSource cdmSource;
private boolean isConnected;
* @param datasource
* a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
*/
- public static void connect(ICdmDataSource datasource) {
- connect(datasource, DEFAULT_DB_SCHEMA_VALIDATION,
+ public static void connect(ICdmSource cdmSource) {
+ connect(cdmSource, DEFAULT_DB_SCHEMA_VALIDATION,
DEFAULT_APPLICATION_CONTEXT);
}
* @param dbSchemaValidation
* @param applicationContextBean
*/
- private static void connect(final ICdmDataSource datasource,
+ private static void connect(final ICdmSource cdmSource,
final DbSchemaValidation dbSchemaValidation,
final Resource applicationContextBean) {
- StoreUtil.info("Connecting to datasource: " + datasource);
+ StoreUtil.info("Connecting to datasource: " + cdmSource);
- job = new CdmStoreConnector(Display.getDefault(), datasource,
+ job = new CdmStoreConnector(Display.getDefault(), cdmSource,
dbSchemaValidation, applicationContextBean);
job.setUser(true);
job.setPriority(Job.BUILD);
private void close() {
isConnected = false;
- cdmDatasource = null;
+ cdmSource = null;
}
static void setInstance(ICdmApplicationConfiguration applicationController,
- ICdmDataSource dataSource) {
- instance = new CdmStore(applicationController, dataSource);
+ ICdmSource cdmSource) {
+ instance = new CdmStore(applicationController, cdmSource);
}
private CdmStore(ICdmApplicationConfiguration applicationController,
- ICdmDataSource dataSource) {
+ ICdmSource cdmSource) {
this.applicationConfiguration = applicationController;
AbstractLazyInitializer.setConfiguration(applicationController);
AbstractPersistentCollection.setConfiguration(applicationController);
- this.cdmDatasource = dataSource;
+ this.cdmSource = cdmSource;
isConnected = true;
}
return instance != null && instance.isConnected;
}
+ public static ICdmSource getActiveCdmSource() {
+ if (isActive()) {
+ return instance.getCdmSource();
+ }
+ return null;
+ }
+
/**
* <p>
* getDataSource
* </p>
*
* @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
+ * @deprecated currently retained for backward compatibility - use {@link getActiveCdmSource()} instead
*/
public static ICdmDataSource getDataSource() {
if (isActive()) {
- return instance.getDatasource();
+ return (ICdmDataSource)instance.getCdmSource();
}
return null;
}
/**
* @return
*/
- private ICdmDataSource getDatasource() {
- return cdmDatasource;
+ private ICdmSource getCdmSource() {
+ return cdmSource;
}
}
import org.springframework.core.io.Resource;
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.config.ICdmSource;
+import eu.etaxonomy.cdm.remote.ICdmRemoteSource;
+import eu.etaxonomy.cdm.config.CdmSourceException;
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
import eu.etaxonomy.cdm.database.DbSchemaValidation;
import eu.etaxonomy.cdm.database.ICdmDataSource;
*/
class CdmStoreConnector extends Job {
private final Display display;
- private final ICdmDataSource dataSource;
+ private final ICdmSource cdmSource;
private DbSchemaValidation dbSchemaValidation;
private final Resource applicationContextBean;
* @param dbSchemaValidation
* @param applicationContextBean
*/
- public CdmStoreConnector(Display display, ICdmDataSource datasource,
+ public CdmStoreConnector(Display display, ICdmSource cdmSource,
DbSchemaValidation dbSchemaValidation,
Resource applicationContextBean) {
- super("Connecting to datasource: " + datasource);
+ super("Connecting to datasource: " + cdmSource);
this.display = display;
- this.dataSource = datasource;
+ this.cdmSource = cdmSource;
this.dbSchemaValidation = dbSchemaValidation;
this.applicationContextBean = applicationContextBean;
}
}
// we are done with our low level checking and will free resources now
- dataSource.closeOpenConnections();
+ cdmSource.closeOpenConnections();
if (!monitor.isCanceled()) {
CdmStore.close(monitor);
// This is where we instantiate the application controller
try {
- applicationController =
- CdmApplicationController.NewInstance(applicationContextBean,
- dataSource,
- dbSchemaValidation,
- false,
- subprogressMonitor);
+ applicationController = getApplicationController(cdmSource,subprogressMonitor);
} catch (Exception e) {
if(! causeIsCancelationExceptionRecursive(e)){
- return new Status(IStatus.ERROR, "Could not connect to CDM Store", "An error occurred while trying to connect to datasource: " + dataSource.getName(), e);
+ return new Status(IStatus.ERROR, "Could not connect to CDM Store", "An error occurred while trying to connect to datasource: " + cdmSource.getName(), e);
}
} finally {
monitor.done();
if (!monitor.isCanceled()) {
- CdmStore.setInstance(applicationController, dataSource);
+ CdmStore.setInstance(applicationController, cdmSource);
display.asyncExec(new Runnable() {
/*
}
+ private ICdmApplicationConfiguration getApplicationController(ICdmSource cdmSource, CdmProgressMonitorAdapter subprogressMonitor) {
+ if(cdmSource instanceof ICdmDataSource) {
+ return CdmApplicationController.NewInstance(applicationContextBean,
+ (ICdmDataSource)cdmSource,
+ dbSchemaValidation,
+ false,
+ subprogressMonitor);
+ } else if(cdmSource instanceof ICdmRemoteSource) {
+ return CdmApplicationRemoteController.NewInstance(applicationContextBean,
+ (ICdmRemoteSource)cdmSource,
+ false,
+ subprogressMonitor,
+ null);
+ } else {
+ throw new UnsupportedOperationException("Cannot create application controller for " + cdmSource.getName());
+ }
+ }
private void authenticate() {
LoginDialog loginDialog = new LoginDialog(StoreUtil.getShell());
loginDialog.open();
* @return
*/
private String getConnectionMessage() {
- String message = "";
- if (dataSource.getDatabaseType().equals(DatabaseTypeEnum.H2)) {
- message = " local CDM Store ";
- } else {
- message = " CDM Community Store ";
- }
- message += "'" + dataSource.getName() + "'";
-
- message = "Connecting to" + message + ".";
-
- return message;
+ return cdmSource.getConnectionMessage();
}
/**
String dbSchemaVersion;
boolean result = false;
try {
- dbSchemaVersion = (String) dataSource
- .getSingleValue(MetaDataPropertyName.DB_SCHEMA_VERSION
- .getSqlQuery());
+ dbSchemaVersion = cdmSource.getDbSchemaVersion();
// we assume that empty dbSchemaVersion means an empty database and
// skip version checking
result = dbSchemaVersion == null ? true : CdmMetaData
.isDbSchemaVersionCompatible(dbSchemaVersion);
monitor.worked(1);
- } catch (SQLException e) {
+ } catch (CdmSourceException e) {
//
}
this,
"The database schema for the chosen "
+ "datasource '"
- + dataSource
+ + cdmSource
+ "' \n is not valid for this version of the taxonomic editor. \n"
+ "Please update the chosen datasource or choose a new data source to connect to in the Datasource View.",
null);
private void checkIsNonEmptyCdmDatabase(IProgressMonitor monitor) {
monitor.subTask("Checking if datasource is a non empty CDM database.");
-
+ boolean isDbEmpty = false;
try {
- dataSource.getSingleValue(MetaDataPropertyName.DB_SCHEMA_VERSION
- .getSqlQuery());
- } catch (SQLException e1) {
+ isDbEmpty = cdmSource.isDbEmpty();
+ } catch (CdmSourceException e) {
+ isDbEmpty = true;
+ }
+ if(isDbEmpty) {
dbSchemaValidation = DbSchemaValidation.CREATE;
}
}
private void checkDatabaseReachable(IProgressMonitor monitor) {
try {
monitor.subTask("Checking if datasource is reachable.");
- dataSource.testConnection();
+ cdmSource.checkConnection();
monitor.worked(1);
- } catch (ClassNotFoundException e) {
+ } catch (CdmSourceException e) {
StoreUtil.errorDialog("Could not connect to chosen datasource",
this, "Reason: " + e.getMessage(), e);
monitor.setCanceled(true);
- } catch (SQLException e) {
- StoreUtil.errorDialog("Could not connect to chosen datasource",
- this, "Reason: " + e.getMessage(), e);
- monitor.setCanceled(true);
- }
-
+ }
}
}