org.opensixen.swing.BeanTableModel.java Source code

Java tutorial

Introduction

Here is the source code for org.opensixen.swing.BeanTableModel.java

Source

/******* 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();
    }
}