blob: a9b9cb66602c51f57dc2ce4250fac728dc87bf30 [file] [log] [blame]
// Copyright 2004, 2005 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.contrib.table.model.ognl;
import org.apache.tapestry.contrib.table.model.ITableColumn;
import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
import org.apache.tapestry.services.ExpressionEvaluator;
/**
* @author mindbridge
*/
public class ExpressionTableColumnModel extends SimpleTableColumnModel
{
private static final long serialVersionUID = 1L;
/**
* Constructs a table column model containting OGNL expression columns. <br>
* The data for the columns is provided in the form of a string array, where
* the info of each column is stored in two consecutive fields in the array,
* hence its size must be even. The expected info is the following:
* <ul>
* <li>Column Name
* <li>OGNL expression
* </ul>
*
* @param arrColumnInfo
* The information to construct the columns from
* @param bSorted
* Whether all columns are sorted or not
*/
public ExpressionTableColumnModel(String[] arrColumnInfo, boolean bSorted,
ExpressionEvaluator expressionEvaluator)
{
this(convertToDetailedArray(arrColumnInfo, bSorted),
expressionEvaluator);
}
/**
* Constructs a table column model containting OGNL expression columns. <br>
* The data for the columns is provided in the form of a string array, where
* the info of each column is stored in four consecutive fields in the
* array, hence its size must be divisible by 4.<br>
* The expected info is the following:
* <ul>
* <li>Column Name
* <li>Display Name
* <li>OGNL expression
* <li>Sorting of the column. This is either a Boolean, or a String
* representation of a boolean.
* </ul>
*
* @param arrColumnInfo
*/
public ExpressionTableColumnModel(Object[] arrColumnInfo,
ExpressionEvaluator expressionEvaluator)
{
super(convertToColumns(arrColumnInfo, expressionEvaluator));
}
/**
* Method convertToDetailedArray.
*
* @param arrColumnInfo
* @param bSorted
* @return Object[]
*/
protected static Object[] convertToDetailedArray(String[] arrColumnInfo,
boolean bSorted)
{
int nColumns = arrColumnInfo.length / 2;
int nSize = nColumns * 4;
Object[] arrDetailedInfo = new Object[nSize];
for(int i = 0; i < nColumns; i++)
{
int nInputBaseIndex = 2 * i;
String strColumnName = arrColumnInfo[nInputBaseIndex];
String strExpression = arrColumnInfo[nInputBaseIndex + 1];
int nOutputBaseIndex = 4 * i;
arrDetailedInfo[nOutputBaseIndex] = strColumnName;
arrDetailedInfo[nOutputBaseIndex + 1] = strColumnName;
arrDetailedInfo[nOutputBaseIndex + 2] = strExpression;
arrDetailedInfo[nOutputBaseIndex + 3] = bSorted ? Boolean.TRUE
: Boolean.FALSE;
}
return arrDetailedInfo;
}
/**
* Method convertToColumns.
*
* @param arrDetailedInfo
* @return ITableColumn[]
*/
protected static ITableColumn[] convertToColumns(Object[] arrDetailedInfo,
ExpressionEvaluator expressionEvaluator)
{
int nColumns = arrDetailedInfo.length / 4;
ITableColumn[] arrColumns = new ITableColumn[nColumns];
for(int i = 0; i < nColumns; i++)
{
Object objTempValue;
int nBaseIndex = 4 * i;
String strColumnName = "";
objTempValue = arrDetailedInfo[nBaseIndex];
if (objTempValue != null) strColumnName = objTempValue.toString();
String strDisplayName = "";
objTempValue = arrDetailedInfo[nBaseIndex + 1];
if (objTempValue != null) strDisplayName = objTempValue.toString();
String strExpression = "";
objTempValue = arrDetailedInfo[nBaseIndex + 2];
if (objTempValue != null) strExpression = objTempValue.toString();
boolean bSorted = false;
objTempValue = arrDetailedInfo[nBaseIndex + 3];
if (objTempValue != null)
{
if (objTempValue instanceof Boolean)
bSorted = ((Boolean) objTempValue).booleanValue();
else bSorted = Boolean.valueOf(objTempValue.toString())
.booleanValue();
}
arrColumns[i] = new ExpressionTableColumn(strColumnName,
strDisplayName, strExpression, bSorted, expressionEvaluator);
}
return arrColumns;
}
}