Project

General

Profile

Download (8.98 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.description.DescriptionElementBase;
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

    
44
public class DistributionTableView extends CustomComponent implements View{
45

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

    
50
	private DistributionTablePresenter listener;
51

    
52
	private List<String> columnList;
53
	private ArrayList<String> headerList;
54
    private CdmSQLContainer container;
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
84
		table = new Table();
85
		table.setImmediate(false);
86
		table.setWidth("100.0%");
87
		table.setHeight("100.0%");
88

    
89
        table.setColumnReorderingAllowed(true);
90
        table.setSortEnabled(true);
91

    
92
        table.setColumnCollapsingAllowed(true);
93
        table.setSelectable(true);
94
        table.setPageLength(20);
95
        table.setFooterVisible(true);
96
        table.setCacheRate(20);
97

    
98
		table.addItemClickListener(new ItemClickListener() {
99
            private static final long serialVersionUID = 2743935539139014771L;
100
            @Override
101
            public void itemClick(ItemClickEvent event) {
102
                if(!(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.TAXON_COLUMN)) && !(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.RANK_COLUMN))){
103
                    final Item item = event.getItem();
104
                    Property<?> itemProperty = item.getItemProperty("uuid");
105
                    UUID uuid = UUID.fromString(itemProperty.getValue().toString());
106
                    final Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
107
                    final String areaID = (String) event.getPropertyId();
108

    
109
                    //popup window
110
                    final Window popup = new Window("Choose distribution status");
111
                    final ListSelect termSelect = new ListSelect();
112
                    termSelect.setSizeFull();
113
                    termSelect.setContainerDataSource(new PresenceAbsenceTermContainer());
114
                    Button btnOk = new Button("OK", new ClickListener() {
115
                        private static final long serialVersionUID = -3732219609337335697L;
116
                        @Override
117
                        public void buttonClick(ClickEvent event) {
118
                            Object distributionStatus = termSelect.getValue();
119
                            listener.updateDistributionField(areaID, distributionStatus, taxon);
120
                            container.refresh();
121
                            popup.close();
122
                        }
123
                    });
124
                    VerticalLayout layout = new VerticalLayout(termSelect, btnOk);
125
                    layout.setComponentAlignment(btnOk, Alignment.BOTTOM_RIGHT);
126
                    popup.setContent(layout);
127
                    popup.setModal(true);
128
                    popup.center();
129
                    UI.getCurrent().addWindow(popup);
130
                }
131
            }
132
        });
133

    
134

    
135
		mainLayout.addComponent(table, "top:75px;right:0.0px;");
136
		return mainLayout;
137
	}
138

    
139
	public void addListener(DistributionTablePresenter listener) {
140
	   this.listener = listener;
141
	}
142

    
143
	@Override
144
	public void enter(ViewChangeEvent event) {
145
		try {
146
			container = listener.getSQLContainer();
147
		} catch (SQLException e) {
148
			Notification.show("Error while accessing data base", Type.ERROR_MESSAGE);
149
			e.printStackTrace();
150
			return;
151
		}
152
		if(container==null){
153
			return;
154
		}
155

    
156
		table.setContainerDataSource(container);
157

    
158
		columnList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,CdmQueryFactory.RANK_COLUMN}));
159
		List<String> namedAreas = listener.getNamedAreasLabels();
160
		columnList.addAll(namedAreas);
161
		table.setVisibleColumns(columnList.toArray());
162

    
163
		headerList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,"Rang"}));
164
		headerList.addAll(listener.getNamedAreasLabels());
165
		String[] string = new String[headerList.size()];
166
		table.setColumnHeaders(headerList.toArray(string));
167

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

    
170

    
171
	}
172

    
173
	private void createEditClickListener(){
174
		Button detailButton = toolbar.getDetailButton();
175
		detailButton.setCaption("Detail View");
176
		detailButton.addClickListener(new ClickListener() {
177

    
178
			private static final long serialVersionUID = 1479133195403139547L;
179

    
180
			@Override
181
			public void buttonClick(ClickEvent event) {
182
				Object selectedItemId = DistributionTableView.this.table.getValue();
183
				if(selectedItemId!=null){
184
					final UUID uuid = UUID.fromString(table.getItem(selectedItemId).getItemProperty("uuid").getValue().toString());
185
					Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
186
					List<DescriptionElementBase> listDescriptions = listener.listDescriptionElementsForTaxon(taxon, null);
187
					DetailWindow detailWindow = new DetailWindow(taxon, listDescriptions);
188
					Window window = detailWindow.createWindow();
189
					window.center();
190
					getUI().addWindow(window);
191
				}
192
				else{
193
					Notification.show("Please select a taxon", Type.HUMANIZED_MESSAGE);
194
				}
195
			}
196
		});
197

    
198
		Button distributionSettingsButton = toolbar.getDistributionSettingsButton();
199
		distributionSettingsButton.addClickListener(new ClickListener() {
200

    
201
			private static final long serialVersionUID = -8695281619014251132L;
202

    
203
			@Override
204
            public void buttonClick(ClickEvent event) {
205
                openDistributionSettings();
206
            }
207
        });
208

    
209
		Button settingsButton = toolbar.getSettingsButton();
210
		settingsButton.addClickListener(new ClickListener() {
211

    
212
			private static final long serialVersionUID = -147703680580181544L;
213

    
214
			@Override
215
			public void buttonClick(ClickEvent event) {
216
				openSettings();
217
			}
218
		});
219

    
220
		Button saveButton = toolbar.getSaveButton();
221
		saveButton.setClickShortcut(KeyCode.S, ModifierKey.CTRL);
222
		saveButton.setDescription("Shortcut: CTRL+S");
223
		saveButton.setCaption("Save Data");
224
		saveButton.addClickListener(new ClickListener() {
225
			private static final long serialVersionUID = 1L;
226
			@Override
227
			public void buttonClick(ClickEvent event) {
228
				ConversationHolder conversationHolder = (ConversationHolder) VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_CONVERSATION);
229
				try{
230
					conversationHolder.commit();
231
				}catch(Exception stateException){
232
					//TODO create Table without DTO
233
				}
234
				Notification.show("Data saved", Notification.Type.HUMANIZED_MESSAGE);
235
			}
236
		});
237

    
238
	}
239

    
240
	public void openSettings() {
241
		SettingsConfigWindow cw = new SettingsConfigWindow(this);
242
		Window window  = cw.createWindow();
243
		getUI().addWindow(window);
244
	}
245

    
246
	public void openDistributionSettings() {
247
		DistributionSettingsConfigWindow cw = new DistributionSettingsConfigWindow(this);
248
        Window window  = cw.createWindow();
249
        getUI().addWindow(window);
250
	}
251

    
252
}
(3-3/5)