Project

General

Profile

Download (2.12 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.persistence.dao.hibernate.common;
10

    
11
import java.util.HashMap;
12
import java.util.Map;
13

    
14
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
15
import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
16
import eu.etaxonomy.cdm.persistence.dao.common.IPreferenceDao;
17

    
18
/**
19
 * Caching CdmPreference access class which updates the cached values after
20
 * the milliseconds as defined in <code>updateInterval</code> (currently 10 minutes).
21
 *
22
 * @author a.kohlbecker
23
 * @since Oct 2, 2018
24
 *
25
 */
26

    
27
public class CdmPreferenceLookup {
28

    
29
    private static CdmPreferenceLookup instance;
30

    
31
    public static CdmPreferenceLookup instance(){
32
        if(instance == null){
33
            instance = new CdmPreferenceLookup();
34
        }
35
        return instance;
36
    }
37

    
38
    long updateInterval = 10 * 60 * 1000l;
39

    
40
    private IPreferenceDao preferenceDao;
41

    
42
    private Map<PrefKey, CachedCdmPreference> map = new HashMap<>();
43

    
44
    public CdmPreference get(PrefKey key){
45
        CdmPreference cdmPref = null;
46
        CachedCdmPreference  cached = map.get(key);
47
        if(cached == null || cached.isOutDated()){
48
            cdmPref = preferenceDao.get(key);
49
            if(cdmPref != null){
50
                map.put(key, new CachedCdmPreference(cdmPref));
51
            } else {
52
                map.remove(key);
53
            }
54
        } else {
55
            cdmPref = cached.cdmPreference;
56
        }
57
        return cdmPref;
58
    }
59

    
60
    public void setIPreferenceDao(IPreferenceDao preferenceDao){
61
        this.preferenceDao = preferenceDao;
62
    }
63

    
64
    class CachedCdmPreference {
65
        long time;
66
        CdmPreference cdmPreference;
67

    
68
        CachedCdmPreference(CdmPreference cdmPreference){
69
            this.cdmPreference = cdmPreference;
70
            time = System.currentTimeMillis();
71
        }
72

    
73
        boolean isOutDated(){
74
            return System.currentTimeMillis() - updateInterval > time;
75
        }
76

    
77
    }
78
}
(5-5/18)