Project

General

Profile

Download (5.65 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
	public TermManager(){
46
	}
47

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

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

    
76

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

    
105
	    }
106
	    return terms;
107
	}
108

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

    
117
		List<T> filteredTerms = new ArrayList<T>();
118

    
119
		for (T term : initialTerms){
120

    
121
			if (term instanceof TaxonRelationshipTypeInverseContainer){
122
				if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
123
					T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
124
					filteredTerms.add(type);
125

    
126
				}
127
			}
128

    
129
			if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
130
				filteredTerms.add(term);
131
			}
132
		}
133

    
134
		return filteredTerms;
135
	}
136

    
137
    private <T extends TermBase> String getPrefName(T term) {
138
        return term.getTermType()!=null?term.getTermType().toString()+term.getUuid().toString():""+term.getUuid().toString();
139
    }
140

    
141

    
142
	private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
143

    
144
		String result = null;
145
		if(!initialTerms.isEmpty()){
146

    
147
			//TODO: there should be a more generic solution!!
148
	    	T entity = initialTerms.iterator().next();
149
	    	if (entity instanceof TaxonRelationshipTypeInverseContainer){
150
	    		result = ((TaxonRelationshipTypeInverseContainer) entity).getType().getClass().getName();
151
	    	} else {
152
	    		result = entity.getClass().getName();
153
	    	}
154
	        return result;
155
	    }
156
	    return null;
157
	}
158

    
159
	/**
160
	 * Generic method to set term preferences
161
	 *
162
	 * @param preferredTerms a {@link java.util.List} object.
163
	 * @param initialTerms a {@link java.util.List} object.
164
	 * @param <T> a T object.
165
	 */
166
	public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
167
	String typeName = getTermClass(initialTerms);
168

    
169
		Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
170

    
171
		for(TermBase term : initialTerms){
172
			if(! preferredTerms.contains(term)){
173
				undesiredTermUuids.add(term.getUuid());
174
				PreferencesUtil.setBooleanValue(getPrefName(term), true);
175
			}else{
176
			    PreferencesUtil.setBooleanValue(getPrefName(term), false);
177
			}
178

    
179

    
180
		}
181

    
182

    
183
	}
184

    
185

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

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

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

    
209
        return filteredTerms;
210
    }
211
}
(11-11/14)