Project

General

Profile

Download (10.3 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.event.ItemClickEvent;
12
import com.vaadin.event.ItemClickEvent.ItemClickListener;
13
import com.vaadin.event.ShortcutAction.KeyCode;
14
import com.vaadin.event.ShortcutAction.ModifierKey;
15
import com.vaadin.navigator.View;
16
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
17
import com.vaadin.server.VaadinSession;
18
import com.vaadin.ui.AbsoluteLayout;
19
import com.vaadin.ui.Alignment;
20
import com.vaadin.ui.Button;
21
import com.vaadin.ui.Button.ClickEvent;
22
import com.vaadin.ui.Button.ClickListener;
23
import com.vaadin.ui.CustomComponent;
24
import com.vaadin.ui.ListSelect;
25
import com.vaadin.ui.Notification;
26
import com.vaadin.ui.Notification.Type;
27
import com.vaadin.ui.Table;
28
import com.vaadin.ui.UI;
29
import com.vaadin.ui.VerticalLayout;
30
import com.vaadin.ui.Window;
31

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

    
48
public class DistributionTableView extends CustomComponent implements View{
49

    
50
	private static final long serialVersionUID = 1L;
51
    private HorizontalToolbar toolbar;
52
	private Table table;
53

    
54
	private DistributionTablePresenter listener;
55

    
56
	private List<String> columnList;
57
	private ArrayList<String> headerList;
58
    private CdmSQLContainer container;
59

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

    
72
	}
73

    
74
	private AbsoluteLayout initLayout() {
75
		AbsoluteLayout mainLayout = new AbsoluteLayout();
76
		mainLayout.setImmediate(false);
77
		mainLayout.setWidth("100%");
78
		mainLayout.setHeight("100%");
79

    
80
		setWidth("100.0%");
81
		setHeight("100.0%");
82

    
83
		//Horizontal Toolbar
84
		toolbar = new HorizontalToolbar();
85
		mainLayout.addComponent(toolbar, "top:0.0px;right:0.0px;");
86

    
87
		// table + formatting
88
		table = new Table(){
89
			private static final long serialVersionUID = -5148756917468804385L;
90

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

    
121
        table.setColumnReorderingAllowed(true);
122
        table.setSortEnabled(true);
123
        
124
        table.setColumnCollapsingAllowed(true);
125
        table.setSelectable(true);
126
        table.setPageLength(20);
127
        table.setFooterVisible(true);
128
        table.setCacheRate(20);
129

    
130
		table.addItemClickListener(new ItemClickListener() {
131
            private static final long serialVersionUID = 2743935539139014771L;
132
            @Override
133
            public void itemClick(ItemClickEvent event) {
134
                if(!(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.TAXON_COLUMN)) && !(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.RANK_COLUMN))){
135
                    final Item item = event.getItem();
136
                    Property<?> itemProperty = item.getItemProperty("uuid");
137
                    UUID uuid = UUID.fromString(itemProperty.getValue().toString());
138
                    final Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
139
                    final String areaID = (String) event.getPropertyId();
140

    
141
                    //popup window
142
                    final Window popup = new Window("Choose distribution status");
143
                    final ListSelect termSelect = new ListSelect();
144
                    termSelect.setSizeFull();
145
                    termSelect.setNullSelectionAllowed(false);
146
                    termSelect.setContainerDataSource(PresenceAbsenceTermContainer.getInstance());
147
                    Button btnOk = new Button("OK", new ClickListener() {
148
                        private static final long serialVersionUID = -3732219609337335697L;
149
                        @Override
150
                        public void buttonClick(ClickEvent event) {
151
                            Object distributionStatus = termSelect.getValue();
152
                            listener.updateDistributionField(areaID, distributionStatus, taxon);
153
                            container.refresh();
154
                            popup.close();
155
                        }
156
                    });
157
                    VerticalLayout layout = new VerticalLayout(termSelect, btnOk);
158
                    layout.setComponentAlignment(btnOk, Alignment.BOTTOM_RIGHT);
159
                    popup.setContent(layout);
160
                    popup.setModal(true);
161
                    popup.center();
162
                    UI.getCurrent().addWindow(popup);
163
                }
164
            }
165
        });
166

    
167

    
168
		mainLayout.addComponent(table, "top:75px;right:0.0px;");
169
		return mainLayout;
170
	}
171

    
172
	public void addListener(DistributionTablePresenter listener) {
173
	   this.listener = listener;
174
	}
175

    
176
	@Override
177
	public void enter(ViewChangeEvent event) {
178
		try {
179
			container = listener.getSQLContainer();
180
		} catch (SQLException e) {
181
			Notification.show("Error while accessing data base", Type.ERROR_MESSAGE);
182
			e.printStackTrace();
183
			return;
184
		}
185
		if(container==null){
186
			return;
187
		}
188

    
189
		table.setContainerDataSource(container);
190

    
191
		columnList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,CdmQueryFactory.RANK_COLUMN}));
192
		List<String> namedAreas = listener.getNamedAreasLabels();
193
		columnList.addAll(namedAreas);
194
		table.setVisibleColumns(columnList.toArray());
195

    
196
		headerList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,"Rang"}));
197
		headerList.addAll(listener.getNamedAreasLabels());
198
		String[] string = new String[headerList.size()];
199
		table.setColumnHeaders(headerList.toArray(string));
200

    
201
		table.setColumnFooter(CdmQueryFactory.TAXON_COLUMN, "Total amount of Taxa displayed: " + container.size());
202

    
203

    
204
	}
205

    
206
	private void createEditClickListener(){
207
		Button detailButton = toolbar.getDetailButton();
208
		detailButton.setCaption("Detail View");
209
		detailButton.addClickListener(new ClickListener() {
210

    
211
			private static final long serialVersionUID = 1479133195403139547L;
212

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

    
231
		Button distributionSettingsButton = toolbar.getDistributionSettingsButton();
232
		distributionSettingsButton.addClickListener(new ClickListener() {
233

    
234
			private static final long serialVersionUID = -8695281619014251132L;
235

    
236
			@Override
237
            public void buttonClick(ClickEvent event) {
238
                openDistributionSettings();
239
            }
240
        });
241

    
242
		Button settingsButton = toolbar.getSettingsButton();
243
		settingsButton.addClickListener(new ClickListener() {
244

    
245
			private static final long serialVersionUID = -147703680580181544L;
246

    
247
			@Override
248
			public void buttonClick(ClickEvent event) {
249
				openSettings();
250
			}
251
		});
252

    
253
		Button saveButton = toolbar.getSaveButton();
254
		saveButton.setClickShortcut(KeyCode.S, ModifierKey.CTRL);
255
		saveButton.setDescription("Shortcut: CTRL+S");
256
		saveButton.setCaption("Save Data");
257
		saveButton.addClickListener(new ClickListener() {
258
			private static final long serialVersionUID = 1L;
259
			@Override
260
			public void buttonClick(ClickEvent event) {
261
				ConversationHolder conversationHolder = (ConversationHolder) VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_CONVERSATION);
262
				try{
263
					conversationHolder.commit();
264
				}catch(Exception stateException){
265
					//TODO create Table without DTO
266
				}
267
				Notification.show("Data saved", Notification.Type.HUMANIZED_MESSAGE);
268
			}
269
		});
270

    
271
	}
272

    
273
	public void openSettings() {
274
		SettingsConfigWindow cw = new SettingsConfigWindow(this);
275
		Window window  = cw.createWindow();
276
		getUI().addWindow(window);
277
	}
278

    
279
	public void openDistributionSettings() {
280
		DistributionSettingsConfigWindow cw = new DistributionSettingsConfigWindow(this);
281
        Window window  = cw.createWindow();
282
        getUI().addWindow(window);
283
	}
284
	
285
}
(2-2/4)