| // 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; |
| } |
| } |