Save This Page
Home » openjdk-7 » net.sf.raptor » ui » panels » [javadoc | source]
    1   /*********************************************************************************
    2    *                                                                               *
    3    * Raptor - Rapid prototyping of Swing GUIs based on JavaBeans like Java objects *
    4    * Copyright (C) 2003  XCOM AG                                                   *
    5    *                                                                               *
    6    * This library is free software; you can redistribute it and/or                 *
    7    * modify it under the terms of the GNU Lesser General Public                    *
    8    * License as published by the Free Software Foundation; either                  *
    9    * version 2.1 of the License, or (at your option) any later version.            *
   10    *                                                                               *
   11    * This library is distributed in the hope that it will be useful,               *
   12    * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
   13    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             *
   14    * Lesser General Public License for more details.                               *
   15    *                                                                               *
   16    * You should have received a copy of the GNU Lesser General Public              *
   17    * License along with this library; if not, write to the Free Software           *
   18    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA     *
   19    *                                                                               *
   20    *********************************************************************************/
   21   package net.sf.raptor.ui.panels;
   22   
   23   import java.awt.Dialog;
   24   import java.awt.Frame;
   25   import java.awt.Window;
   26   import java.awt.event.ActionListener;
   27   import java.beans.BeanInfo;
   28   
   29   import javax.swing.AbstractAction;
   30   import javax.swing.JTable;
   31   import javax.swing.SwingUtilities;
   32   import javax.swing.table.TableColumnModel;
   33   
   34   import net.sf.raptor.logging.Trace;
   35   import net.sf.raptor.ui;
   36   import net.sf.raptor.ui.DefaultObjectFactory;
   37   import net.sf.raptor.ui.ObjectFactory;
   38   import net.sf.raptor.ui.WindowUtils;
   39   import net.sf.raptor.ui.dialog.OKCancelDialog;
   40   import net.sf.raptor.ui.tables.AbstractSortableTableModel;
   41   import net.sf.raptor.ui.tables.ListTableModel;
   42   
   43   import org.apache.commons.beanutils.ConstructorUtils;
   44   
   45   /**
   46    * ListTablePanel class  
   47    * 
   48    * @author XCOM AG
   49    */
   50   public class ListTablePanel extends TablePanel {
   51   
   52   	public class ChooseListEntryDialog extends OKCancelDialog {
   53   		/**
   54   		 * 
   55   		 */
   56   		public ChooseListEntryDialog() {
   57   			super();
   58   		}
   59   		/**
   60   		 * @param owner
   61   		 */
   62   		public ChooseListEntryDialog(Frame owner) {
   63   			super(owner);
   64   		}
   65   		/**
   66   		 * @param owner
   67   		 */
   68   		public ChooseListEntryDialog(Dialog owner) {
   69   			super(owner);
   70   		}
   71   		/* (non-Javadoc)
   72   		 * @see net.sf.raptor.ui.dialog.OKDialog#doOkAction()
   73   		 */
   74   		public void doOkAction() {
   75   			returnValue = getSelectedObject();
   76   			hide();
   77   		}
   78   	}
   79   
   80   	/* beanInfo instanz fuer die detaildarstellung eines tabelleneintrages */
   81   	private BeanInfo detailBeanInfo;
   82   
   83   	/* Class, die von BeanEditPanel abgeleitet sein muss und die zum darstellen der details verwendet werden soll */
   84   	private Class detailPanelClazz;
   85   
   86   	/* factory, die fuer das instatiieren der detail-objekte zust?ndig ist */
   87   	private ObjectFactory objectFactory;
   88   
   89   	/**
   90   	 * constructor
   91   	 * 
   92   	 * @param table
   93   	 * @param showButtons
   94   	 */
   95   	public ListTablePanel(JTable table, boolean showButtons) {
   96   		super(table, showButtons);
   97   
   98   		checkTableModel(table);
   99   		initialize();
  100   	}
  101   
  102   	/**
  103   	 * hilfsmethode, die ?berpr?ft, ob das TableModel
  104   	 * eine Instanz von ListTableModel ist
  105   	 * 
  106   	 * @param table die Tabelle mit dem zu pr?fenden Model 
  107   	 */
  108   	private void checkTableModel(JTable table) {
  109   		if (!(table.getModel() instanceof ListTableModel)) {
  110   			throw new IllegalArgumentException("TableModel is not an instance of ListTableModel");
  111   		}
  112   	}
  113   
  114   	/**
  115   	 * 
  116   	 * @since 16.12.2003 14:29:05
  117   	 */
  118   	public void doDeleteRowsAction() {
  119   		deleteSelectedRows();
  120   	}
  121   	
  122   	/**
  123   	 * 
  124   	 * @since 16.12.2003 14:29:10
  125   	 */
  126   	public void doAddRowAction() {
  127   		addRow();
  128   	}
  129   	
  130   	/**
  131   	 * 
  132   	 * @since 16.12.2003 15:43:13
  133   	 */
  134   	public void doEditRowAction() {
  135   		showSelectionInDetailPanel();
  136   	}
  137   	
  138   	/**
  139   	 * addRow
  140   	 *
  141   	 * f?gt ein neues Objekt (Zeile) der Tabelle hinzu
  142   	 * Adds a new object into the table.
  143   	 */
  144   	public void addRow() {
  145   
  146   		try {
  147   
  148   			if (objectFactory == null) {
  149   				ListTableModel model = (ListTableModel) getTable().getModel();
  150   				objectFactory =
  151   					new DefaultObjectFactory(model.getContentClazz());
  152   			}
  153   
  154   			Object newObject = objectFactory.createObject();
  155   
  156   			BeanEditPanel detailPanel = createDetailPanel(newObject);
  157   			newObject = detailPanel.doModalInDialog();
  158   			if (newObject != null) {
  159   				((ListTableModel) getTable().getModel()).appendRow(newObject);
  160   			}
  161   		} catch (InstantiationException e) {
  162   			Trace.error(e);
  163   		} catch (IllegalAccessException e) {
  164   			Trace.error(e);
  165   		}
  166   	}
  167   
  168   	/**
  169   	 * doDeleteSelectedRowsAction
  170   	 *
  171   	 * l?scht alle ausgew?hlten zeilen
  172   	 */
  173   	public void deleteSelectedRows() {
  174   		ListTableModel model = (ListTableModel) getTable().getModel();
  175   		int[] selectedRows = getTable().getSelectedRows();
  176   		model.deleteRows(selectedRows);
  177   	}
  178   
  179   	/**
  180   	 * showModelTableDialog
  181   	 * 
  182   	 * @param model
  183   	 * @param columnModel
  184   	 * @todo evtl wieder private?
  185   	 * @deprecated @see net.sf.raptor.ui.PanelUtils#showModelTableDialog(ListTableModel, TableColumnModel)
  186   	 */
  187   	public static void showModelTableDialog(
  188   		ListTableModel model,
  189   		TableColumnModel columnModel) {
  190   		PanelUtils.showModelTableDialog(model, columnModel);
  191   	}
  192   
  193   	/**
  194   	 * showSelectionInDetailPanel
  195   	 */
  196   	public void showSelectionInDetailPanel() {
  197   		int selectedRow = getTable().getSelectedRow();
  198   		int index = getSelectedRowDataIndex();
  199   		if (index == -1)
  200   			return;
  201   		BeanEditPanel detailPanel = createDetailPanel(index);
  202   		detailPanel.doModalInDialog();
  203   		(
  204   			(AbstractSortableTableModel) getTable()
  205   				.getModel())
  206   				.fireTableRowsUpdated(
  207   			selectedRow,
  208   			selectedRow);
  209   	}
  210   
  211   	public int getSelectedRowDataIndex() {
  212   		int selectedRow = getTable().getSelectedRow();
  213   		if (selectedRow < 0)
  214   			return -1;
  215   
  216   		return (
  217   			(AbstractSortableTableModel) getTable()
  218   				.getModel())
  219   				.getDataRowIndex(
  220   			selectedRow);
  221   	}
  222   
  223   	public Object getObjectAtDataRow(int index) {
  224   		return ((ListTableModel) getTable().getModel()).getObjectAtRow(index);
  225   	}
  226   
  227   	public Object getSelectedObject() {
  228   		int index = getSelectedRowDataIndex();
  229   		if (index == -1)
  230   			return null;
  231   		return getObjectAtDataRow(index);
  232   	}
  233   
  234   	/**
  235   	 * createDetailPanel
  236   	 * 
  237   	 * @param rowIndex
  238   	 * @return
  239   	 */
  240   	protected BeanEditPanel createDetailPanel(int rowIndex) {
  241   		/** 
  242   		 * @todo das mu? anders werden: z.B. interface f?r tableModels, die ein Object als zeile haben definieren, dahinein die getObjectAtRow
  243   		 */
  244   		return createDetailPanel(getObjectAtDataRow(rowIndex));
  245   	}
  246   
  247   	/**
  248   	 * createDetailPanel zum Neuanlegen eines Objektes
  249   	 * @param rowObject
  250   	 * @return
  251   	 */
  252   	protected BeanEditPanel createDetailPanel(Object rowObject) {
  253   		BeanEditPanel detailPanel = null;
  254   		if (detailPanelClazz == null) {
  255   			detailPanel = new BeanEditPanel(rowObject, detailBeanInfo);
  256   		} else {
  257   
  258   			Object[] args = null;
  259   			if (detailBeanInfo != null) {
  260   				args = new Object[] { rowObject, detailBeanInfo };
  261   			} else {
  262   				args = new Object[] { rowObject };
  263   			}
  264   
  265   			try {
  266   				detailPanel =
  267   					(BeanEditPanel) ConstructorUtils.invokeConstructor(
  268   						detailPanelClazz,
  269   						args);
  270   			} catch (Exception e) {
  271   				// TODO warning erzeugen, dass nicht das gew?nschte panel erzeugt werden konnte
  272   				e.printStackTrace();
  273   				detailPanel = new BeanEditPanel(rowObject, detailBeanInfo);
  274   			}
  275   		}
  276   		Window rootWindow = SwingUtilities.getWindowAncestor(this);
  277   		if (rootWindow instanceof Dialog) {
  278   			detailPanel.setParentDialog((Dialog) rootWindow);
  279   		} else if (rootWindow instanceof Frame) {
  280   			detailPanel.setParentFrame((Frame) rootWindow);
  281   		}
  282   		detailPanel.updateUI();
  283   		return detailPanel;
  284   	}
  285   
  286   	/**
  287   	 * setTable
  288   	 */
  289   	public void setTable(JTable tableValue) {
  290   		checkTableModel(tableValue);
  291   		setTable(tableValue);
  292   	}
  293   
  294   	/**
  295   	 * @return
  296   	 */
  297   	public BeanInfo getDetailBeanInfo() {
  298   		return detailBeanInfo;
  299   	}
  300   
  301   	/**
  302   	 * @param info
  303   	 */
  304   	public void setDetailBeanInfo(BeanInfo info) {
  305   		detailBeanInfo = info;
  306   	}
  307   
  308   	/**
  309   	 * @return
  310   	 */
  311   	public Class getDetailPanelClass() {
  312   		return detailPanelClazz;
  313   	}
  314   
  315   	/**
  316   	 * @param class1
  317   	 */
  318   	public void setDetailPanelClass(Class class1) {
  319   		detailPanelClazz = class1;
  320   	}
  321   
  322   	/**
  323   	 * @return
  324   	 */
  325   	public ObjectFactory getObjectFactory() {
  326   		return objectFactory;
  327   	}
  328   
  329   	/**
  330   	 * @param factory
  331   	 */
  332   	public void setObjectFactory(ObjectFactory factory) {
  333   		objectFactory = factory;
  334   	}
  335   
  336   	public Object doListEntrySelectionInDialog() {
  337   		ChooseListEntryDialog dialog;
  338   		if (parentDialog != null) {
  339   			dialog = new ChooseListEntryDialog(parentDialog);
  340   		} else if (parentFrame != null) {
  341   			dialog = new ChooseListEntryDialog(parentFrame);
  342   		} else {
  343   			Frame defaultFrame = WindowUtils.getDefaultParentFrame();
  344   			dialog =
  345   				defaultFrame == null
  346   					? new ChooseListEntryDialog()
  347   					: new ChooseListEntryDialog(defaultFrame);
  348   		}
  349   		return WindowUtils.wrapInDialog(this, dialog);
  350   	}
  351   
  352   }
  353   
  354   /**
  355    * ViewAction class
  356    * 
  357    * @author XCOM AG
  358    */
  359   class ViewAction extends AbstractAction implements ActionListener {
  360   
  361   	TablePanel panel;
  362   
  363   	public ViewAction(TablePanel p) {
  364   		super("Detail");
  365   		panel = p;
  366   	}
  367   
  368   	public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
  369   		((ListTablePanel) panel).showSelectionInDetailPanel();
  370   	}
  371   }

Save This Page
Home » openjdk-7 » net.sf.raptor » ui » panels » [javadoc | source]