package org.openswing.swing.table.client; import java.util.*; import java.awt.*; import org.openswing.swing.client.*; import org.openswing.swing.export.java.*; import org.openswing.swing.message.receive.java.*; import org.openswing.swing.util.client.*; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Grid Controller.</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * * <p> This file is part of OpenSwing Framework. * This library is free software; you can redistribute it and/or * modify it under the terms of the (LGPL) Lesser General Public * License as published by the Free Software Foundation; * * GNU LESSER GENERAL PUBLIC LICENSE * Version 2.1, February 1999 * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * The author may be contacted at: * maurocarniel@tin.it</p> * * @author Mauro Carniel * @version 1.0 */ public class GridController { /** delta row, i.e. number of grid rows to color; default value: 0 (no delta) */ private int deltaRow = 0; /** background color to use when deltaRow>0 */ private Color deltaColor = new Color(235,235,235); public GridController() { setDeltaRow(2); } /** * Callback method invoked when the user has pressed ENTER button on the selected row of the grid. * Default behaviour: it calls doubleClick method. * @param rowNumber selected row index * @param persistentObject v.o. related to the selected row */ public void enterButton(int rowNumber,ValueObject persistentObject) { doubleClick(rowNumber,persistentObject); } /** * Callback method invoked when the user has double clicked on the selected row of the grid. * @param rowNumber selected row index * @param persistentObject v.o. related to the selected row */ public void doubleClick(int rowNumber,ValueObject persistentObject) { } /** * Callback method invoked when a grid cell is selected. * @param rowNumber selected row index * @param columnIndex column index related to the column currently selected * @param attributedName attribute name related to the column currently selected * @param persistentObject v.o. related to the selected row */ public void selectedCell(int rowNumber, int columnIndex, String attributedName, ValueObject persistentObject) { } /** * Method used to define the background color for each cell of the grid. * @param rowNumber selected row index * @param attributeName attribute name related to the column currently selected * @param value object contained in the selected cell * @return background color of the selected cell */ public Color getBackgroundColor(int row,String attributeName,Object value) { if (deltaRow>0 && deltaColor!=null && row%deltaRow==0) return deltaColor; return ClientSettings.GRID_CELL_BACKGROUND; } /** * Method used to define the foreground color for each cell of the grid. * @param rowNumber selected row index * @param attributeName attribute name related to the column currently selected * @param value object contained in the selected cell * @return foreground color of the selected cell */ public Color getForegroundColor(int row,String attributeName,Object value) { return ClientSettings.GRID_CELL_FOREGROUND; } /** * Callback method invoked each time a cell is edited: this method define if the new value is valid. * This method is invoked ONLY if: * - the edited value is not equals to the old value OR it has exmplicitely called setCellAt or setValueAt * - the cell is editable * Default behaviour: cell value is valid. * @param rowNumber selected row index * @param attributeName attribute name related to the column currently selected * @param oldValue old cell value (before cell editing) * @param newValue new cell value (just edited) * @return <code>true</code> if cell value is valid, <code>false</code> otherwise */ public boolean validateCell(int rowNumber,String attributeName,Object oldValue,Object newValue) { return true; } /** * @return */ public int getDeltaRow() { return deltaRow; } /** * Consente di definire la proprieta' che consente di definire un delta di righe colorate; valore di default: 0 (nessun delta). * @param deltaRow proprieta' che consente di definire un delta di righe colorate */ public void setDeltaRow(int deltaRow) { this.deltaRow = deltaRow; } /** * @return background cell color used when deltaRow>0 */ public Color getDeltaColor() { return deltaColor; } /** * Set the background cell color used when deltaRow>0. * @param deltaColor background cell color */ public void setDeltaColor(Color deltaColor) { this.deltaColor = deltaColor; } /** * Method invoked when the user has clicked on save button and the grid is in INSERT mode. * @param rowNumbers row indexes related to the new rows to save * @param newValueObjects list of new value objects to save * @return an ErrorResponse value object in case of errors, VOListResponse if the operation is successfully completed */ public Response insertRecords(int[] rowNumbers, ArrayList newValueObjects) throws Exception { throw new java.lang.UnsupportedOperationException("Method insertRecords() not yet implemented."); } /** * Method invoked when the user has clicked on save button and the grid is in EDIT mode. * @param rowNumbers row indexes related to the changed/new rows * @param oldPersistentObjects old value objects, previous the changes; it can contains null objects, in case of new inserted rows * @param persistentObjects value objects related to the changed/new rows * @return an ErrorResponse value object in case of errors, VOListResponse if the operation is successfully completed */ public Response updateRecords(int[] rowNumbers,ArrayList oldPersistentObjects,ArrayList persistentObjects) throws Exception { throw new java.lang.UnsupportedOperationException("Method updateRecords() not yet implemented."); } /** * Method invoked when the user has clicked on delete button and the grid is in READONLY mode. * @param persistentObjects value objects to delete (related to the currently selected rows) * @return an ErrorResponse value object in case of errors, VOResponse if the operation is successfully completed */ public Response deleteRecords(ArrayList persistentObjects) throws Exception { throw new java.lang.UnsupportedOperationException("Method deleteRecords() not yet implemented."); } /** * Callback method invoked when the user has clicked on the insert button * @param valueObject empty value object just created: the user can manage it to fill some attribute values */ public void createValueObject(ValueObject valueObject) throws Exception { } /** * Callback method invoked when the data loading is completed. * @param error <code>true</code> if data loading has terminated with errors, <code>false</code> otherwise */ public void loadDataCompleted(boolean error) { } /** * Callback method invoked when the user has selected another row. * @param rowNumber selected row index */ public void rowChanged(int rowNumber) { } /** * Callback method invoked after data reloading (on pressing reload/cancel button). * The method is called ONLY if the operation is successfully completed. */ public void afterReloadGrid() { } /** * Callback method invoked on pressing COPY button. * @return <code>true</code> allows to go to INSERT mode (by copying data), <code>false</code> the mode change is interrupted */ public boolean beforeCopyGrid(GridControl grid) { return true; } /** * Callback method invoked on pressing SAVE button, before invoking updateRecords method. * It can be used to interrupt saving operation. * @return <code>true</code> allows to continue saving operation, <code>false</code> ti interrupt saving operation */ public boolean beforeSaveDataInEdit(GridControl grid,int[] rowNumbers,ArrayList oldPersistentObjects,ArrayList persistentObjects) { return true; } /** * Callback method invoked on pressing SAVE button, before invoking insertRecords method. * It can be used to interrupt saving operation. * @return <code>true</code> allows to continue saving operation, <code>false</code> ti interrupt saving operation */ public boolean beforeSaveDataInInsert(GridControl grid,int[] rowNumbers,ArrayList persistentObjects) { return true; } /** * Callback method invoked on pressing EDIT button. * @return <code>true</code> allows to go to EDIT mode, <code>false</code> the mode change is interrupted */ public boolean beforeEditGrid(GridControl grid) { return true; } /** * Callback method invoked on pressing INSERT button. * @return <code>true</code> allows to go to INSERT mode, <code>false</code> the mode change is interrupted */ public boolean beforeInsertGrid(GridControl grid) { return true; } /** * Callback method invoked before deleting data when the grid was in READONLY mode (on pressing delete button). * @return <code>true</code> allows the deleting to continue, <code>false</code> the deleting is interrupted */ public boolean beforeDeleteGrid(GridControl grid) { return true; } /** * Callback method invoked after saving data when the grid was in EDIT mode (on pressing save button). * The method is called ONLY if the operation is successfully completed. */ public void afterEditGrid(GridControl grid) { } /** * Callback method invoked after saving data when the grid was in INSERT mode (on pressing save button). * The method is called ONLY if the operation is successfully completed. */ public void afterInsertGrid(GridControl grid) { } /** * Callback method invoked after deleting data when the grid was in READONLY mode (on pressing delete button). * The method is called ONLY if the operation is successfully completed. */ public void afterDeleteGrid() { } /** * Callback method invoked each time the grid mode is changed. * @param currentMode current grid mode */ public void modeChanged(int currentMode) { } /** * @param grid grid * @param row selected row index * @param attributeName attribute name that identifies the selected grid column * @return <code>true</code> if the selected cell is editable, <code>false</code> otherwise */ public boolean isCellEditable(GridControl grid,int row,String attributeName) { return grid.isFieldEditable(row,attributeName); } /** * Method used to define the font to use for each cell of the grid. * @param rowNumber selected row index * @param attributeName attribute name related to the column currently selected * @param value object contained in the selected cell * @param defaultFont default font currently in used with this column * @return font to use for the current cell; null means default font usage; default value: null */ public Font getFont(int row,String attributeName,Object value,Font defaultFont) { return null; } /** * @param attributeName attribute name that identify a grid column * @return tooltip text to show in the column header; this text will be automatically translated according to internationalization settings */ public String getHeaderTooltip(String attributeName) { return ""; } /** * @param row row index in the grid * @param attributeName attribute name that identify a grid column * @return tooltip text to show in the cell identified by the specified row and attribute name; this text will be automatically translated according to internationalization settings */ public String getCellTooltip(int row,String attributeName) { return ""; } /** * Callback method invoked by grid before showing quick filter panel. * It allows to reset the initial filter value to show within the quick filter panel: * it is possible to change filtering value passed as argument, by returning another value. * @param attributeName attribute name that identify the column just filtered * @param initialValue initial value to show within the quick filter panel * @return new couple of values to show as initial values within the quick filter panel */ public Object getInitialQuickFilterValue(String attributeName,Object initialValue) { return initialValue; } /** * Callback method invoked by grid when applying a quick filter condition or a filter condition from filter panel: * before executing search it is possible to change filtering value passed as argument, by returning another value. * @param attributeName attribute name that identify the column just filtered * @param value current filtering value * @return new value to use as filter condition */ public Object beforeFilterGrid(String attributeName,Object value) { return value; } /** * Callback method invoked by grid before showing exporting dialog; * this method can be overrided to redefine dialog size * @param dialogSize default dimension of exporting dialog * @return size to set for exporting dialog */ public Dimension getExportDialogSize(Dimension dialogSize) { return dialogSize; } /** * Callback method invoked by grid before showing exporting dialog; * this method can be overrided to redefine document formats allowed for the grid * @return list of available formats; possible values: ExportOptions.XLS_FORMAT, ExportOptions.CSV_FORMAT1, ExportOptions.CSV_FORMAT2, ExportOptions.XML_FORMAT, ExportOptions.XML_FORMAT_FAT, ExportOptions.HTML_FORMAT, ExportOptions.PDF_FORMAT, ExportOptions.RTF_FORMAT; default value: ClientSettings.EXPORTING_FORMATS */ public String[] getExportingFormats() { return ClientSettings.EXPORTING_FORMATS; } /** * Callback method invoked by grid when exporting data from grid. * @param exportOptions options used to export data; these options can be programmatically changed, in order to customize exporting result */ public void exportGrid(ExportOptions exportOptions) { } /** * Callback method invoked by grid when attempting to search for the specified text in additional rows * not yet loaded in grid: this method can be used to convert the text to search in the correct format, * before grid executes the search and load additional data. * @param attributeName attribute name that identify the column used in search * @param value current filtering value, always axpressed as text * @return new value to use as filter condition */ public Object beforeRetrieveAdditionalRows(String attributeName,String textToSearch) { return "%"+textToSearch+"%"; } /************************************************************ * DRAG 'N DROP MANAGEMENT ************************************************************/ /** * Method called on beginning a drag event. * @return <code>true</code>, dragging can continue, <code>false</code> drag is not allowed; default value: <code>true</code> */ public boolean dragEnabled() { return true; } /** * Method called on firing a drop event onto the grid. * @param gridId identifier of the source grid (grid that generate a draf event) * @return <code>true</code>, drop is allowed, <code>false</code> drop is not allowed; default value: <code>true</code> */ public boolean dropEnabled(String gridId) { return true; } /** * This message goes to DragSourceListener, informing it that the dragging has entered the DropSite. */ public void dragEnter() {} /** * This message goes to DragSourceListener, informing it that the dragging has exited the DropSite. */ public void dragExit() {} /** * This message goes to DragSourceListener, informing it that the dragging is currently ocurring over the DropSite. */ public void dragOver() {} /** * This method is invoked when the user changes the dropAction. */ public void dropActionChanged() {} /** * This message goes to DragSourceListener, informing it that the dragging has ended. */ public void dragDropEnd() {} /************************************************************ * DROP MANAGEMENT ************************************************************/ /** * This method is invoked when you are dragging over the DropSite. */ public void dropEnter() {} /** * This method is invoked when you are exit the DropSite without dropping. */ public void dropExit () {} /** * This method is invoked when a drag operation is going on. */ public void dropOver (int row) {} }