Remove "Close Connection" and changed "Connect" to "Create Data Model"
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / store / CdmStoreConnector.java
index f43e777dfceccfb9579e65e5ef91b50b550a0e0a..3beb0d77cc4a8cccd3a4fbbf080bc2002051f5ac 100644 (file)
@@ -10,6 +10,7 @@
 
 package eu.etaxonomy.taxeditor.store;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.SQLException;
 import java.util.concurrent.CancellationException;
@@ -30,13 +31,16 @@ import eu.etaxonomy.cdm.config.CdmSourceException;
 import eu.etaxonomy.cdm.config.ICdmSource;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
+import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.ui.dialog.LoginDialog;
 import eu.etaxonomy.taxeditor.ui.dialog.RemotingLoginDialog;
-import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
 
 
 /**
@@ -106,9 +110,12 @@ class CdmStoreConnector extends Job {
             try {
                 Thread.currentThread().setPriority(10);
                 applicationController = getApplicationController(cdmSource,subprogressMonitor);
+                return Status.OK_STATUS;
             } 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: " + cdmSource.getName(), e);
+                    MessagingUtils.errorDialog("Could not create data model", CdmStoreConnector.class, "An error occurred while trying to create "
+                            + "data model for data source: " + cdmSource.getName()+"\n Please clear the data base and retry. ", TaxeditorStorePlugin.PLUGIN_ID, e, true);
+                    return Status.CANCEL_STATUS;
                 }
             } finally {
                 monitor.done();
@@ -116,42 +123,7 @@ class CdmStoreConnector extends Job {
             }
         }
 
-
-
-        if (!monitor.isCanceled()) {
-            CdmStore.setInstance(applicationController, cdmSource);
-
-            display.asyncExec(new Runnable() {
-                /*
-                 * (non-Javadoc)
-                 *
-                 * @see java.lang.Runnable#run()
-                 */
-                @Override
-                public void run() {
-                    authenticate();
-
-                    startContext();
-                }
-            });
-
-            MessagingUtils.info("Application context initialized.");
-            return Status.OK_STATUS;
-        } else {
-            // Show datasource view if not shown yet
-            display.asyncExec(new Runnable() {
-                /*
-                 * (non-Javadoc)
-                 *
-                 * @see java.lang.Runnable#run()
-                 */
-                @Override
-                public void run() {
-                    StoreUtil.showView(CdmDataSourceViewPart.ID);
-                }
-            });
             return Status.CANCEL_STATUS;
-        }
 
     }
 
@@ -225,6 +197,10 @@ class CdmStoreConnector extends Job {
                                         CdmStore.getLoginManager().doAuthenticate(loginDialog.getUsername(), loginDialog.getPassword());
                                         loginDialog.onComplete();
                                         CdmStore.getContextManager().notifyContextStart();
+                                        getInstance(Rank.class).resetTerms();
+                                        getInstance(NomenclaturalStatusType.class).resetTerms();
+                                        Rank.initDefaultTerms();
+                                        NomenclaturalStatusType.initDefaultTerms();
                                     } catch(CdmAuthenticationException cae) {
                                         loginDialog.hide(false);
                                         loginDialog.setMessage(cae.getMessage());
@@ -249,6 +225,23 @@ class CdmStoreConnector extends Job {
         }
     }
 
+    /**
+     * Returns a new instance for the given class by using the default constructor.
+     * The constructor must be declared but can be unaccessible (e.g. private)
+     * @param termClass
+     * @return
+     */
+    private  <T extends DefinedTermBase> T getInstance(Class<? extends DefinedTermBase> termClass) {
+        try {
+            Constructor<T> c = ((Class<T>)termClass).getDeclaredConstructor();
+            c.setAccessible(true);
+            T termInstance = c.newInstance();
+            return termInstance;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 
     private ICdmApplicationConfiguration getApplicationController(ICdmSource cdmSource, CdmProgressMonitorAdapter subprogressMonitor) {
         if(cdmSource instanceof ICdmDataSource) {