Project

General

Profile

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

    
3
import java.sql.SQLException;
4
import java.util.ArrayList;
5
import java.util.Arrays;
6
import java.util.List;
7
import java.util.UUID;
8

    
9
import com.vaadin.data.Item;
10
import com.vaadin.data.Property;
11
import com.vaadin.data.Property.ValueChangeEvent;
12
import com.vaadin.data.Property.ValueChangeListener;
13
import com.vaadin.event.ItemClickEvent;
14
import com.vaadin.event.ItemClickEvent.ItemClickListener;
15
import com.vaadin.navigator.View;
16
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
17
import com.vaadin.ui.AbsoluteLayout;
18
import com.vaadin.ui.Button;
19
import com.vaadin.ui.Button.ClickEvent;
20
import com.vaadin.ui.Button.ClickListener;
21
import com.vaadin.ui.CustomComponent;
22
import com.vaadin.ui.ListSelect;
23
import com.vaadin.ui.Notification;
24
import com.vaadin.ui.Notification.Type;
25
import com.vaadin.ui.Table;
26
import com.vaadin.ui.UI;
27
import com.vaadin.ui.VerticalLayout;
28
import com.vaadin.ui.Window;
29

    
30
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
31
import eu.etaxonomy.cdm.model.common.Language;
32
import eu.etaxonomy.cdm.model.common.Representation;
33
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
34
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36
import eu.etaxonomy.cdm.vaadin.component.DetailWindow;
37
import eu.etaxonomy.cdm.vaadin.component.HorizontalToolbar;
38
import eu.etaxonomy.cdm.vaadin.container.CdmSQLContainer;
39
import eu.etaxonomy.cdm.vaadin.container.PresenceAbsenceTermContainer;
40
import eu.etaxonomy.cdm.vaadin.presenter.dbstatus.DistributionTablePresenter;
41
import eu.etaxonomy.cdm.vaadin.util.CdmQueryFactory;
42
import eu.etaxonomy.cdm.vaadin.util.DistributionEditorUtil;
43
import eu.etaxonomy.cdm.vaadin.util.TermCacher;
44

    
45
public class DistributionTableView extends CustomComponent implements View{
46

    
47
	private static final long serialVersionUID = 1L;
48
    private HorizontalToolbar toolbar;
49
	private Table table;
50

    
51
	private DistributionTablePresenter listener;
52

    
53
    private CdmSQLContainer container;
54
	private DistributionSettingsConfigWindow distributionSettingConfigWindow;
55

    
56
	/**
57
	 * The constructor should first build the main layout, set the
58
	 * composition root and then do any custom initialization.
59
	 *
60
	 * The constructor will not be automatically regenerated by the
61
	 * visual editor.
62
	 */
63
	public DistributionTableView() {
64
		AbsoluteLayout mainLayout = initLayout();
65
		setCompositionRoot(mainLayout);
66
		createEditClickListener();
67

    
68
	}
69

    
70
	private AbsoluteLayout initLayout() {
71
		AbsoluteLayout mainLayout = new AbsoluteLayout();
72
		mainLayout.setImmediate(false);
73
		mainLayout.setWidth("100%");
74
		mainLayout.setHeight("100%");
75

    
76
		setWidth("100.0%");
77
		setHeight("100.0%");
78

    
79
		//Horizontal Toolbar
80
		toolbar = new HorizontalToolbar();
81
		mainLayout.addComponent(toolbar, "top:0.0px;right:0.0px;");
82

    
83
		// table + formatting
84
		table = new Table(){
85
			private static final long serialVersionUID = -5148756917468804385L;
86

    
87
			@Override
88
			protected String formatPropertyValue(Object rowId, Object colId, Property<?> property) {
89
				String formattedValue = null;
90
				PresenceAbsenceTerm presenceAbsenceTerm = null;
91
				Object value = property.getValue();
92
				if(value instanceof String){
93
					presenceAbsenceTerm = TermCacher.getInstance().getPresenceAbsenceTerm((String) value);
94
				}
95
				if(presenceAbsenceTerm!=null){
96
					Representation representation = presenceAbsenceTerm.getRepresentation(Language.DEFAULT());
97
					if(representation!=null){
98
						if(DistributionEditorUtil.isAbbreviatedLabels()){
99
							formattedValue = representation.getAbbreviatedLabel();
100
						}
101
						else{
102
							formattedValue = representation.getLabel();
103
						}
104
					}
105
					if(formattedValue==null){
106
						formattedValue = presenceAbsenceTerm.getTitleCache();
107
					}
108
					return formattedValue;
109
				}
110
				return super.formatPropertyValue(rowId, colId, property);
111
			}
112
		};
113
		table.setImmediate(false);
114
		table.setWidth("100.0%");
115
		table.setHeight("100.0%");
116

    
117
        table.setColumnReorderingAllowed(true);
118
        table.setSortEnabled(false);
119

    
120
        table.setColumnCollapsingAllowed(true);
121
        table.setSelectable(true);
122
        table.setPageLength(20);
123
        table.setFooterVisible(true);
124
        table.setCacheRate(20);
125

    
126
		table.addItemClickListener(new ItemClickListener() {
127
            private static final long serialVersionUID = 2743935539139014771L;
128
            @Override
129
            public void itemClick(ItemClickEvent event) {
130
                if(!(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.TAXON_COLUMN)) && !(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.RANK_COLUMN))){
131
                    final Item item = event.getItem();
132
                    Property<?> itemProperty = item.getItemProperty("uuid");
133
                    UUID uuid = UUID.fromString(itemProperty.getValue().toString());
134
                    final Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
135
                    final String areaID = (String) event.getPropertyId();
136
                    PresenceAbsenceTerm presenceAbsenceTerm = null;
137
                    Object statusValue = item.getItemProperty(areaID).getValue();
138
                    if(statusValue instanceof String){
139
                    	presenceAbsenceTerm = TermCacher.getInstance().getPresenceAbsenceTerm((String) statusValue);
140
                    }
141
                    //popup window
142
                    final Window popup = new Window("Choose distribution status");
143
                    final ListSelect termSelect = new ListSelect();
144
                    termSelect.setSizeFull();
145
                    termSelect.setContainerDataSource(PresenceAbsenceTermContainer.getInstance());
146
                    termSelect.setNullSelectionAllowed(true);
147
                    termSelect.setValue(presenceAbsenceTerm);
148
                    termSelect.addValueChangeListener(new ValueChangeListener() {
149
						
150
						private static final long serialVersionUID = 1883728509174752769L;
151

    
152
						@Override
153
						public void valueChange(ValueChangeEvent event) {
154
							System.out.println(event);
155
							Object distributionStatus = event.getProperty().getValue();
156
							listener.updateDistributionField(areaID, distributionStatus, taxon);
157
							container.refresh();
158
							popup.close();
159
						}
160
					});
161
                    VerticalLayout layout = new VerticalLayout(termSelect);
162
                    popup.setContent(layout);
163
                    popup.setModal(true);
164
                    popup.center();
165
                    UI.getCurrent().addWindow(popup);
166
                }
167
            }
168
        });
169

    
170

    
171
		mainLayout.addComponent(table, "top:75px;right:0.0px;");
172
		return mainLayout;
173
	}
174

    
175
	public void addListener(DistributionTablePresenter listener) {
176
	   this.listener = listener;
177
	}
178

    
179
	@Override
180
	public void enter(ViewChangeEvent event) {
181
		try {
182
			container = listener.getSQLContainer();
183
		} catch (SQLException e) {
184
			DistributionEditorUtil.showSqlError(e);
185
			return;
186
		}
187
		if(container==null){
188
			return;
189
		}
190

    
191
		table.setContainerDataSource(container);
192

    
193
		List<String> columnHeaders = new ArrayList<>(Arrays.asList(table.getColumnHeaders()));
194
		columnHeaders.remove(CdmQueryFactory.DTYPE_COLUMN);
195
		columnHeaders.remove(CdmQueryFactory.ID_COLUMN);
196
		columnHeaders.remove(CdmQueryFactory.UUID_COLUMN);
197
		columnHeaders.remove(CdmQueryFactory.CLASSIFICATION_COLUMN);
198

    
199
		List<String> columnList = new ArrayList<String>(columnHeaders);
200

    
201
		String[] string = new String[columnList.size()];
202

    
203
		table.setVisibleColumns(columnList.toArray());
204
		table.setColumnHeaders(columnList.toArray(string));
205
		table.setColumnFooter(CdmQueryFactory.TAXON_COLUMN, "Total amount of Taxa displayed: " + container.size());
206

    
207

    
208
	}
209

    
210
	private void createEditClickListener(){
211
		Button detailButton = toolbar.getDetailButton();
212
		detailButton.setCaption("Detail View");
213
		detailButton.addClickListener(new ClickListener() {
214

    
215
			private static final long serialVersionUID = 1479133195403139547L;
216

    
217
			@Override
218
			public void buttonClick(ClickEvent event) {
219
				Object selectedItemId = DistributionTableView.this.table.getValue();
220
				if(selectedItemId!=null){
221
					final UUID uuid = UUID.fromString(table.getItem(selectedItemId).getItemProperty("uuid").getValue().toString());
222
					Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
223
					List<DescriptionElementBase> listDescriptions = listener.listDescriptionElementsForTaxon(taxon, null);
224
					DetailWindow detailWindow = new DetailWindow(taxon, listDescriptions);
225
					Window window = detailWindow.createWindow();
226
					window.center();
227
					getUI().addWindow(window);
228
				}
229
				else{
230
					Notification.show("Please select a taxon", Type.HUMANIZED_MESSAGE);
231
				}
232
			}
233
		});
234

    
235
		Button distributionSettingsButton = toolbar.getDistributionSettingsButton();
236
		distributionSettingsButton.addClickListener(new ClickListener() {
237

    
238
			private static final long serialVersionUID = -8695281619014251132L;
239

    
240
			@Override
241
            public void buttonClick(ClickEvent event) {
242
                openDistributionSettings();
243
            }
244
        });
245

    
246
		Button settingsButton = toolbar.getSettingsButton();
247
		settingsButton.addClickListener(new ClickListener() {
248

    
249
			private static final long serialVersionUID = -147703680580181544L;
250

    
251
			@Override
252
			public void buttonClick(ClickEvent event) {
253
				openSettings();
254
			}
255
		});
256
	}
257

    
258
	public void openSettings() {
259
		SettingsConfigWindow cw = new SettingsConfigWindow(this);
260
		Window window  = cw.createWindow();
261
		getUI().addWindow(window);
262
	}
263

    
264
	public void openDistributionSettings() {
265
		if(distributionSettingConfigWindow==null){
266
			distributionSettingConfigWindow = new DistributionSettingsConfigWindow(this);
267
		}
268
        Window window  = distributionSettingConfigWindow.createWindow();
269
        getUI().addWindow(window);
270
	}
271

    
272
}
(3-3/5)