Project

General

Profile

Download (11.2 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.vaadin.presenter.dbstatus;
2

    
3
import java.sql.SQLException;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.Collections;
7
import java.util.Comparator;
8
import java.util.HashMap;
9
import java.util.HashSet;
10
import java.util.List;
11
import java.util.Set;
12
import java.util.SortedSet;
13
import java.util.UUID;
14

    
15
import com.vaadin.data.Container;
16
import com.vaadin.data.util.BeanItemContainer;
17
import com.vaadin.server.VaadinSession;
18

    
19
import eu.etaxonomy.cdm.api.service.IClassificationService;
20
import eu.etaxonomy.cdm.api.service.IDescriptionService;
21
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
22
import eu.etaxonomy.cdm.api.service.ITaxonService;
23
import eu.etaxonomy.cdm.api.service.ITermService;
24
import eu.etaxonomy.cdm.api.service.IVocabularyService;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
27
import eu.etaxonomy.cdm.model.common.Language;
28
import eu.etaxonomy.cdm.model.common.Representation;
29
import eu.etaxonomy.cdm.model.common.TermVocabulary;
30
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
31
import eu.etaxonomy.cdm.model.description.Distribution;
32
import eu.etaxonomy.cdm.model.description.Feature;
33
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
34
import eu.etaxonomy.cdm.model.description.TaxonDescription;
35
import eu.etaxonomy.cdm.model.location.NamedArea;
36
import eu.etaxonomy.cdm.model.taxon.Classification;
37
import eu.etaxonomy.cdm.model.taxon.Taxon;
38
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
39
import eu.etaxonomy.cdm.vaadin.container.CdmSQLContainer;
40
import eu.etaxonomy.cdm.vaadin.model.LazyLoadedContainer;
41
import eu.etaxonomy.cdm.vaadin.util.CdmQueryFactory;
42
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
43
import eu.etaxonomy.cdm.vaadin.view.dbstatus.DistributionTableView;
44
import eu.etaxonomy.cdm.vaadin.view.dbstatus.IDistributionTableComponent;
45

    
46

    
47
public class DistributionTablePresenter implements IDistributionTableComponent.DistributionTableComponentListener{
48

    
49

    
50
	private final IClassificationService classificationService;
51
	private final IVocabularyService vocabularyService;
52
	private final IDescriptionService descriptionService;
53
	private final ITaxonNodeService taxonNodeService;
54
	private final ITermService termService;
55
	private final DistributionTableView view;
56
	private final ITaxonService taxonService;
57

    
58
	public DistributionTablePresenter(DistributionTableView dtv) throws SQLException{
59
	    this.view = dtv;
60
	    view.addListener(this);
61
	    taxonService = CdmSpringContextHelper.getTaxonService();
62
	    classificationService = CdmSpringContextHelper.getClassificationService();
63
	    taxonNodeService = CdmSpringContextHelper.getTaxonNodeService();
64
		vocabularyService = CdmSpringContextHelper.getVocabularyService();
65
		descriptionService = CdmSpringContextHelper.getDescriptionService();
66
		termService = CdmSpringContextHelper.getTermService();
67
		view.dataBinding();
68
	}
69

    
70

    
71
	@Override
72
    public int updateDistributionField(String distributionArea, Object comboValue, Taxon taxon) {
73
	    Set<DefinedTermBase> chosenTerms = getChosenTerms();
74
	    NamedArea nArea = null;
75
	    for(DefinedTermBase dt:chosenTerms){
76
	        if(dt.getTitleCache().equalsIgnoreCase(distributionArea)){
77
	            nArea = (NamedArea) dt;
78
	            break;
79
	        }
80
	    }
81
	    List<Distribution> distribution = getDistribution(taxon);
82
	    Distribution db = null;
83
	    for(Distribution dist : distribution){
84
	        if(dist.getArea().equals(nArea)){
85
	            db = dist;
86
	            break;
87
	        }
88
	    }
89
	    if(comboValue == null){//delete descriptionElementBase
90
	        getDescriptionService().deleteDescriptionElement(db);//descriptionElementbase
91
            getTaxonService().saveOrUpdate(taxon);
92
            return 1;
93
        }else{
94
           db.setStatus((PresenceAbsenceTerm)comboValue);
95
           getDescriptionService().saveDescriptionElement(db);//descriptionElementbase?
96
           return 0;
97
        }
98
	}
99

    
100
	@Override
101
	public Set<DefinedTermBase> getChosenTerms() {
102
		VaadinSession session = VaadinSession.getCurrent();
103
		UUID termUUID = (UUID) session.getAttribute("selectedTerm");
104
		TermVocabulary<DefinedTermBase> term = vocabularyService.load(termUUID);
105
		term = CdmBase.deproxy(term, TermVocabulary.class);
106
		return term.getTerms();
107
	}
108

    
109

    
110
	@Override
111
	public List<String> getAbbreviatedTermList() {
112
		SortedSet<DefinedTermBase> terms = getTermSet();
113
		List<String> list = new ArrayList<String>();
114
		for(DefinedTermBase dtb: terms){
115
		    for(Representation r : dtb.getRepresentations()){
116
		        list.add(r.getAbbreviatedLabel());
117
		    }
118
		}
119
//		Collections.sort(list);
120
		return list;
121
	}
122

    
123
    @Override
124
    public List<String> getTermList() {
125
        SortedSet<DefinedTermBase> terms = getTermSet();
126
        List<String> list = new ArrayList<String>();
127
        for(DefinedTermBase dtb: terms){
128
           list.add(dtb.getTitleCache());
129
        }
130
//      Collections.sort(list);
131
        return list;
132
    }
133

    
134

    
135
	private SortedSet<DefinedTermBase> getTermSet(){
136
	    VaadinSession session = VaadinSession.getCurrent();
137
	    UUID termUUID = (UUID) session.getAttribute("selectedTerm");
138
	    TermVocabulary<DefinedTermBase> term = vocabularyService.load(termUUID);
139
	    term = CdmBase.deproxy(term, TermVocabulary.class);
140
	    return term.getTermsOrderedByLabels(Language.DEFAULT());
141
	}
142

    
143
	@Override
144
	public HashMap<DescriptionElementBase, Distribution> getDistribution(DefinedTermBase dt, Taxon taxon) {
145
		Set<Feature> setFeature = new HashSet<Feature>(Arrays.asList(Feature.DISTRIBUTION()));
146
		List<DescriptionElementBase> listTaxonDescription = descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
147
		HashMap<DescriptionElementBase, Distribution> map = null;
148
		for(DescriptionElementBase deb : listTaxonDescription){
149
			if(deb instanceof Distribution){
150
				Distribution db = (Distribution)deb;
151
				String titleCache = dt.getTitleCache();
152
				if(db.getArea().getTitleCache().equalsIgnoreCase(titleCache)){
153
					map = new HashMap<DescriptionElementBase, Distribution>();
154
					map.put(deb, db);
155
				}
156
			}
157
		}
158
		return map;
159
	}
160
	@Override
161
	public List<DescriptionElementBase> listDescriptionElementsForTaxon(Taxon taxon, Set<Feature> setFeature){
162
		List<DescriptionElementBase> listDescriptionElementsForTaxon = descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
163
		sort(listDescriptionElementsForTaxon);
164
		return listDescriptionElementsForTaxon;
165
	}
166

    
167
	@Override
168
	public List<Distribution> getDistribution(Taxon taxon) {
169
		Set<Feature> setFeature = new HashSet<Feature>(Arrays.asList(Feature.DISTRIBUTION()));
170
		List<Distribution> listTaxonDescription = descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
171
		return listTaxonDescription;
172

    
173
	}
174

    
175
	@Override
176
	public List<TaxonNode> getAllNodes(int start, int end){
177
		Classification classification = getChosenClassification();
178
		List<TaxonNode> nodesForClassification = taxonNodeService.listAllNodesForClassification(classification, start, end);
179
		return nodesForClassification;
180
	}
181

    
182

    
183
	@Override
184
	public Classification getChosenClassification() {
185
		VaadinSession session = VaadinSession.getCurrent();
186
		UUID classificationUUID = (UUID) session.getAttribute("classificationUUID");
187
		Classification classification = classificationService.load(classificationUUID);
188
		return classification;
189
	}
190

    
191
	@Override
192
	public int getSizeOfClassification(){
193
		Classification classification = getChosenClassification();
194
		return taxonNodeService.countAllNodesForClassification(classification);
195
	}
196

    
197

    
198
	@Override
199
	public CdmSQLContainer getSQLContainer() throws SQLException{
200
		Classification classification = getChosenClassification();
201
		int classificationId = classification.getId();
202
		List<String> termList = getTermList();
203
		CdmSQLContainer container = new CdmSQLContainer(CdmQueryFactory.generateTaxonDistributionQuery(termList, classificationId));
204
		return container;
205
	}
206

    
207
	@Override
208
	public void createDistributionField(final Taxon taxon, Object comboboxValue, String area) {
209
		Set<DefinedTermBase> chosenTerms = getChosenTerms();
210
		NamedArea nArea = null;
211
		for(DefinedTermBase dt:chosenTerms){
212
		    if(dt.getTitleCache().equalsIgnoreCase(area)){
213
		        nArea = (NamedArea) dt;
214
		        break;
215
		    }
216
		}
217
		Distribution db = Distribution.NewInstance(nArea, (PresenceAbsenceTerm) comboboxValue);
218
		Set<TaxonDescription> descriptions = taxon.getDescriptions();
219
		if (descriptions != null) {
220
		    for (TaxonDescription desc : descriptions) {
221
		        // add to first taxon description
222
		        desc.addElement(db);
223
		        getDescriptionService().saveOrUpdate(desc);
224
		        break;
225
		    }
226
		} else {// there are no TaxonDescription yet.
227
		    TaxonDescription td = TaxonDescription.NewInstance(taxon);
228
		    td.addElement(db);
229
		    taxon.addDescription(td);
230
		    getTaxonService().saveOrUpdate(taxon);
231
		}
232
	}
233

    
234

    
235
	@Override
236
	public Container getPresenceAbsenceContainer(){
237
		BeanItemContainer<PresenceAbsenceTerm> termContainer = new BeanItemContainer<PresenceAbsenceTerm>(PresenceAbsenceTerm.class);
238
		termContainer.addAll(getPresenceAbsenceTerms());
239
		return termContainer;
240
	}
241

    
242

    
243
	@Override
244
	public List<PresenceAbsenceTerm> getPresenceAbsenceTerms() {
245
		//TODO Better to use TermType instead of class to get the list
246
		return termService.list(PresenceAbsenceTerm.class, null, null, null, DESCRIPTION_INIT_STRATEGY);
247
	}
248

    
249
	protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
250
            "$",
251
            "elements.*",
252
            "elements.sources.citation.authorship.$",
253
            "elements.sources.nameUsedInSource.originalNameString",
254
            "elements.area.level",
255
            "elements.modifyingText",
256
            "elements.states.*",
257
            "elements.media",
258
            "elements.multilanguageText",
259
            "multilanguageText",
260
            "stateData.$",
261
            "annotations",
262
            "markers",
263
            "sources.citation.authorship",
264
            "sources.nameUsedInSource",
265
            "multilanguageText",
266
            "media",
267
            "name.$",
268
            "name.rank.representations",
269
            "name.status.type.representations",
270
            "taxon2.name"
271
    });
272

    
273

    
274
	@Override
275
	public IClassificationService getClassificationService() {
276
		return classificationService;
277
	}
278

    
279

    
280
	@Override
281
	public IVocabularyService getVocabularyService() {
282
		return vocabularyService;
283
	}
284

    
285

    
286
	@Override
287
	public IDescriptionService getDescriptionService() {
288
		return descriptionService;
289
	}
290

    
291

    
292
	@Override
293
	public ITaxonNodeService getTaxonNodeService() {
294
		return taxonNodeService;
295
	}
296

    
297

    
298
	@Override
299
	public ITermService getTermService() {
300
		return termService;
301
	}
302

    
303
	@Override
304
	public LazyLoadedContainer getTableContainer() {
305
		// TODO Auto-generated method stub
306
		return null;
307
	}
308

    
309

    
310

    
311
	@Override
312
	public ITaxonService getTaxonService() {
313
		return taxonService;
314
	}
315

    
316

    
317
	/**Helper Methods*/
318

    
319
	private void sort(List<DescriptionElementBase> list){
320
		Collections.sort(list, new Comparator<DescriptionElementBase>() {
321

    
322
			@Override
323
			public int compare(DescriptionElementBase o1, DescriptionElementBase o2) {
324
				String feature1 = o1.getFeature().getTitleCache();
325
				String feature2 = o2.getFeature().getTitleCache();
326
				if(feature1 !=null && feature2 !=null){
327
					return feature1.compareTo(feature2);
328
				}else{
329
					return 0;
330

    
331
				}
332
			}
333
		});
334

    
335
	}
336
}
(2-2/2)