workaround for endless loop in default feature tree
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / PreferencesUtil.java
index 79604806b59199320e6bade6b4c5b2f664f0b193..6b995400ed69bfa447205927c3306d6248829f62 100644 (file)
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.UUID;
 
@@ -45,19 +44,19 @@ import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IDefinedTerm;
 import eu.etaxonomy.cdm.model.common.ISimpleTerm;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
+import eu.etaxonomy.cdm.model.metadata.IPreferencePredicate;
 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
+import eu.etaxonomy.cdm.model.metadata.TermDisplayEnum;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.FieldMatcher;
@@ -69,7 +68,6 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.model.NomenclaturalCodeHelper;
 import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.TermStore;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.ui.dialog.DefaultLanguageDialog;
 
@@ -81,7 +79,6 @@ import eu.etaxonomy.taxeditor.ui.dialog.DefaultLanguageDialog;
  * @author p.ciardelli
  * @author n.hoffmann
  * @created 05.12.2008
- * @version 1.0
  */
 public class PreferencesUtil implements IPreferenceKeys {
 
@@ -97,6 +94,8 @@ public class PreferencesUtil implements IPreferenceKeys {
 
 
 
+
+
        /**
         * <p>
         * getPreferenceStore
@@ -112,6 +111,10 @@ public class PreferencesUtil implements IPreferenceKeys {
            return name + "_"+  ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString();
        }
 
+       public static String prefOverrideKey(String name) {
+        return name + "_OVERRIDE_"+ ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString();
+    }
+
        /**
      * <p>
      * setStringValue
@@ -180,21 +183,40 @@ public class PreferencesUtil implements IPreferenceKeys {
 
     /**
      * <p>
-     * setStringValue
+     * getStringValue
      * </p>
      *
      *
      **/
-    public static String getStringValue(String name) {
+    public static String getStringValue(String name, boolean local) {
 
-        String dbSpecific = prefKey(name);
-        if (getPreferenceStore().contains(dbSpecific)){
-            return getPreferenceStore().getString(dbSpecific);
-        }else{
-            return getPreferenceStore().
-                    getString(name);
+        String prefValue = getDBPreferenceValue(name);
+        if (prefValue == null || local){
+            String dbSpecific = prefKey(name);
+            if (getPreferenceStore().contains(dbSpecific)){
+                prefValue = getPreferenceStore().getString(dbSpecific);
+            }else{
+                prefValue = getPreferenceStore().
+                        getString(name);
+            }
         }
+        return prefValue;
+
+    }
 
+    public static String getStringValue(String name){
+        return getStringValue(name, false);
+    }
+
+    private static String getDBPreferenceValue(String name) {
+        CdmPreferenceCache cache = CdmPreferenceCache.instance();
+        if (cache.get(name) != null){
+            CdmPreference pref = cache.get(name);
+            if (!pref.isAllowOverride() || !getBooleanValue(prefOverrideKey(name))){
+                return pref.getValue();
+            }
+        }
+        return null;
     }
 
     /**
@@ -205,13 +227,24 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static int getIntValue(String name) {
-        String dbSpecific = prefKey(name);
-        if (getPreferenceStore().contains(dbSpecific)){
-            return getPreferenceStore().getInt(dbSpecific);
-        }else{
-            return getPreferenceStore().
-                    getInt(name);
+        String prefValue = getDBPreferenceValue(name);
+        Integer result = null;
+        try{
+            result = Integer.parseInt(prefValue);
+        }catch(NumberFormatException e){
+            logger.debug("Preference value of " + name + " is not a number");
         }
+        if (result == null){
+            String dbSpecific = prefKey(name);
+            if (getPreferenceStore().contains(dbSpecific)){
+                result = getPreferenceStore().getInt(dbSpecific);
+            }else{
+                result =  getPreferenceStore().
+                        getInt(name);
+            }
+        }
+        return result;
+
 
     }
 
@@ -224,16 +257,20 @@ public class PreferencesUtil implements IPreferenceKeys {
      **/
     public static boolean getBooleanValue(String name) {
         if (CdmStore.isActive()){
-            String dbSpecific = prefKey(name);
-            if (getPreferenceStore().contains(dbSpecific)){
-                return getPreferenceStore().getBoolean(dbSpecific);
+            String prefValue = getDBPreferenceValue(name);
+            if (prefValue == null){
+                String dbSpecific = prefKey(name);
+                if (getPreferenceStore().contains(dbSpecific)){
+                    return getPreferenceStore().getBoolean(dbSpecific);
+                }else{
+                    return getPreferenceStore().
+                            getBoolean(name);
+                }
             }else{
-                return getPreferenceStore().
-                        getBoolean(name);
+                return Boolean.valueOf(prefValue);
             }
 
         }else{
-
             return getPreferenceStore().getBoolean(name);
         }
 
@@ -247,13 +284,23 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static double getDoubleValue(String name) {
-        String dbSpecific = prefKey(name);
-        if (getPreferenceStore().contains(dbSpecific)){
-            return getPreferenceStore().getDouble(dbSpecific);
-        }else{
-            return getPreferenceStore().
-                    getDouble(name);
+        String prefValue = getDBPreferenceValue(name);
+        Double result = null;
+        try{
+            result = Double.parseDouble(prefValue);
+        }catch(NumberFormatException e){
+            logger.debug("Preference value of " + name + " is not a number");
+        }
+        if (result == null){
+            String dbSpecific = prefKey(name);
+            if (getPreferenceStore().contains(dbSpecific)){
+                result = getPreferenceStore().getDouble(dbSpecific);
+            }else{
+                result =  getPreferenceStore().
+                        getDouble(name);
+            }
         }
+        return result;
 
     }
 
@@ -265,13 +312,23 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static float getFloatValue(String name) {
-        String dbSpecific = prefKey(name);
-        if (getPreferenceStore().contains(dbSpecific)){
-            return getPreferenceStore().getFloat(dbSpecific);
-        }else{
-            return getPreferenceStore().
-                    getFloat(name);
+        String prefValue = getDBPreferenceValue(name);
+        Float result = null;
+        try{
+            result = Float.parseFloat(prefValue);
+        }catch(NumberFormatException e){
+            logger.debug("Preference value of " + name + " is not a number");
+        }
+        if (result == null){
+            String dbSpecific = prefKey(name);
+            if (getPreferenceStore().contains(dbSpecific)){
+                result = getPreferenceStore().getFloat(dbSpecific);
+            }else{
+                result =  getPreferenceStore().
+                        getFloat(name);
+            }
         }
+        return result;
 
     }
 
@@ -283,13 +340,23 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static long getLongValue(String name) {
-        String dbSpecific = prefKey(name);
-        if (getPreferenceStore().contains(dbSpecific)){
-            return getPreferenceStore().getLong(dbSpecific);
-        }else{
-            return getPreferenceStore().
-                    getLong(name);
+        String prefValue = getDBPreferenceValue(name);
+        Long result = null;
+        try{
+            result = Long.parseLong(prefValue);
+        }catch(NumberFormatException e){
+            logger.debug("Preference value of " + name + " is not a number");
+        }
+        if (result == null){
+            String dbSpecific = prefKey(name);
+            if (getPreferenceStore().contains(dbSpecific)){
+                result = getPreferenceStore().getLong(dbSpecific);
+            }else{
+                result =  getPreferenceStore().
+                        getLong(name);
+            }
         }
+        return result;
     }
 
 
@@ -303,10 +370,10 @@ public class PreferencesUtil implements IPreferenceKeys {
         *            object.
         */
        public static CdmPreference setPreferredNomenclaturalCode(
-                       String preferenceKey, boolean local) {
+                       String preferenceValue, boolean local) {
            if (local){
                setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
-                       preferenceKey);
+                       preferenceValue);
            }
            else{
                ICdmRepository controller;
@@ -322,18 +389,18 @@ public class PreferencesUtil implements IPreferenceKeys {
                }
                CdmPreference preference = null;
 
-               if (preferenceKey == null){
+               if (preferenceValue == null){
                        preference = controller.getPreferenceService().find(key);
                        if (preference == null){
                                return null;
                        } else{
                            setStringValue(PREFERRED_NOMENCLATURAL_CODE_KEY,
                                        preference.getValue());
-                           setBooleanValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY,preference.isAllowOverride());
+
                                return preference;
                        }
                } else{
-                       preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode, preferenceKey);
+                       preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode, preferenceValue);
                        controller.getPreferenceService().set(preference);
 
                }
@@ -344,8 +411,37 @@ public class PreferencesUtil implements IPreferenceKeys {
 
        }
 
+       /**
+     * <p>
+     * setPreferredNomenclaturalCode
+     * </p>
+     *
+     * @param preferredCode
+     *            a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode}
+     *            object.
+     */
+    public static void setPreferredNomenclaturalCode(
+        CdmPreference preference) {
+
+        ICdmRepository controller;
+        controller = CdmStore.getCurrentApplicationConfiguration();
+        if (controller == null){
+            return;
+        }
+        PrefKey key = null;
+        try{
+            key = CdmPreference.NewKey(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NomenclaturalCode);
+        }catch (Exception e){
+            System.out.println(e.getStackTrace());
+        }
+
+        controller.getPreferenceService().set(preference);
+
+    }
+
+
        public static NomenclaturalCode getPreferredNomenclaturalCode(){
-           if (getBooleanValue(OVERRIDE_NOMENCLATURAL_CODE_KEY)) {
+           if (getBooleanValue(prefOverrideKey(PreferencePredicate.NomenclaturalCode.getKey()))) {
             return getPreferredNomenclaturalCode(true);
         } else{
             return getPreferredNomenclaturalCode(false);
@@ -369,7 +465,7 @@ public class PreferencesUtil implements IPreferenceKeys {
            String preferredCode;
            if(pref == null){
                preferredCode = getStringValue(
-                                       PREFERRED_NOMENCLATURAL_CODE_KEY);
+                                       PREFERRED_NOMENCLATURAL_CODE_KEY, true);
 
            }else{
                preferredCode = pref.getValue();
@@ -397,58 +493,26 @@ public class PreferencesUtil implements IPreferenceKeys {
     }
 
        public static boolean isShowTaxonAssociations(){
-        if (getBooleanValue(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) && getBooleanValue(SHOW_TAXON_ASSOCIATIONS_ALLOW_OVERRIDE)) {
-            return getBooleanValue(SHOW_TAXON_ASSOCIATIONS);
-        } else{
-            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
-
-            return pref!=null?Boolean.valueOf(pref.getValue()):false;
-        }
+        boolean result = getBooleanValue(EditorPreferencePredicate.ShowTaxonAssociations.getKey());
+        return result;
     }
 
        public static boolean isShowLifeForm(){
-        if (getBooleanValue(SHOW_LIFE_FORM_OVERRIDE) && getBooleanValue(SHOW_LIFE_FORM_ALLOW_OVERRIDE)) {
-            return getBooleanValue(SHOW_LIFE_FORM);
-        } else{
-            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
-
-            return pref!=null?Boolean.valueOf(pref.getValue()):false;
-        }
+           boolean result =  getBooleanValue(EditorPreferencePredicate.ShowLifeForm.getKey());
+           return result;
     }
 
        public static boolean isDeterminationOnlyForFieldUnits(){
-        if (getBooleanValue(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) && getBooleanValue(DETERMINATIONS_ONLY_FOR_FIELDUNITS_ALLOW_OVERRIDE)) {
-            return getBooleanValue(DETERMINATION_ONLY_FOR_FIELD_UNITS);
-        } else{
-            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
-
-            return pref!=null?Boolean.valueOf(pref.getValue()):false;
-        }
+           boolean result =  getBooleanValue(EditorPreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
+        return result;
     }
 
        public static boolean isCollectingAreaInGeneralSection(){
-        if (getBooleanValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) && getBooleanValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_ALLOW_OVERRIDE)) {
-            return getBooleanValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION);
-        } else{
-            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
-
-            return pref!=null?Boolean.valueOf(pref.getValue()):false;
-        }
-    }
-
-       public static boolean isShowSimpleDetailsView(){
-        if (getBooleanValue(OVERRIDE_NAME_DETAILS) && getBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS)) {
-            return getBooleanValue(SHOW_SIMPLE_NAME_DETAILS_SECTION);
-        } else{
-            CdmPreference pref = getPreferenceFromDB(PreferencePredicate.NameDetailsView);
-
-            return pref!=null?Boolean.valueOf(pref.getValue()):false;
-        }
-    }
-
-
+           boolean result =  getBooleanValue(EditorPreferencePredicate.ShowCollectingAreasInGeneralSection.getKey());
+        return result;
+       }
 
-    public static CdmPreference getPreferenceFromDB(PreferencePredicate predicate){
+       public static CdmPreference getPreferenceFromDB(IPreferencePredicate predicate){
         ICdmRepository controller;
         CdmPreference pref = null;
 
@@ -749,6 +813,10 @@ public class PreferencesUtil implements IPreferenceKeys {
           return prefKey(property);
 
        }
+       public static String createOverridePreferenceString(String property){
+              return prefOverrideKey(property);
+
+           }
 
        /**
         * Set default values for preferences
@@ -766,9 +834,9 @@ public class PreferencesUtil implements IPreferenceKeys {
                getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_WIDTH), "1000");
                getPreferenceStore().setDefault(createPreferenceString(OPENURL_IMAGE_MAX_HEIGHT), "1000");
                //Distribution Editor:
-               getPreferenceStore().setDefault(createPreferenceString(DISTRIBUTION_AREA_PREFRENCES_ACTIVE), true);
-               getPreferenceStore().setDefault(createPreferenceString(CHECKLIST_AREA_DISPLAY), CHECKLIST_AREA_DISPLAY_TITLE);
-               getPreferenceStore().setDefault(createPreferenceString(CHECKLIST_SYMBOL), false);
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.DistributionEditorActivated.getKey()), Boolean.valueOf(EditorPreferencePredicate.DistributionEditorActivated.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey()), EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue().toString());
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.DisplayOfStatus.getKey()), EditorPreferencePredicate.DisplayOfStatus.getDefaultValue().toString());
 
 
                //Name Details
@@ -786,21 +854,21 @@ public class PreferencesUtil implements IPreferenceKeys {
                getPreferenceStore().setDefault(createPreferenceString(SHOW_NAME_DETAILS_SECTION_RANK), true);
                getPreferenceStore().setDefault(createPreferenceString(SHOW_NAME_DETAILS_SECTION_TYPE_DESIGNATION), true);
                //Navigator preferences
-               getPreferenceStore().setDefault(createPreferenceString(SORT_NODES_NATURALLY), false);
-               getPreferenceStore().setDefault(createPreferenceString(SORT_NODES_ALPHABETICALLY), false);
+               getPreferenceStore().setDefault(createPreferenceString(SORT_NODES), NavigatorOrderEnum.RankAndNameOrder.getKey());
+
                getPreferenceStore().setDefault(createPreferenceString(SORT_TAXA_BY_RANK_AND_NAME), true);
                //override db preferences
-               getPreferenceStore().setDefault(createPreferenceString(ABCD_IMPORT_OVERRIDE), false);
-               getPreferenceStore().setDefault(createPreferenceString(SHOW_SPECIMEN_OVERRIDE), false);
-               getPreferenceStore().setDefault(createPreferenceString(OVERRIDE_NAME_DETAILS), false);
-               getPreferenceStore().setDefault(createPreferenceString(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.AbcdImportConfig.getKey())), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.ShowSpecimen.getKey())), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.NameDetailsView.getKey())), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.DistributionEditorActivated.getKey())), false);
 
                getPreferenceStore().setDefault(createPreferenceString(FILTER_COMMON_NAME_REFERENCES), false);
                getPreferenceStore().setDefault(createPreferenceString(SHOW_SPECIMEN), true);
-               getPreferenceStore().setDefault(createPreferenceString(SHOW_TAXONNODE_WIZARD), true);
-               getPreferenceStore().setDefault(createPreferenceString(SHOW_NAME_IN_SOURCE), true);
-               getPreferenceStore().setDefault(createPreferenceString(SHOW_ID_IN_SOURCE), true);
-               getPreferenceStore().setDefault(createPreferenceString(DISABLE_MULTI_CLASSIFICATION), false);
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(EditorPreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(EditorPreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.ShowIdInSource.getKey()), Boolean.valueOf(EditorPreferencePredicate.ShowIdInSource.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.DisableMultiClassification.getKey()), Boolean.valueOf(EditorPreferencePredicate.DisableMultiClassification.getDefaultValue().toString()));
                getPreferenceStore().setDefault(createPreferenceString(DISABLE_SEC), false);
                getPreferenceStore().setDefault(createPreferenceString(SHOW_SEC_DETAILS), true);
        }
@@ -831,7 +899,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         if (preference == null){
             return;
         }
-        setBooleanValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY, preference.isAllowOverride());
+//        setBooleanValue(ALLOW_OVERRIDE_NOMENCLATURAL_CODE_KEY, preference.isAllowOverride());
 
         int index = StringUtils.lastIndexOf(preference.getValue(), ".");
         UUID uuid = UUID.fromString(preference.getValue().substring(index +1, preference.getValue().length()));
@@ -889,8 +957,15 @@ public class PreferencesUtil implements IPreferenceKeys {
        public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
                String uuidString = getStringValue(
                                FEATURE_TREE_DEFAULT_TEXT);
-               return CdmUtils.isEmpty(uuidString) ? null : CdmStore.getService(
-                               IFeatureTreeService.class).load(UUID.fromString(uuidString));
+               if (uuidString == null) {
+            return null;
+        }
+               FeatureTree tree = CdmStore.getService(
+                       IFeatureTreeService.class).load(UUID.fromString(uuidString));
+               if (tree.getId() == 0) {
+            return null;
+        }
+               return tree;
        }
 
        /**
@@ -1161,53 +1236,51 @@ public class PreferencesUtil implements IPreferenceKeys {
         }
     }
 
+
+
+
     /**
-        * <p>
-        * getSortRanksNaturally
-        * </p>
-        *
-        * @return a boolean.
-        */
-       public static boolean getSortNodesNaturally() {
-               return getBooleanValue(SORT_NODES_NATURALLY);
-       }
+     * @param orderActivated
+     */
+    public static void setSortNodes(NavigatorOrderEnum nodesOrder) {
+        setStringValue(SORT_NODES, nodesOrder.key);
 
-       /**
-        * <p>
-        * setSortRanksNaturally
-        * </p>
-        *
-        * @param selection
-        *            a boolean.
-        */
-       public static void setSortNodesNaturally(boolean selection) {
-               setBooleanValue(SORT_NODES_NATURALLY, selection);
-       }
+    }
 
+    /**
+     * @param orderActivated
+     */
+    public static NavigatorOrderEnum getSortNodes() {
+        return NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
 
-       /**
-        * <p>
-        * getSortRanksNaturally
-        * </p>
-        *
-        * @return a boolean.
-        */
-       public static boolean getSortNodesStrictlyAlphabetically() {
-               return getBooleanValue(SORT_NODES_ALPHABETICALLY);
-       }
+    }
 
-       /**
-        * <p>
-        * setSortRanksNaturally
-        * </p>
-        *
-        * @param selection
-        *            a boolean.
-        */
-       public static void setSortNodesStrictlyAlphabetically(boolean selection) {
-               setBooleanValue(SORT_NODES_ALPHABETICALLY, selection);
-       }
+    /**
+     * @param orderActivated
+     */
+    public static boolean isNodesSortedNaturally() {
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        return value.equals(NavigatorOrderEnum.NaturalOrder);
 
+    }
+
+    /**
+     * @param orderActivated
+     */
+    public static boolean isNodesSortedByName() {
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        return value.equals(NavigatorOrderEnum.AlphabeticalOrder);
+
+    }
+
+    /**
+     * @param orderActivated
+     */
+    public static boolean isNodesSortedByNameAndRank() {
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        return value.equals(NavigatorOrderEnum.RankAndNameOrder);
+
+    }
        /**
         * <p>
         * setStoreNavigatorState
@@ -1248,51 +1321,59 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @return
      */
     public static boolean isShowIdInVocabularyInChecklistEditor() {
-        String area_display = getStringValue(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
-        if (area_display.equals(CHECKLIST_AREA_DISPLAY_ID_IN_VOCABULARY)) {
+        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        if (area_display.equals(TermDisplayEnum.IdInVocabulary.getKey())) {
             return true;
         }else{
             return false;
         }
     }
     public static boolean isShowSymbol1InChecklistEditor() {
-        String area_display = getStringValue(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
-        if (area_display.equals(CHECKLIST_AREA_DISPLAY_SYMBOL1)) {
+        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        if (area_display.equals(TermDisplayEnum.Symbol1.getKey())) {
             return true;
         }else{
             return false;
         }
      }
     public static boolean isShowSymbol2InChecklistEditor() {
-        String area_display = getStringValue(IPreferenceKeys.CHECKLIST_AREA_DISPLAY);
-        if (area_display.equals(CHECKLIST_AREA_DISPLAY_SYMBOL2)) {
+        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        if (area_display.equals(TermDisplayEnum.Symbol2.getKey())) {
             return true;
         }else{
             return false;
         }
      }
-    public static void setShowIdInVocabularyInChecklistEditor(String selection) {
-        setStringValue(CHECKLIST_AREA_DISPLAY, selection);
+    public static void setAreaDisplayInChecklistEditor(String selection) {
+        setStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey(), selection);
+    }
+
+    public static void setOwnDescriptionForChecklistEditor(boolean selection) {
+        setBooleanValue(EditorPreferencePredicate.OwnDescriptionForDistributionEditor.getKey(), selection);
+    }
+
+    public static boolean isOwnDescriptionForChecklistEditor() {
+        return getBooleanValue(EditorPreferencePredicate.OwnDescriptionForDistributionEditor.getKey());
     }
 
     /**
      * @return
      */
-    public static boolean isShowSymbolInChecklistEditor() {
-       return getBooleanValue(IPreferenceKeys.CHECKLIST_SYMBOL);
+    public static String displayStatusInChecklistEditor() {
+       return getStringValue(EditorPreferencePredicate.DisplayOfStatus.getKey());
     }
-    public static void setShowSymbolInChecklistEditor(boolean selection) {
-        setBooleanValue(CHECKLIST_SYMBOL, selection);
+    public static void setDisplayStatusInChecklistEditor(String selection) {
+        setStringValue(EditorPreferencePredicate.DisplayOfStatus.getKey(), selection);
     }
 
     /**
      * @return
      */
     public static boolean isShowRankInChecklistEditor() {
-        return getBooleanValue(IPreferenceKeys.CHECKLIST_SHOW_RANK);
+        return getBooleanValue(EditorPreferencePredicate.ShowRankInDistributionEditor.getKey());
     }
     public static void setShowRankInChecklistEditor(boolean selection) {
-       setBooleanValue(CHECKLIST_SHOW_RANK, selection);
+       setBooleanValue(EditorPreferencePredicate.ShowRankInDistributionEditor.getKey(), selection);
     }
 
     /**
@@ -1302,11 +1383,11 @@ public class PreferencesUtil implements IPreferenceKeys {
      */
     public static NameDetailsConfigurator getPreferredNameDetailsConfiguration( boolean local) {
         NameDetailsConfigurator config = new NameDetailsConfigurator(true);
-
+        CdmPreferenceCache cache = CdmPreferenceCache.instance();
         CdmPreference preference = null;
 
         if (!local) {
-            preference = getPreferenceFromDB(PreferencePredicate.NameDetailsView);
+            preference = cache.get(EditorPreferencePredicate.NameDetailsView.getKey());
             if (preference == null){
                 return null;
             }
@@ -1413,7 +1494,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         CdmPreference preference = null;
 
         if (!local) {
-            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), PreferencePredicate.NameDetailsView, config.toString());
+            preference = CdmPreference.NewInstance(PreferenceSubject.NewDatabaseInstance(), EditorPreferencePredicate.NameDetailsView, config.toString());
 
             setPreferenceToDB(preference);
         }
@@ -1457,57 +1538,30 @@ public class PreferencesUtil implements IPreferenceKeys {
      *            a {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
      *            object.
      */
-    public static Abcd206ImportConfigurator getAbcdImportConfigurationPreference() {
+    public static Abcd206ImportConfigurator getDBAbcdImportConfigurationPreference() {
 
         Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
         ICdmRepository controller;
         controller = CdmStore.getCurrentApplicationConfiguration();
-        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig);
+        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AbcdImportConfig);
         CdmPreference preference = null;
         if (controller == null){
             return null;
         }
         preference = controller.getPreferenceService().find(key);
-        boolean allowOverride = true;
-        if (preference != null && !preference.isAllowOverride()){
-            allowOverride = false;
-        }
-        if (getBooleanValue(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) && allowOverride){
-
-            config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS));
-
-            config.setAddMediaAsMediaSpecimen(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN));
-
-            config.setAllowReuseOtherClassifications(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS));
-            config.setDeduplicateClassifications(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS));
-            config.setDeduplicateReferences(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES));
-
-            config.setGetSiblings(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS));
-            config.setIgnoreAuthorship(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP));
-            config.setIgnoreImportOfExistingSpecimen(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN));
-            config.setMapUnitIdToAccessionNumber(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER));
-            config.setMapUnitIdToBarcode(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE));
-            config.setMapUnitIdToCatalogNumber(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER));
-            config.setMoveNewTaxaToDefaultClassification(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION));
-            config.setOverwriteExistingSpecimens(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN));
-            config.setReuseExistingDescriptiveGroups(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS));
-            config.setReuseExistingMetaData(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA));
-            config.setReuseExistingTaxaWhenPossible(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE));
-            config.setNomenclaturalCode(NomenclaturalCode.getByKey(getStringValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE)));
+        if (preference == null){
             return config;
-
-        }
-
-            if (preference == null){
-                return config;
-             } else{
+         } else{
              String configString = preference.getValue();
              String[] configArray = configString.split(";");
 
              for (String configItem: configArray){
                  String[] keyValue = configItem.split(":");
                  String keyString = keyValue[0];
-                 String valueString = keyValue[1];
+                 String valueString = null;
+                 if (keyValue.length>1){
+                      valueString = keyValue[1];
+                 }
                  if (keyString.equals("ignoreImportOfExistingSpecimen")){
                      config.setIgnoreImportOfExistingSpecimen(Boolean.valueOf(valueString));
                  }else if (keyString.equals("addIndividualsAssociationsSuchAsSpecimenAndObservations")){
@@ -1544,50 +1598,72 @@ public class PreferencesUtil implements IPreferenceKeys {
                      logger.debug("This key of the abcd configurator needs to be added to the transformer: " + keyString);
                  }
 
-            }
+             }
         }
         return config;
     }
 
+    public static Abcd206ImportConfigurator getLocalAbcdImportConfigurator(){
+       Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
+
+        config.setAddIndividualsAssociationsSuchAsSpecimenAndObservations(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS));
+
+        config.setAddMediaAsMediaSpecimen(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN));
+
+        config.setAllowReuseOtherClassifications(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS));
+        config.setDeduplicateClassifications(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS));
+        config.setDeduplicateReferences(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES));
+        config.setRemoveCountryFromLocalityText(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REMOVE_COUNTRY_FROM_LOCALITY_TEXT));
+        config.setGetSiblings(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS));
+        config.setIgnoreAuthorship(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP));
+        config.setIgnoreImportOfExistingSpecimen(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN));
+        config.setMapUnitIdToAccessionNumber(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER));
+        config.setMapUnitIdToBarcode(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE));
+        config.setMapUnitIdToCatalogNumber(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER));
+        config.setMoveNewTaxaToDefaultClassification(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION));
+        config.setOverwriteExistingSpecimens(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN));
+        config.setReuseExistingDescriptiveGroups(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS));
+        config.setReuseExistingMetaData(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA));
+        config.setReuseExistingTaxaWhenPossible(getBooleanValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE));
+        config.setNomenclaturalCode(NomenclaturalCode.getByKey(getStringValue(IPreferenceKeys.ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE)));
+
+        return config;
+
+    }
+
 
     public static void updateAbcdImportConfigurationPreference() {
+        CdmPreferenceCache cache = CdmPreferenceCache.instance();
+        CdmPreference pref = cache.get(EditorPreferencePredicate.AbcdImportConfig.getKey());
+
+        if (!getBooleanValue(prefOverrideKey(EditorPreferencePredicate.AbcdImportConfig.getKey())) || !pref.isAllowOverride()){
+            resetToDBPreferenceAbcdCOnfigurator();
 
-        Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
-        ICdmRepository controller;
-        controller = CdmStore.getCurrentApplicationConfiguration();
-        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig);
-        CdmPreference preference = null;
-        if (controller == null){
-            return ;
-        }
-        preference = controller.getPreferenceService().find(key);
-        boolean allowOverride = true;
-        if (preference != null && !preference.isAllowOverride()){
-            allowOverride = false;
         }
-        if (!getBooleanValue(IPreferenceKeys.ABCD_IMPORT_OVERRIDE) || !allowOverride){
-
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS, config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN, config.isAddMediaAsMediaSpecimen());
-
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS, config.isAllowReuseOtherClassifications());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS, config.isDeduplicateClassifications());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES, config.isDeduplicateReferences());
-
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS, config.isGetSiblings());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP, config.isIgnoreAuthorship());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN, config.isIgnoreImportOfExistingSpecimen());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER, config.isMapUnitIdToAccessionNumber());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE, config.isMapUnitIdToBarcode());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER, config.isMapUnitIdToCatalogNumber());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION, config.isMoveNewTaxaToDefaultClassification());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN, config.isOverwriteExistingSpecimens());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS, config.isReuseExistingDescriptiveGroups());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA, config.isReuseExistingMetaData());
-            setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE, config.isReuseExistingTaxaWhenPossible());
-            if (config.getNomenclaturalCode() != null){
-                setStringValue(ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE, config.getNomenclaturalCode().getKey());
-            }
+    }
+
+    public static void resetToDBPreferenceAbcdCOnfigurator(){
+        Abcd206ImportConfigurator config = getDBAbcdImportConfigurationPreference();
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ADD_INDIVIDUALS_ASSOCIATIONS_SUCH_AS_SPECIMEN_AND_OBSERVATIONS, config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ADD_MEDIA_AS_MEDIASPECIMEN, config.isAddMediaAsMediaSpecimen());
+
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_ALLOW_REUSE_OTHER_CLASSIFICATIONS, config.isAllowReuseOtherClassifications());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_CLASSIFICATIONS, config.isDeduplicateClassifications());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DEDUPLICATE_REFERENCES, config.isDeduplicateReferences());
+
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_DO_SIBLINGS, config.isGetSiblings());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_AUTHORSHIP, config.isIgnoreAuthorship());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_IGNORE_IMPORT_OF_EXISTING_SPECIMEN, config.isIgnoreImportOfExistingSpecimen());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_ACCESSION_NUMBER, config.isMapUnitIdToAccessionNumber());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TO_BARCODE, config.isMapUnitIdToBarcode());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MAP_UNIT_ID_TOCATALOG_NUMBER, config.isMapUnitIdToCatalogNumber());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_MOVE_NEW_TAXA_TO_DEFAULT_CLASSIFICATION, config.isMoveNewTaxaToDefaultClassification());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_OVERWRITE_EXISTING_SPECIMEN, config.isOverwriteExistingSpecimens());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_DESCRIPTIVE_GROUPS, config.isReuseExistingDescriptiveGroups());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_META_DATA, config.isReuseExistingMetaData());
+        setBooleanValue(ABCD_IMPORT_CONFIGURATOR_REUSE_EXISTING_TAXA_WHEN_POSSIBLE, config.isReuseExistingTaxaWhenPossible());
+        if (config.getNomenclaturalCode() != null){
+            setStringValue(ABCD_IMPORT_CONFIGURATOR_NOMENCLATURAL_CODE, config.getNomenclaturalCode().getKey());
         }
     }
 
@@ -1668,11 +1744,11 @@ public static boolean isSortTaxaByRankAndName() {
  */
 public static boolean isSortNamedAreaByOrderInVocabulary() {
 
-    return getBooleanValue(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER);
+    return getBooleanValue(EditorPreferencePredicate.AreasSortedByIdInVocabulary.getKey());
 }
 
 public static void setSortNamedAreasByOrderInVocabulary(boolean isSortByVocabularyOrder) {
-    setBooleanValue(IPreferenceKeys.SORT_NAMED_AREA_BY_VOCABULARY_ORDER, isSortByVocabularyOrder);
+    setBooleanValue(EditorPreferencePredicate.AreasSortedByIdInVocabulary.getKey(), isSortByVocabularyOrder);
 
 }
 
@@ -1721,29 +1797,28 @@ public static List<String> getLastSelectedReferences() {
 public static void setPreferredNamedAreasForDistributionEditor(
         String saveCheckedElements, String saveGrayedElements, boolean local) {
     if (local){
-        setStringValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS, saveCheckedElements);
-        setStringValue(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS_GRAYED, saveGrayedElements);
+        setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(), saveCheckedElements);
 
     }
     else{
         CdmPreference preference = null;
 
         if (saveCheckedElements == null){
-            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaTerms);
+            preference = getPreferenceFromDB(EditorPreferencePredicate.AvailableDistributionAreaTerms);
 
             if (preference == null){
                 return ;
             } else{
-                setStringValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
+                setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(),
                         saveCheckedElements);
-                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
                 setPreferenceToDB(preference);
 
             }
         } else{
-           preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+           preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
            setPreferenceToDB(preference);
-           setStringValue(DISTRIBUTION_AREA_OCCURENCE_STATUS,
+           setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(),
                     saveCheckedElements);
 
         }
@@ -1757,9 +1832,10 @@ public static void setPreferredNamedAreasForDistributionEditor(
  * @param b
  */
 public static void setPreferredVocabulariesForDistributionEditor(String saveCheckedElements,
-        boolean local) {
+        boolean local, boolean isOverride) {
     if (local){
-      setStringValue(PreferencesUtil.DISTRIBUTION_VOCABULARIES, saveCheckedElements);
+      setStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey(), saveCheckedElements);
+      setBooleanValue(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey()), isOverride);
     }
     else{
         ICdmRepository controller;
@@ -1771,15 +1847,17 @@ public static void setPreferredVocabulariesForDistributionEditor(String saveChec
             if (preference == null){
                 return ;
             } else{
-                setStringValue(DISTRIBUTION_VOCABULARIES,
+                setStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey(),
                         saveCheckedElements);
                 preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
+                preference.setAllowOverride(isOverride);
                 setPreferenceToDB(preference);
             }
         } else{
             preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaVocabularies, saveCheckedElements);
+            preference.setAllowOverride(isOverride);
             setPreferenceToDB(preference);
-            setStringValue(DISTRIBUTION_VOCABULARIES,
+            setStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey(),
                     saveCheckedElements);
 
         }
@@ -1797,7 +1875,7 @@ public static void setPreferredVocabulariesForDistributionEditor(String saveChec
 public static String getPreferredVocabulariesForDistributionEditor(boolean local) {
     if (local){
 
-        String pref = getStringValue(DISTRIBUTION_VOCABULARIES);
+        String pref = getStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey(), local);
         return pref;
     }
     else{
@@ -1824,75 +1902,13 @@ public static boolean getFilterCommonNameReferences(){
  */
 public static void updateDBPreferences() {
     CdmPreference preference = null;
-    IPreferenceStore prefStore = getPreferenceStore();
+    CdmPreferenceCache cache = CdmPreferenceCache.instance();
+    cache.getAllTaxEditorDBPreferences();
 
     //ABCD Configurator
 
     updateAbcdImportConfigurationPreference();
 
-    preference = getPreferenceFromDB(PreferencePredicate.ShowImportExportMenu);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_IO_MENU) ||  !preference.isAllowOverride()){
-           setBooleanValue(SHOW_IO_MENU, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_IO_MENU, true);
-    }
-
-    preference = getPreferenceFromDB(PreferencePredicate.ShowMediaView);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_MEDIA) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_MEDIA, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_MEDIA, true);
-    }
-
-    preference = getPreferenceFromDB(PreferencePredicate.ShowChecklistPerspective);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_CHECKLIST_PERSPECTIVE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_CHECKLIST_PERSPECTIVE, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_CHECKLIST_PERSPECTIVE, false);
-    }
-
-    //Specimen Details
-    preference = getPreferenceFromDB(PreferencePredicate.ShowSpecimen);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_SPECIMEN) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_SPECIMEN, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_SPECIMEN, true);
-    }
-
-    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonAssociations);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_TAXON_ASSOCIATIONS_OVERRIDE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_TAXON_ASSOCIATIONS, Boolean.valueOf(preference.getValue()));
-        }
-    }
-    preference = getPreferenceFromDB(PreferencePredicate.ShowCollectingAreasInGeneralSection);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION_OVERRIDE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_COLLECTING_AREAS_IN_GENERAL_SECTION, Boolean.valueOf(preference.getValue()));
-        }
-    }
-    preference = getPreferenceFromDB(PreferencePredicate.ShowLifeForm);
-    if (preference != null){
-        if(!getBooleanValue(SHOW_LIFE_FORM_OVERRIDE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_LIFE_FORM, Boolean.valueOf(preference.getValue()));
-        }
-    }
-    preference = getPreferenceFromDB(PreferencePredicate.DeterminationOnlyForFieldUnits);
-    if (preference != null){
-        if(!getBooleanValue(DETERMINATION_ONLY_FOR_FIELD_UNITS_OVERRIDE) ||  !preference.isAllowOverride()){
-            setBooleanValue(DETERMINATION_ONLY_FOR_FIELD_UNITS, Boolean.valueOf(preference.getValue()));
-        }
-    }
-
-
     //Name Details
     NameDetailsConfigurator config = getPreferredNameDetailsConfiguration(false);
     if (config != null ){
@@ -1901,97 +1917,12 @@ public static void updateDBPreferences() {
         }
     }
 
-    //Distribution Editor
-    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
-    if (preference != null){
-        if (!getBooleanValue(DISTRIBUTION_VOCABULARIES_OVERRIDE) ||  !preference.isAllowOverride()){
-            setStringValue(DISTRIBUTION_VOCABULARIES, preference.getValue());
-            setBooleanValue(DISTRIBUTION_VOCABULARIES_ALLOW_OVERRIDE, preference.isAllowOverride());
-        }
-    }else{
-        setBooleanValue(DISTRIBUTION_VOCABULARIES_ALLOW_OVERRIDE,true);
-        setStringValue(DISTRIBUTION_VOCABULARIES, "");
-    }
 
-    preference = getPreferenceFromDB(PreferencePredicate.DistributionEditorActivated);
-    if (preference != null){
-        if (!getBooleanValue(DISTRIBUTION_AREA_PREFRENCES_ACTIVE_OVERRIDE) || !preference.isAllowOverride()){
-            setBooleanValue(DISTRIBUTION_AREA_PREFRENCES_ACTIVE, Boolean.valueOf(preference.getValue()));
-        }
-    }
 
-    preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionStatus);
-    if (preference != null){
-        if (!getBooleanValue(DISTRIBUTION_STATUS_OVERRIDE) || !preference.isAllowOverride()){
-            //get terms for the uuids... and add them to the termManager as preferred terms
-            ITermService termService = CdmStore.getService(ITermService.class);
-            String[] uuidArray = preference.getValue().split(";");
-            List<UUID> uuidList = new ArrayList();
-            for (String uuidString:uuidArray){
-                uuidList.add(UUID.fromString(uuidString));
-            }
 
-            List<DefinedTermBase> definedTermBases = termService.load(uuidList, null);
-            CdmStore.getTermManager().setPreferredTerms(definedTermBases, TermStore.getTerms(TermType.PresenceAbsenceTerm, null));
-        }
-    }
 
-    preference = getPreferenceFromDB(PreferencePredicate.CommonNameAreaVocabularies);
-    if (preference != null){
-        if (!getBooleanValue(COMMON_NAME_AREA_VOCABULARIES) ||  !preference.isAllowOverride()){
-            setStringValue(COMMON_NAME_AREA_VOCABULARIES, preference.getValue());
-            setBooleanValue(COMMON_NAME_AREA_VOCABULARIES_ALLOW_OVERRIDE, preference.isAllowOverride());
-        }
-    }else{
-        setStringValue(COMMON_NAME_AREA_VOCABULARIES, "");
-        setBooleanValue(COMMON_NAME_AREA_VOCABULARIES_ALLOW_OVERRIDE, true);
-    }
 
-    preference = getPreferenceFromDB(PreferencePredicate.CommonNameReferencesWithMarker);
-    if (preference != null){
-        if (!getBooleanValue(FILTER_COMMON_NAME_REFERENCES) ||  !preference.isAllowOverride()){
-            setBooleanValue(FILTER_COMMON_NAME_REFERENCES, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(FILTER_COMMON_NAME_REFERENCES, false);
-    }
-
-
-    preference = getPreferenceFromDB(PreferencePredicate.ShowTaxonNodeWizard);
-    if (preference != null){
-        if (!getBooleanValue(SHOW_TAXONNODE_WIZARD) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_TAXONNODE_WIZARD, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_TAXONNODE_WIZARD, true);
-    }
-
-    preference = getPreferenceFromDB(PreferencePredicate.ShowIdInSource);
-    if (preference != null){
-        if (!getBooleanValue(SHOW_ID_IN_SOURCE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_ID_IN_SOURCE, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_ID_IN_SOURCE, true);
-    }
 
-    preference = getPreferenceFromDB(PreferencePredicate.ShowNameInSource);
-    if (preference != null){
-        if (!getBooleanValue(SHOW_NAME_IN_SOURCE) ||  !preference.isAllowOverride()){
-            setBooleanValue(SHOW_NAME_IN_SOURCE, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(SHOW_NAME_IN_SOURCE, true);
-    }
-
-    preference = getPreferenceFromDB(PreferencePredicate.DisableMultiClassification);
-    if (preference != null){
-        if (!getBooleanValue(DISABLE_MULTI_CLASSIFICATION) ||  !preference.isAllowOverride()){
-            setBooleanValue(DISABLE_MULTI_CLASSIFICATION, Boolean.valueOf(preference.getValue()));
-        }
-    }else{
-        setBooleanValue(DISABLE_MULTI_CLASSIFICATION, false);
-    }
 
 }
 
@@ -2001,4 +1932,5 @@ public static void updateDBPreferences() {
 
 
 
+
 }