Project

General

Profile

Download (7.86 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

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

    
67
	}
68

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

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

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

    
82
		// table
83
		table = new Table();
84
		table.setImmediate(false);
85
		table.setWidth("100.0%");
86
		table.setHeight("100.0%");
87
		mainLayout.addComponent(table, "top:75px;right:0.0px;");
88
		return mainLayout;
89
	}
90

    
91
	public void addListener(DistributionTablePresenter listener) {
92
	   this.listener = listener;
93
	}
94

    
95
	@Override
96
	public void enter(ViewChangeEvent event) {
97
		final CdmSQLContainer container;
98
		try {
99
			container = listener.getSQLContainer();
100
		} catch (SQLException e) {
101
			Notification.show("Error while accessing data base", Type.ERROR_MESSAGE);
102
			e.printStackTrace();
103
			return;
104
		}
105

    
106
		table.setContainerDataSource(container);
107
		table.setColumnReorderingAllowed(true);
108
		table.setSortEnabled(true);
109

    
110
		columnList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,CdmQueryFactory.RANK_COLUMN}));
111
		List<String> namedAreas = listener.getNamedAreasLabels();
112
		columnList.addAll(namedAreas);
113
		table.setVisibleColumns(columnList.toArray());
114

    
115
		headerList = new ArrayList<String>(Arrays.asList(new String[]{CdmQueryFactory.TAXON_COLUMN,"Rang"}));
116
		headerList.addAll(listener.getNamedAreasLabels());
117
		String[] string = new String[headerList.size()];
118
		table.setColumnHeaders(headerList.toArray(string));
119

    
120
//		table.setColumnExpandRatio(propertyId, expandRatio);
121
		table.setColumnCollapsingAllowed(true);
122
		table.setSelectable(true);
123
		table.setPageLength(20);
124
		table.setFooterVisible(true);
125
		table.setColumnFooter(CdmQueryFactory.TAXON_COLUMN, "Total amount of Taxa displayed: " + container.size());
126
		table.setCacheRate(20);
127
		
128
		table.addItemClickListener(new ItemClickListener() {
129
			private static final long serialVersionUID = 2743935539139014771L;
130
			@Override
131
			public void itemClick(ItemClickEvent event) {
132
				if(!(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.TAXON_COLUMN)) && !(event.getPropertyId().toString().equalsIgnoreCase(CdmQueryFactory.RANK_COLUMN))){
133
					final Item item = event.getItem();
134
					Property<?> itemProperty = item.getItemProperty("uuid");
135
					UUID uuid = UUID.fromString(itemProperty.getValue().toString());
136
					final Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
137
					final String areaID = (String) event.getPropertyId();
138

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

    
164
	private void createEditClickListener(){
165
		Button detailButton = toolbar.getDetailButton();
166
		detailButton.setCaption("Detail View");
167
		detailButton.addClickListener(new ClickListener() {
168

    
169
			private static final long serialVersionUID = 1479133195403139547L;
170

    
171
			@Override
172
			public void buttonClick(ClickEvent event) {
173
				Object selectedItemId = DistributionTableView.this.table.getValue();
174
				if(selectedItemId!=null){
175
					final UUID uuid = UUID.fromString(table.getItem(selectedItemId).getItemProperty("uuid").getValue().toString());
176
					Taxon taxon = HibernateProxyHelper.deproxy(listener.getTaxonService().load(uuid), Taxon.class);
177
					List<DescriptionElementBase> listDescriptions = listener.listDescriptionElementsForTaxon(taxon, null);
178
					DetailWindow dw = new DetailWindow(taxon, listDescriptions);
179
					Window window = dw.createWindow();
180
					getUI().addWindow(window);
181
				}
182
				else{
183
					Notification.show("Please select a taxon", Type.HUMANIZED_MESSAGE);
184
				}
185
			}
186
		});
187

    
188
		Button settingsButton = toolbar.getSettingsButton();
189
		settingsButton.addClickListener(new ClickListener() {
190

    
191
			private static final long serialVersionUID = 3834048719431837966L;
192

    
193
			@Override
194
            public void buttonClick(ClickEvent event) {
195
                SettingsConfigWindow cw = new SettingsConfigWindow();
196
                Window window  = cw.createWindow();
197
                getUI().addWindow(window);
198
            }
199
        });
200

    
201
		Button saveButton = toolbar.getSaveButton();
202
		saveButton.setClickShortcut(KeyCode.S, ModifierKey.CTRL);
203
		saveButton.setDescription("Shortcut: CTRL+S");
204
		saveButton.setCaption("Save Data");
205
		saveButton.addClickListener(new ClickListener() {
206
			private static final long serialVersionUID = 1L;
207
			@Override
208
			public void buttonClick(ClickEvent event) {
209
				ConversationHolder conversationHolder = (ConversationHolder) VaadinSession.getCurrent().getAttribute(DistributionEditorUtil.SATTR_CONVERSATION);
210
				try{
211
					conversationHolder.commit();
212
				}catch(Exception stateException){
213
					//TODO create Table without DTO
214
				}
215
				Notification.show("Data saved", Notification.Type.HUMANIZED_MESSAGE);
216
			}
217
		});
218

    
219
	}
220

    
221
}
(2-2/3)