2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.store
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Collection
;
14 import java
.util
.HashMap
;
15 import java
.util
.List
;
17 import java
.util
.UUID
;
19 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
20 import org
.eclipse
.ui
.IMemento
;
22 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
23 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
24 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
25 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
26 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
27 import eu
.etaxonomy
.taxeditor
.model
.TaxonRelationshipTypeInverseContainer
;
31 * @created Dec 7, 2010
34 public class TermManager
extends ContextListenerAdapter
{
36 private static final String TERMS
= "terms";
37 private static final String TERM
= "term";
38 private static final String HIDE
= "hide";
40 private static final String CLASS
= "class";
41 private static final String UUID_STRING
= "uuid";
43 private final Map
<String
, Collection
<UUID
>> hiddenTermsMap
= new HashMap
<String
, Collection
<UUID
>>();
46 CdmStore
.getContextManager().addContextListener(this);
54 public <T
extends DefinedTermBase
> List
<T
> getPreferredTerms(TermType termType
){
55 return getFilteredTerms(TermStore
.<T
>getTerms(termType
, null));
63 public <T
extends DefinedTermBase
> List
<T
> getPreferredTerms(TermVocabulary
<T
> termVocabulary
){
64 return getFilteredTerms(new ArrayList
<T
>(TermStore
.getTerms(termVocabulary
, null)));
72 public <T
extends DefinedTermBase
> List
<T
> getPreferredTerms(Class
<T
> clazz
){
73 return getFilteredTerms(TermStore
.getTerms(clazz
));
77 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
78 // read preferred terms from memento into an in memory representation
83 IMemento terms
= memento
.getChild(TERMS
);
89 for(IMemento term
: terms
.getChildren(TERM
)){
90 String typeName
= term
.getString(CLASS
);
91 Collection
<UUID
> hiddenTermUuids
= new ArrayList
<UUID
>();
92 for(IMemento hide
: term
.getChildren(HIDE
)){
93 String uuidString
= hide
.getString(UUID_STRING
);
94 UUID uuid
= UUID
.fromString(uuidString
);
95 hiddenTermUuids
.add(uuid
);
97 hiddenTermsMap
.put(typeName
, hiddenTermUuids
);
102 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
103 saveTerms(memento
, monitor
);
107 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
108 saveTerms(memento
, monitor
);
111 private void saveTerms(IMemento memento
, IProgressMonitor monitor
){
112 if(memento
== null) {
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
);
141 if(hiddenTermUuids
== null){
145 for (T term
: initialTerms
){
146 if (term
instanceof TaxonRelationshipTypeInverseContainer
){
147 if(! hiddenTermUuids
.contains(((TaxonRelationshipTypeInverseContainer
) term
).getType().getUuid())){
148 T type
= (T
)((TaxonRelationshipTypeInverseContainer
) term
).getType();
149 filteredTerms
.add(type
);
153 if(! hiddenTermUuids
.contains(term
.getUuid())){
154 filteredTerms
.add(term
);
158 return filteredTerms
;
161 private <T
extends DefinedTermBase
> String
getTermClass(Collection
<T
> initialTerms
){
163 String result
= null;
164 if(!initialTerms
.isEmpty()){
166 //TODO: there should be a more generic solution!!
167 T entity
= initialTerms
.iterator().next();
168 if (entity
instanceof TaxonRelationshipTypeInverseContainer
){
169 result
= ((TaxonRelationshipTypeInverseContainer
) entity
).getType().getClass().getName();
171 result
= entity
.getClass().getName();
179 // * <p>getPreferredSpecimenTypeDesignationStatus</p>
181 // * @return a {@link java.util.List} object.
183 // public List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore.getSpecimenTypeDesignationStatus());}
186 // * <p>getPreferredNameTypeDesignationStatus</p>
188 // * @return a {@link java.util.List} object.
190 // public List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore.getNameTypeDesignationStatus()); }
193 // * <p>getPreferredTaxonRelationshipTypes</p>
195 // * @return a {@link java.util.List} object.
197 // public List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore.getTaxonRelationshipTypes());}
199 // private static List<TaxonRelationshipType> excludeTaxonRelationshipTypes = Arrays.asList(new TaxonRelationshipType[]{
200 // TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(),
201 // TaxonRelationshipType.MISAPPLIED_NAME_FOR(),
202 // TaxonRelationshipType.ALL_RELATIONSHIPS()
206 // * Please note that the {@link TaxonRelationshipType}s TAXONOMICALLY_INCLUDED_IN, MISAPPLIED_NAME_FOR and ALL_RELATIONSHIPS
207 // * are filtered out as they are most likely not needed. If you do need them please refactor this method to your needs.
209 // * @return a list of {@link TaxonRelationshipTypeInverseContainer} elements
211 // public List<TaxonRelationshipTypeInverseContainer> getPreferredRelationshipTypesWithInverses(){
212 // List<TaxonRelationshipTypeInverseContainer> relationshipTypeInverseContainers = new ArrayList<TaxonRelationshipTypeInverseContainer>();
214 // List<TaxonRelationshipType> relationshipTypes = getPreferredTaxonRelationshipTypes();
216 // relationshipTypes.removeAll(excludeTaxonRelationshipTypes);
218 // for (TaxonRelationshipType relationshipType : relationshipTypes){
219 // if(!relationshipType.isSymmetric()){
220 // TaxonRelationshipTypeInverseContainer inverseContainer = new TaxonRelationshipTypeInverseContainer(relationshipType, true);
221 // relationshipTypeInverseContainers.add(inverseContainer);
223 // TaxonRelationshipTypeInverseContainer container = new TaxonRelationshipTypeInverseContainer(relationshipType, false);
224 // relationshipTypeInverseContainers.add(container);
227 // return relationshipTypeInverseContainers;
235 // * <p>getPreferredFeatures</p>
237 // * @return a {@link java.util.List} object.
239 // public List<Feature> getPreferredFeatures() { return getFilteredTerms(TermStore.getFeatures());}
242 // * <p>getPreferredRanks</p>
244 // * @return a {@link java.util.List} object.
246 // public List<Rank> getPreferredRanks() { return getFilteredTerms(TermStore.getRanks());}
249 // * <p>getPreferredPresenceAbsenceTerms</p>
251 // * @return a {@link java.util.List} object.
253 // public List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore.getPresenceAbsenceTerms());}
256 // * <p>getPreferredNomenclaturalStatusTypes</p>
258 // * @return a {@link java.util.List} object.
260 // public List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){ return getFilteredTerms(TermStore.getNomenclaturalStatusTypes());}
263 // * <p>getPreferredNameRelationshipTypes</p>
265 // * @return a {@link java.util.List} object.
267 // public List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore.getNameRelationshipTypes());}
270 // * <p>getPreferredLanguages</p>
272 // * @return a {@link java.util.List} object.
274 // public List<Language> getPreferredLanguages() { return getFilteredTerms(TermStore.getLanguages()); }
277 // * <p>getPreferredMarkerTypes</p>
279 // * @return a {@link java.util.List} object.
281 // public List<MarkerType> getPreferredMarkerTypes() { return getFilteredTerms(TermStore.getNonTechnicalMarkerTypes()); }
284 // * <p>getPreferredExtensionTypes</p>
286 // * @return a {@link java.util.List} object.
288 // public List<ExtensionType> getPreferredExtensionTypes() { return getFilteredTerms(TermStore.getExtensionTypes()); }
291 // * <p>getPreferredRightsTypes</p>
293 // * @return a {@link java.util.List} object.
295 // public List<RightsType> getPreferredRightsTypes() { return getFilteredTerms(TermStore.getRightsTypes());}
298 // * <p>getPreferredNamedAreaTypes</p>
300 // * @return a {@link java.util.List} object.
302 // public List<NamedAreaType> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore.getNamedAreaTypes()); }
305 // * <p>getPreferredNamedAreaTypes</p>
307 // * @return a {@link java.util.List} object.
309 // public List<NamedAreaLevel> getPreferredNamedAreaLevels() { return getFilteredTerms(TermStore.getNamedAreaLevels()); }
312 // * <p>getPreferredAnnotationTypes</p>
314 // * @return a {@link java.util.List} object.
316 // public List<AnnotationType> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore.getAnnotationTypes()); }
319 // * <p>getPreferredStages</p>
321 // * @return a {@link java.util.List} object.
323 // public List<Stage> getPreferredStages() { return getFilteredTerms(TermStore.getStages()); }
326 // * <p>getPreferredPreservationMethods</p>
328 // * @return a {@link java.util.List} object.
330 // public List<PreservationMethod> getPreferredPreservationMethods() { return getFilteredTerms(TermStore.getPreservationMethods()); }
333 // * <p>getPreferredMeasurementUnits</p>
335 // * @return a {@link java.util.List} object.
337 // public List<MeasurementUnit> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore.getMeasurementUnits()); }
340 // * <p>getPreferredStates</p>
342 // * @return a {@link java.util.List} object.
344 // public List<State> getPreferredStates() { return getFilteredTerms(TermStore.getStates()); }
347 // * <p>getPreferredModifiers</p>
349 // * @return a {@link java.util.List} object.
351 // public List<Modifier> getPreferredModifiers() { return getFilteredTerms(TermStore.getModifiers()); }
354 // * <p>getPreferredStatisticalMeasures</p>
356 // * @return a {@link java.util.List} object.
358 // public List<StatisticalMeasure> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore.getStatisticalMeasures()); }
361 // * <p>getPreferredScopes</p>
363 // * @return a {@link java.util.List} object.
365 // public List<Scope> getPreferredScopes() { return getFilteredTerms(TermStore.getScopes()); }
368 // * <p>getPreferredDeterminationModifiers</p>
370 // * @return a {@link java.util.List} object.
372 // public List<DeterminationModifier> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore.getDeterminationModifiers()); }
375 * Generic method to set term preferences
377 * @param preferredTerms a {@link java.util.List} object.
378 * @param initialTerms a {@link java.util.List} object.
379 * @param <T> a T object.
381 public <T
extends DefinedTermBase
> void setPreferredTerms(Collection
<T
> preferredTerms
, Collection
<T
> initialTerms
){
382 String typeName
= getTermClass(initialTerms
);
384 Collection
<UUID
> undesiredTermUuids
= new ArrayList
<UUID
>();
386 for(TermBase term
: initialTerms
){
387 if(! preferredTerms
.contains(term
)){
388 undesiredTermUuids
.add(term
.getUuid());
392 hiddenTermsMap
.put(typeName
, undesiredTermUuids
);