package org.openswing.swing.export.java;
import java.io.*;
import java.util.*;
import org.openswing.swing.table.java.*;
import org.openswing.swing.message.send.java.FilterWhereClause;
import org.openswing.swing.util.java.Consts;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Export information needed to export data related to a grid on the server side.</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 GridExportOptions extends ComponentExportOptions implements Serializable {
/** columns to export */
private ArrayList exportColumns = null;
/** attribute names related to the columns to export */
private ArrayList exportAttrColumns = null;
/** filtered columns; collection of pairs: attributeName, FilterWhereClause[2] */
private Map filteredColumns = null;
/** sorted columns */
private ArrayList currentSortedColumns = new ArrayList();
/** ordering versus of sorted columns */
private ArrayList currentSortedVersusColumns = new ArrayList();
/** other grid parameters */
private Map otherGridParams = null;
/** server method name to invoke on the server */
private String serverMethodName = null;
/** maximum number of rows to export */
private int maxRows;
/** grid data locator */
private GridDataLocator gridDataLocator = null;
/** columns width */
private Hashtable columnsWidth = null;
/** columns type */
private Hashtable columnsType = null;
/** valueObjectType v.o. type */
private Class valueObjectType = null;
public static final int TYPE_TEXT = 0;
public static final int TYPE_DATE = 1;
public static final int TYPE_DATE_TIME = 2;
public static final int TYPE_TIME = 3;
public static final int TYPE_INT = 4;
public static final int TYPE_DEC = 5;
public static final int TYPE_CHECK = 6;
public static final int TYPE_COMBO = 7;
public static final int TYPE_LOOKUP = 8;
public static final int TYPE_PERC = 9;
public static final int TYPE_CURRENCY = 10;
/** list of locked rows at the top of the grid */
private ArrayList topRows = new ArrayList();
/** list of locked rows at the bottom of the grid */
private ArrayList bottomRows = new ArrayList();
/** flag used to add a filter panel on top of the grid, in order to show filtering conditions; this pane is visibile only whether there is at least one filtering condition applied; default value: <code>ClientSettings.SHOW_FILTERING_CONDITIONS_IN_EXPORT</code> */
private boolean showFilteringConditions = false;
/** export document title (optional) */
private String title = null;
/** collection of pairs <attribute name, translation> */
private Hashtable attributeDescriptions = null;
/** callbacks to invoke when exporting grid */
private GridExportCallbacks callbacks = null;
/**
* Method called by Grid.
* @param exportColumns column identifiers related to columns to export
* @param exportAttrColumns attribute names related to the columns to export
* @param filteredColumns filtered columns; collection of pairs: attributeName, FilterWhereClause[2]
* @param currentSortedColumns sorted columns
* @param currentSortedVersusColumns ordering versus of sorted columns
* @param otherGridParams other grid parameters
* @param maxRows maximum number of rows to export
* @param valueObjectType v.o. type
* @param gridDataLocator grid data locator
* @param columnsWidth columns width
* @param columnsType columns type
* @param attributeDescriptions collection of pairs <attribute name, translation>
* @param topRows list of locked rows at the top of the grid
* @param bottomRows list of locked rows at the bottom of the grid
*/
public GridExportOptions(
ArrayList exportColumns,
ArrayList exportAttrColumns,
Map filteredColumns,
ArrayList currentSortedColumns,
ArrayList currentSortedVersusColumns,
Map otherGridParams,
int maxRows,
Class valueObjectType,
GridDataLocator gridDataLocator,
Hashtable columnsWidth,
Hashtable columnsType,
Hashtable attributeDescriptions,
ArrayList topRows,
ArrayList bottomRows
) {
this.exportColumns = exportColumns;
this.exportAttrColumns = exportAttrColumns;
this.filteredColumns = filteredColumns;
this.currentSortedColumns = currentSortedColumns;
this.currentSortedVersusColumns = currentSortedVersusColumns;
this.otherGridParams = otherGridParams;
this.maxRows = maxRows;
this.valueObjectType = valueObjectType;
this.gridDataLocator = gridDataLocator;
this.columnsWidth = columnsWidth;
this.columnsType = columnsType;
this.attributeDescriptions = attributeDescriptions;
this.topRows = topRows;
this.bottomRows = bottomRows;
}
/**
* @return attribute names related to the columns to export
*/
public final ArrayList getExportAttrColumns() {
return exportAttrColumns;
}
/**
* @return columns to export
*/
public final ArrayList getExportColumns() {
return exportColumns;
}
/**
* @return sorted columns
*/
public final ArrayList getCurrentSortedColumns() {
return currentSortedColumns;
}
/**
* @return ordering versus of sorted columns
*/
public final ArrayList getCurrentSortedVersusColumns() {
return currentSortedVersusColumns;
}
/**
* @return other grid parameters
*/
public final Map getOtherGridParams() {
return otherGridParams;
}
/**
* @return filteredColumns; collection of pairs: attributeName, FilterWhereClause[2]
*/
public final Map getFilteredColumns() {
return filteredColumns;
}
/**
* @return server method name to invoke on the server
*/
public final String getServerMethodName() {
return serverMethodName;
}
/**
* @return maximum number of rows to export
*/
public final int getMaxRows() {
return maxRows;
}
/**
* Set the server method name to invoke on the server.
* @param serverMethodName server method name to invoke on the server
*/
public final void setServerMethodName(String serverMethodName) {
this.serverMethodName = serverMethodName;
}
/**
* @return grid data locator
*/
public final GridDataLocator getGridDataLocator() {
return gridDataLocator;
}
/**
* Set the grid data locator.
* @param gridDataLocator grid data locator
*/
public final void setGridDataLocator(GridDataLocator gridDataLocator) {
this.gridDataLocator = gridDataLocator;
}
/**
* @return columns type
*/
public final Hashtable getColumnsType() {
return columnsType;
}
/**
* @return columns width
*/
public final Hashtable getColumnsWidth() {
return columnsWidth;
}
/**
* @return valueObjectType v.o. type
*/
public final Class getValueObjectType() {
return valueObjectType;
}
/**
* @return list of locked rows at the top of the grid
*/
public final ArrayList getTopRows() {
return topRows;
}
/**
* @return list of locked rows at the bottom of the grid
*/
public final ArrayList getBottomRows() {
return bottomRows;
}
/**
* Used to add a filter panel on top of the grid, in order to show filtering conditions.
* This pane is visibile only whether "showFilteringConditions" is set to <code>true</code> and there is at least one filtering condition applied.
* @param showFilteringConditions used to add a filter panel on top of the grid, in order to show filtering conditions
*/
public final void setShowFilteringConditions(boolean showFilteringConditions) {
this.showFilteringConditions = showFilteringConditions;
}
/**
* @return export document title (optional)
*/
public final String getTitle() {
return title;
}
/**
* Set the export document title.
* @param title export document title
*/
public final void setTitle(String title) {
this.title = title;
}
public String[] getFilteringConditions() {
if (showFilteringConditions && filteredColumns.size()>0) {
ArrayList filters = new ArrayList();
Iterator it = filteredColumns.keySet().iterator();
FilterWhereClause[] filter = null;
String attr = null;
Object val = null;
String aux = null;
while(it.hasNext()) {
attr = it.next().toString();
filter = (FilterWhereClause[])filteredColumns.get(attr);
val = filter[0].getValue();
if(val==null)
aux = "";
else if (val instanceof ArrayList) {
ArrayList list = (ArrayList)val;
aux = "(";
for(int i=0;i<list.size();i++)
aux += (list.get(i)==null?"":list.get(i).toString())+",";
if (list.size()>0)
aux = aux.substring(0,aux.length()-1);
aux += ")";
}
filters.add(attributeDescriptions.get(filter[0].getAttributeName())+" "+filter[0].getOperator()+" "+aux);
if (filter[1]!=null) {
val = filter[1].getValue();
if(val==null)
aux = "";
else if (val instanceof ArrayList) {
ArrayList list = (ArrayList)val;
aux = "(";
for(int i=0;i<list.size();i++)
aux += (list.get(i)==null?"":list.get(i).toString())+",";
if (list.size()>0)
aux = aux.substring(0,aux.length()-1);
aux += ")";
}
filters.add(attributeDescriptions.get(filter[1].getAttributeName())+" "+filter[1].getOperator()+" "+aux);
}
}
return (String[])filters.toArray(new String[filters.size()]);
}
else
return null;
}
/**
* @param callbacks callbacks to invoke when exporting grid
*/
public final GridExportCallbacks getCallbacks() {
return callbacks;
}
/**
* Set callbacks callbacks to invoke when exporting grid.
* @param callbacks callbacks to invoke when exporting grid
*/
public final void setCallbacks(GridExportCallbacks callbacks) {
this.callbacks = callbacks;
}
}