/* * Copyright 2011 Instituto Superior Tecnico * * https://fenix-ashes.ist.utl.pt/ * * This file is part of the vaadin-framework. * * The vaadin-framework Infrastructure is free software: you can * redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version.* * * vaadin-framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with vaadin-framework. If not, see <http://www.gnu.org/licenses/>. * */ package pt.ist.vaadinframework.ui; import java.util.ResourceBundle; import pt.ist.vaadinframework.data.AbstractBufferedContainer; import pt.utl.ist.fenix.tools.util.i18n.Language; import com.vaadin.data.Container; import com.vaadin.data.Container.PropertySetChangeEvent; import com.vaadin.data.Property; import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.Field; import com.vaadin.ui.Table; public class TransactionalTable extends Table { private final String bundlename; private transient ResourceBundle bundle; private final PropertySetChangeListener headerUpdater = new PropertySetChangeListener() { @Override public void containerPropertySetChange(PropertySetChangeEvent event) { if (event.getContainer() instanceof AbstractBufferedContainer) { for (Object propertyId : event.getContainer().getContainerPropertyIds()) { computeHeader((AbstractBufferedContainer<?, ?, ?>) event.getContainer(), propertyId); } } } }; public TransactionalTable(String bundlename) { super(); this.bundlename = bundlename; } protected ResourceBundle getBundle() { if (bundle == null) { bundle = ResourceBundle.getBundle(bundlename, Language.getLocale()); } return bundle; } @Override protected Object getPropertyValue(Object rowId, Object colId, Property property) { Object v = super.getPropertyValue(rowId, colId, property); if (v instanceof Field) { Field field = (Field) v; // field.setWriteThrough(isWriteThrough()); // field.setReadOnly(isReadOnly()); if (isImmediate() && field instanceof AbstractComponent) { ((AbstractComponent) field).setImmediate(true); } } return v; } public void refresh() { refreshRenderedCells(); } @Override public void setContainerDataSource(Container newDataSource) { if (getContainerDataSource() != null && getContainerDataSource() instanceof PropertySetChangeNotifier) { ((PropertySetChangeNotifier) getContainerDataSource()).removeListener(headerUpdater); } if (newDataSource instanceof AbstractBufferedContainer) { for (Object propertyId : newDataSource.getContainerPropertyIds()) { computeHeader((AbstractBufferedContainer<?, ?, ?>) newDataSource, propertyId); } } if (newDataSource instanceof PropertySetChangeNotifier) { ((PropertySetChangeNotifier) newDataSource).addListener(headerUpdater); } super.setContainerDataSource(newDataSource); } private void computeHeader(AbstractBufferedContainer<?, ?, ?> container, Object propertyId) { setColumnHeader(propertyId, CaptionUtils.makeCaption(getBundle(), container, propertyId, this)); } }