3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.store
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Collection
;
15 import java
.util
.HashMap
;
16 import java
.util
.List
;
18 import java
.util
.UUID
;
20 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
21 import org
.eclipse
.ui
.IMemento
;
23 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
24 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
25 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
26 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
27 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
28 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
29 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
30 import eu
.etaxonomy
.cdm
.model
.description
.MeasurementUnit
;
31 import eu
.etaxonomy
.cdm
.model
.description
.Modifier
;
32 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
33 import eu
.etaxonomy
.cdm
.model
.description
.Scope
;
34 import eu
.etaxonomy
.cdm
.model
.description
.Stage
;
35 import eu
.etaxonomy
.cdm
.model
.description
.State
;
36 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasure
;
37 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
38 import eu
.etaxonomy
.cdm
.model
.media
.RightsTerm
;
39 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
40 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignationStatus
;
41 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
42 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
43 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
44 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationModifier
;
45 import eu
.etaxonomy
.cdm
.model
.occurrence
.PreservationMethod
;
46 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
47 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
51 * @created Dec 7, 2010
54 public class TermManager
extends ContextListenerAdapter
{
56 private static final String TERMS
= "terms";
57 private static final String TERM
= "term";
58 private static final String HIDE
= "hide";
60 private static final String CLASS
= "class";
61 private static final String UUID_STRING
= "uuid";
63 private Map
<String
, Collection
<UUID
>> hiddenTermsMap
= new HashMap
<String
, Collection
<UUID
>>();
66 CdmStore
.getContextManager().addContextListener(this);
70 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
73 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
74 // read preferred terms from memento into an in memory representation
75 IMemento terms
= memento
.getChild(TERMS
);
81 for(IMemento term
: terms
.getChildren(TERM
)){
82 String typeName
= term
.getString(CLASS
);
83 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
84 for(IMemento hide
: term
.getChildren(HIDE
)){
85 String uuidString
= hide
.getString(UUID_STRING
);
86 UUID uuid
= UUID
.fromString(uuidString
);
87 hiddenTermUuids
.add(uuid
);
89 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
94 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
97 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
98 saveTerms(memento
, monitor
);
102 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
105 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
106 saveTerms(memento
, monitor
);
109 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
110 if(memento
== null) return;
112 IMemento terms
= memento
.createChild(TERMS
);
113 for (String preferredTerm
: hiddenTermsMap
.keySet()){
114 IMemento term
= terms
.createChild(TERM
);
115 term
.putString(CLASS
, preferredTerm
);
116 for(UUID uuid
: hiddenTermsMap
.get(preferredTerm
)){
117 IMemento hide
= term
.createChild(HIDE
);
118 hide
.putString(UUID_STRING
, uuid
.toString());
124 * Generic method to get term preferences for a term vocabulary
126 * @param initialTerms a {@link java.util.List} object.
127 * @return a {@link java.util.List} object.
129 public <T
extends DefinedTermBase
> List
<T
> getFilteredTerms(List
<T
> initialTerms
){
131 List
<T
> filteredTerms
= new ArrayList
<T
>();
133 String typeName
= getTermClass(initialTerms
);
134 Collection
<UUID
> hiddenTermUuids
= hiddenTermsMap
.get(typeName
);
136 if(hiddenTermUuids
== null){
140 for (T term
: initialTerms
){
141 if(! hiddenTermUuids
.contains(term
.getUuid())){
142 filteredTerms
.add(term
);
146 return filteredTerms
;
149 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
150 return initialTerms
.iterator().next().getClass().getName();
154 * <p>getPreferredSpecimenTypeDesignationStatus</p>
156 * @return a {@link java.util.List} object.
158 public List
<SpecimenTypeDesignationStatus
> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore
.getSpecimenTypeDesignationStatus());}
161 * <p>getPreferredNameTypeDesignationStatus</p>
163 * @return a {@link java.util.List} object.
165 public List
<NameTypeDesignationStatus
> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore
.getNameTypeDesignationStatus()); }
168 * <p>getPreferredTaxonRelationshipTypes</p>
170 * @return a {@link java.util.List} object.
172 public List
<TaxonRelationshipType
> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore
.getTaxonRelationshipTypes());}
175 * <p>getPreferredFeatures</p>
177 * @return a {@link java.util.List} object.
179 public List
<Feature
> getPreferredFeatures() { return getFilteredTerms(TermStore
.getFeatures());}
182 * <p>getPreferredRanks</p>
184 * @return a {@link java.util.List} object.
186 public List
<Rank
> getPreferredRanks() { return getFilteredTerms(TermStore
.getRanks());}
189 * <p>getPreferredPresenceAbsenceTerms</p>
191 * @return a {@link java.util.List} object.
193 public List
<PresenceAbsenceTermBase
> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore
.getPresenceAbsenceTerms());}
196 * <p>getPreferredNomenclaturalStatusTypes</p>
198 * @return a {@link java.util.List} object.
200 public List
<NomenclaturalStatusType
> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore
.getNomenclaturalStatusTypes());}
203 * <p>getPreferredNameRelationshipTypes</p>
205 * @return a {@link java.util.List} object.
207 public List
<NameRelationshipType
> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore
.getNameRelationshipTypes());}
210 * <p>getPreferredLanguages</p>
212 * @return a {@link java.util.List} object.
214 public List
<Language
> getPreferredLanguages() { return getFilteredTerms(TermStore
.getLanguages()); }
217 * <p>getPreferredMarkerTypes</p>
219 * @return a {@link java.util.List} object.
221 public List
<MarkerType
> getPreferredMarkerTypes() { return getFilteredTerms(TermStore
.getNonTechnicalMarkerTypes()); }
224 * <p>getPreferredExtensionTypes</p>
226 * @return a {@link java.util.List} object.
228 public List
<ExtensionType
> getPreferredExtensionTypes() { return getFilteredTerms(TermStore
.getExtensionTypes()); }
231 * <p>getPreferredRightsTypes</p>
233 * @return a {@link java.util.List} object.
235 public List
<RightsTerm
> getPreferredRightsTypes() { return getFilteredTerms(TermStore
.getRightsTypes());}
238 * <p>getPreferredNamedAreaTypes</p>
240 * @return a {@link java.util.List} object.
242 public List
<NamedAreaType
> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore
.getNamedAreaTypes()); }
245 * <p>getPreferredAnnotationTypes</p>
247 * @return a {@link java.util.List} object.
249 public List
<AnnotationType
> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore
.getAnnotationTypes()); }
252 * <p>getPreferredStages</p>
254 * @return a {@link java.util.List} object.
256 public List
<Stage
> getPreferredStages() { return getFilteredTerms(TermStore
.getStages()); }
259 * <p>getPreferredPreservationMethods</p>
261 * @return a {@link java.util.List} object.
263 public List
<PreservationMethod
> getPreferredPreservationMethods() { return getFilteredTerms(TermStore
.getPreservationMethods()); }
266 * <p>getPreferredMeasurementUnits</p>
268 * @return a {@link java.util.List} object.
270 public List
<MeasurementUnit
> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore
.getMeasurementUnits()); }
273 * <p>getPreferredStates</p>
275 * @return a {@link java.util.List} object.
277 public List
<State
> getPreferredStates() { return getFilteredTerms(TermStore
.getStates()); }
280 * <p>getPreferredModifiers</p>
282 * @return a {@link java.util.List} object.
284 public List
<Modifier
> getPreferredModifiers() { return getFilteredTerms(TermStore
.getModifiers()); }
287 * <p>getPreferredStatisticalMeasures</p>
289 * @return a {@link java.util.List} object.
291 public List
<StatisticalMeasure
> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore
.getStatisticalMeasures()); }
294 * <p>getPreferredScopes</p>
296 * @return a {@link java.util.List} object.
298 public List
<Scope
> getPreferredScopes() { return getFilteredTerms(TermStore
.getScopes()); }
301 * <p>getPreferredDeterminationModifiers</p>
303 * @return a {@link java.util.List} object.
305 public List
<DeterminationModifier
> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore
.getDeterminationModifiers()); }
308 * Generic method to set term preferences
310 * @param preferredTerms a {@link java.util.List} object.
311 * @param initialTerms a {@link java.util.List} object.
312 * @param <T> a T object.
314 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
315 String typeName
= getTermClass(initialTerms
);
317 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
319 for(TermBase term
: initialTerms
){
320 if(! preferredTerms
.contains(term
)){
321 undesiredTermUuids
.add(term
.getUuid());
325 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);
329 * <p>addTermToPreferredTerms</p>
331 * @param term a T object.
332 * @param <T> a T object.
334 public <T
extends TermBase
> void addTermToPreferredTerms(T term
){
336 // VocabularyEnum vocabulary = VocabularyEnum.getVocabularyEnum(term.getClass());
338 // getPreferenceStore().setValue(getPreferenceKey(term), VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
340 // firePreferencesChanged(term.getClass());