package eu.etaxonomy.taxeditor.store;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.EnumSet;
import org.eclipse.core.runtime.IProgressMonitor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.access.PermissionEvaluator;
-import org.springframework.security.authentication.ProviderManager;
+import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
+import eu.etaxonomy.cdm.api.application.CdmApplicationException;
+import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.ICommonService;
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;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.Language;
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
import eu.etaxonomy.taxeditor.io.ExportManager;
import eu.etaxonomy.taxeditor.io.ImportManager;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySessionManager;
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
private static CdmStore instance;
- private final ICdmApplicationConfiguration applicationConfiguration;
+ //private final ICdmApplicationConfiguration applicationConfiguration;
private static ContextManager contextManager = new ContextManager();
private static EditorManager editorManager = new EditorManager();
+ private static UseObjectStore useObjectInitializer = new UseObjectStore();
+
private static CdmStoreConnector job;
private Language language;
- private ICdmDataSource cdmDatasource;
+ private ICdmSource cdmSource;
private boolean isConnected;
+
+
/**
* <p>
* getDefault
protected static CdmStore getDefault() {
if (instance != null && instance.isConnected) {
return instance;
- } else if (instance == null || !instance.isConnected) {
+ } else{// if (instance == null || !instance.isConnected) {
- StoreUtil
- .warningDialog(
- "Application is not connected to a datastore",
- instance,
- "The requested operation is only available when "
- + "connected to a datasource. You may choose a datasource to connect to or create a new one in the datasource view.");
-
- StoreUtil.showView(CdmDataSourceViewPart.ID);
+ MessagingUtils.noDataSourceWarningDialog(instance);
+ AbstractUtility.showView(CdmDataSourceViewPart.ID);
+ return null;
}
-
- throw new RuntimeException();
}
/**
*/
public static void connect() {
- ICdmDataSource datasource = CdmDataSourceRepository
- .getCurrentDataSource();
+ ICdmSource cdmSource;
+ try {
+
+ cdmSource = CdmDataSourceRepository.getCurrentCdmSource();
+ connect(cdmSource);
+ } catch (Exception e) {
+ MessagingUtils.messageDialog("Connection to CDM Source Failed", CdmStore.class, "Could not connect to target CDM Source", e);
+ }
+
- connect(datasource);
}
/**
* @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);
-
- job = new CdmStoreConnector(Display.getDefault(), datasource,
+ if(isActive()) {
+ // before we connect we clear the entity caches and the sessions
+ CdmRemoteCacheManager.removeEntityCaches();
+ if(getCurrentSessionManager() != null) {
+ getCurrentSessionManager().disposeAll();
+ }
+ }
+ MessagingUtils.info("Connecting to datasource: " + cdmSource);
+
+ job = new CdmStoreConnector(Display.getDefault(), cdmSource,
dbSchemaValidation, applicationContextBean);
job.setUser(true);
job.setPriority(Job.BUILD);
private void close() {
isConnected = false;
- cdmDatasource = null;
+ cdmSource = null;
+ CdmApplicationState.dispose();
}
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) {
- this.applicationConfiguration = applicationController;
- this.cdmDatasource = dataSource;
+ ICdmSource cdmSource) {
+ CdmApplicationState.setCurrentAppConfig(applicationController);
+ CdmApplicationState.setCurrentDataChangeService(new CdmUIDataChangeService());
+ this.cdmSource = cdmSource;
isConnected = true;
}
*/
private ICdmApplicationConfiguration getApplicationConfiguration() {
try {
- return applicationConfiguration;
+ return CdmApplicationState.getCurrentAppConfig();
} catch (Exception e) {
- StoreUtil.error(CdmStore.class, e);
+ MessagingUtils.error(CdmStore.class, e);
}
return null;
}
public static ConversationHolder createConversation() {
ConversationHolder conversation = getCurrentApplicationConfiguration()
.NewConversation();
- try{
+ try {
conversation.startTransaction();
}catch(Exception e){
- StoreUtil.errorDialog("No database connection", CdmStore.class, "No database connection available", e);
+ MessagingUtils.messageDialog("No database connection", CdmStore.class, "No database connection available", e);
}
return conversation;
}
+ //FIXME:Remoting should be removed after moving completely to remoting
+ private MockCdmEntitySessionManager mockCdmEntitySessionManager;
+
+ private ICdmEntitySessionManager getSessionManager() {
+ //FIXME:Remoting we should only have CdmApplicationRemoteConfiguration after move to remoting
+ // bad hack which should be finally removed
+ if(getCurrentApplicationConfiguration() instanceof CdmApplicationRemoteController) {
+ return ((CdmApplicationRemoteController)getCurrentApplicationConfiguration()).getCdmEntitySessionManager();
+ } else {
+ if(mockCdmEntitySessionManager == null) {
+ mockCdmEntitySessionManager = new MockCdmEntitySessionManager();
+ }
+ return mockCdmEntitySessionManager;
+ }
+ }
+
+ public static ICdmEntitySessionManager getCurrentSessionManager() {
+ if (getDefault() != null) {
+ return getDefault().getSessionManager();
+ }
+ return null;
+
+ }
+
/**
* Generic method that will scan the getters of {@link ICdmApplicationConfiguration} for the given service
* interface. If a matching getter is found the according service implementation is returned by
* @return the configured implementation of <code>serviceClass</code> or <code>null</code>
*/
public static <T extends IService> T getService(Class<T> serviceClass) {
- ICdmApplicationConfiguration configuration = getCurrentApplicationConfiguration();
-
- Method[] methods = ICdmApplicationConfiguration.class.getDeclaredMethods();
+ T service = null;
+ try {
+ service = CdmApplicationState.getService(serviceClass);
+ } catch (CdmApplicationException cae) {
+ MessagingUtils.error(CdmStore.class, cae);
+ }
- T service = null;
-
- for (Method method : methods) {
- Type type = method.getGenericReturnType();
+ return service;
+ }
- if (type.equals(serviceClass)) {
- try {
- service = (T) method.invoke(configuration, null);
- break;
- } catch (IllegalArgumentException e) {
- StoreUtil.error(CdmStore.class, e);
- } catch (IllegalAccessException e) {
- StoreUtil.error(CdmStore.class, e);
- } catch (InvocationTargetException e) {
- StoreUtil.error(CdmStore.class, e);
- }
- }
- }
+ /**
+ * @see #getService(Class)
+ * As ICommonService is not extending IService we need a specific request here
+ */
+ public static ICommonService getCommonService() {
+ return CdmApplicationState.getCommonService();
- return service;
}
/**
* {@link org.springframework.security.authentication.ProviderManager}
* object.
*/
- public static ProviderManager getAuthenticationManager() {
+ public static AuthenticationManager getAuthenticationManager() {
return getCurrentApplicationConfiguration().getAuthenticationManager();
}
*/
/**
- * <p>
- * getDefaultLanguage
- * </p>
+ * Provides access to the global default language set in the application preferences.
*
* @return a {@link eu.etaxonomy.cdm.model.common.Language} object.
*/
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 null;
- }
+// public static ICdmDataSource getDataSource() {
+// if (isActive()) {
+// return (ICdmDataSource)instance.getCdmSource();
+// }
+// return null;
+// }
/**
* @return
*/
- private ICdmDataSource getDatasource() {
- return cdmDatasource;
+ private ICdmSource getCdmSource() {
+ return cdmSource;
}
}