Project

General

Profile

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

    
10
package eu.etaxonomy.taxeditor.store;
11

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

    
19
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
20
import eu.etaxonomy.cdm.model.common.TermBase;
21
import eu.etaxonomy.cdm.model.common.TermType;
22
import eu.etaxonomy.cdm.model.common.TermVocabulary;
23
import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
24
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
25

    
26
/**
27
 * @author n.hoffmann
28
 * @created Dec 7, 2010
29
 * @version 1.0
30
 */
31
public class TermManager {
32

    
33
	private static final String TERMS = "terms";
34
	private static final String TERM = "term";
35
	private static final String HIDE = "hide";
36

    
37
	private static final String CLASS = "class";
38
	private static final String UUID_STRING = "uuid";
39

    
40

    
41
    private Map<Object, List> cachedTermMap = new HashMap<>();
42

    
43
	public TermManager(){
44
	}
45

    
46
	/**
47
	 *
48
	 * @param clazz
49
	 * @return
50
	 */
51
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
52
	    List terms = cachedTermMap.get(termType);
53
	    if(terms==null){
54
	        terms = getFilteredTerms(TermStore.<T>getTerms(termType, null));
55
	        cachedTermMap.put(termType, terms);
56
	    }
57
        return terms;
58
	}
59

    
60
	/**
61
	 *
62
	 * @param clazz
63
	 * @return
64
	 */
65
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
66
	    List terms = cachedTermMap.get(termVocabulary);
67
	    if(terms==null){
68
	        terms = getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary, null)));
69
	        cachedTermMap.put(termVocabulary, terms);
70
	    }
71
	    return terms;
72
	}
73

    
74
	/**
75
	 *
76
	 * @param clazz
77
	 * @return
78
	 */
79
	public <T extends DefinedTermBase> List<T> getPreferredTerms(Class<T> clazz){
80
	    List terms = cachedTermMap.get(clazz);
81
	    if(terms==null){
82
	        terms = getFilteredTerms(TermStore.getTerms(clazz));
83
	        cachedTermMap.put(clazz, terms);
84
	    }
85
	    return terms;
86
	}
87

    
88
	/**
89
	 * Generic method to get term preferences for a term vocabulary
90
	 *
91
	 * @param initialTerms a {@link java.util.List} object.
92
	 * @return a {@link java.util.List} object.
93
	 */
94
	public <T extends DefinedTermBase> List<T> getFilteredTerms(List<T> initialTerms){
95

    
96
		List<T> filteredTerms = new ArrayList<T>();
97

    
98
		for (T term : initialTerms){
99

    
100
			if (term instanceof TaxonRelationshipTypeInverseContainer){
101
				if(!PreferencesUtil.getPreferenceStore().getBoolean(getPrefName(term))){
102
					T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
103
					filteredTerms.add(type);
104

    
105
				}
106
			}
107

    
108
			if(!PreferencesUtil.getPreferenceStore().getBoolean(getPrefName(term))){
109
				filteredTerms.add(term);
110
			}
111
		}
112

    
113
		return filteredTerms;
114
	}
115

    
116
    private <T extends TermBase> String getPrefName(T term) {
117
        return term.getTermType()!=null?term.getTermType().toString()+term.getUuid().toString():""+term.getUuid().toString();
118
    }
119

    
120

    
121
	private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
122

    
123
		String result = null;
124
		if(!initialTerms.isEmpty()){
125

    
126
			//TODO: there should be a more generic solution!!
127
	    	T entity = initialTerms.iterator().next();
128
	    	if (entity instanceof TaxonRelationshipTypeInverseContainer){
129
	    		result = ((TaxonRelationshipTypeInverseContainer) entity).getType().getClass().getName();
130
	    	} else {
131
	    		result = entity.getClass().getName();
132
	    	}
133
	        return result;
134
	    }
135
	    return null;
136
	}
137

    
138
	/**
139
	 * Generic method to set term preferences
140
	 *
141
	 * @param preferredTerms a {@link java.util.List} object.
142
	 * @param initialTerms a {@link java.util.List} object.
143
	 * @param <T> a T object.
144
	 */
145
	public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
146
	String typeName = getTermClass(initialTerms);
147

    
148
		Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
149

    
150
		for(TermBase term : initialTerms){
151
			if(! preferredTerms.contains(term)){
152
				undesiredTermUuids.add(term.getUuid());
153
				PreferencesUtil.getPreferenceStore().setValue(getPrefName(term), true);
154
			}else{
155
			    PreferencesUtil.getPreferenceStore().setValue(getPrefName(term), false);
156
			}
157

    
158

    
159
		}
160
	}
161
}
(11-11/14)