/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.gui; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.gui.utils.OneKeySelectionManager; import net.codjo.model.PeriodHome; import net.codjo.persistent.Reference; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; /** * Construit un filtre d'affichage sur le champ PERIOD pour l'explorateur des donn�es. * * @version $Revision: 1.3 $ */ public class ExplorerPeriodFilter implements ExplorerFilter { private PeriodHome periodHome; private JComboBox periodComboBox = new JComboBox(); private JLabel periodLabel = new JLabel(); private DefaultComboBoxModel modelPeriod = new DefaultComboBoxModel(); /** * Constructeur. * * @param ph Le PeriodHome. */ public ExplorerPeriodFilter(PeriodHome ph) { periodHome = ph; periodLabel.setText("P�riode"); initComponent(); PeriodPropertyListener listener = new PeriodPropertyListener(); periodHome.addPropertyChangeListener(listener); periodComboBox.setKeySelectionManager(new OneKeySelectionManager()); } /** * Retourne le label du filtre. * * @return Le JLabel. */ public JLabel getLabel() { return periodLabel; } /** * Retourne le composant du filtre (ici un combo). * * @return Le JComponent. */ public JComponent getComponent() { return periodComboBox; } /** * Retourne la clause where � utiliser pour le filtrage. * * @return La String de la clause where. */ public String getWhereClause() { return "PERIOD='" + periodComboBox.getSelectedItem().toString() + "'"; } /** * Retourne le nom DB de la colonne sur laquelle porte le filtre. * * @return La String du nom DB de la colonne. */ public String getFilterColumnName() { return "PERIOD"; } /** * Initialise le combo des p�riodes pour le filtrage des donn�es. */ public void initComponent() { try { List list = periodHome.getAllObjects(); Object[] periods = new Object[list.size()]; for (int i = 0; i < periods.length; i++) { Reference ref = (Reference)list.get(i); periods[i] = ref.getObject(); } DefaultComboBoxModel modelPeriod = new DefaultComboBoxModel(periods); periodComboBox.setModel(modelPeriod); periodComboBox.setSelectedItem(periodHome.getCurrentPeriod()); //periodComboBox.setSelectedIndex(periodComboBox.getItemCount() - 1); } catch (net.codjo.persistent.PersistenceException ex) { ErrorDialog.show(periodComboBox, "Impossible d'obtenir la liste des periodes", ex); ex.printStackTrace(); periodComboBox.setEnabled(false); } } /** * Description of the Class * * @author VIRASIS */ class PeriodPropertyListener implements PropertyChangeListener { /** * Ecoutes le changement de la p�riode courante. */ public void propertyChange(PropertyChangeEvent evt) { //Si la p�riode couratne est nouvelle if (modelPeriod.getIndexOf(evt.getNewValue()) < 0) { initComponent(); //Maj de la le liste des p�riodes } periodComboBox.setSelectedItem(evt.getNewValue()); } } }