Project

General

Profile

« Previous | Next » 

Revision f42afea1

Added by Katja Luther almost 5 years ago

adapt preferenceCache for same predicate but different subject

View differences:

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferenceCache.java
34 34
 *
35 35
 */
36 36
public class CdmPreferenceCache {
37
    Map<String, CdmPreference> preferenceCache = new HashMap();
37
    Map<String,List<CdmPreference>> preferenceCache = new HashMap();
38 38

  
39 39
    private static CdmPreferenceCache instance;
40 40

  
......
49 49
        return instance;
50 50
    }
51 51

  
52
    public CdmPreference get(String key){
53
        return preferenceCache.get(key);
52
    public List<CdmPreference> get(String predicate){
53
        return preferenceCache.get(predicate);
54 54
    }
55
//    public Collection<CdmPreference> get(PrefKey key){
56
//        if (preferenceCache.containsKey(key.getPredicate())){
57
//            if (key.getSubject() != null){
58
//                Set<CdmPreference> result = new HashSet();
59
//                result.add(preferenceCache.get(key.getPredicate()).get(key.getSubject()));
60
//                return result;
61
//            }else{
62
//                if (!preferenceCache.get(key.getPredicate()).values().isEmpty()){
63
//                    return preferenceCache.get(key.getPredicate()).values();
64
//                }
65
//            }
66
//        }
67
//        return null;
68
//    }
55 69

  
56 70
    public void put(CdmPreference pref){
57
        preferenceCache.put(pref.getPredicate(), pref);
71
        if (preferenceCache.containsKey(pref.getPredicate())){
72
            preferenceCache.get(pref.getPredicate()).add(pref);
73
        }else{
74
            List<CdmPreference> prefs = new ArrayList();
75
            prefs.add(pref);
76
            preferenceCache.put(pref.getPredicate(), prefs);
77
        }
78

  
79

  
58 80
    }
59 81

  
60 82
    public void getAllTaxEditorDBPreferences(){
61 83
        ICdmRepository controller;
62 84
        controller = CdmStore.getCurrentApplicationConfiguration();
63 85
        List<CdmPreference> allPreferences = controller.getPreferenceService().list();
86
        preferenceCache.clear();
64 87

  
65 88
        for (CdmPreference pref: allPreferences){
66 89
            put(pref);
......
68 91

  
69 92
        PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
70 93

  
71
        if (preferenceCache.get(key) != null){
72
            if (!PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())) || !preferenceCache.get(key).isAllowOverride()){
94
        if (findBestMatching(key) != null){
95
            if (!PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())) || !findBestMatching(key).isAllowOverride()){
73 96
                //get terms for the uuids... and add them to the termManager as preferred terms
74 97
                ITermService termService = CdmStore.getService(ITermService.class);
75
                String[] uuidArray = preferenceCache.get(key).getValue().split(";");
98
                String[] uuidArray =findBestMatching(key).getValue().split(";");
76 99
                List<UUID> uuidList = new ArrayList();
77 100
                for (String uuidString:uuidArray){
78 101
                    try {
......
91 114

  
92 115

  
93 116
    public CdmPreference findBestMatching(PrefKey key) {
94

  
95
        return PreferenceResolver.resolve(new ArrayList(this.preferenceCache.values()), key);
117
        List<CdmPreference> allPrefs = new ArrayList();
118
        for (String predicate: preferenceCache.keySet()){
119
            allPrefs.addAll(preferenceCache.get(predicate));
120
        }
121
       return PreferenceResolver.resolve(allPrefs, key);
96 122

  
97 123
    }
98 124

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java
171 171
     *
172 172
     **/
173 173
    public static void setFloatValue(String name, float value) {
174
        getPreferenceStore().setValue(name + ((CdmRemoteSource)CdmStore.getActiveCdmSource()).toString(), value);
174
        getPreferenceStore().setValue(prefKey(name), value);
175 175
    }
176 176

  
177 177
    /**
......
194 194
     **/
195 195
    public static String getStringValue(String name, boolean local) {
196 196

  
197
        String prefValue = getDBPreferenceValue(name);
198
        if (prefValue == null || local){
197
        CdmPreference pref = getDBPreferenceValue(name);
198
        String prefValue = null;
199
        String overrideKey =  createPreferenceString(createOverridePreferenceString(name));
200
        boolean override = true;
201
        if (getPreferenceStore().contains(overrideKey)){
202
            override = getPreferenceStore().getBoolean(overrideKey);
203
        }
204
        if (local || pref == null || (pref != null && pref.isAllowOverride() && override)){
199 205
            String dbSpecific = prefKey(name);
200 206
            if (getPreferenceStore().contains(dbSpecific)){
201 207
                prefValue = getPreferenceStore().getString(dbSpecific);
......
203 209
                prefValue = getPreferenceStore().
204 210
                        getString(name);
205 211
            }
206
        }
212
       }else if (pref != null){
213
           prefValue = pref.getValue();
214
       }
207 215
        return prefValue;
208 216

  
209 217
    }
......
212 220
        return getStringValue(name, false);
213 221
    }
214 222

  
215
    private static String getDBPreferenceValue(String name) {
223
    private static CdmPreference getDBPreferenceValue(String name) {
216 224
        CdmPreferenceCache cache = CdmPreferenceCache.instance();
217
        if (cache.get(name) != null){
218
            CdmPreference pref = cache.get(name);
219
            boolean test = getBooleanValue(prefOverrideKey(name));
220
            if (!pref.isAllowOverride() || !getBooleanValue(prefOverrideKey(name))){
221
                return pref.getValue();
225
        CdmPreference result = null;
226
        List<CdmPreference> prefs = null;
227
//
228
        prefs = cache.get(name);
229
        if (prefs == null ){
230
            //get default value for Predicate
231
            IPreferencePredicate pred = PreferencePredicate.getByKey(name);
232
            if (pred != null){
233
                if (pred.getDefaultValue() != null){
234
                    result = CdmPreference.NewTaxEditorInstance(pred, pred.getDefaultValue().toString());
235
                }else{
236
                    result = CdmPreference.NewTaxEditorInstance(pred, null);
237
                }
238
                result.setAllowOverride(true);
239
            }
240
        }else{
241
            if (prefs.size() == 1){
242
                result = prefs.get(0);
243
            }else{
244
                PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.getByKey(name));
245
                result = cache.findBestMatching(key);
246

  
222 247
            }
223 248
        }
224
        return null;
249
        return result;
225 250
    }
226 251

  
227 252
    /**
......
232 257
     *
233 258
     **/
234 259
    public static int getIntValue(String name) {
235
        String prefValue = getDBPreferenceValue(name);
260
        CdmPreference pref= getDBPreferenceValue(name);
261
        String prefValue = null;
262
        if (pref != null){
263
            prefValue = pref.getValue();
264
        }
236 265
        Integer result = null;
237 266
        try{
238 267
            result = Integer.parseInt(prefValue);
......
253 282

  
254 283
    }
255 284

  
285
    public static boolean getBooleanValue(String name) {
286
        return getBooleanValue(name, false);
287
    }
288

  
256 289
    /**
257 290
     * <p>
258
     * setBooleanValue
291
     * getBooleanValue
259 292
     * </p>
260 293
     *
261 294
     *
262 295
     **/
263
    public static boolean getBooleanValue(String name) {
296
    public static boolean getBooleanValue(String name, boolean local) {
264 297
        if (CdmStore.isActive()){
265
            String prefValue = getDBPreferenceValue(name);
266
            if (prefValue == null){
298
            CdmPreference pref = getDBPreferenceValue(name);
299
            String prefValue = null;
300
            if (pref == null || local){
267 301
                String dbSpecific = prefKey(name);
268 302
                if (getPreferenceStore().contains(dbSpecific)){
269 303
                    return getPreferenceStore().getBoolean(dbSpecific);
......
272 306
                            getBoolean(name);
273 307
                }
274 308
            }else{
275
                return Boolean.valueOf(prefValue);
309
                return Boolean.valueOf(pref.getValue());
276 310
            }
277 311

  
278 312
        }else{
......
289 323
     *
290 324
     **/
291 325
    public static double getDoubleValue(String name) {
292
        String prefValue = getDBPreferenceValue(name);
326
        CdmPreference pref = getDBPreferenceValue(name);
327
        String prefValue = null;
328
        if (pref != null){
329
            prefValue = pref.getValue();
330
        }
293 331
        Double result = null;
294 332
        try{
295 333
            result = Double.parseDouble(prefValue);
......
317 355
     *
318 356
     **/
319 357
    public static float getFloatValue(String name) {
320
        String prefValue = getDBPreferenceValue(name);
358
        CdmPreference pref = getDBPreferenceValue(name);
359
        String prefValue = null;
360
        if (pref != null){
361
            prefValue = pref.getValue();
362
        }
321 363
        Float result = null;
322 364
        try{
323 365
            result = Float.parseFloat(prefValue);
......
345 387
     *
346 388
     **/
347 389
    public static long getLongValue(String name) {
348
        String prefValue = getDBPreferenceValue(name);
390
        CdmPreference pref = getDBPreferenceValue(name);
391
        String prefValue = null;
392
        if (pref != null){
393
            prefValue = pref.getValue();
394
        }
349 395
        Long result = null;
350 396
        try{
351 397
            result = Long.parseLong(prefValue);
......
573 619
            if(CdmStore.isActive()){
574 620
                controller = CdmStore.getCurrentApplicationConfiguration();
575 621
                controller.getPreferenceService().set(preference);
622
                CdmPreferenceCache.instance().put(preference);
576 623
            }
577 624
        }catch(Exception e){
578 625
            e.printStackTrace();
......
880 927
		getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.NameDetailsView.getKey()), new NameDetailsConfigurator(false).toString());
881 928

  
882 929
		//Navigator preferences
883
		getPreferenceStore().setDefault(createPreferenceString(SORT_NODES), NavigatorOrderEnum.RankAndNameOrder.getKey());
930
		getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.TaxonNodeOrder.getKey()), NavigatorOrderEnum.RankAndNameOrder.getKey());
884 931

  
885 932
		getPreferenceStore().setDefault(createPreferenceString(SORT_TAXA_BY_RANK_AND_NAME), true);
886 933

  
......
891 938
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())), false);
892 939
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.ShowSpecimen.getKey())), true);
893 940
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.NameDetailsView.getKey())), false);
894
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.DistributionEditorActivated.getKey())), false);
895
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), "");
941
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.DistributionEditorActivated.getKey())), true);
942
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionStatus.getKey())), true);
943
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaTerms.getKey())), true);
944
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey())), true);
945
		getPreferenceStore().setDefault(createPreferenceString(prefOverrideKey(PreferencePredicate.CommonNameAreaVocabularies.getKey())), false);
896 946
		getPreferenceStore().setDefault(createPreferenceString(FILTER_COMMON_NAME_REFERENCES), false);
897 947
		getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowTaxonNodeWizard.getKey()), Boolean.valueOf(PreferencePredicate.ShowTaxonNodeWizard.getDefaultValue().toString()));
898 948
		getPreferenceStore().setDefault(createPreferenceString(PreferencePredicate.ShowNamespaceInSource.getKey()), Boolean.valueOf(PreferencePredicate.ShowNamespaceInSource.getDefaultValue().toString()));
......
1272 1322
     * @param orderActivated
1273 1323
     */
1274 1324
    public static void setSortNodes(NavigatorOrderEnum nodesOrder) {
1275
        setStringValue(SORT_NODES, nodesOrder.key);
1325
        setStringValue(PreferencePredicate.TaxonNodeOrder.getKey(), nodesOrder.key);
1276 1326

  
1277 1327
    }
1278 1328

  
......
1280 1330
     * @param orderActivated
1281 1331
     */
1282 1332
    public static NavigatorOrderEnum getSortNodes() {
1283
        return NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
1333
        return NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
1284 1334

  
1285 1335
    }
1286 1336

  
......
1288 1338
     * @param orderActivated
1289 1339
     */
1290 1340
    public static boolean isNodesSortedNaturally() {
1291
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
1341
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
1292 1342
        return value.equals(NavigatorOrderEnum.NaturalOrder);
1293 1343

  
1294 1344
    }
......
1297 1347
     * @param orderActivated
1298 1348
     */
1299 1349
    public static boolean isNodesSortedByName() {
1300
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
1350
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
1301 1351
        return value.equals(NavigatorOrderEnum.AlphabeticalOrder);
1302 1352

  
1303 1353
    }
......
1306 1356
     * @param orderActivated
1307 1357
     */
1308 1358
    public static boolean isNodesSortedByNameAndRank() {
1309
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(SORT_NODES));
1359
        NavigatorOrderEnum value = NavigatorOrderEnum.valueOf(getStringValue(PreferencePredicate.TaxonNodeOrder.getKey()));
1310 1360
        return value.equals(NavigatorOrderEnum.RankAndNameOrder);
1311 1361

  
1312 1362
    }
......
1432 1482
        CdmPreference preference = null;
1433 1483
        String value;
1434 1484
        if (!local) {
1435
            preference = cache.get(PreferencePredicate.NameDetailsView.getKey());
1485
            PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.NameDetailsView);
1486
            preference = cache.findBestMatching(key);
1436 1487
            if (preference == null){
1437 1488
                return null;
1438 1489
            }
......
1673 1724

  
1674 1725
    public static void updateAbcdImportConfigurationPreference() {
1675 1726
        CdmPreferenceCache cache = CdmPreferenceCache.instance();
1676
        CdmPreference pref = cache.get(PreferencePredicate.AbcdImportConfig.getKey());
1727

  
1728
        CdmPreference pref = cache.findBestMatching(CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AbcdImportConfig));
1677 1729

  
1678 1730
        if (!getBooleanValue(prefOverrideKey(PreferencePredicate.AbcdImportConfig.getKey())) || !pref.isAllowOverride()){
1679 1731
            resetToDBPreferenceAbcdCOnfigurator();
......
1925 1977
        if(CdmStore.isActive()){
1926 1978
            controller = CdmStore.getCurrentApplicationConfiguration();
1927 1979
            for (CdmPreference preference: preferences){
1980

  
1928 1981
                controller.getPreferenceService().set(preference);
1982

  
1983
                CdmPreferenceCache.instance().put(preference);
1929 1984
            }
1930 1985
        }
1931 1986
    }catch(Exception e){

Also available in: Unified diff