adapt preferenceCache for same predicate but different subject
authorKatja Luther <k.luther@bgbm.org>
Fri, 3 May 2019 09:05:55 +0000 (11:05 +0200)
committerKatja Luther <k.luther@bgbm.org>
Fri, 3 May 2019 09:23:48 +0000 (11:23 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java

index 25da114d7415cd1fcfc313416bd7916bfa856a18..d6c309d1b2b781932a3f855b0f1d0c5911e29808 100755 (executable)
@@ -34,7 +34,7 @@ import eu.etaxonomy.taxeditor.store.TermStore;
  *
  */
 public class CdmPreferenceCache {
-    Map<String, CdmPreference> preferenceCache = new HashMap();
+    Map<String,List<CdmPreference>> preferenceCache = new HashMap();
 
     private static CdmPreferenceCache instance;
 
@@ -49,18 +49,41 @@ public class CdmPreferenceCache {
         return instance;
     }
 
-    public CdmPreference get(String key){
-        return preferenceCache.get(key);
+    public List<CdmPreference> get(String predicate){
+        return preferenceCache.get(predicate);
     }
+//    public Collection<CdmPreference> get(PrefKey key){
+//        if (preferenceCache.containsKey(key.getPredicate())){
+//            if (key.getSubject() != null){
+//                Set<CdmPreference> result = new HashSet();
+//                result.add(preferenceCache.get(key.getPredicate()).get(key.getSubject()));
+//                return result;
+//            }else{
+//                if (!preferenceCache.get(key.getPredicate()).values().isEmpty()){
+//                    return preferenceCache.get(key.getPredicate()).values();
+//                }
+//            }
+//        }
+//        return null;
+//    }
 
     public void put(CdmPreference pref){
-        preferenceCache.put(pref.getPredicate(), pref);
+        if (preferenceCache.containsKey(pref.getPredicate())){
+            preferenceCache.get(pref.getPredicate()).add(pref);
+        }else{
+            List<CdmPreference> prefs = new ArrayList();
+            prefs.add(pref);
+            preferenceCache.put(pref.getPredicate(), prefs);
+        }
+
+
     }
 
     public void getAllTaxEditorDBPreferences(){
         ICdmRepository controller;
         controller = CdmStore.getCurrentApplicationConfiguration();
         List<CdmPreference> allPreferences = controller.getPreferenceService().list();
+        preferenceCache.clear();
 
         for (CdmPreference pref: allPreferences){
             put(pref);
@@ -68,11 +91,11 @@ public class CdmPreferenceCache {
 
         PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
 
-        if (preferenceCache.get(key) != null){
-            if (!PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())) || !preferenceCache.get(key).isAllowOverride()){
+        if (findBestMatching(key) != null){
+            if (!PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())) || !findBestMatching(key).isAllowOverride()){
                 //get terms for the uuids... and add them to the termManager as preferred terms
                 ITermService termService = CdmStore.getService(ITermService.class);
-                String[] uuidArray = preferenceCache.get(key).getValue().split(";");
+                String[] uuidArray =findBestMatching(key).getValue().split(";");
                 List<UUID> uuidList = new ArrayList();
                 for (String uuidString:uuidArray){
                     try {
@@ -91,8 +114,11 @@ public class CdmPreferenceCache {
 
 
     public CdmPreference findBestMatching(PrefKey key) {
-
-        return PreferenceResolver.resolve(new ArrayList(this.preferenceCache.values()), key);
+        List<CdmPreference> allPrefs = new ArrayList();
+        for (String predicate: preferenceCache.keySet()){
+            allPrefs.addAll(preferenceCache.get(predicate));
+        }
+       return PreferenceResolver.resolve(allPrefs, key);
 
     }
 
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){