merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / CdmStoreConnector.java
index 0892ec48e47addd511a335fe558ac5b4833d4e09..6eabada4751c750a5f1441ae08a80c1829ed9291 100644 (file)
@@ -11,6 +11,7 @@
 package eu.etaxonomy.taxeditor.store;
 
 import java.sql.SQLException;
+import java.util.concurrent.CancellationException;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -23,10 +24,10 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
-import eu.etaxonomy.cdm.model.common.CdmMetaData;
-import eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName;
+import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
+import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
-import eu.etaxonomy.taxeditor.ui.dialogs.LoginDialog;
+import eu.etaxonomy.taxeditor.ui.dialog.LoginDialog;
 import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
 
 /**
@@ -86,19 +87,22 @@ class CdmStoreConnector extends Job {
 
                if (!monitor.isCanceled()) {
                        CdmProgressMonitorAdapter subprogressMonitor = CdmProgressMonitorAdapter
-                                       .CreateSubMonitor(monitor, IProgressMonitor.UNKNOWN);
+                                       .CreateSubMonitor(monitor, 7);
                        // This is where we instantiate the application controller
                        try {
                                applicationController = CdmApplicationController.NewInstance(
                                                applicationContextBean, dataSource, dbSchemaValidation,
                                                false, 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);
+                               }
+                       } finally {
                                monitor.done();
-                               return new Status(IStatus.ERROR, "Could not connect to CDM Store", "An error occurred while trying to connect to datasource: " + dataSource.getName(), e);
                        }
                }
-
-               monitor.done();
+               
+               
 
                if (!monitor.isCanceled()) {
                        CdmStore.setInstance(applicationController, dataSource);
@@ -213,6 +217,16 @@ class CdmStoreConnector extends Job {
                }
        }
 
+       private boolean causeIsCancelationExceptionRecursive(Throwable throwable){
+               if(throwable == null){
+                       return false;
+               }else if(throwable instanceof CancellationException){
+                       return true;
+               }else{
+                       return causeIsCancelationExceptionRecursive(throwable.getCause());
+               }
+       }
+       
        private void checkDatabaseReachable(IProgressMonitor monitor) {
                try {
                        monitor.subTask("Checking if datasource is reachable.");