Java tutorial
/******* BEGIN LICENSE BLOCK ***** * Versin: GPL 2.0/CDDL 1.0/EPL 1.0 * * Los contenidos de este fichero estn sujetos a la Licencia * Pblica General de GNU versin 2.0 (la "Licencia"); no podr * usar este fichero, excepto bajo las condiciones que otorga dicha * Licencia y siempre de acuerdo con el contenido de la presente. * Una copia completa de las condiciones de de dicha licencia, * traducida en castellano, deber estar incluida con el presente * programa. * * Adicionalmente, puede obtener una copia de la licencia en * http://www.gnu.org/licenses/gpl-2.0.html * * Este fichero es parte del programa opensiXen. * * OpensiXen es software libre: se puede usar, redistribuir, o * modificar; pero siempre bajo los trminos de la Licencia * Pblica General de GNU, tal y como es publicada por la Free * Software Foundation en su versin 2.0, o a su eleccin, en * cualquier versin posterior. * * Este programa se distribuye con la esperanza de que sea til, * pero SIN GARANT?A ALGUNA; ni siquiera la garanta implcita * MERCANTIL o de APTITUD PARA UN PROPSITO DETERMINADO. Consulte * los detalles de la Licencia Pblica General GNU para obtener una * informacin ms detallada. * * TODO EL CDIGO PUBLICADO JUNTO CON ESTE FICHERO FORMA PARTE DEL * PROYECTO OPENSIXEN, PUDIENDO O NO ESTAR GOBERNADO POR ESTE MISMO * TIPO DE LICENCIA O UNA VARIANTE DE LA MISMA. * * El desarrollador/es inicial/es del cdigo es * FUNDESLE (Fundacin para el desarrollo del Software Libre Empresarial). * Indeos Consultoria S.L. - http://www.indeos.es * * Contribuyente(s): * Eloy Gmez Garca <eloy@opensixen.org> * * Alternativamente, y a eleccin del usuario, los contenidos de este * fichero podrn ser usados bajo los trminos de la Licencia Comn del * Desarrollo y la Distribucin (CDDL) versin 1.0 o posterior; o bajo * los trminos de la Licencia Pblica Eclipse (EPL) versin 1.0. Una * copia completa de las condiciones de dichas licencias, traducida en * castellano, debern de estar incluidas con el presente programa. * Adicionalmente, es posible obtener una copia original de dichas * licencias en su versin original en * http://www.opensource.org/licenses/cddl1.php y en * http://www.opensource.org/licenses/eclipse-1.0.php * * Si el usuario desea el uso de SU versin modificada de este fichero * slo bajo los trminos de una o ms de las licencias, y no bajo los * de las otra/s, puede indicar su decisin borrando las menciones a la/s * licencia/s sobrantes o no utilizadas por SU versin modificada. * * Si la presente licencia triple se mantiene ntegra, cualquier usuario * puede utilizar este fichero bajo cualquiera de las tres licencias que * lo gobiernan, GPL 2.0/CDDL 1.0/EPL 1.0. * * ***** END LICENSE BLOCK ***** */ package org.opensixen.swing; import java.util.ArrayList; import java.util.logging.Level; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import org.apache.commons.beanutils.PropertyUtils; import org.compiere.util.CLogger; import org.opensixen.interfaces.IBeanProvider; import org.opensixen.interfaces.OTableModel; import org.opensixen.model.ColumnDefinition; /** * @author Eloy Gomez * */ public class BeanTableModel implements OTableModel { private CLogger log = CLogger.getCLogger(getClass()); private ColumnDefinition[] columnDefinitions; private IBeanProvider beanProvider; private Object[] model; private ArrayList<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>(); public BeanTableModel(IBeanProvider beanProvider, ColumnDefinition[] columnDefinitions) { super(); this.beanProvider = beanProvider; this.columnDefinitions = columnDefinitions; model = beanProvider.getModel(); } /* (non-Javadoc) * @see javax.swing.table.TableModel#getValueAt(int, int) */ @Override public Object getValueAt(int rowIndex, int columnIndex) { String name = columnDefinitions[columnIndex].getName(); try { return PropertyUtils.getProperty(model[rowIndex], name); } catch (Exception e) { log.log(Level.SEVERE, "No se encuentra la propiedad: " + name + "[" + columnIndex + "]", e); return null; } } /* (non-Javadoc) * @see javax.swing.table.TableModel#getRowCount() */ @Override public int getRowCount() { return model.length; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnCount() */ @Override public int getColumnCount() { return columnDefinitions.length; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnName(int) */ @Override public String getColumnName(int columnIndex) { return columnDefinitions[columnIndex].getTitle(); } /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnClass(int) */ @Override public Class<?> getColumnClass(int columnIndex) { return columnDefinitions[columnIndex].getClazz(); } /* (non-Javadoc) * @see javax.swing.table.TableModel#isCellEditable(int, int) */ @Override public boolean isCellEditable(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return false; } /* (non-Javadoc) * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int) */ @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { String name = columnDefinitions[columnIndex].getName(); try { PropertyUtils.setProperty(model[rowIndex], name, value); } catch (Exception e) { log.log(Level.SEVERE, "No se encuentra la propiedad: " + name + "[" + columnIndex + "]", e); } } /* (non-Javadoc) * @see javax.swing.table.TableModel#addTableModelListener(javax.swing.event.TableModelListener) */ @Override public void addTableModelListener(TableModelListener l) { tableModelListeners.add(l); } /* (non-Javadoc) * @see javax.swing.table.TableModel#removeTableModelListener(javax.swing.event.TableModelListener) */ @Override public void removeTableModelListener(TableModelListener l) { tableModelListeners.remove(l); } /* (non-Javadoc) * @see org.opensixen.interfaces.OTableModel#reload() */ @Override public void reload() { beanProvider.reload(); this.model = beanProvider.getModel(); for (TableModelListener listener : tableModelListeners) { listener.tableChanged(new TableModelEvent(this)); } } /* (non-Javadoc) * @see org.opensixen.interfaces.OTableModel#getColumnDefinitions() */ @Override public ColumnDefinition[] getColumnDefinitions() { return columnDefinitions; } /** * @return the beanProvider */ public IBeanProvider getBeanProvider() { return beanProvider; } /** * @param beanProvider the beanProvider to set */ public void setBeanProvider(IBeanProvider beanProvider) { this.beanProvider = beanProvider; model = beanProvider.getModel(); } }