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
, 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 key
){
53 return preferenceCache
.get(key
);
56 public void put(CdmPreference pref
){
57 preferenceCache
.put(pref
.getPredicate(), pref
);
60 public void getAllTaxEditorDBPreferences(){
61 ICdmRepository controller
;
62 controller
= CdmStore
.getCurrentApplicationConfiguration();
63 List
<CdmPreference
> allPreferences
= controller
.getPreferenceService().list();
65 for (CdmPreference pref
: allPreferences
){
69 PrefKey key
= CdmPreference
.NewKey(PreferenceSubject
.NewTaxEditorInstance(), PreferencePredicate
.AvailableDistributionStatus
);
71 if (preferenceCache
.get(key
) != null){
72 if (!PreferencesUtil
.getBooleanValue(PreferencesUtil
.prefOverrideKey(PreferencePredicate
.AvailableDistributionStatus
.getKey())) || !preferenceCache
.get(key
).isAllowOverride()){
73 //get terms for the uuids... and add them to the termManager as preferred terms
74 ITermService termService
= CdmStore
.getService(ITermService
.class);
75 String
[] uuidArray
= preferenceCache
.get(key
).getValue().split(";");
76 List
<UUID
> uuidList
= new ArrayList();
77 for (String uuidString
:uuidArray
){
79 uuidList
.add(UUID
.fromString(uuidString
));
80 } catch (Exception e
) {
81 logger
.warn("Preference loading failed", e
);
85 List
<DefinedTermBase
> definedTermBases
= termService
.load(uuidList
, null);
86 CdmStore
.getTermManager().setPreferredTerms(definedTermBases
, TermStore
.getTerms(TermType
.PresenceAbsenceTerm
, null));
93 public CdmPreference
findBestMatching(PrefKey key
) {
95 return PreferenceResolver
.resolve(new ArrayList(this.preferenceCache
.values()), key
);