adapt preferenceCache for same predicate but different subject
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / PreferencesUtil.java
index ed46656f6d9c4665b0627fbc15d1a58b759e86e1..6e0e5f644bb28f4d3734b41f655de3e77cfce9a0 100644 (file)
@@ -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,16 +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);
-            boolean test = getBooleanValue(prefOverrideKey(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;
     }
 
     /**
@@ -232,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);
@@ -253,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);
@@ -272,7 +306,7 @@ public class PreferencesUtil implements IPreferenceKeys {
                             getBoolean(name);
                 }
             }else{
-                return Boolean.valueOf(prefValue);
+                return Boolean.valueOf(pref.getValue());
             }
 
         }else{
@@ -289,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);
@@ -317,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);
@@ -345,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);
@@ -573,6 +619,7 @@ public class PreferencesUtil implements IPreferenceKeys {
             if(CdmStore.isActive()){
                 controller = CdmStore.getCurrentApplicationConfiguration();
                 controller.getPreferenceService().set(preference);
+                CdmPreferenceCache.instance().put(preference);
             }
         }catch(Exception e){
             e.printStackTrace();
@@ -880,7 +927,7 @@ public class PreferencesUtil implements IPreferenceKeys {
                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);
 
@@ -891,8 +938,11 @@ public class PreferencesUtil implements IPreferenceKeys {
                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())), false);
-               getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), "");
+               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(PreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(PreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
                getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
@@ -1272,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);
 
     }
 
@@ -1280,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()));
 
     }
 
@@ -1288,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);
 
     }
@@ -1297,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);
 
     }
@@ -1306,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);
 
     }
@@ -1432,7 +1482,8 @@ public class PreferencesUtil implements IPreferenceKeys {
         CdmPreference preference = null;
         String value;
         if (!local) {
-            preference = cache.get(PreferencePredicate.NameDetailsView.getKey());
+            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.NameDetailsView);
+            preference = cache.findBestMatching(key);
             if (preference == null){
                 return null;
             }
@@ -1673,7 +1724,8 @@ public class PreferencesUtil implements IPreferenceKeys {
 
     public static void updateAbcdImportConfigurationPreference() {
         CdmPreferenceCache cache = CdmPreferenceCache.instance();
-        CdmPreference pref = cache.get(PreferencePredicate.AbcdImportConfig.getKey());
+
+        CdmPreference pref = cache.findBestMatching(CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig));
 
         if (!getBooleanValue(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())) || !pref.isAllowOverride()){
             resetToDBPreferenceAbcdCOnfigurator();
@@ -1925,7 +1977,10 @@ public static void setPreferencesToDB(List<CdmPreference> preferences) {
         if(CdmStore.isActive()){
             controller = CdmStore.getCurrentApplicationConfiguration();
             for (CdmPreference preference: preferences){
+
                 controller.getPreferenceService().set(preference);
+
+                CdmPreferenceCache.instance().put(preference);
             }
         }
     }catch(Exception e){