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
79 IMemento terms
= memento
.getChild(TERMS
);
85 for(IMemento term
: terms
.getChildren(TERM
)){
86 String typeName
= term
.getString(CLASS
);
87 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
88 for(IMemento hide
: term
.getChildren(HIDE
)){
89 String uuidString
= hide
.getString(UUID_STRING
);
90 UUID uuid
= UUID
.fromString(uuidString
);
91 hiddenTermUuids
.add(uuid
);
93 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
98 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
101 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
102 saveTerms(memento
, monitor
);
106 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
109 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
110 saveTerms(memento
, monitor
);
113 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
114 if(memento
== null) return;
116 IMemento terms
= memento
.createChild(TERMS
);
117 for (String preferredTerm
: hiddenTermsMap
.keySet()){
118 IMemento term
= terms
.createChild(TERM
);
119 term
.putString(CLASS
, preferredTerm
);
120 for(UUID uuid
: hiddenTermsMap
.get(preferredTerm
)){
121 IMemento hide
= term
.createChild(HIDE
);
122 hide
.putString(UUID_STRING
, uuid
.toString());
128 * Generic method to get term preferences for a term vocabulary
130 * @param initialTerms a {@link java.util.List} object.
131 * @return a {@link java.util.List} object.
133 public <T
extends DefinedTermBase
> List
<T
> getFilteredTerms(List
<T
> initialTerms
){
135 List
<T
> filteredTerms
= new ArrayList
<T
>();
137 String typeName
= getTermClass(initialTerms
);
138 Collection
<UUID
> hiddenTermUuids
= hiddenTermsMap
.get(typeName
);
140 if(hiddenTermUuids
== null){
144 for (T term
: initialTerms
){
145 if(! hiddenTermUuids
.contains(term
.getUuid())){
146 filteredTerms
.add(term
);
150 return filteredTerms
;
153 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
154 return initialTerms
.iterator().next().getClass().getName();
158 * <p>getPreferredSpecimenTypeDesignationStatus</p>
160 * @return a {@link java.util.List} object.
162 public List
<SpecimenTypeDesignationStatus
> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore
.getSpecimenTypeDesignationStatus());}
165 * <p>getPreferredNameTypeDesignationStatus</p>
167 * @return a {@link java.util.List} object.
169 public List
<NameTypeDesignationStatus
> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore
.getNameTypeDesignationStatus()); }
172 * <p>getPreferredTaxonRelationshipTypes</p>
174 * @return a {@link java.util.List} object.
176 public List
<TaxonRelationshipType
> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore
.getTaxonRelationshipTypes());}
179 * <p>getPreferredFeatures</p>
181 * @return a {@link java.util.List} object.
183 public List
<Feature
> getPreferredFeatures() { return getFilteredTerms(TermStore
.getFeatures());}
186 * <p>getPreferredRanks</p>
188 * @return a {@link java.util.List} object.
190 public List
<Rank
> getPreferredRanks() { return getFilteredTerms(TermStore
.getRanks());}
193 * <p>getPreferredPresenceAbsenceTerms</p>
195 * @return a {@link java.util.List} object.
197 public List
<PresenceAbsenceTermBase
> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore
.getPresenceAbsenceTerms());}
200 * <p>getPreferredNomenclaturalStatusTypes</p>
202 * @return a {@link java.util.List} object.
204 public List
<NomenclaturalStatusType
> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore
.getNomenclaturalStatusTypes());}
207 * <p>getPreferredNameRelationshipTypes</p>
209 * @return a {@link java.util.List} object.
211 public List
<NameRelationshipType
> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore
.getNameRelationshipTypes());}
214 * <p>getPreferredLanguages</p>
216 * @return a {@link java.util.List} object.
218 public List
<Language
> getPreferredLanguages() { return getFilteredTerms(TermStore
.getLanguages()); }
221 * <p>getPreferredMarkerTypes</p>
223 * @return a {@link java.util.List} object.
225 public List
<MarkerType
> getPreferredMarkerTypes() { return getFilteredTerms(TermStore
.getNonTechnicalMarkerTypes()); }
228 * <p>getPreferredExtensionTypes</p>
230 * @return a {@link java.util.List} object.
232 public List
<ExtensionType
> getPreferredExtensionTypes() { return getFilteredTerms(TermStore
.getExtensionTypes()); }
235 * <p>getPreferredRightsTypes</p>
237 * @return a {@link java.util.List} object.
239 public List
<RightsTerm
> getPreferredRightsTypes() { return getFilteredTerms(TermStore
.getRightsTypes());}
242 * <p>getPreferredNamedAreaTypes</p>
244 * @return a {@link java.util.List} object.
246 public List
<NamedAreaType
> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore
.getNamedAreaTypes()); }
249 * <p>getPreferredAnnotationTypes</p>
251 * @return a {@link java.util.List} object.
253 public List
<AnnotationType
> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore
.getAnnotationTypes()); }
256 * <p>getPreferredStages</p>
258 * @return a {@link java.util.List} object.
260 public List
<Stage
> getPreferredStages() { return getFilteredTerms(TermStore
.getStages()); }
263 * <p>getPreferredPreservationMethods</p>
265 * @return a {@link java.util.List} object.
267 public List
<PreservationMethod
> getPreferredPreservationMethods() { return getFilteredTerms(TermStore
.getPreservationMethods()); }
270 * <p>getPreferredMeasurementUnits</p>
272 * @return a {@link java.util.List} object.
274 public List
<MeasurementUnit
> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore
.getMeasurementUnits()); }
277 * <p>getPreferredStates</p>
279 * @return a {@link java.util.List} object.
281 public List
<State
> getPreferredStates() { return getFilteredTerms(TermStore
.getStates()); }
284 * <p>getPreferredModifiers</p>
286 * @return a {@link java.util.List} object.
288 public List
<Modifier
> getPreferredModifiers() { return getFilteredTerms(TermStore
.getModifiers()); }
291 * <p>getPreferredStatisticalMeasures</p>
293 * @return a {@link java.util.List} object.
295 public List
<StatisticalMeasure
> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore
.getStatisticalMeasures()); }
298 * <p>getPreferredScopes</p>
300 * @return a {@link java.util.List} object.
302 public List
<Scope
> getPreferredScopes() { return getFilteredTerms(TermStore
.getScopes()); }
305 * <p>getPreferredDeterminationModifiers</p>
307 * @return a {@link java.util.List} object.
309 public List
<DeterminationModifier
> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore
.getDeterminationModifiers()); }
312 * Generic method to set term preferences
314 * @param preferredTerms a {@link java.util.List} object.
315 * @param initialTerms a {@link java.util.List} object.
316 * @param <T> a T object.
318 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
319 String typeName
= getTermClass(initialTerms
);
321 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
323 for(TermBase term
: initialTerms
){
324 if(! preferredTerms
.contains(term
)){
325 undesiredTermUuids
.add(term
.getUuid());
329 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);
333 * <p>addTermToPreferredTerms</p>
335 * @param term a T object.
336 * @param <T> a T object.
338 public <T
extends TermBase
> void addTermToPreferredTerms(T term
){
340 // VocabularyEnum vocabulary = VocabularyEnum.getVocabularyEnum(term.getClass());
342 // getPreferenceStore().setValue(getPreferenceKey(term), VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
344 // firePreferencesChanged(term.getClass());