/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.manager; import com.vaadin.data.Container; import com.vaadin.data.Container.ItemSetChangeEvent; import com.vaadin.event.ItemClickEvent; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.VerticalLayout; import org.tepi.filtertable.FilterTable; import ru.codeinside.adm.database.Procedure; import ru.codeinside.adm.database.ProcedureType; import ru.codeinside.adm.ui.FilterDecorator_; import ru.codeinside.adm.ui.LazyLoadingContainer2; import java.util.Date; public class ProcedureTable extends VerticalLayout { private static final long serialVersionUID = -3060552897820352215L; private ProcedureQuery procedureQuery; private FilterTable procedures; private final FilterTable proceduresTable; private ProcedureForm procedureForm; private final Container.ItemSetChangeListener listener; public ProcedureTable(final ProcedureForm procedureForm) { this.procedureForm = procedureForm; proceduresTable = new FilterTable(); proceduresTable.setStyleName("clickable-item-table"); procedures = proceduresTable; proceduresTable.setFilterBarVisible(true); proceduresTable.setFilterDecorator(new FilterDecorator_()); bindToDataSource(ProcedureType.Administrative); proceduresTable.setPageLength(5); proceduresTable.setSizeFull(); listener = new Container.ItemSetChangeListener() { @Override public void containerItemSetChange(ItemSetChangeEvent event) { proceduresTable.refreshRowCache(); } }; proceduresTable.addListener(new ItemClickEvent.ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { if (event.getItem().getItemProperty("id") != null && event.getItem().getItemProperty("id").getType() == Button.class) { String id = ((Button) event.getItem().getItemProperty("id").getValue()).getCaption(); Procedure s = ManagerService.get().getProcedure(id); if (s != null) { procedureForm.showProcedureInfo(s); } } } }); addComponent(proceduresTable); setSizeFull(); setMargin(false); setSpacing(false); } public void bindToDataSource(ProcedureType type) { proceduresTable.setContainerDataSource(getLazyLoadingContainer(procedureForm, listener, type)); setColumns(proceduresTable); } private void setColumns(FilterTable proceduresTable) { proceduresTable.setColumnExpandRatio("id", 0.05f); proceduresTable.setColumnExpandRatio("name", 0.2f); proceduresTable.setColumnExpandRatio("description", 0.56f); proceduresTable.setColumnExpandRatio("version", 0.05f); proceduresTable.setColumnExpandRatio("status", 0.06f); proceduresTable.setColumnExpandRatio("dateCreated", 0.08f); proceduresTable.setColumnHeaders(new String[]{"Код", "Наименование", "Описание", "Версия", "Статус", "Дата"}); } private LazyLoadingContainer2 getLazyLoadingContainer(ProcedureForm procedureForm, Container.ItemSetChangeListener listener, ProcedureType type) { procedureQuery = new ProcedureQuery(procedureForm, type); LazyLoadingContainer2 newDataSource = new LazyLoadingContainer2(procedureQuery); procedureForm.setDependentContainer(newDataSource); newDataSource.addListener(listener); newDataSource.addContainerProperty("id", Component.class, null); newDataSource.addContainerProperty("name", String.class, null); newDataSource.addContainerProperty("description", String.class, null); newDataSource.addContainerProperty("version", String.class, null); newDataSource.addContainerProperty("status", String.class, null); newDataSource.addContainerProperty("dateCreated", Date.class, null); return newDataSource; } public ProcedureQuery getProcedureQuery() { return procedureQuery; } public FilterTable getProceduresTable() { return procedures; } }