adapt preferenceCache for same predicate but different subject
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / PreferencesUtil.java
index ac88ec074b688d15114aa0048c5f2c11cbd34303..6e0e5f644bb28f4d3734b41f655de3e77cfce9a0 100644 (file)
@@ -45,12 +45,8 @@ 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.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.description.FeatureTree;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
 import eu.etaxonomy.cdm.model.metadata.IPreferencePredicate;
@@ -58,6 +54,10 @@ 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.model.term.FeatureTree;
+import eu.etaxonomy.cdm.model.term.IDefinedTerm;
+import eu.etaxonomy.cdm.model.term.ISimpleTerm;
+import eu.etaxonomy.cdm.model.term.TermBase;
 import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.FieldMatcher;
 import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
@@ -171,7 +171,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static void setFloatValue(String name, float value) {
-        getPreferenceStore().setValue(name + ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString(), value);
+        getPreferenceStore().setValue(prefKey(name), value);
     }
 
     /**
@@ -194,8 +194,14 @@ public class PreferencesUtil implements IPreferenceKeys {
      **/
     public static String getStringValue(String name, boolean local) {
 
-        String prefValue = getDBPreferenceValue(name);
-        if (prefValue == null || local){
+        CdmPreference pref = getDBPreferenceValue(name);
+        String prefValue = null;
+        String overrideKey =  createPreferenceString(createOverridePreferenceString(name));
+        boolean override = true;
+        if (getPreferenceStore().contains(overrideKey)){
+            override = getPreferenceStore().getBoolean(overrideKey);
+        }
+        if (local || pref == null || (pref != null && pref.isAllowOverride() && override)){
             String dbSpecific = prefKey(name);
             if (getPreferenceStore().contains(dbSpecific)){
                 prefValue = getPreferenceStore().getString(dbSpecific);
@@ -203,7 +209,9 @@ public class PreferencesUtil implements IPreferenceKeys {
                 prefValue = getPreferenceStore().
                         getString(name);
             }
-        }
+       }else if (pref != null){
+           prefValue = pref.getValue();
+       }
         return prefValue;
 
     }
@@ -212,15 +220,33 @@ public class PreferencesUtil implements IPreferenceKeys {
         return getStringValue(name, false);
     }
 
-    private static String getDBPreferenceValue(String name) {
+    private static CdmPreference 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();
+        CdmPreference result = null;
+        List<CdmPreference> prefs = null;
+//
+        prefs = cache.get(name);
+        if (prefs == null ){
+            //get default value for Predicate
+            IPreferencePredicate pred = PreferencePredicate.getByKey(name);
+            if (pred != null){
+                if (pred.getDefaultValue() != null){
+                    result = CdmPreference.NewTaxEditorInstance(pred, pred.getDefaultValue().toString());
+                }else{
+                    result = CdmPreference.NewTaxEditorInstance(pred, null);
+                }
+                result.setAllowOverride(true);
+            }
+        }else{
+            if (prefs.size() == 1){
+                result = prefs.get(0);
+            }else{
+                PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.getByKey(name));
+                result = cache.findBestMatching(key);
+
             }
         }
-        return null;
+        return result;
     }
 
     /**
@@ -231,7 +257,11 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static int getIntValue(String name) {
-        String prefValue = getDBPreferenceValue(name);
+        CdmPreference pref= getDBPreferenceValue(name);
+        String prefValue = null;
+        if (pref != null){
+            prefValue = pref.getValue();
+        }
         Integer result = null;
         try{
             result = Integer.parseInt(prefValue);
@@ -252,17 +282,22 @@ public class PreferencesUtil implements IPreferenceKeys {
 
     }
 
+    public static boolean getBooleanValue(String name) {
+        return getBooleanValue(name, false);
+    }
+
     /**
      * <p>
-     * setBooleanValue
+     * getBooleanValue
      * </p>
      *
      *
      **/
-    public static boolean getBooleanValue(String name) {
+    public static boolean getBooleanValue(String name, boolean local) {
         if (CdmStore.isActive()){
-            String prefValue = getDBPreferenceValue(name);
-            if (prefValue == null){
+            CdmPreference pref = getDBPreferenceValue(name);
+            String prefValue = null;
+            if (pref == null || local){
                 String dbSpecific = prefKey(name);
                 if (getPreferenceStore().contains(dbSpecific)){
                     return getPreferenceStore().getBoolean(dbSpecific);
@@ -271,7 +306,7 @@ public class PreferencesUtil implements IPreferenceKeys {
                             getBoolean(name);
                 }
             }else{
-                return Boolean.valueOf(prefValue);
+                return Boolean.valueOf(pref.getValue());
             }
 
         }else{
@@ -288,7 +323,11 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static double getDoubleValue(String name) {
-        String prefValue = getDBPreferenceValue(name);
+        CdmPreference pref = getDBPreferenceValue(name);
+        String prefValue = null;
+        if (pref != null){
+            prefValue = pref.getValue();
+        }
         Double result = null;
         try{
             result = Double.parseDouble(prefValue);
@@ -316,7 +355,11 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static float getFloatValue(String name) {
-        String prefValue = getDBPreferenceValue(name);
+        CdmPreference pref = getDBPreferenceValue(name);
+        String prefValue = null;
+        if (pref != null){
+            prefValue = pref.getValue();
+        }
         Float result = null;
         try{
             result = Float.parseFloat(prefValue);
@@ -344,7 +387,11 @@ public class PreferencesUtil implements IPreferenceKeys {
      *
      **/
     public static long getLongValue(String name) {
-        String prefValue = getDBPreferenceValue(name);
+        CdmPreference pref = getDBPreferenceValue(name);
+        String prefValue = null;
+        if (pref != null){
+            prefValue = pref.getValue();
+        }
         Long result = null;
         try{
             result = Long.parseLong(prefValue);
@@ -444,13 +491,7 @@ public class PreferencesUtil implements IPreferenceKeys {
     }
 
 
-       public static NomenclaturalCode getPreferredNomenclaturalCode(){
-           if (getBooleanValue(prefOverrideKey(PreferencePredicate.NomenclaturalCode.getKey()))) {
-            return getPreferredNomenclaturalCode(true);
-        } else{
-            return getPreferredNomenclaturalCode(false);
-        }
-       }
+
 
        /**
         * <p>
@@ -459,21 +500,22 @@ public class PreferencesUtil implements IPreferenceKeys {
         *
         * @return a {@link eu.etaxonomy.cdm.model.name.NomenclaturalCode} object.
         */
-       public static NomenclaturalCode getPreferredNomenclaturalCode(boolean useLocal) {
+       public static NomenclaturalCode getPreferredNomenclaturalCode() {
+
+               CdmPreference pref = getPreferenceFromDB(PreferencePredicate.NomenclaturalCode);
 
-               CdmPreference pref = null;
-               if (!useLocal){
-                   pref = getPreferenceFromDB(PreferencePredicate.NomenclaturalCode);
-               }
 
            String preferredCode;
-           if(pref == null){
+           if(pref == null || (pref.isAllowOverride() && getBooleanValue(prefOverrideKey(PreferencePredicate.NomenclaturalCode.getKey())))){
                preferredCode = getStringValue(
-                                       PREFERRED_NOMENCLATURAL_CODE_KEY, true);
+                       PreferencePredicate.NomenclaturalCode.getKey(), true);
 
            }else{
                preferredCode = pref.getValue();
            }
+           if (StringUtils.isBlank(preferredCode)){
+               preferredCode = getPreferenceKey((NomenclaturalCode)PreferencePredicate.NomenclaturalCode.getDefaultValue());
+           }
 
            return getPreferredNomenclaturalCode(preferredCode);
 
@@ -497,22 +539,22 @@ public class PreferencesUtil implements IPreferenceKeys {
     }
 
        public static boolean isShowTaxonAssociations(){
-        boolean result = getBooleanValue(EditorPreferencePredicate.ShowTaxonAssociations.getKey());
+        boolean result = getBooleanValue(PreferencePredicate.ShowTaxonAssociations.getKey());
         return result;
     }
 
        public static boolean isShowLifeForm(){
-           boolean result =  getBooleanValue(EditorPreferencePredicate.ShowLifeForm.getKey());
+           boolean result =  getBooleanValue(PreferencePredicate.ShowLifeForm.getKey());
            return result;
     }
 
        public static boolean isDeterminationOnlyForFieldUnits(){
-           boolean result =  getBooleanValue(EditorPreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
+           boolean result =  getBooleanValue(PreferencePredicate.DeterminationOnlyForFieldUnits.getKey());
         return result;
     }
 
        public static boolean isCollectingAreaInGeneralSection(){
-           boolean result =  getBooleanValue(EditorPreferencePredicate.ShowCollectingAreasInGeneralSection.getKey());
+           boolean result =  getBooleanValue(PreferencePredicate.ShowCollectingAreasInGeneralSection.getKey());
         return result;
        }
 
@@ -534,12 +576,50 @@ public class PreferencesUtil implements IPreferenceKeys {
 
     }
 
+       public static List<CdmPreference> getPreferencesFromDB(IPreferencePredicate predicate){
+        ICdmRepository controller;
+        List<CdmPreference> prefs = null;
+
+        try{
+            if(CdmStore.isActive()){
+                controller = CdmStore.getCurrentApplicationConfiguration();
+                PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), predicate);
+                prefs = controller.getPreferenceService().list(predicate);
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+
+        return prefs;
+
+    }
+
+       public static CdmPreference getPreferenceFromDB(PrefKey key){
+        ICdmRepository controller;
+        CdmPreference pref = null;
+
+        try{
+            if(CdmStore.isActive()){
+                controller = CdmStore.getCurrentApplicationConfiguration();
+                pref = controller.getPreferenceService().find(key);
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+
+        return pref;
+
+    }
+
+
+
     public static void setPreferenceToDB(CdmPreference preference){
         ICdmRepository controller;
         try{
             if(CdmStore.isActive()){
                 controller = CdmStore.getCurrentApplicationConfiguration();
                 controller.getPreferenceService().set(preference);
+                CdmPreferenceCache.instance().put(preference);
             }
         }catch(Exception e){
             e.printStackTrace();
@@ -838,29 +918,37 @@ 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(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());
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DistributionEditorActivated.getKey()), Boolean.valueOf(PreferencePredicate.DistributionEditorActivated.getDefaultValue().toString()));
+//             getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey()), PreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue().toString());
+//             getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisplayOfStatus.getKey()), PreferencePredicate.DisplayOfStatus.getDefaultValue().toString());
 
 
                //Name Details
-               getPreferenceStore().setDefault(createPreferenceString(EditorPreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
 
                //Navigator preferences
-               getPreferenceStore().setDefault(createPreferenceString(SORT_NODES), NavigatorOrderEnum.RankAndNameOrder.getKey());
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.TaxonNodeOrder.getKey()), NavigatorOrderEnum.RankAndNameOrder.getKey());
 
                getPreferenceStore().setDefault(createPreferenceString(SORT_TAXA_BY_RANK_AND_NAME), true);
-               //override db preferences
-               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.AbcdImportConfig.getKey())), false);
-               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.ShowSpecimen.getKey())), true);
-               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.NameDetailsView.getKey())), false);
-               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(EditorPreferencePredicate.DistributionEditorActivated.getKey())), false);
 
+               getPreferenceStore().setDefault(createPreferenceString(SHOW_ADVANCED_MEDIA_SECTION), false);
+
+        getPreferenceStore().setDefault(createPreferenceString(SHOW_MEDIA_PREVIEW), false);
+               //override db preferences
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey())), true);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.NameDetailsView.getKey())), false);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.DistributionEditorActivated.getKey())), true);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), true);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaTerms.getKey())), true);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey())), true);
+               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.CommonNameAreaVocabularies.getKey())), false);
                getPreferenceStore().setDefault(createPreferenceString(FILTER_COMMON_NAME_REFERENCES), 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(PreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(PreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowIdInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowIdInSource.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.DisableMultiClassification.getKey()), Boolean.valueOf(PreferencePredicate.DisableMultiClassification.getDefaultValue().toString()));
+               getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowImportExportMenu.getKey()), Boolean.valueOf(PreferencePredicate.ShowImportExportMenu.getDefaultValue().toString()));
 
        }
 
@@ -871,7 +959,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         */
        public static void checkNomenclaturalCode() {
                // First time Editor is opened, no nomenclatural code has been set
-               if (PreferencesUtil.getPreferredNomenclaturalCode(true) == null) {
+               if (PreferencesUtil.getPreferredNomenclaturalCode() == null) {
                        PreferencesUtil.setPreferredNomenclaturalCode(getPreferenceKey(NomenclaturalCode.ICNAFP), true);
                }
 
@@ -943,7 +1031,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         * getDefaultFeatureTreeForTextualDescription
         * </p>
         *
-        * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
+        * @return a {@link eu.etaxonomy.cdm.model.term.FeatureTree} object.
         */
        public static FeatureTree getDefaultFeatureTreeForTextualDescription() {
                String uuidString = getStringValue(
@@ -964,7 +1052,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         * getDefaultFeatureTreeForStructuredDescription
         * </p>
         *
-        * @return a {@link eu.etaxonomy.cdm.model.description.FeatureTree} object.
+        * @return a {@link eu.etaxonomy.cdm.model.term.FeatureTree} object.
         */
        public static FeatureTree getDefaultFeatureTreeForStructuredDescription() {
                String uuidString = getStringValue(
@@ -1234,7 +1322,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param orderActivated
      */
     public static void setSortNodes(NavigatorOrderEnum nodesOrder) {
-        setStringValue(SORT_NODES, nodesOrder.key);
+        setStringValue(PreferencePredicate.TaxonNodeOrder.getKey(), nodesOrder.key);
 
     }
 
@@ -1242,7 +1330,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param orderActivated
      */
     public static NavigatorOrderEnum getSortNodes() {
-        return NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        return NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
 
     }
 
@@ -1250,7 +1338,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param orderActivated
      */
     public static boolean isNodesSortedNaturally() {
-        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
         return value.equals(NavigatorOrderEnum.NaturalOrder);
 
     }
@@ -1259,7 +1347,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param orderActivated
      */
     public static boolean isNodesSortedByName() {
-        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
         return value.equals(NavigatorOrderEnum.AlphabeticalOrder);
 
     }
@@ -1268,7 +1356,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @param orderActivated
      */
     public static boolean isNodesSortedByNameAndRank() {
-        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
+        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
         return value.equals(NavigatorOrderEnum.RankAndNameOrder);
 
     }
@@ -1312,7 +1400,7 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @return
      */
     public static boolean isShowIdInVocabularyInChecklistEditor() {
-        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        String area_display = getStringValue(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
         if (area_display.equals(TermDisplayEnum.IdInVocabulary.getKey())) {
             return true;
         }else{
@@ -1320,7 +1408,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         }
     }
     public static boolean isShowSymbol1InChecklistEditor() {
-        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        String area_display = getStringValue(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
         if (area_display.equals(TermDisplayEnum.Symbol1.getKey())) {
             return true;
         }else{
@@ -1328,7 +1416,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         }
      }
     public static boolean isShowSymbol2InChecklistEditor() {
-        String area_display = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        String area_display = getStringValue(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
         if (area_display.equals(TermDisplayEnum.Symbol2.getKey())) {
             return true;
         }else{
@@ -1336,24 +1424,24 @@ public class PreferencesUtil implements IPreferenceKeys {
         }
      }
     public static void setAreaDisplayInChecklistEditor(String selection) {
-        setStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey(), selection);
+        setStringValue(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey(), selection);
     }
 
     public static void setOwnDescriptionForChecklistEditor(boolean selection) {
-        setBooleanValue(EditorPreferencePredicate.OwnDescriptionForDistributionEditor.getKey(), selection);
+        setBooleanValue(PreferencePredicate.OwnDescriptionForDistributionEditor.getKey(), selection);
     }
 
     public static boolean isOwnDescriptionForChecklistEditor() {
-        return getBooleanValue(EditorPreferencePredicate.OwnDescriptionForDistributionEditor.getKey());
+        return getBooleanValue(PreferencePredicate.OwnDescriptionForDistributionEditor.getKey());
     }
 
     /**
      * @return
      */
     public static String displayAreaInChecklistEditor() {
-        String result = getStringValue(EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
-        if (result == null){
-            return (String) EditorPreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue();
+        String result = getStringValue(PreferencePredicate.DisplayOfAreasInDistributionEditor.getKey());
+        if (StringUtils.isBlank(result)){
+            return ((TermDisplayEnum) PreferencePredicate.DisplayOfAreasInDistributionEditor.getDefaultValue()).getKey();
         }
        return result;
     }
@@ -1362,14 +1450,14 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @return
      */
     public static String displayStatusInChecklistEditor() {
-        String result = getStringValue(EditorPreferencePredicate.DisplayOfStatus.getKey());
-        if (result == null){
-            return (String) EditorPreferencePredicate.DisplayOfStatus.getDefaultValue();
+        String result = getStringValue(PreferencePredicate.DisplayOfStatus.getKey());
+        if (StringUtils.isBlank(result)){
+            return((TermDisplayEnum) PreferencePredicate.DisplayOfStatus.getDefaultValue()).getKey();
         }
        return result;
     }
     public static void setDisplayStatusInChecklistEditor(String selection) {
-        setStringValue(EditorPreferencePredicate.DisplayOfStatus.getKey(), selection);
+        setStringValue(PreferencePredicate.DisplayOfStatus.getKey(), selection);
 
     }
 
@@ -1377,10 +1465,10 @@ public class PreferencesUtil implements IPreferenceKeys {
      * @return
      */
     public static boolean isShowRankInChecklistEditor() {
-        return getBooleanValue(EditorPreferencePredicate.ShowRankInDistributionEditor.getKey());
+        return getBooleanValue(PreferencePredicate.ShowRankInDistributionEditor.getKey());
     }
     public static void setShowRankInChecklistEditor(boolean selection) {
-       setBooleanValue(EditorPreferencePredicate.ShowRankInDistributionEditor.getKey(), selection);
+       setBooleanValue(PreferencePredicate.ShowRankInDistributionEditor.getKey(), selection);
     }
 
     /**
@@ -1394,18 +1482,19 @@ public class PreferencesUtil implements IPreferenceKeys {
         CdmPreference preference = null;
         String value;
         if (!local) {
-            preference = cache.get(EditorPreferencePredicate.NameDetailsView.getKey());
+            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.NameDetailsView);
+            preference = cache.findBestMatching(key);
             if (preference == null){
                 return null;
             }
 
-            setBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
+        //    setBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS, preference.isAllowOverride());
             value = preference.getValue();
             config.setAllowOverride(preference.isAllowOverride());
             //the preference value is build like this:
             //<section1>:true;<section2>:false....
         }else{
-            value = getStringValue(EditorPreferencePredicate.NameDetailsView.getKey(), local);
+            value = getStringValue(PreferencePredicate.NameDetailsView.getKey(), local);
         }
         String [] sections = value.split(";");
         Map<String, Boolean> sectionMap = new HashMap<String, Boolean>();
@@ -1417,7 +1506,7 @@ public class PreferencesUtil implements IPreferenceKeys {
 
         config.setSimpleDetailsViewActivated(getValue(sectionMap, "simpleViewActivated"));
 
-            config.setTaxonSectionActivated(getValue(sectionMap, "taxon"));
+        config.setTaxonSectionActivated(getValue(sectionMap, "taxon"));
 
         config.setSecDetailsActivated(getValue(sectionMap, "taxon.SecDetails"));
         config.setSecEnabled(getValue(sectionMap, "taxon.SecEnabled"));
@@ -1449,6 +1538,56 @@ public class PreferencesUtil implements IPreferenceKeys {
         return config;
     }
 
+    public static NameDetailsConfigurator getPreferredNameDetailsConfiguration() {
+        NameDetailsConfigurator config = new NameDetailsConfigurator(true);
+
+        String value;
+
+        value = getStringValue(PreferencePredicate.NameDetailsView.getKey(), false);
+
+        String [] sections = value.split(";");
+        Map<String, Boolean> sectionMap = new HashMap<String, Boolean>();
+        String[] sectionValues;
+        for (String sectionValue: sections){
+            sectionValues = sectionValue.split(":");
+            sectionMap.put(sectionValues[0], Boolean.valueOf(sectionValues[1]));
+        }
+
+        config.setSimpleDetailsViewActivated(getValue(sectionMap, "simpleViewActivated"));
+
+        config.setTaxonSectionActivated(getValue(sectionMap, "taxon"));
+
+        config.setSecDetailsActivated(getValue(sectionMap, "taxon.SecDetails"));
+        config.setSecEnabled(getValue(sectionMap, "taxon.SecEnabled"));
+
+        config.setLSIDActivated(getValue(sectionMap, "lsid"));
+
+        config.setNomenclaturalCodeActived(getValue(sectionMap, "nc"));
+
+        config.setAppendedPhraseActivated(getValue(sectionMap, "ap"));
+
+        config.setRankActivated(getValue(sectionMap, "rank"));
+
+        config.setAtomisedEpithetsActivated(getValue(sectionMap, "atomisedEpithets"));
+
+        config.setAuthorshipSectionActivated(getValue(sectionMap,"author"));
+
+        config.setNomenclaturalReferenceSectionActivated(sectionMap.get("nomRef"));
+
+        config.setNomenclaturalStatusSectionActivated(getValue(sectionMap, "nomStat"));
+
+        config.setProtologueActivated(getValue(sectionMap,"protologue"));
+
+        config.setTypeDesignationSectionActivated(getValue(sectionMap,"typeDes"));
+
+        config.setNameRelationsSectionActivated(getValue(sectionMap,"nameRelation"));
+
+            config.setHybridActivated(getValue(sectionMap,"hybrid"));
+
+        return config;
+    }
+
+
     /**
      * @param object
      * @param b
@@ -1458,12 +1597,12 @@ public class PreferencesUtil implements IPreferenceKeys {
         CdmPreference preference = null;
 
         if (!local) {
-            preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.NameDetailsView, config.toString());
+            preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.NameDetailsView, config.toString());
 
             setPreferenceToDB(preference);
         }
         else{
-            setStringValue(EditorPreferencePredicate.NameDetailsView.getKey(), config.toString());
+            setStringValue(PreferencePredicate.NameDetailsView.getKey(), config.toString());
         }
 
 
@@ -1494,7 +1633,7 @@ public class PreferencesUtil implements IPreferenceKeys {
         Abcd206ImportConfigurator config = Abcd206ImportConfigurator.NewInstance(null,null);
         ICdmRepository controller;
         controller = CdmStore.getCurrentApplicationConfiguration();
-        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AbcdImportConfig);
+        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig);
         CdmPreference preference = null;
         if (controller == null){
             return null;
@@ -1585,9 +1724,10 @@ public class PreferencesUtil implements IPreferenceKeys {
 
     public static void updateAbcdImportConfigurationPreference() {
         CdmPreferenceCache cache = CdmPreferenceCache.instance();
-        CdmPreference pref = cache.get(EditorPreferencePredicate.AbcdImportConfig.getKey());
 
-        if (!getBooleanValue(prefOverrideKey(EditorPreferencePredicate.AbcdImportConfig.getKey())) || !pref.isAllowOverride()){
+        CdmPreference pref = cache.findBestMatching(CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig));
+
+        if (!getBooleanValue(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())) || !pref.isAllowOverride()){
             resetToDBPreferenceAbcdCOnfigurator();
 
         }
@@ -1637,11 +1777,11 @@ public static boolean isSortTaxaByRankAndName() {
  */
 public static String getSortNamedAreasInDistributionEditor() {
 
-    return getStringValue(EditorPreferencePredicate.AreasSortedInDistributionEditor.getKey());
+    return getStringValue(PreferencePredicate.AreasSortedInDistributionEditor.getKey());
 }
 
 public static void setSortNamedAreasInDistributionEditor(String isSortByVocabularyOrder) {
-    setStringValue(EditorPreferencePredicate.AreasSortedInDistributionEditor.getKey(), isSortByVocabularyOrder);
+    setStringValue(PreferencePredicate.AreasSortedInDistributionEditor.getKey(), isSortByVocabularyOrder);
 
 }
 
@@ -1690,28 +1830,28 @@ public static List<String> getLastSelectedReferences() {
 public static void setPreferredNamedAreasForDistributionEditor(
         String saveCheckedElements, String saveGrayedElements, boolean local) {
     if (local){
-        setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(), saveCheckedElements);
+        setStringValue(PreferencePredicate.AvailableDistributionAreaTerms.getKey(), saveCheckedElements);
 
     }
     else{
         CdmPreference preference = null;
 
         if (saveCheckedElements == null){
-            preference = getPreferenceFromDB(EditorPreferencePredicate.AvailableDistributionAreaTerms);
+            preference = getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaTerms);
 
             if (preference == null){
                 return ;
             } else{
-                setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(),
+                setStringValue(PreferencePredicate.AvailableDistributionAreaTerms.getKey(),
                         saveCheckedElements);
-                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+                preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
                 setPreferenceToDB(preference);
 
             }
         } else{
-           preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), EditorPreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
+           preference = CdmPreference.NewInstance(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionAreaTerms, saveCheckedElements);
            setPreferenceToDB(preference);
-           setStringValue(EditorPreferencePredicate.AvailableDistributionAreaTerms.getKey(),
+           setStringValue(PreferencePredicate.AvailableDistributionAreaTerms.getKey(),
                     saveCheckedElements);
 
         }
@@ -1758,8 +1898,6 @@ public static void setPreferredVocabulariesForDistributionEditor(String saveChec
 }
 
 
-
-
 /**
  * @param saveCheckedElements
  * @param saveCheckedElements2
@@ -1781,9 +1919,18 @@ public static String getPreferredVocabulariesForDistributionEditor(boolean local
         }
 
     }
+}
 
-
-
+public static List<UUID> createUUIDListFromStringPref(String prefKey) {
+    String prefValue = PreferencesUtil.getStringValue(prefKey);
+    String[] stringArray = prefValue.split(";");
+    List<UUID> uuidList = new ArrayList();
+    for (String uuid: stringArray){
+        if (!StringUtils.isBlank(uuid)){
+            uuidList.add(UUID.fromString(uuid));
+        }
+    }
+    return uuidList;
 }
 
 public static boolean getFilterCommonNameReferences(){
@@ -1804,19 +1951,41 @@ public static void updateDBPreferences() {
 
     //Name Details
     NameDetailsConfigurator config = getPreferredNameDetailsConfiguration(false);
-    if (config != null ){
-        if (!getBooleanValue(OVERRIDE_NAME_DETAILS) ||  !getBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS)){
-            setPreferredNameDetailsConfiguration(config, false);
-        }
-    }
+//    if (config != null ){
+//        if (!getBooleanValue(OVERRIDE_NAME_DETAILS) ||  !getBooleanValue(ALLOW_OVERRIDE_NAME_DETAILS)){
+//            setPreferredNameDetailsConfiguration(config, false);
+//        }
+//    }
+
+
+
+
 
 
 
 
+}
 
+/**
+ * @param string
+ * @param saveCheckedElements
+ */
+public static void setPreferencesToDB(List<CdmPreference> preferences) {
 
+    ICdmRepository controller;
+    try{
+        if(CdmStore.isActive()){
+            controller = CdmStore.getCurrentApplicationConfiguration();
+            for (CdmPreference preference: preferences){
 
+                controller.getPreferenceService().set(preference);
 
+                CdmPreferenceCache.instance().put(preference);
+            }
+        }
+    }catch(Exception e){
+        e.printStackTrace();
+    }
 }