9290201b4d889399ae512e6a9790fcfede76d671
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
.DefinedTermBase
;
24 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
25 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
29 * @created Dec 7, 2010
32 public class TermManager
extends ContextListenerAdapter
{
34 private static final String TERMS
= "terms";
35 private static final String TERM
= "term";
36 private static final String HIDE
= "hide";
38 private static final String CLASS
= "class";
39 private static final String UUID_STRING
= "uuid";
41 private Map
<String
, Collection
<UUID
>> hiddenTermsMap
= new HashMap
<String
, Collection
<UUID
>>();
44 CdmStore
.getContextManager().addContextListener(this);
52 public <T
extends DefinedTermBase
> List
<T
> getPreferredTerms(Class
<T
> clazz
){
53 return getFilteredTerms(TermStore
.getTerms(clazz
));
57 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
60 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
61 // read preferred terms from memento into an in memory representation
66 IMemento terms
= memento
.getChild(TERMS
);
72 for(IMemento term
: terms
.getChildren(TERM
)){
73 String typeName
= term
.getString(CLASS
);
74 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
75 for(IMemento hide
: term
.getChildren(HIDE
)){
76 String uuidString
= hide
.getString(UUID_STRING
);
77 UUID uuid
= UUID
.fromString(uuidString
);
78 hiddenTermUuids
.add(uuid
);
80 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
85 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
88 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
89 saveTerms(memento
, monitor
);
93 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
96 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
97 saveTerms(memento
, monitor
);
100 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
101 if(memento
== null) return;
103 IMemento terms
= memento
.createChild(TERMS
);
104 for (String preferredTerm
: hiddenTermsMap
.keySet()){
105 IMemento term
= terms
.createChild(TERM
);
106 term
.putString(CLASS
, preferredTerm
);
107 for(UUID uuid
: hiddenTermsMap
.get(preferredTerm
)){
108 IMemento hide
= term
.createChild(HIDE
);
109 hide
.putString(UUID_STRING
, uuid
.toString());
115 * Generic method to get term preferences for a term vocabulary
117 * @param initialTerms a {@link java.util.List} object.
118 * @return a {@link java.util.List} object.
120 public <T
extends DefinedTermBase
> List
<T
> getFilteredTerms(List
<T
> initialTerms
){
122 List
<T
> filteredTerms
= new ArrayList
<T
>();
124 String typeName
= getTermClass(initialTerms
);
125 Collection
<UUID
> hiddenTermUuids
= hiddenTermsMap
.get(typeName
);
127 if(hiddenTermUuids
== null){
131 for (T term
: initialTerms
){
132 if(! hiddenTermUuids
.contains(term
.getUuid())){
133 filteredTerms
.add(term
);
137 return filteredTerms
;
140 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
141 return initialTerms
.iterator().next().getClass().getName();
145 // * <p>getPreferredSpecimenTypeDesignationStatus</p>
147 // * @return a {@link java.util.List} object.
149 // public List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore.getSpecimenTypeDesignationStatus());}
152 // * <p>getPreferredNameTypeDesignationStatus</p>
154 // * @return a {@link java.util.List} object.
156 // public List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore.getNameTypeDesignationStatus()); }
159 // * <p>getPreferredTaxonRelationshipTypes</p>
161 // * @return a {@link java.util.List} object.
163 // public List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore.getTaxonRelationshipTypes());}
165 // private static List<TaxonRelationshipType> excludeTaxonRelationshipTypes = Arrays.asList(new TaxonRelationshipType[]{
166 // TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(),
167 // TaxonRelationshipType.MISAPPLIED_NAME_FOR(),
168 // TaxonRelationshipType.ALL_RELATIONSHIPS()
172 // * Please note that the {@link TaxonRelationshipType}s TAXONOMICALLY_INCLUDED_IN, MISAPPLIED_NAME_FOR and ALL_RELATIONSHIPS
173 // * are filtered out as they are most likely not needed. If you do need them please refactor this method to your needs.
175 // * @return a list of {@link TaxonRelationshipTypeInverseContainer} elements
177 // public List<TaxonRelationshipTypeInverseContainer> getPreferredRelationshipTypesWithInverses(){
178 // List<TaxonRelationshipTypeInverseContainer> relationshipTypeInverseContainers = new ArrayList<TaxonRelationshipTypeInverseContainer>();
180 // List<TaxonRelationshipType> relationshipTypes = getPreferredTaxonRelationshipTypes();
182 // relationshipTypes.removeAll(excludeTaxonRelationshipTypes);
184 // for (TaxonRelationshipType relationshipType : relationshipTypes){
185 // if(!relationshipType.isSymmetric()){
186 // TaxonRelationshipTypeInverseContainer inverseContainer = new TaxonRelationshipTypeInverseContainer(relationshipType, true);
187 // relationshipTypeInverseContainers.add(inverseContainer);
189 // TaxonRelationshipTypeInverseContainer container = new TaxonRelationshipTypeInverseContainer(relationshipType, false);
190 // relationshipTypeInverseContainers.add(container);
193 // return relationshipTypeInverseContainers;
201 // * <p>getPreferredFeatures</p>
203 // * @return a {@link java.util.List} object.
205 // public List<Feature> getPreferredFeatures() { return getFilteredTerms(TermStore.getFeatures());}
208 // * <p>getPreferredRanks</p>
210 // * @return a {@link java.util.List} object.
212 // public List<Rank> getPreferredRanks() { return getFilteredTerms(TermStore.getRanks());}
215 // * <p>getPreferredPresenceAbsenceTerms</p>
217 // * @return a {@link java.util.List} object.
219 // public List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore.getPresenceAbsenceTerms());}
222 // * <p>getPreferredNomenclaturalStatusTypes</p>
224 // * @return a {@link java.util.List} object.
226 // public List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore.getNomenclaturalStatusTypes());}
229 // * <p>getPreferredNameRelationshipTypes</p>
231 // * @return a {@link java.util.List} object.
233 // public List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore.getNameRelationshipTypes());}
236 // * <p>getPreferredLanguages</p>
238 // * @return a {@link java.util.List} object.
240 // public List<Language> getPreferredLanguages() { return getFilteredTerms(TermStore.getLanguages()); }
243 // * <p>getPreferredMarkerTypes</p>
245 // * @return a {@link java.util.List} object.
247 // public List<MarkerType> getPreferredMarkerTypes() { return getFilteredTerms(TermStore.getNonTechnicalMarkerTypes()); }
250 // * <p>getPreferredExtensionTypes</p>
252 // * @return a {@link java.util.List} object.
254 // public List<ExtensionType> getPreferredExtensionTypes() { return getFilteredTerms(TermStore.getExtensionTypes()); }
257 // * <p>getPreferredRightsTypes</p>
259 // * @return a {@link java.util.List} object.
261 // public List<RightsTerm> getPreferredRightsTypes() { return getFilteredTerms(TermStore.getRightsTypes());}
264 // * <p>getPreferredNamedAreaTypes</p>
266 // * @return a {@link java.util.List} object.
268 // public List<NamedAreaType> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore.getNamedAreaTypes()); }
271 // * <p>getPreferredNamedAreaTypes</p>
273 // * @return a {@link java.util.List} object.
275 // public List<NamedAreaLevel> getPreferredNamedAreaLevels() { return getFilteredTerms(TermStore.getNamedAreaLevels()); }
278 // * <p>getPreferredAnnotationTypes</p>
280 // * @return a {@link java.util.List} object.
282 // public List<AnnotationType> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore.getAnnotationTypes()); }
285 // * <p>getPreferredStages</p>
287 // * @return a {@link java.util.List} object.
289 // public List<Stage> getPreferredStages() { return getFilteredTerms(TermStore.getStages()); }
292 // * <p>getPreferredPreservationMethods</p>
294 // * @return a {@link java.util.List} object.
296 // public List<PreservationMethod> getPreferredPreservationMethods() { return getFilteredTerms(TermStore.getPreservationMethods()); }
299 // * <p>getPreferredMeasurementUnits</p>
301 // * @return a {@link java.util.List} object.
303 // public List<MeasurementUnit> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore.getMeasurementUnits()); }
306 // * <p>getPreferredStates</p>
308 // * @return a {@link java.util.List} object.
310 // public List<State> getPreferredStates() { return getFilteredTerms(TermStore.getStates()); }
313 // * <p>getPreferredModifiers</p>
315 // * @return a {@link java.util.List} object.
317 // public List<Modifier> getPreferredModifiers() { return getFilteredTerms(TermStore.getModifiers()); }
320 // * <p>getPreferredStatisticalMeasures</p>
322 // * @return a {@link java.util.List} object.
324 // public List<StatisticalMeasure> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore.getStatisticalMeasures()); }
327 // * <p>getPreferredScopes</p>
329 // * @return a {@link java.util.List} object.
331 // public List<Scope> getPreferredScopes() { return getFilteredTerms(TermStore.getScopes()); }
334 // * <p>getPreferredDeterminationModifiers</p>
336 // * @return a {@link java.util.List} object.
338 // public List<DeterminationModifier> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore.getDeterminationModifiers()); }
341 * Generic method to set term preferences
343 * @param preferredTerms a {@link java.util.List} object.
344 * @param initialTerms a {@link java.util.List} object.
345 * @param <T> a T object.
347 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
348 String typeName
= getTermClass(initialTerms
);
350 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
352 for(TermBase term
: initialTerms
){
353 if(! preferredTerms
.contains(term
)){
354 undesiredTermUuids
.add(term
.getUuid());
358 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);