Project

General

Profile

Download (12.6 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
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.
9
*/
10

    
11
package eu.etaxonomy.taxeditor.store;
12

    
13
import java.util.ArrayList;
14
import java.util.Collection;
15
import java.util.HashMap;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.UUID;
19

    
20
import org.eclipse.core.runtime.IProgressMonitor;
21
import org.eclipse.ui.IMemento;
22

    
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.cdm.model.common.TermVocabulary;
27
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
28
import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
29

    
30
/**
31
 * @author n.hoffmann
32
 * @created Dec 7, 2010
33
 * @version 1.0
34
 */
35
public class TermManager extends ContextListenerAdapter{
36

    
37
	private static final String TERMS = "terms";
38
	private static final String TERM = "term";
39
	private static final String HIDE = "hide";
40

    
41
	private static final String CLASS = "class";
42
	private static final String UUID_STRING = "uuid";
43

    
44
	private final Map<String, Collection<UUID>> hiddenTermsMap = new HashMap<String, Collection<UUID>>();
45

    
46
	public TermManager(){
47
		CdmStore.getContextManager().addContextListener(this);
48
	}
49

    
50
	/**
51
	 *
52
	 * @param clazz
53
	 * @return
54
	 */
55
	public List<DefinedTermBase<?>> getPreferredTerms(TermType termType){
56
	    return getFilteredTerms(TermStore.getTerms(termType, null));
57
	}
58

    
59
	/**
60
	 *
61
	 * @param clazz
62
	 * @return
63
	 */
64
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
65
	    return getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary, null)));
66
	}
67

    
68
	/**
69
	 *
70
	 * @param clazz
71
	 * @return
72
	 */
73
	public <T extends DefinedTermBase> List<T> getPreferredTerms(Class<T> clazz){
74
		return getFilteredTerms(TermStore.getTerms(clazz));
75
	}
76

    
77
	/* (non-Javadoc)
78
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
79
	 */
80
	@Override
81
	public void contextStart(IMemento memento, IProgressMonitor monitor) {
82
		// read preferred terms from memento into an in memory representation
83
		if(memento == null){
84
			return;
85
		}
86

    
87
		IMemento terms = memento.getChild(TERMS);
88

    
89
		if(terms == null){
90
			return;
91
		}
92

    
93
		for(IMemento term : terms.getChildren(TERM)){
94
			String typeName = term.getString(CLASS);
95
			Collection<UUID> hiddenTermUuids = new ArrayList<UUID>();
96
			for(IMemento hide : term.getChildren(HIDE)){
97
				String uuidString = hide.getString(UUID_STRING);
98
				UUID uuid = UUID.fromString(uuidString);
99
				hiddenTermUuids.add(uuid);
100
			}
101
			hiddenTermsMap.put(typeName, hiddenTermUuids);
102
		}
103
	}
104

    
105
	/* (non-Javadoc)
106
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
107
	 */
108
	@Override
109
	public void contextStop(IMemento memento, IProgressMonitor monitor) {
110
		saveTerms(memento, monitor);
111
	}
112

    
113
	/* (non-Javadoc)
114
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
115
	 */
116
	@Override
117
	public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
118
		saveTerms(memento, monitor);
119
	}
120

    
121
	private void saveTerms(IMemento memento, IProgressMonitor monitor){
122
		if(memento == null) {
123
            return;
124
        }
125

    
126
		IMemento terms = memento.createChild(TERMS);
127
		for (String preferredTerm : hiddenTermsMap.keySet()){
128
			IMemento term = terms.createChild(TERM);
129
			term.putString(CLASS, preferredTerm);
130
			for(UUID uuid : hiddenTermsMap.get(preferredTerm)){
131
				IMemento hide = term.createChild(HIDE);
132
				hide.putString(UUID_STRING, uuid.toString());
133
			}
134
		}
135
	}
136

    
137
	/**
138
	 * Generic method to get term preferences for a term vocabulary
139
	 *
140
	 * @param initialTerms a {@link java.util.List} object.
141
	 * @return a {@link java.util.List} object.
142
	 */
143
	public <T extends DefinedTermBase> List<T> getFilteredTerms(List<T> initialTerms){
144

    
145
		List<T> filteredTerms = new ArrayList<T>();
146

    
147
		String typeName = getTermClass(initialTerms);
148
		Collection<UUID> hiddenTermUuids = hiddenTermsMap.get(typeName);
149

    
150

    
151
		if(hiddenTermUuids == null){
152
			return initialTerms;
153
		}
154

    
155
		for (T term : initialTerms){
156
			if (term instanceof TaxonRelationshipTypeInverseContainer){
157
				if(! hiddenTermUuids.contains(((TaxonRelationshipTypeInverseContainer) term).getType().getUuid())){
158
					T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
159
					filteredTerms.add(type);
160

    
161
				}
162
			}
163
			if(! hiddenTermUuids.contains(term.getUuid())){
164
				filteredTerms.add(term);
165
			}
166
		}
167

    
168
		return filteredTerms;
169
	}
170

    
171
	private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
172

    
173
		String result = null;
174
		if(!initialTerms.isEmpty()){
175

    
176
			//TODO: there should be a more generic solution!!
177
	    	T entity = initialTerms.iterator().next();
178
	    	if (entity instanceof TaxonRelationshipTypeInverseContainer){
179
	    		result = ((TaxonRelationshipTypeInverseContainer) entity).getType().getClass().getName();
180
	    	} else {
181
	    		result = entity.getClass().getName();
182
	    	}
183
	        return result;
184
	    }
185
	    return null;
186
	}
187

    
188
//	/**
189
//	 * <p>getPreferredSpecimenTypeDesignationStatus</p>
190
//	 *
191
//	 * @return a {@link java.util.List} object.
192
//	 */
193
//	public List<SpecimenTypeDesignationStatus> getPreferredSpecimenTypeDesignationStatus() { return getFilteredTerms(TermStore.getSpecimenTypeDesignationStatus());}
194
//
195
//	/**
196
//	 * <p>getPreferredNameTypeDesignationStatus</p>
197
//	 *
198
//	 * @return a {@link java.util.List} object.
199
//	 */
200
//	public List<NameTypeDesignationStatus> getPreferredNameTypeDesignationStatus() { return getFilteredTerms(TermStore.getNameTypeDesignationStatus()); }
201
//
202
//	/**
203
//	 * <p>getPreferredTaxonRelationshipTypes</p>
204
//	 *
205
//	 * @return a {@link java.util.List} object.
206
//	 */
207
//	public List<TaxonRelationshipType> getPreferredTaxonRelationshipTypes() { return getFilteredTerms(TermStore.getTaxonRelationshipTypes());}
208
//
209
//	private static List<TaxonRelationshipType> excludeTaxonRelationshipTypes = Arrays.asList(new TaxonRelationshipType[]{
210
//			TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(),
211
//			TaxonRelationshipType.MISAPPLIED_NAME_FOR(),
212
//			TaxonRelationshipType.ALL_RELATIONSHIPS()
213
//	});
214
//
215
//	/**
216
//	 * Please note that the {@link TaxonRelationshipType}s TAXONOMICALLY_INCLUDED_IN, MISAPPLIED_NAME_FOR and ALL_RELATIONSHIPS
217
//	 * are filtered out as they are most likely not needed. If you do need them please refactor this method to your needs.
218
//	 *
219
//	 * @return a list of {@link TaxonRelationshipTypeInverseContainer} elements
220
//	 */
221
//	public List<TaxonRelationshipTypeInverseContainer> getPreferredRelationshipTypesWithInverses(){
222
//		List<TaxonRelationshipTypeInverseContainer> relationshipTypeInverseContainers = new ArrayList<TaxonRelationshipTypeInverseContainer>();
223
//
224
//		List<TaxonRelationshipType> relationshipTypes = getPreferredTaxonRelationshipTypes();
225
//
226
//		relationshipTypes.removeAll(excludeTaxonRelationshipTypes);
227
//
228
//		for (TaxonRelationshipType relationshipType : relationshipTypes){
229
//			if(!relationshipType.isSymmetric()){
230
//				TaxonRelationshipTypeInverseContainer inverseContainer = new TaxonRelationshipTypeInverseContainer(relationshipType, true);
231
//				relationshipTypeInverseContainers.add(inverseContainer);
232
//			}
233
//			TaxonRelationshipTypeInverseContainer container = new TaxonRelationshipTypeInverseContainer(relationshipType, false);
234
//			relationshipTypeInverseContainers.add(container);
235
//		}
236
//
237
//		return relationshipTypeInverseContainers;
238
//	}
239

    
240

    
241

    
242

    
243
//
244
//	/**
245
//	 * <p>getPreferredFeatures</p>
246
//	 *
247
//	 * @return a {@link java.util.List} object.
248
//	 */
249
//	public List<Feature> getPreferredFeatures() { return getFilteredTerms(TermStore.getFeatures());}
250
//
251
//	/**
252
//	 * <p>getPreferredRanks</p>
253
//	 *
254
//	 * @return a {@link java.util.List} object.
255
//	 */
256
//	public List<Rank> getPreferredRanks() { return getFilteredTerms(TermStore.getRanks());}
257
//
258
//	/**
259
//	 * <p>getPreferredPresenceAbsenceTerms</p>
260
//	 *
261
//	 * @return a {@link java.util.List} object.
262
//	 */
263
//	public List<PresenceAbsenceTermBase> getPreferredPresenceAbsenceTerms(){ return getFilteredTerms(TermStore.getPresenceAbsenceTerms());}
264
//
265
//	/**
266
//	 * <p>getPreferredNomenclaturalStatusTypes</p>
267
//	 *
268
//	 * @return a {@link java.util.List} object.
269
//	 */
270
//	public List<NomenclaturalStatusType> getPreferredNomenclaturalStatusTypes(){	return getFilteredTerms(TermStore.getNomenclaturalStatusTypes());}
271
//
272
//	/**
273
//	 * <p>getPreferredNameRelationshipTypes</p>
274
//	 *
275
//	 * @return a {@link java.util.List} object.
276
//	 */
277
//	public List<NameRelationshipType> getPreferredNameRelationshipTypes(){ return getFilteredTerms(TermStore.getNameRelationshipTypes());}
278
//
279
//	/**
280
//	 * <p>getPreferredLanguages</p>
281
//	 *
282
//	 * @return a {@link java.util.List} object.
283
//	 */
284
//	public List<Language> getPreferredLanguages() { return getFilteredTerms(TermStore.getLanguages()); }
285
//
286
//	/**
287
//	 * <p>getPreferredMarkerTypes</p>
288
//	 *
289
//	 * @return a {@link java.util.List} object.
290
//	 */
291
//	public List<MarkerType> getPreferredMarkerTypes() { return getFilteredTerms(TermStore.getNonTechnicalMarkerTypes()); }
292
//
293
//	/**
294
//	 * <p>getPreferredExtensionTypes</p>
295
//	 *
296
//	 * @return a {@link java.util.List} object.
297
//	 */
298
//	public List<ExtensionType> getPreferredExtensionTypes() { return getFilteredTerms(TermStore.getExtensionTypes()); }
299
//
300
//	/**
301
//	 * <p>getPreferredRightsTypes</p>
302
//	 *
303
//	 * @return a {@link java.util.List} object.
304
//	 */
305
//	public List<RightsType> getPreferredRightsTypes() { 	return getFilteredTerms(TermStore.getRightsTypes());}
306
//
307
//	/**
308
//	 * <p>getPreferredNamedAreaTypes</p>
309
//	 *
310
//	 * @return a {@link java.util.List} object.
311
//	 */
312
//	public List<NamedAreaType> getPreferredNamedAreaTypes() { return getFilteredTerms(TermStore.getNamedAreaTypes()); }
313
//
314
//	/**
315
//	 * <p>getPreferredNamedAreaTypes</p>
316
//	 *
317
//	 * @return a {@link java.util.List} object.
318
//	 */
319
//	public List<NamedAreaLevel> getPreferredNamedAreaLevels() { return getFilteredTerms(TermStore.getNamedAreaLevels()); }
320
//
321
//	/**
322
//	 * <p>getPreferredAnnotationTypes</p>
323
//	 *
324
//	 * @return a {@link java.util.List} object.
325
//	 */
326
//	public List<AnnotationType> getPreferredAnnotationTypes() { return getFilteredTerms(TermStore.getAnnotationTypes()); }
327
//
328
//	/**
329
//	 * <p>getPreferredStages</p>
330
//	 *
331
//	 * @return a {@link java.util.List} object.
332
//	 */
333
//	public List<Stage> getPreferredStages() { return getFilteredTerms(TermStore.getStages()); }
334
//
335
//	/**
336
//	 * <p>getPreferredPreservationMethods</p>
337
//	 *
338
//	 * @return a {@link java.util.List} object.
339
//	 */
340
//	public List<PreservationMethod> getPreferredPreservationMethods() { return getFilteredTerms(TermStore.getPreservationMethods()); }
341
//
342
//	/**
343
//	 * <p>getPreferredMeasurementUnits</p>
344
//	 *
345
//	 * @return a {@link java.util.List} object.
346
//	 */
347
//	public List<MeasurementUnit> getPreferredMeasurementUnits() { return getFilteredTerms(TermStore.getMeasurementUnits()); }
348
//
349
//	/**
350
//	 * <p>getPreferredStates</p>
351
//	 *
352
//	 * @return a {@link java.util.List} object.
353
//	 */
354
//	public List<State> getPreferredStates() { return getFilteredTerms(TermStore.getStates()); }
355
//
356
//	/**
357
//	 * <p>getPreferredModifiers</p>
358
//	 *
359
//	 * @return a {@link java.util.List} object.
360
//	 */
361
//	public List<Modifier> getPreferredModifiers() { return getFilteredTerms(TermStore.getModifiers()); }
362
//
363
//	/**
364
//	 * <p>getPreferredStatisticalMeasures</p>
365
//	 *
366
//	 * @return a {@link java.util.List} object.
367
//	 */
368
//	public List<StatisticalMeasure> getPreferredStatisticalMeasures() { return getFilteredTerms(TermStore.getStatisticalMeasures()); }
369
//
370
//	/**
371
//	 * <p>getPreferredScopes</p>
372
//	 *
373
//	 * @return a {@link java.util.List} object.
374
//	 */
375
//	public List<Scope> getPreferredScopes() { return getFilteredTerms(TermStore.getScopes()); }
376
//
377
//	/**
378
//	 * <p>getPreferredDeterminationModifiers</p>
379
//	 *
380
//	 * @return a {@link java.util.List} object.
381
//	 */
382
//	public List<DeterminationModifier> getPreferredDeterminationModifiers() { return getFilteredTerms(TermStore.getDeterminationModifiers()); }
383
//
384
	/**
385
	 * Generic method to set term preferences
386
	 *
387
	 * @param preferredTerms a {@link java.util.List} object.
388
	 * @param initialTerms a {@link java.util.List} object.
389
	 * @param <T> a T object.
390
	 */
391
	public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
392
		String typeName = getTermClass(initialTerms);
393

    
394
		Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
395

    
396
		for(TermBase term : initialTerms){
397
			if(! preferredTerms.contains(term)){
398
				undesiredTermUuids.add(term.getUuid());
399
			}
400
		}
401

    
402
		hiddenTermsMap.put(typeName, undesiredTermUuids);
403
	}
404
}
(8-8/9)