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
.cdm
.model
.common
.TermType
;
26 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
30 * @created Dec 7, 2010
33 public class TermManager
extends ContextListenerAdapter
{
35 private static final String TERMS
= "terms";
36 private static final String TERM
= "term";
37 private static final String HIDE
= "hide";
39 private static final String CLASS
= "class";
40 private static final String UUID_STRING
= "uuid";
42 private final Map
<String
, Collection
<UUID
>> hiddenTermsMap
= new HashMap
<String
, Collection
<UUID
>>();
45 CdmStore
.getContextManager().addContextListener(this);
53 public List
<DefinedTermBase
<?
>> getPreferredTerms(TermType termType
){
54 return getFilteredTerms(TermStore
.getTerms(termType
, null));
62 public <T
extends DefinedTermBase
> List
<T
> getPreferredTerms(Class
<T
> clazz
){
63 return getFilteredTerms(TermStore
.getTerms(clazz
));
67 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
70 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
71 // read preferred terms from memento into an in memory representation
76 IMemento terms
= memento
.getChild(TERMS
);
82 for(IMemento term
: terms
.getChildren(TERM
)){
83 String typeName
= term
.getString(CLASS
);
84 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
85 for(IMemento hide
: term
.getChildren(HIDE
)){
86 String uuidString
= hide
.getString(UUID_STRING
);
87 UUID uuid
= UUID
.fromString(uuidString
);
88 hiddenTermUuids
.add(uuid
);
90 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
95 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
98 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
99 saveTerms(memento
, monitor
);
103 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
106 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
107 saveTerms(memento
, monitor
);
110 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
111 if(memento
== null) {
115 IMemento terms
= memento
.createChild(TERMS
);
116 for (String preferredTerm
: hiddenTermsMap
.keySet()){
117 IMemento term
= terms
.createChild(TERM
);
118 term
.putString(CLASS
, preferredTerm
);
119 for(UUID uuid
: hiddenTermsMap
.get(preferredTerm
)){
120 IMemento hide
= term
.createChild(HIDE
);
121 hide
.putString(UUID_STRING
, uuid
.toString());
127 * Generic method to get term preferences for a term vocabulary
129 * @param initialTerms a {@link java.util.List} object.
130 * @return a {@link java.util.List} object.
132 public <T
extends DefinedTermBase
> List
<T
> getFilteredTerms(List
<T
> initialTerms
){
134 List
<T
> filteredTerms
= new ArrayList
<T
>();
136 String typeName
= getTermClass(initialTerms
);
137 Collection
<UUID
> hiddenTermUuids
= hiddenTermsMap
.get(typeName
);
139 if(hiddenTermUuids
== null){
143 for (T term
: initialTerms
){
144 if(! hiddenTermUuids
.contains(term
.getUuid())){
145 filteredTerms
.add(term
);
149 return filteredTerms
;
152 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
153 if(!initialTerms
.isEmpty()){
154 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> getPreferredRelationshipTypesWithInverses(){
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;
216 // * <p>getPreferredFeatures</p>
218 // * @return a {@link java.util.List} object.
220 // public List<Feature> getPreferredFeatures() { return getFilteredTerms(TermStore.getFeatures());}
223 // * <p>getPreferredRanks</p>
225 // * @return a {@link java.util.List} object.
227 // public List<Rank> getPreferredRanks() { return getFilteredTerms(TermStore.getRanks());}
230 // * <p>getPreferredPresenceAbsenceTerms</p>
232 // * @return a {@link java.util.List} object.
234 // public List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore.getPresenceAbsenceTerms());}
237 // * <p>getPreferredNomenclaturalStatusTypes</p>
239 // * @return a {@link java.util.List} object.
241 // public List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore.getNomenclaturalStatusTypes());}
244 // * <p>getPreferredNameRelationshipTypes</p>
246 // * @return a {@link java.util.List} object.
248 // public List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore.getNameRelationshipTypes());}
251 // * <p>getPreferredLanguages</p>
253 // * @return a {@link java.util.List} object.
255 // public List<Language> getPreferredLanguages() { return getFilteredTerms(TermStore.getLanguages()); }
258 // * <p>getPreferredMarkerTypes</p>
260 // * @return a {@link java.util.List} object.
262 // public List<MarkerType> getPreferredMarkerTypes() { return getFilteredTerms(TermStore.getNonTechnicalMarkerTypes()); }
265 // * <p>getPreferredExtensionTypes</p>
267 // * @return a {@link java.util.List} object.
269 // public List<ExtensionType> getPreferredExtensionTypes() { return getFilteredTerms(TermStore.getExtensionTypes()); }
272 // * <p>getPreferredRightsTypes</p>
274 // * @return a {@link java.util.List} object.
276 // public List<RightsType> getPreferredRightsTypes() { return getFilteredTerms(TermStore.getRightsTypes());}
279 // * <p>getPreferredNamedAreaTypes</p>
281 // * @return a {@link java.util.List} object.
283 // public List<NamedAreaType> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore.getNamedAreaTypes()); }
286 // * <p>getPreferredNamedAreaTypes</p>
288 // * @return a {@link java.util.List} object.
290 // public List<NamedAreaLevel> getPreferredNamedAreaLevels() { return getFilteredTerms(TermStore.getNamedAreaLevels()); }
293 // * <p>getPreferredAnnotationTypes</p>
295 // * @return a {@link java.util.List} object.
297 // public List<AnnotationType> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore.getAnnotationTypes()); }
300 // * <p>getPreferredStages</p>
302 // * @return a {@link java.util.List} object.
304 // public List<Stage> getPreferredStages() { return getFilteredTerms(TermStore.getStages()); }
307 // * <p>getPreferredPreservationMethods</p>
309 // * @return a {@link java.util.List} object.
311 // public List<PreservationMethod> getPreferredPreservationMethods() { return getFilteredTerms(TermStore.getPreservationMethods()); }
314 // * <p>getPreferredMeasurementUnits</p>
316 // * @return a {@link java.util.List} object.
318 // public List<MeasurementUnit> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore.getMeasurementUnits()); }
321 // * <p>getPreferredStates</p>
323 // * @return a {@link java.util.List} object.
325 // public List<State> getPreferredStates() { return getFilteredTerms(TermStore.getStates()); }
328 // * <p>getPreferredModifiers</p>
330 // * @return a {@link java.util.List} object.
332 // public List<Modifier> getPreferredModifiers() { return getFilteredTerms(TermStore.getModifiers()); }
335 // * <p>getPreferredStatisticalMeasures</p>
337 // * @return a {@link java.util.List} object.
339 // public List<StatisticalMeasure> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore.getStatisticalMeasures()); }
342 // * <p>getPreferredScopes</p>
344 // * @return a {@link java.util.List} object.
346 // public List<Scope> getPreferredScopes() { return getFilteredTerms(TermStore.getScopes()); }
349 // * <p>getPreferredDeterminationModifiers</p>
351 // * @return a {@link java.util.List} object.
353 // public List<DeterminationModifier> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore.getDeterminationModifiers()); }
356 * Generic method to set term preferences
358 * @param preferredTerms a {@link java.util.List} object.
359 * @param initialTerms a {@link java.util.List} object.
360 * @param <T> a T object.
362 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
363 String typeName
= getTermClass(initialTerms
);
365 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
367 for(TermBase term
: initialTerms
){
368 if(! preferredTerms
.contains(term
)){
369 undesiredTermUuids
.add(term
.getUuid());
373 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);