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;


Reply via email to