Project

General

Profile

Download (4.41 KB) Statistics
| Branch: | Tag: | Revision:
1 ea781c57 n.hoffmann
/**
2
* Copyright (C) 2007 EDIT
3 ccc7ac6f Patric Plitzner
* European Distributed Institute of Taxonomy
4 ea781c57 n.hoffmann
* http://www.e-taxonomy.eu
5 ccc7ac6f Patric Plitzner
*
6 ea781c57 n.hoffmann
* 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 9d0d72ef Patrick Plitzner
import java.util.HashMap;
15 ea781c57 n.hoffmann
import java.util.List;
16 9d0d72ef Patrick Plitzner
import java.util.Map;
17 ea781c57 n.hoffmann
import java.util.UUID;
18
19
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
20
import eu.etaxonomy.cdm.model.common.TermBase;
21 ccc7ac6f Patric Plitzner
import eu.etaxonomy.cdm.model.common.TermType;
22 7084aeff Patric Plitzner
import eu.etaxonomy.cdm.model.common.TermVocabulary;
23 69d856ba Katja Luther
import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
24 f4888ff9 Patrick Plitzner
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
25 ea781c57 n.hoffmann
26
/**
27
 * @author n.hoffmann
28
 * @created Dec 7, 2010
29
 * @version 1.0
30
 */
31 f4888ff9 Patrick Plitzner
public class TermManager {
32 ccc7ac6f Patric Plitzner
33 ea781c57 n.hoffmann
	private static final String TERMS = "terms";
34
	private static final String TERM = "term";
35
	private static final String HIDE = "hide";
36 ccc7ac6f Patric Plitzner
37 ea781c57 n.hoffmann
	private static final String CLASS = "class";
38
	private static final String UUID_STRING = "uuid";
39 ccc7ac6f Patric Plitzner
40 9d0d72ef Patrick Plitzner
41
    private Map<Object, List> cachedTermMap = new HashMap<>();
42
43 ea781c57 n.hoffmann
	public TermManager(){
44
	}
45 ccc7ac6f Patric Plitzner
46 b9a0d300 l.morris
	/**
47 ccc7ac6f Patric Plitzner
	 *
48
	 * @param clazz
49
	 * @return
50
	 */
51 1d716a84 Patrick Plitzner
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermType termType){
52 9d0d72ef Patrick Plitzner
	    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 ccc7ac6f Patric Plitzner
	}
59
60 7084aeff Patric Plitzner
	/**
61
	 *
62
	 * @param clazz
63
	 * @return
64
	 */
65
	public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
66 9d0d72ef Patrick Plitzner
	    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 7084aeff Patric Plitzner
	}
73
74 ccc7ac6f Patric Plitzner
	/**
75
	 *
76 b9a0d300 l.morris
	 * @param clazz
77
	 * @return
78
	 */
79
	public <T extends DefinedTermBase> List<T> getPreferredTerms(Class<T> clazz){
80 9d0d72ef Patrick Plitzner
	    List terms = cachedTermMap.get(clazz);
81
	    if(terms==null){
82
	        terms = getFilteredTerms(TermStore.getTerms(clazz));
83
	        cachedTermMap.put(clazz, terms);
84 e7e84104 Katja Luther
85 9d0d72ef Patrick Plitzner
	    }
86
	    return terms;
87 b9a0d300 l.morris
	}
88 ccc7ac6f Patric Plitzner
89 ea781c57 n.hoffmann
	/**
90
	 * Generic method to get term preferences for a term vocabulary
91
	 *
92
	 * @param initialTerms a {@link java.util.List} object.
93
	 * @return a {@link java.util.List} object.
94
	 */
95
	public <T extends DefinedTermBase> List<T> getFilteredTerms(List<T> initialTerms){
96
97
		List<T> filteredTerms = new ArrayList<T>();
98 ccc7ac6f Patric Plitzner
99
		for (T term : initialTerms){
100 f4888ff9 Patrick Plitzner
101 69d856ba Katja Luther
			if (term instanceof TaxonRelationshipTypeInverseContainer){
102 69e82edd Katja Luther
				if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
103 69d856ba Katja Luther
					T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
104
					filteredTerms.add(type);
105 7084aeff Patric Plitzner
106 69d856ba Katja Luther
				}
107
			}
108 e8684498 Katja Luther
109 69e82edd Katja Luther
			if(!PreferencesUtil.getBooleanValue(getPrefName(term))){
110 ea781c57 n.hoffmann
				filteredTerms.add(term);
111
			}
112
		}
113 ccc7ac6f Patric Plitzner
114
		return filteredTerms;
115 ea781c57 n.hoffmann
	}
116 ccc7ac6f Patric Plitzner
117 f4888ff9 Patrick Plitzner
    private <T extends TermBase> String getPrefName(T term) {
118 e8684498 Katja Luther
        return term.getTermType()!=null?term.getTermType().toString()+term.getUuid().toString():""+term.getUuid().toString();
119 f4888ff9 Patrick Plitzner
    }
120
121 e8684498 Katja Luther
122 ea781c57 n.hoffmann
	private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
123 7084aeff Patric Plitzner
124 69d856ba Katja Luther
		String result = null;
125
		if(!initialTerms.isEmpty()){
126 7084aeff Patric Plitzner
127 69d856ba Katja Luther
			//TODO: there should be a more generic solution!!
128
	    	T entity = initialTerms.iterator().next();
129
	    	if (entity instanceof TaxonRelationshipTypeInverseContainer){
130
	    		result = ((TaxonRelationshipTypeInverseContainer) entity).getType().getClass().getName();
131
	    	} else {
132
	    		result = entity.getClass().getName();
133
	    	}
134
	        return result;
135 ccc7ac6f Patric Plitzner
	    }
136
	    return null;
137 ea781c57 n.hoffmann
	}
138 ccc7ac6f Patric Plitzner
139 ea781c57 n.hoffmann
	/**
140
	 * Generic method to set term preferences
141
	 *
142
	 * @param preferredTerms a {@link java.util.List} object.
143
	 * @param initialTerms a {@link java.util.List} object.
144
	 * @param <T> a T object.
145
	 */
146
	public <T extends DefinedTermBase> void setPreferredTerms(Collection<T> preferredTerms, Collection<T> initialTerms){
147 e8684498 Katja Luther
	String typeName = getTermClass(initialTerms);
148 ccc7ac6f Patric Plitzner
149 ea781c57 n.hoffmann
		Collection<UUID> undesiredTermUuids = new ArrayList<UUID>();
150 ccc7ac6f Patric Plitzner
151 ea781c57 n.hoffmann
		for(TermBase term : initialTerms){
152
			if(! preferredTerms.contains(term)){
153
				undesiredTermUuids.add(term.getUuid());
154 69e82edd Katja Luther
				PreferencesUtil.setBooleanValue(getPrefName(term), true);
155 a3c2ae78 Katja Luther
			}else{
156 69e82edd Katja Luther
			    PreferencesUtil.setBooleanValue(getPrefName(term), false);
157 ea781c57 n.hoffmann
			}
158 e8684498 Katja Luther
159
160 ea781c57 n.hoffmann
		}
161 e7e84104 Katja Luther
162
163
	}
164
165
166
	public void clearTermMapForTermType(TermType termType){
167
	    cachedTermMap.remove(termType);
168 ea781c57 n.hoffmann
	}
169
}