import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.widgets.Display;
+import org.slf4j.Marker;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
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.application.ICdmRepository;
import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IAgentService;
+import eu.etaxonomy.cdm.api.service.IAnnotationService;
+import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.api.service.ICollectionService;
import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;
+import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
+import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
+import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
+import eu.etaxonomy.cdm.api.service.IGroupService;
+import eu.etaxonomy.cdm.api.service.IMarkerService;
+import eu.etaxonomy.cdm.api.service.IMediaService;
+import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
+import eu.etaxonomy.cdm.api.service.IReferenceService;
+import eu.etaxonomy.cdm.api.service.IRegistrationService;
+import eu.etaxonomy.cdm.api.service.IRightsService;
import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.service.IUserService;
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
+import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
+import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
+import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
+import eu.etaxonomy.cdm.cache.CdmRemoteCacheManager;
import eu.etaxonomy.cdm.config.ICdmSource;
import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.common.Annotation;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.Group;
import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
+import eu.etaxonomy.cdm.model.description.DescriptionBase;
+import eu.etaxonomy.cdm.model.term.FeatureNode;
+import eu.etaxonomy.cdm.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
+import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.media.Rights;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.cdm.model.molecular.Primer;
+import eu.etaxonomy.cdm.model.name.Registration;
+import eu.etaxonomy.cdm.model.name.TaxonName;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.taxon.Classification;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;
+import eu.etaxonomy.cdm.model.validation.EntityValidation;
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
import eu.etaxonomy.cdm.persistence.hibernate.permission.Role;
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.ui.dialog.RemotingLoginDialog;
import eu.etaxonomy.taxeditor.util.ProgressMonitorClientManager;
-import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
import eu.etaxonomy.taxeditor.webapp.CDMServer;
/**
private static CdmStore instance;
- //private final ICdmApplicationConfiguration applicationConfiguration;
+ //private final ICdmRepository applicationConfiguration;
private static ContextManager contextManager = new ContextManager();
*
* @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
*/
- protected static CdmStore getDefault() {
+ protected static CdmStore getDefault(boolean connecting){
if (instance != null && instance.isConnected) {
return instance;
} else{// if (instance == null || !instance.isConnected) {
+ if (connecting){
+ MessagingUtils.dataSourceNotAvailableWarningDialog(instance);
+ }else{
+ MessagingUtils.noDataSourceWarningDialog(instance);
+ }
- MessagingUtils.noDataSourceWarningDialog(instance);
- AbstractUtility.showView(CdmDataSourceViewPart.ID);
return null;
}
}
+ /**
+ * <p>
+ * getDefault
+ * </p>
+ *
+ * @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
+ */
+ protected static CdmStore getDefault(){
+ return getDefault(false);
+ }
/**
* Initialize the with the last edited datasource
RemotingLoginDialog loginDialog = remotingLoginDialog;
if(isActive()) {
// before we connect we clear the entity caches and the sessions
- CdmRemoteCacheManager.removeEntityCaches();
- if(getCurrentSessionManager() != null) {
- getCurrentSessionManager().disposeAll();
+ CdmRemoteCacheManager.removeEntityCaches();
+ if(getCurrentSessionManager(true) != null) {
+ getCurrentSessionManager(true).disposeAll();
}
}
MessagingUtils.info("Connecting to datasource: " + cdmSource);
*/
public static void close(final IProgressMonitor monitor) {
Display.getDefault().asyncExec(new Runnable() {
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Runnable#run()
- */
+
@Override
public void run() {
getContextManager().notifyContextAboutToStop(monitor);
CdmApplicationState.dispose();
}
- static void setInstance(ICdmApplicationConfiguration applicationController,
+ static void setInstance(ICdmRepository applicationController,
ICdmSource cdmSource) {
instance = new CdmStore(applicationController, cdmSource);
- if(getCurrentSessionManager().isRemoting()) {
- CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher());
- }
+ CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher());
+
}
- private CdmStore(ICdmApplicationConfiguration applicationController,
+ private CdmStore(ICdmRepository repository,
ICdmSource cdmSource) {
- CdmApplicationState.setCurrentAppConfig(applicationController);
+ CdmApplicationState.setCurrentAppConfig(repository);
CdmApplicationState.setCurrentDataChangeService(new CdmUIDataChangeService());
this.cdmSource = cdmSource;
isConnected = true;
*
* @return
*/
- private ICdmApplicationConfiguration getApplicationConfiguration() {
+ private ICdmRepository getApplicationConfiguration() {
try {
return CdmApplicationState.getCurrentAppConfig();
} catch (Exception e) {
* {@link eu.etaxonomy.cdm.remote.api.application.CdmApplicationController}
* object.
*/
- public static ICdmApplicationConfiguration getCurrentApplicationConfiguration() {
+ public static ICdmRepository getCurrentApplicationConfiguration() {
if (getDefault() != null) {
return getDefault().getApplicationConfiguration();
}
return mockCdmEntitySessionManager;
}
}
-
public static ICdmEntitySessionManager getCurrentSessionManager() {
- if (getDefault() != null) {
- return getDefault().getSessionManager();
+ return getCurrentSessionManager(false);
+ }
+
+
+ public static ICdmEntitySessionManager getCurrentSessionManager(boolean connecting) {
+ if (getDefault(connecting) != null) {
+ return getDefault(connecting).getSessionManager();
}
return null;
}
/**
- * Generic method that will scan the getters of {@link ICdmApplicationConfiguration} for the given service
+ * Generic method that will scan the getters of {@link ICdmRepository} for the given service
* interface. If a matching getter is found the according service implementation is returned by
* invoking the getter otherwise the method returns <code>null</code>.
*
}
+ public static <T extends CdmBase> IService<T> getService(T cdmBase){
+ IService<T> service = null;
+ if(cdmBase!=null){
+ //get corresponding service
+ if(cdmBase.isInstanceOf(Reference.class)){
+ service = (IService<T>) getService(IReferenceService.class);
+ }
+ else if (cdmBase.isInstanceOf(AgentBase.class)){
+ service = (IService<T>) getService(IAgentService.class);
+ }
+ else if (cdmBase instanceof TaxonName) {
+ service = (IService<T>) getService(INameService.class);
+ }
+ else if (cdmBase instanceof TaxonBase) {
+ service = (IService<T>) getService(ITaxonService.class);
+ }
+ else if (cdmBase instanceof SpecimenOrObservationBase) {
+ service = (IService<T>) getService(IOccurrenceService.class);
+ }
+ else if (cdmBase instanceof Media) {
+ service = (IService<T>) getService(IMediaService.class);
+ }
+ else if (cdmBase instanceof Collection) {
+ service = (IService<T>) getService(ICollectionService.class);
+ }
+ else if (cdmBase instanceof eu.etaxonomy.cdm.model.common.User) {
+ service = (IService<T>) getService(IUserService.class);
+ }
+ else if (cdmBase instanceof Group) {
+ service = (IService<T>) getService(IGroupService.class);
+ }
+ else if (cdmBase instanceof DescriptiveDataSet) {
+ service = (IService<T>) getService(IDescriptiveDataSetService.class);
+ }
+ else if (cdmBase instanceof TermVocabulary<?>) {
+ service = (IService<T>) getService(IVocabularyService.class);
+ }
+ else if (cdmBase instanceof DefinedTermBase<?>) {
+ service = (IService<T>) getService(ITermService.class);
+ }
+ else if (cdmBase instanceof Primer) {
+ service = (IService<T>) getService(IPrimerService.class);
+ }
+ else if (cdmBase instanceof Amplification) {
+ service = (IService<T>) getService(IAmplificationService.class);
+ }
+ else if (cdmBase instanceof PolytomousKey) {
+ service = (IService<T>) getService(IPolytomousKeyService.class);
+ }
+ else if (cdmBase instanceof PolytomousKeyNode) {
+ service = (IService<T>) getService(IPolytomousKeyNodeService.class);
+ }
+ else if (cdmBase instanceof Annotation) {
+ service = (IService<T>) getService(IAnnotationService.class);
+ }
+ else if (cdmBase instanceof Classification) {
+ service = (IService<T>) getService(IClassificationService.class);
+ }
+ else if (cdmBase instanceof DescriptionBase<?>) {
+ service = (IService<T>) getService(IDescriptionService.class);
+ }
+ else if (cdmBase instanceof EntityConstraintViolation) {
+ service = (IService<T>) getService(IEntityConstraintViolationService.class);
+ }
+ else if (cdmBase instanceof EntityValidation) {
+ service = (IService<T>) getService(IEntityValidationService.class);
+ }
+ else if (cdmBase instanceof FeatureNode) {
+ service = (IService<T>) getService(IFeatureNodeService.class);
+ }
+ else if (cdmBase instanceof FeatureTree) {
+ service = (IService<T>) getService(IFeatureTreeService.class);
+ }
+ else if (cdmBase instanceof GrantedAuthority) {
+ service = (IService<T>) getService(IGrantedAuthorityService.class);
+ }
+ else if (cdmBase instanceof Marker) {
+ service = (IService<T>) getService(IMarkerService.class);
+ }
+ else if (cdmBase instanceof Registration) {
+ service = (IService<T>) getService(IRegistrationService.class);
+ }
+ else if (cdmBase instanceof Rights) {
+ service = (IService<T>) getService(IRightsService.class);
+ }
+ else{
+ String message = "Service for entity of class %s not yet implemented in TaxEditor";
+ message = String.format(message, cdmBase.getClass().getSimpleName());
+ throw new RuntimeException(message);
+ }
+ }
+ return service;
+ }
+
public static void setManagedServer(CDMServer server) {
managedServer = server;
}