Author: jdonnerstag Date: Thu Jun 23 11:00:22 2011 New Revision: 1138827 URL: http://svn.apache.org/viewvc?rev=1138827&view=rev Log: fixed: org/apache/wicket/extensions/markup/html/tree/table/{PropertyRenderableColumn,PropertyTreeColumn} common code Issue: WICKET-3480
Added: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractPropertyColumn.java wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyRenderableColumn.java - copied, changed from r1138618, wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractRenderableColumn.java wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyTreeColumn.java - copied, changed from r1138618, wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractTreeColumn.java Removed: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractRenderableColumn.java wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractTreeColumn.java Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java Added: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractPropertyColumn.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractPropertyColumn.java?rev=1138827&view=auto ============================================================================== --- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractPropertyColumn.java (added) +++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractPropertyColumn.java Thu Jun 23 11:00:22 2011 @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.wicket.extensions.markup.html.tree.table; + +import java.util.Locale; + +import javax.swing.tree.TreeNode; + +import org.apache.wicket.Application; +import org.apache.wicket.Session; +import org.apache.wicket.util.convert.IConverter; +import org.apache.wicket.util.lang.PropertyResolver; + + +/** + * Convenience class for building tree columns. + * + * @author Matej Knopp + * @param <T> + * the type of the property that is rendered in this column + */ +public abstract class AbstractPropertyColumn<T> extends AbstractColumn +{ + private static final long serialVersionUID = 1L; + + private IConverter<T> converter; + + private Locale locale; + + private final String propertyExpression; + + /** + * Creates the tree column. + * + * @param location + * Specifies how the column should be aligned and what his size should be + * @param header + * Header caption + * @param propertyExpression + * Expression for property access + */ + public AbstractPropertyColumn(final ColumnLocation location, final String header, + final String propertyExpression) + { + super(location, header); + + this.propertyExpression = propertyExpression; + } + + /** + * Returns the converter or null if no converter is specified. + * + * @return The converter or null + */ + public IConverter<T> getConverter() + { + return converter; + } + + /** + * Returns the locale or null if no locale is specified. + * + * @return The locale or null + */ + public Locale getLocale() + { + return locale; + } + + /** + * By default the property is converted to string using <code>toString</code> method. If you + * want to alter this behavior, you can specify a custom converter. + * + * @param converter + * any converter + */ + public void setConverter(final IConverter<T> converter) + { + this.converter = converter; + } + + /** + * Sets the locale to be used as parameter for custom converter (if one is specified). If no + * locale is set, session locale is used. + * + * @param locale + * Any locale + */ + public void setLocale(final Locale locale) + { + this.locale = locale; + } + + /** + * Returns the property expression. + * + * @return The property expression + */ + protected String getPropertyExpression() + { + return propertyExpression; + } + + /** + * Returns the string representation of the node. + * + * @param node + * The node + * @return The string representation of the node + */ + public String getNodeValue(final TreeNode node) + { + Object result = PropertyResolver.getValue(propertyExpression, node); + + @SuppressWarnings("rawtypes") + IConverter converter = getConverter(); + if (converter == null && result != null) + { + converter = Application.get().getConverterLocator().getConverter(result.getClass()); + } + + if (converter != null) + { + Locale locale = this.locale; + if (locale == null) + { + locale = Session.get().getLocale(); + } + + @SuppressWarnings("unchecked") + String string = converter.convertToString(result, locale); + return string; + } + else + { + return result != null ? result.toString() : null; + } + } +} Copied: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyRenderableColumn.java (from r1138618, wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractRenderableColumn.java) URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyRenderableColumn.java?p2=wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyRenderableColumn.java&p1=wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractRenderableColumn.java&r1=1138618&r2=1138827&rev=1138827&view=diff ============================================================================== --- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractRenderableColumn.java (original) +++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyRenderableColumn.java Thu Jun 23 11:00:22 2011 @@ -28,12 +28,11 @@ import org.apache.wicket.util.string.Str * Convenience class for creating non-interactive lightweight (IRenderable based) columns. * * @author Matej Knopp + * @param <T> + * the type of the property that is rendered in this column */ -public abstract class AbstractRenderableColumn extends AbstractColumn +public class PropertyRenderableColumn<T> extends AbstractPropertyColumn<T> { - /** - * - */ private static final long serialVersionUID = 1L; private boolean contentAsTooltip = false; @@ -45,25 +44,18 @@ public abstract class AbstractRenderable * * @param location * Specifies how the column should be aligned and what his size should be - * * @param header * Header caption + * @param propertyExpression + * Expression for property access */ - public AbstractRenderableColumn(final ColumnLocation location, final String header) + public PropertyRenderableColumn(final ColumnLocation location, final String header, + final String propertyExpression) { - super(location, header); + super(location, header, propertyExpression); } /** - * Returns the string value for the provided node. - * - * @param node - * Determines the position in tree - * @return The - */ - public abstract String getNodeValue(TreeNode node); - - /** * Returns whether the content should also be visible as tooltip of the cell. * * @return whether the content should also be visible as tooltip @@ -104,6 +96,10 @@ public abstract class AbstractRenderable public void render(final TreeNode node, final Response response) { String content = getNodeValue(node); + if (content == null) + { + content = ""; + } // escape if necessary if (isEscapeContent()) Copied: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyTreeColumn.java (from r1138618, wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractTreeColumn.java) URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyTreeColumn.java?p2=wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyTreeColumn.java&p1=wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractTreeColumn.java&r1=1138618&r2=1138827&rev=1138827&view=diff ============================================================================== --- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/AbstractTreeColumn.java (original) +++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/PropertyTreeColumn.java Thu Jun 23 11:00:22 2011 @@ -26,12 +26,11 @@ import org.apache.wicket.MarkupContainer * Convenience class for building tree columns, i.e. columns that contain the actual tree. * * @author Matej Knopp + * @param <T> + * the type of the property that is rendered in this column */ -public abstract class AbstractTreeColumn extends AbstractColumn +public class PropertyTreeColumn<T> extends AbstractPropertyColumn<T> { - /** - * - */ private static final long serialVersionUID = 1L; /** @@ -40,14 +39,15 @@ public abstract class AbstractTreeColumn * * @param location * Specifies how the column should be aligned and what his size should be - * * @param header * Header caption - * + * @param propertyExpression + * Expression for property access */ - public AbstractTreeColumn(final ColumnLocation location, final String header) + public PropertyTreeColumn(final ColumnLocation location, final String header, + final String propertyExpression) { - super(location, header); + super(location, header, propertyExpression); } /** @@ -62,7 +62,7 @@ public abstract class AbstractTreeColumn public String renderNode(final TreeNode node) { - return AbstractTreeColumn.this.renderNode(node); + return PropertyTreeColumn.this.getNodeValue(node); } }, getTreeTable()); } @@ -74,13 +74,4 @@ public abstract class AbstractTreeColumn { return null; } - - /** - * Returns the string representation of the node. - * - * @param node - * The node - * @return The string representation of the node - */ - public abstract String renderNode(TreeNode node); } Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java?rev=1138827&r1=1138826&r2=1138827&view=diff ============================================================================== --- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java (original) +++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/table/TreeTable.java Thu Jun 23 11:00:22 2011 @@ -39,7 +39,7 @@ import org.apache.wicket.request.resourc /** * TreeTable is a component that represents a grid with a tree. It's divided into columns. One of - * the columns has to be column derived from {@link AbstractTreeColumn}. + * the columns has to be column derived from {@link PropertyTreeColumn}. * * @author Matej Knopp */ @@ -417,7 +417,7 @@ public class TreeTable extends DefaultAb { for (IColumn column : columns) { - if (column instanceof AbstractTreeColumn) + if (column instanceof PropertyTreeColumn) { found = true; break;