blob: 04e26a93d50b5a60b2fb8283577413f46136f375 [file] [log] [blame]
// Copyright 2004 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;
/**
* @author mindbridge
*
*/
public class ExpressionTableColumnModel extends SimpleTableColumnModel
{
/**
* 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)
{
this(convertToDetailedArray(arrColumnInfo, bSorted));
}
/**
* 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)
{
super(convertToColumns(arrColumnInfo));
}
/**
* 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)
{
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.getBoolean(objTempValue.toString());
}
arrColumns[i] =
new ExpressionTableColumn(strColumnName, strDisplayName, strExpression, bSorted);
}
return arrColumns;
}
}