2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.preference
;
11 import java
.util
.ArrayList
;
12 import java
.util
.HashMap
;
13 import java
.util
.List
;
15 import java
.util
.UUID
;
17 import org
.apache
.log4j
.Logger
;
19 import eu
.etaxonomy
.cdm
.api
.application
.ICdmRepository
;
20 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
21 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
;
22 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
.PrefKey
;
23 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferencePredicate
;
24 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferenceResolver
;
25 import eu
.etaxonomy
.cdm
.model
.metadata
.PreferenceSubject
;
26 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTermBase
;
27 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
28 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
29 import eu
.etaxonomy
.taxeditor
.store
.TermStore
;
36 public class CdmPreferenceCache
{
37 Map
<String
,List
<CdmPreference
>> preferenceCache
= new HashMap();
39 private static CdmPreferenceCache instance
;
41 private final static Logger logger
= Logger
.getLogger(CdmPreferenceCache
.class);
45 public static CdmPreferenceCache
instance(){
47 instance
= new CdmPreferenceCache();
52 public CdmPreference
get(String predicate
){
53 if (preferenceCache
.get(predicate
) != null){
54 List
<CdmPreference
> preferences
= preferenceCache
.get(predicate
);
55 if (preferenceCache
.get(predicate
).size() > 1){
56 CdmPreference pref
= PreferenceResolver
.resolve(preferenceCache
.get(predicate
), CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.getByKey(predicate
)));
59 return preferenceCache
.get(predicate
).get(0);
64 public List
<CdmPreference
> getAllForPredicate(String predicate
){
65 if (preferenceCache
.get(predicate
) != null){
66 return preferenceCache
.get(predicate
);
72 //looking for the equal prefkey
73 public CdmPreference
get(PrefKey key
){
74 if (preferenceCache
.containsKey(key
.getPredicate())){
75 for (CdmPreference pref
: preferenceCache
.get(key
.getPredicate())){
76 System
.err
.println("pref subject: " + pref
.getSubjectString() + "key subject: " +key
.getSubject());
77 if (pref
.getSubjectString().equals(key
.getSubject())){
86 public void put(CdmPreference pref
){
87 if (preferenceCache
.containsKey(pref
.getPredicate())){
88 List
<CdmPreference
> cachedPreferences
= preferenceCache
.get(pref
.getPredicate());
89 CdmPreference prefToRemove
= null;
90 for (CdmPreference cachedPref
:cachedPreferences
){
91 if (pref
.getKey().equals(cachedPref
.getKey())){
92 prefToRemove
= cachedPref
;
95 cachedPreferences
.remove(prefToRemove
);
96 cachedPreferences
.add(pref
);
98 List
<CdmPreference
> prefs
= new ArrayList();
100 preferenceCache
.put(pref
.getPredicate(), prefs
);
106 public void getAllTaxEditorDBPreferences(){
107 ICdmRepository controller
;
108 controller
= CdmStore
.getCurrentApplicationConfiguration();
109 List
<CdmPreference
> allPreferences
= controller
.getPreferenceService().list();
110 preferenceCache
.clear();
112 for (CdmPreference pref
: allPreferences
){
116 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionStatus
);
118 if (get(key
) != null){
119 if (!PreferencesUtil
.getBooleanValue(PreferencesUtil
.prefOverrideKey(PreferencePredicate
.AvailableDistributionStatus
.getKey())) || !get(key
).isAllowOverride()){
120 //get terms for the uuids... and add them to the termManager as preferred terms
121 ITermService termService
= CdmStore
.getService(ITermService
.class);
122 String
[] uuidArray
=findBestMatching(key
).getValue().split(";");
123 List
<UUID
> uuidList
= new ArrayList();
124 for (String uuidString
:uuidArray
){
126 uuidList
.add(UUID
.fromString(uuidString
));
127 } catch (Exception e
) {
128 logger
.warn("Preference loading failed", e
);
132 List
<DefinedTermBase
> definedTermBases
= termService
.load(uuidList
, null);
133 CdmStore
.getTermManager().setPreferredTerms(definedTermBases
, TermStore
.getTerms(TermType
.PresenceAbsenceTerm
, null));
140 public CdmPreference
findBestMatching(PrefKey key
) {
141 List
<CdmPreference
> allPrefs
= new ArrayList();
142 for (String predicate
: preferenceCache
.keySet()){
143 allPrefs
.addAll(preferenceCache
.get(predicate
));
145 return PreferenceResolver
.resolve(allPrefs
, key
);