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 List
<CdmPreference
> get(String predicate
){
53 return preferenceCache
.get(predicate
);
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()));
62 // if (!preferenceCache.get(key.getPredicate()).values().isEmpty()){
63 // return preferenceCache.get(key.getPredicate()).values();
70 public void put(CdmPreference pref
){
71 if (preferenceCache
.containsKey(pref
.getPredicate())){
72 preferenceCache
.get(pref
.getPredicate()).add(pref
);
74 List
<CdmPreference
> prefs
= new ArrayList();
76 preferenceCache
.put(pref
.getPredicate(), prefs
);
82 public void getAllTaxEditorDBPreferences(){
83 ICdmRepository controller
;
84 controller
= CdmStore
.getCurrentApplicationConfiguration();
85 List
<CdmPreference
> allPreferences
= controller
.getPreferenceService().list();
86 preferenceCache
.clear();
88 for (CdmPreference pref
: allPreferences
){
92 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionStatus
);
94 if (findBestMatching(key
) != null){
95 if (!PreferencesUtil
.getBooleanValue(PreferencesUtil
.prefOverrideKey(PreferencePredicate
.AvailableDistributionStatus
.getKey())) || !findBestMatching(key
).isAllowOverride()){
96 //get terms for the uuids... and add them to the termManager as preferred terms
97 ITermService termService
= CdmStore
.getService(ITermService
.class);
98 String
[] uuidArray
=findBestMatching(key
).getValue().split(";");
99 List
<UUID
> uuidList
= new ArrayList();
100 for (String uuidString
:uuidArray
){
102 uuidList
.add(UUID
.fromString(uuidString
));
103 } catch (Exception e
) {
104 logger
.warn("Preference loading failed", e
);
108 List
<DefinedTermBase
> definedTermBases
= termService
.load(uuidList
, null);
109 CdmStore
.getTermManager().setPreferredTerms(definedTermBases
, TermStore
.getTerms(TermType
.PresenceAbsenceTerm
, null));
116 public CdmPreference
findBestMatching(PrefKey key
) {
117 List
<CdmPreference
> allPrefs
= new ArrayList();
118 for (String predicate
: preferenceCache
.keySet()){
119 allPrefs
.addAll(preferenceCache
.get(predicate
));
121 return PreferenceResolver
.resolve(allPrefs
, key
);