Project

General

Profile

Download (6.13 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.Comparator;
15
import java.util.HashMap;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.UUID;
19

    
20
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
21
import eu.etaxonomy.cdm.model.term.TermBase;
22
import eu.etaxonomy.cdm.model.term.TermType;
23
import eu.etaxonomy.cdm.model.term.TermVocabulary;
24
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
25
import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
26
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
27

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

    
35
	private static final String TERMS = "terms";
36
	private static final String TERM = "term";
37
	private static final String HIDE = "hide";
38

    
39
	private static final String CLASS = "class";
40
	private static final String UUID_STRING = "uuid";
41

    
42

    
43
    private Map<Object, List> cachedTermMap = new HashMap<>();
44

    
45
    //new cache for features!!
46
    //dinstinguish preferences for both
47
    //load at start
48

    
49
	public TermManager(){
50
	}
51

    
52
	/**
53
	 *
54
	 * @param clazz
55
	 * @return
56
	 */
57
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
58
	    List terms = cachedTermMap.get(termType);
59
	    if(terms==null || terms.isEmpty()){
60
	        terms = getFilteredTerms(TermStore.<T>getTerms(termType, null));
61
	        cachedTermMap.put(termType, terms);
62
	    }
63
        return terms;
64
	}
65

    
66
	/**
67
	 *
68
	 * @param clazz
69
	 * @return
70
	 */
71
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
72
	    List terms = cachedTermMap.get(termVocabulary);
73
	    if(terms==null){
74
	        terms = getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary,null)));
75
	        cachedTermMap.put(termVocabulary, terms);
76
	    }
77
	    return terms;
78
	}
79

    
80

    
81
	/**
82
    *
83
    * @param clazz
84
    * @return
85
    */
86
   public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary, Comparator comp){
87
       if (comp == null){
88
           comp = new DefaultTermComparator<T>();
89
       }
90
       List terms = cachedTermMap.get(termVocabulary);
91
       if(terms==null){
92
           terms = getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary,comp)));
93
           cachedTermMap.put(termVocabulary, terms);
94
       }
95
       terms.sort(comp);
96
       return terms;
97
   }
98
	/**
99
	 *
100
	 * @param clazz
101
	 * @return
102
	 */
103
	public <T extends DefinedTermBase> List<T> getPreferredTerms(Class<T> clazz){
104
	    List terms = cachedTermMap.get(clazz);
105
	    if(terms==null){
106
	        terms = getFilteredTerms(TermStore.getTerms(clazz));
107
	        cachedTermMap.put(clazz, terms);
108

    
109
	    }
110
	    return terms;
111
	}
112

    
113
	/**
114
	 * Generic method to get term preferences for a term vocabulary
115
	 *
116
	 * @param initialTerms a {@link java.util.List} object.
117
	 * @return a {@link java.util.List} object.
118
	 */
119
	public <T extends DefinedTermBase> List<T> getFilteredTerms(List<T> initialTerms){
120

    
121
		List<T> filteredTerms = new ArrayList<T>();
122

    
123
		for (T term : initialTerms){
124

    
125
			if (term instanceof TaxonRelationshipTypeInverseContainer){
126
				if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
127
					T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
128
					filteredTerms.add(type);
129

    
130
				}
131
			}
132

    
133
			if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
134
				filteredTerms.add(term);
135
			}
136
		}
137

    
138
		return filteredTerms;
139
	}
140

    
141
    private <T extends TermBase> String getPrefName(T term) {
142
        return term.getTermType()!=null?term.getTermType().toString()+term.getUuid().toString():""+term.getUuid().toString();
143
    }
144

    
145

    
146
	private <T extends DefinedTermBase> TermVocabulary<T> getTermVocabulary(Collection<T> initialTerms){
147

    
148
		TermType result = null;
149
		if(!initialTerms.isEmpty()){
150
	    	T entity = initialTerms.iterator().next();
151
	        return entity.getVocabulary();
152
	    }
153
	    return null;
154
	}
155

    
156
	/**
157
	 * Generic method to set term preferences
158
	 *
159
	 * @param preferredTerms a {@link java.util.List} object.
160
	 * @param initialTerms a {@link java.util.List} object.
161
	 * @param <T> a T object.
162
	 */
163
	public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
164
	    TermVocabulary<T> voc = getTermVocabulary(initialTerms);
165

    
166
		Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
167

    
168
		for(TermBase term : initialTerms){
169
			if(! preferredTerms.contains(term)){
170
				undesiredTermUuids.add(term.getUuid());
171
				PreferencesUtil.setBooleanValue(getPrefName(term), true);
172
			}else{
173
			    PreferencesUtil.setBooleanValue(getPrefName(term), false);
174
			}
175
		}
176
		//if (initialTerms.iterator().hasNext()){
177
		    clearTermMapForTermVoc(voc);
178
		//}
179

    
180
	}
181

    
182

    
183
	public <T extends DefinedTermBase> void clearTermMapForTermVoc(TermVocabulary<T> voc){
184
	    cachedTermMap.remove(voc);
185
	}
186

    
187
	public void clearTermMapForTermType(TermType termType){
188
        cachedTermMap.remove(termType);
189
    }
190

    
191
	/**
192
     * Generic method to get term preferences for a term vocabulary
193
     *
194
     * @param initialTerms a {@link java.util.List} object.
195
     * @return a {@link java.util.List} object.
196
     */
197
    public <T extends DefinedTermBase> List<T> getTerms(List<UUID> uuidList, Class clazz){
198

    
199
        List<T> filteredTerms = new ArrayList<T>();
200
        List<T> terms = TermStore.getTerms(clazz);
201
        if (uuidList == null || uuidList.isEmpty()){
202
            return terms;
203
        }
204
        for (T term : terms){
205
            if(uuidList.contains(term.getUuid())){
206
                filteredTerms.add(term);
207
            }
208
        }
209

    
210
        return filteredTerms;
211
    }
212

    
213
    /**
214
     * Generic method to get term preferences for a term vocabulary
215
     *
216
     * @param initialTerms a {@link java.util.List} object.
217
     * @return a {@link java.util.List} object.
218
     */
219
    public <T extends DefinedTermBase> List<T> getAllTerms(TermType type, Comparator comparator){
220
        List<T> terms = TermStore.getTerms(type, comparator);
221
        return terms;
222
    }
223
}
(11-11/14)