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
.Arrays
;
15 import java
.util
.Collection
;
16 import java
.util
.HashMap
;
17 import java
.util
.List
;
19 import java
.util
.UUID
;
21 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
22 import org
.eclipse
.ui
.IMemento
;
24 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
25 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
26 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
28 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
29 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
30 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
31 import eu
.etaxonomy
.cdm
.model
.description
.MeasurementUnit
;
32 import eu
.etaxonomy
.cdm
.model
.description
.Modifier
;
33 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
34 import eu
.etaxonomy
.cdm
.model
.description
.Scope
;
35 import eu
.etaxonomy
.cdm
.model
.description
.Stage
;
36 import eu
.etaxonomy
.cdm
.model
.description
.State
;
37 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasure
;
38 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
39 import eu
.etaxonomy
.cdm
.model
.media
.RightsTerm
;
40 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
41 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignationStatus
;
42 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
43 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
44 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
45 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationModifier
;
46 import eu
.etaxonomy
.cdm
.model
.occurrence
.PreservationMethod
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
48 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
49 import eu
.etaxonomy
.taxeditor
.model
.TaxonRelationshipTypeInverseContainer
;
53 * @created Dec 7, 2010
56 public class TermManager
extends ContextListenerAdapter
{
58 private static final String TERMS
= "terms";
59 private static final String TERM
= "term";
60 private static final String HIDE
= "hide";
62 private static final String CLASS
= "class";
63 private static final String UUID_STRING
= "uuid";
65 private Map
<String
, Collection
<UUID
>> hiddenTermsMap
= new HashMap
<String
, Collection
<UUID
>>();
68 CdmStore
.getContextManager().addContextListener(this);
72 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
75 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
76 // read preferred terms from memento into an in memory representation
81 IMemento terms
= memento
.getChild(TERMS
);
87 for(IMemento term
: terms
.getChildren(TERM
)){
88 String typeName
= term
.getString(CLASS
);
89 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
90 for(IMemento hide
: term
.getChildren(HIDE
)){
91 String uuidString
= hide
.getString(UUID_STRING
);
92 UUID uuid
= UUID
.fromString(uuidString
);
93 hiddenTermUuids
.add(uuid
);
95 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
100 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
103 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
104 saveTerms(memento
, monitor
);
108 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
111 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
112 saveTerms(memento
, monitor
);
115 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
116 if(memento
== null) return;
118 IMemento terms
= memento
.createChild(TERMS
);
119 for (String preferredTerm
: hiddenTermsMap
.keySet()){
120 IMemento term
= terms
.createChild(TERM
);
121 term
.putString(CLASS
, preferredTerm
);
122 for(UUID uuid
: hiddenTermsMap
.get(preferredTerm
)){
123 IMemento hide
= term
.createChild(HIDE
);
124 hide
.putString(UUID_STRING
, uuid
.toString());
130 * Generic method to get term preferences for a term vocabulary
132 * @param initialTerms a {@link java.util.List} object.
133 * @return a {@link java.util.List} object.
135 public <T
extends DefinedTermBase
> List
<T
> getFilteredTerms(List
<T
> initialTerms
){
137 List
<T
> filteredTerms
= new ArrayList
<T
>();
139 String typeName
= getTermClass(initialTerms
);
140 Collection
<UUID
> hiddenTermUuids
= hiddenTermsMap
.get(typeName
);
142 if(hiddenTermUuids
== null){
146 for (T term
: initialTerms
){
147 if(! hiddenTermUuids
.contains(term
.getUuid())){
148 filteredTerms
.add(term
);
152 return filteredTerms
;
155 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
156 return initialTerms
.iterator().next().getClass().getName();
160 * <p>getPreferredSpecimenTypeDesignationStatus</p>
162 * @return a {@link java.util.List} object.
164 public List
<SpecimenTypeDesignationStatus
> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore
.getSpecimenTypeDesignationStatus());}
167 * <p>getPreferredNameTypeDesignationStatus</p>
169 * @return a {@link java.util.List} object.
171 public List
<NameTypeDesignationStatus
> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore
.getNameTypeDesignationStatus()); }
174 * <p>getPreferredTaxonRelationshipTypes</p>
176 * @return a {@link java.util.List} object.
178 public List
<TaxonRelationshipType
> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore
.getTaxonRelationshipTypes());}
180 private static List
<TaxonRelationshipType
> excludeTaxonRelationshipTypes
= Arrays
.asList(new TaxonRelationshipType
[]{
181 TaxonRelationshipType
.TAXONOMICALLY_INCLUDED_IN(),
182 TaxonRelationshipType
.MISAPPLIED_NAME_FOR(),
183 TaxonRelationshipType
.ALL_RELATIONSHIPS()
187 * Please note that the {@link TaxonRelationshipType}s TAXONOMICALLY_INCLUDED_IN, MISAPPLIED_NAME_FOR and ALL_RELATIONSHIPS
188 * are filtered out as they are most likely not needed. If you do need them please refactor this method to your needs.
190 * @return a list of {@link TaxonRelationshipTypeInverseContainer} elements
192 public List
<TaxonRelationshipTypeInverseContainer
> getRelationshipTypesWithInverses(){
193 List
<TaxonRelationshipTypeInverseContainer
> relationshipTypeInverseContainers
= new ArrayList
<TaxonRelationshipTypeInverseContainer
>();
195 List
<TaxonRelationshipType
> relationshipTypes
= getPreferredTaxonRelationshipTypes();
197 relationshipTypes
.removeAll(excludeTaxonRelationshipTypes
);
199 for (TaxonRelationshipType relationshipType
: relationshipTypes
){
200 if(!relationshipType
.isSymmetric()){
201 TaxonRelationshipTypeInverseContainer inverseContainer
= new TaxonRelationshipTypeInverseContainer(relationshipType
, true);
202 relationshipTypeInverseContainers
.add(inverseContainer
);
204 TaxonRelationshipTypeInverseContainer container
= new TaxonRelationshipTypeInverseContainer(relationshipType
, false);
205 relationshipTypeInverseContainers
.add(container
);
208 return relationshipTypeInverseContainers
;
212 * <p>getPreferredFeatures</p>
214 * @return a {@link java.util.List} object.
216 public List
<Feature
> getPreferredFeatures() { return getFilteredTerms(TermStore
.getFeatures());}
219 * <p>getPreferredRanks</p>
221 * @return a {@link java.util.List} object.
223 public List
<Rank
> getPreferredRanks() { return getFilteredTerms(TermStore
.getRanks());}
226 * <p>getPreferredPresenceAbsenceTerms</p>
228 * @return a {@link java.util.List} object.
230 public List
<PresenceAbsenceTermBase
> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore
.getPresenceAbsenceTerms());}
233 * <p>getPreferredNomenclaturalStatusTypes</p>
235 * @return a {@link java.util.List} object.
237 public List
<NomenclaturalStatusType
> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore
.getNomenclaturalStatusTypes());}
240 * <p>getPreferredNameRelationshipTypes</p>
242 * @return a {@link java.util.List} object.
244 public List
<NameRelationshipType
> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore
.getNameRelationshipTypes());}
247 * <p>getPreferredLanguages</p>
249 * @return a {@link java.util.List} object.
251 public List
<Language
> getPreferredLanguages() { return getFilteredTerms(TermStore
.getLanguages()); }
254 * <p>getPreferredMarkerTypes</p>
256 * @return a {@link java.util.List} object.
258 public List
<MarkerType
> getPreferredMarkerTypes() { return getFilteredTerms(TermStore
.getNonTechnicalMarkerTypes()); }
261 * <p>getPreferredExtensionTypes</p>
263 * @return a {@link java.util.List} object.
265 public List
<ExtensionType
> getPreferredExtensionTypes() { return getFilteredTerms(TermStore
.getExtensionTypes()); }
268 * <p>getPreferredRightsTypes</p>
270 * @return a {@link java.util.List} object.
272 public List
<RightsTerm
> getPreferredRightsTypes() { return getFilteredTerms(TermStore
.getRightsTypes());}
275 * <p>getPreferredNamedAreaTypes</p>
277 * @return a {@link java.util.List} object.
279 public List
<NamedAreaType
> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore
.getNamedAreaTypes()); }
282 * <p>getPreferredAnnotationTypes</p>
284 * @return a {@link java.util.List} object.
286 public List
<AnnotationType
> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore
.getAnnotationTypes()); }
289 * <p>getPreferredStages</p>
291 * @return a {@link java.util.List} object.
293 public List
<Stage
> getPreferredStages() { return getFilteredTerms(TermStore
.getStages()); }
296 * <p>getPreferredPreservationMethods</p>
298 * @return a {@link java.util.List} object.
300 public List
<PreservationMethod
> getPreferredPreservationMethods() { return getFilteredTerms(TermStore
.getPreservationMethods()); }
303 * <p>getPreferredMeasurementUnits</p>
305 * @return a {@link java.util.List} object.
307 public List
<MeasurementUnit
> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore
.getMeasurementUnits()); }
310 * <p>getPreferredStates</p>
312 * @return a {@link java.util.List} object.
314 public List
<State
> getPreferredStates() { return getFilteredTerms(TermStore
.getStates()); }
317 * <p>getPreferredModifiers</p>
319 * @return a {@link java.util.List} object.
321 public List
<Modifier
> getPreferredModifiers() { return getFilteredTerms(TermStore
.getModifiers()); }
324 * <p>getPreferredStatisticalMeasures</p>
326 * @return a {@link java.util.List} object.
328 public List
<StatisticalMeasure
> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore
.getStatisticalMeasures()); }
331 * <p>getPreferredScopes</p>
333 * @return a {@link java.util.List} object.
335 public List
<Scope
> getPreferredScopes() { return getFilteredTerms(TermStore
.getScopes()); }
338 * <p>getPreferredDeterminationModifiers</p>
340 * @return a {@link java.util.List} object.
342 public List
<DeterminationModifier
> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore
.getDeterminationModifiers()); }
345 * Generic method to set term preferences
347 * @param preferredTerms a {@link java.util.List} object.
348 * @param initialTerms a {@link java.util.List} object.
349 * @param <T> a T object.
351 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
352 String typeName
= getTermClass(initialTerms
);
354 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
356 for(TermBase term
: initialTerms
){
357 if(! preferredTerms
.contains(term
)){
358 undesiredTermUuids
.add(term
.getUuid());
362 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);
366 * <p>addTermToPreferredTerms</p>
368 * @param term a T object.
369 * @param <T> a T object.
371 public <T
extends TermBase
> void addTermToPreferredTerms(T term
){
373 // VocabularyEnum vocabulary = VocabularyEnum.getVocabularyEnum(term.getClass());
375 // getPreferenceStore().setValue(getPreferenceKey(term), VocabularyStore.getTermVocabulary(vocabulary).getTerms().contains(term));
377 // firePreferencesChanged(term.getClass());