merge from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / CdmStore.java
index 00a999bd835a197d2a17f7243d8f25cea94fedcd..89a898b8a21c71bf80fc27c307a845d471f772d2 100644 (file)
@@ -17,8 +17,6 @@ import java.util.EnumSet;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
-import org.hibernate.collection.internal.AbstractPersistentCollection;
-import org.hibernate.proxy.AbstractLazyInitializer;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 import org.springframework.security.access.PermissionEvaluator;
@@ -27,25 +25,29 @@ 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.CdmApplicationRemoteConfiguration;
+import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
 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;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Language;
 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.cdm.remote.CdmRemoteSourceException;
 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.session.ICdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySessionManager;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
 
@@ -89,6 +91,8 @@ public class CdmStore {
        private ICdmSource cdmSource;
 
        private boolean isConnected;
+       
+
 
        /**
         * <p>
@@ -100,20 +104,13 @@ public class CdmStore {
        protected static CdmStore getDefault() {
                if (instance != null && instance.isConnected) {
                        return instance;
-               } else if (instance == null || !instance.isConnected) {
+               } else{// if (instance == null || !instance.isConnected) {
 
-                       MessagingUtils
-                                       .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.");
+                       MessagingUtils.noDataSourceWarningDialog(instance);
 
                        AbstractUtility.showView(CdmDataSourceViewPart.ID);
-
+                       return null;
                }
-
-               throw new RuntimeException();
        }
 
        /**
@@ -125,11 +122,11 @@ public class CdmStore {
                try {
                        cdmSource = CdmDataSourceRepository.getCurrentCdmSource();
                        connect(cdmSource);
-               } catch (CdmRemoteSourceException e) {
+               } catch (Exception e) {
                        MessagingUtils.messageDialog("Connection to CDM Source Failed", CdmStore.class, "Could not connect to target CDM Source", e);
                }
 
-               
+
        }
 
        /**
@@ -203,7 +200,7 @@ public class CdmStore {
 
        private CdmStore(ICdmApplicationConfiguration applicationController,
                        ICdmSource cdmSource) {
-               this.applicationConfiguration = applicationController;          
+               this.applicationConfiguration = applicationController;
                this.cdmSource = cdmSource;
                isConnected = true;
        }
@@ -252,13 +249,37 @@ public class CdmStore {
        public static ConversationHolder createConversation() {
                ConversationHolder conversation = getCurrentApplicationConfiguration()
                                .NewConversation();
-               try{
+               try {
                        conversation.startTransaction();
                }catch(Exception 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
@@ -512,7 +533,7 @@ public class CdmStore {
                }
                return null;
        }
-       
+
        /**
         * <p>
         * getDataSource