blob: 674cc34569339715aa999db1ff2b1e40db94f07d [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.components;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.contrib.table.model.IAdvancedTableColumn;
import org.apache.tapestry.contrib.table.model.IAdvancedTableColumnSource;
import org.apache.tapestry.contrib.table.model.ITableColumn;
import org.apache.tapestry.contrib.table.model.ITableColumnModel;
import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
import org.apache.tapestry.services.ExpressionEvaluator;
/**
* A placeholder for a static methods related to the Table component.
*
* @since 3.0
* @author Mindbridge
*/
public class TableColumnModelSourceImpl implements TableColumnModelSource
{
/** @since 4.0 */
private ExpressionEvaluator _expressionEvaluator;
/** @since 4.0 */
public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
{
_expressionEvaluator = expressionEvaluator;
}
/**
* Generate a table column model out of the description string provided.
* Entries in the description string are separated by commas. Each column
* entry is of the format name, name:expression, or
* name:displayName:expression. An entry prefixed with ! represents a
* non-sortable column. If the whole description string is prefixed with *,
* it represents columns to be included in a Form.
*
* @param strDesc
* the description of the column model to be generated
* @param objComponent
* the component ordering the generation
* @param objColumnSettingsContainer
* the component containing the column settings
* @return a table column model based on the provided parameters
*/
public ITableColumnModel generateTableColumnModel(
IAdvancedTableColumnSource objColumnSource, String strDesc,
IComponent objComponent, IComponent objColumnSettingsContainer)
{
if (strDesc == null) return null;
List arrColumns = new ArrayList();
String desc = strDesc.trim();
boolean bFormColumns = false;
while(desc.startsWith("*"))
{
desc = desc.substring(1);
bFormColumns = true;
}
StringTokenizer objTokenizer = new StringTokenizer(desc, ",");
while(objTokenizer.hasMoreTokens())
{
String strToken = objTokenizer.nextToken().trim();
if (strToken.startsWith("="))
{
String strColumnExpression = strToken.substring(1);
Object objColumn = _expressionEvaluator.read(
objColumnSettingsContainer, strColumnExpression);
if (!(objColumn instanceof ITableColumn))
throw new ApplicationRuntimeException(TableMessages
.notAColumn(objComponent, strColumnExpression));
arrColumns.add(objColumn);
continue;
}
boolean bSortable = true;
if (strToken.startsWith("!"))
{
strToken = strToken.substring(1);
bSortable = false;
}
StringTokenizer objColumnTokenizer = new StringTokenizer(strToken,
":");
String strName = "";
if (objColumnTokenizer.hasMoreTokens())
strName = objColumnTokenizer.nextToken();
String strExpression = strName;
if (objColumnTokenizer.hasMoreTokens())
strExpression = objColumnTokenizer.nextToken();
String strDisplayName = strName;
if (objColumnTokenizer.hasMoreTokens())
{
strDisplayName = strExpression;
strExpression = objColumnTokenizer.nextToken();
}
IAdvancedTableColumn objColumn = objColumnSource
.generateTableColumn(strName, strDisplayName, bSortable,
strExpression);
if (bFormColumns)
objColumn
.setColumnRendererSource(SimpleTableColumn.FORM_COLUMN_RENDERER_SOURCE);
if (objColumnSettingsContainer != null)
objColumn.loadSettings(objColumnSettingsContainer);
arrColumns.add(objColumn);
}
return new SimpleTableColumnModel(arrColumns);
}
}