fix for #5710 reset the terms when changing the datasource in remoting
authorKatja Luther <k.luther@bgbm.org>
Thu, 21 Apr 2016 06:48:24 +0000 (08:48 +0200)
committerKatja Luther <k.luther@bgbm.org>
Thu, 21 Apr 2016 06:48:24 +0000 (08:48 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java

index df9ef6e913707c966c5eeb77256b54add08cc14d..9520f97bc685dc0e8f1dceabd7b4d592fb229276 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,6 +31,7 @@ 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;
@@ -227,6 +229,8 @@ 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) {
@@ -253,6 +257,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) {