Project

General

Profile

Download (8.65 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.Collection;
7
import java.util.Collections;
8
import java.util.HashMap;
9
import java.util.HashSet;
10
import java.util.List;
11
import java.util.Set;
12
import java.util.UUID;
13

    
14
import com.vaadin.data.util.BeanItemContainer;
15
import com.vaadin.server.VaadinSession;
16
import com.vaadin.ui.ComboBox;
17

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

    
44

    
45
public class DistributionTablePresenter implements IDistributionTableComponent.DistributionTableComponentListener{
46

    
47

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

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

    
68

    
69
	@Override
70
    public ComboBox updateDistributionField(DescriptionElementBase deb,
71
			Distribution db,
72
			BeanItemContainer<PresenceAbsenceTerm> termContainer, ComboBox box,
73
			Taxon taxon) {
74
		// TODO Auto-generated method stub
75
		return null;
76
	}
77

    
78
	@Override
79
	public Set<DefinedTermBase> getChosenTerms() {
80
		VaadinSession session = VaadinSession.getCurrent();
81
		UUID termUUID = (UUID) session.getAttribute("selectedTerm");
82
		TermVocabulary<DefinedTermBase> term = vocabularyService.load(termUUID);
83
		term = CdmBase.deproxy(term, TermVocabulary.class);
84
		return term.getTerms();
85
	}
86

    
87

    
88
	public List<String> getTermList() {
89
		VaadinSession session = VaadinSession.getCurrent();
90
		UUID termUUID = (UUID) session.getAttribute("selectedTerm");
91
		TermVocabulary<DefinedTermBase> term = vocabularyService.load(termUUID);
92
		term = CdmBase.deproxy(term, TermVocabulary.class);
93
		Set<DefinedTermBase> terms = term.getTerms();
94
		List<String> list = new ArrayList<String>();
95
		for(DefinedTermBase dtb: terms){
96
			list.add(dtb.getTitleCache());
97
		}
98
		Collections.sort(list);
99
		return list;
100
	}
101

    
102
	@Override
103
	public HashMap<DescriptionElementBase, Distribution> getDistribution(DefinedTermBase dt, Taxon taxon) {
104
		Set<Feature> setFeature = new HashSet<Feature>(Arrays.asList(Feature.DISTRIBUTION()));
105
		List<DescriptionElementBase> listTaxonDescription = descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
106
		HashMap<DescriptionElementBase, Distribution> map = null;
107
		for(DescriptionElementBase deb : listTaxonDescription){
108
			if(deb instanceof Distribution){
109
				Distribution db = (Distribution)deb;
110
				String titleCache = dt.getTitleCache();
111
				if(db.getArea().getTitleCache().equalsIgnoreCase(titleCache)){
112
					map = new HashMap<DescriptionElementBase, Distribution>();
113
					map.put(deb, db);
114
				}
115
			}
116
		}
117
		return map;
118
	}
119
	@Override
120
	public List<DescriptionElementBase> listDescriptionElementsForTaxon(Taxon taxon, Set<Feature> setFeature){
121
		return descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
122
	}
123

    
124
	@Override
125
	public List<Distribution> getDistribution(Taxon taxon) {
126
		Set<Feature> setFeature = new HashSet<Feature>(Arrays.asList(Feature.DISTRIBUTION()));
127
		List<Distribution> listTaxonDescription = descriptionService.listDescriptionElementsForTaxon(taxon, setFeature, null, null, null, DESCRIPTION_INIT_STRATEGY);
128
		return listTaxonDescription;
129

    
130
	}
131

    
132
	@Override
133
	public List<TaxonNode> getAllNodes(int start, int end){
134
		Classification classification = getChosenClassification();
135
		List<TaxonNode> nodesForClassification = taxonNodeService.listAllNodesForClassification(classification, start, end);
136
		return nodesForClassification;
137
	}
138

    
139

    
140
	@Override
141
	public Classification getChosenClassification() {
142
		VaadinSession session = VaadinSession.getCurrent();
143
		UUID classificationUUID = (UUID) session.getAttribute("classificationUUID");
144
		Classification classification = classificationService.load(classificationUUID);
145
		return classification;
146
	}
147

    
148
	@Override
149
	public int getSizeOfClassification(){
150
		Classification classification = getChosenClassification();
151
		return taxonNodeService.countAllNodesForClassification(classification);
152
	}
153

    
154
	@Override
155
	public DbTableDTOS getDataList(int start, int end){
156
		List<TaxonNode> nodes = getAllNodes(start, end);
157
		DbTableDTOS items = new DbTableDTOS();
158
		for(TaxonNode tn: nodes){
159
			Taxon taxon = tn.getTaxon();
160
			DbTableDTO dbTableDTO = new DbTableDTO(taxon);
161

    
162
			Set<DefinedTermBase> terms = getChosenTerms();
163
			List<Distribution> distribution = getDistribution(taxon);
164
			for(DefinedTermBase dt: terms){
165
				for(Distribution db : distribution){
166
					if(dt.getTitleCache().equalsIgnoreCase(db.getArea().getTitleCache())){
167
//						DistributionDTO distributionDTO = new DistributionDTO(db.getStatus().getTitleCache());
168
//						dbTableDTO.setdDTO(distributionDTO);
169
					}
170

    
171
				}
172
			}
173
			items.add(dbTableDTO);
174
		}
175
		return items;
176
	}
177

    
178
	@Override
179
	public CdmSQLContainer getSQLContainer() throws SQLException{
180
		Classification classification = getChosenClassification();
181
		int classificationId = classification.getId();
182
		List<String> termList = getTermList();
183
		CdmSQLContainer container = new CdmSQLContainer(CdmQueryFactory.generateTaxonDistributionQuery(termList, classificationId));
184
		return container;
185
	}
186

    
187
	@Override
188
	public LazyLoadedContainer getLazyLoadedContainer(){
189
		LazyLoadedContainer lz = new LazyLoadedContainer(CdmTaxonTableCollection.class);
190
	    lz.addListener(this);
191
		return lz;
192

    
193
	}
194

    
195

    
196
	@Override
197
	public List<PresenceAbsenceTerm> getPresenceAbsenceTerms() {
198
		//TODO Better to use TermType instead of class to get the list
199
		return termService.list(PresenceAbsenceTerm.class, null, null, null, DESCRIPTION_INIT_STRATEGY);
200
	}
201

    
202
	protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
203
            "$",
204
            "elements.*",
205
            "elements.sources.citation.authorship.$",
206
            "elements.sources.nameUsedInSource.originalNameString",
207
            "elements.area.level",
208
            "elements.modifyingText",
209
            "elements.states.*",
210
            "elements.media",
211
            "elements.multilanguageText",
212
            "multilanguageText",
213
            "stateData.$"
214
    });
215

    
216

    
217
	@Override
218
	public IClassificationService getClassificationService() {
219
		return classificationService;
220
	}
221

    
222

    
223
	@Override
224
	public IVocabularyService getVocabularyService() {
225
		return vocabularyService;
226
	}
227

    
228

    
229
	@Override
230
	public IDescriptionService getDescriptionService() {
231
		return descriptionService;
232
	}
233

    
234

    
235
	@Override
236
	public ITaxonNodeService getTaxonNodeService() {
237
		return taxonNodeService;
238
	}
239

    
240

    
241
	@Override
242
	public ITermService getTermService() {
243
		return termService;
244
	}
245

    
246
	@Override
247
	public LazyLoadedContainer getTableContainer() {
248
		// TODO Auto-generated method stub
249
		return null;
250
	}
251

    
252

    
253

    
254
	@Override
255
	public ITaxonService getTaxonService() {
256
		return taxonService;
257
	}
258

    
259

    
260
}
(2-2/2)