001    package org.trails.component;
002    
003    import org.apache.tapestry.contrib.table.model.ognl.ExpressionTableColumn;
004    import org.apache.tapestry.services.ExpressionEvaluator;
005    import org.trails.descriptor.IPropertyDescriptor;
006    
007    import java.text.DecimalFormat;
008    import java.text.Format;
009    import java.text.SimpleDateFormat;
010    
011    public class TrailsTableColumn extends ExpressionTableColumn
012    {
013    
014            protected IPropertyDescriptor propertyDescriptor;
015    
016            public TrailsTableColumn(IPropertyDescriptor propertyDescriptor, ExpressionEvaluator evaluator)
017            {
018                    super(propertyDescriptor.getName(), propertyDescriptor.getDisplayName(),
019                                    propertyDescriptor.getName(), true, evaluator);
020                    this.propertyDescriptor = propertyDescriptor;
021            }
022    
023            public IPropertyDescriptor getPropertyDescriptor()
024            {
025                    return propertyDescriptor;
026            }
027    
028            public Object getColumnValue(Object arg0)
029            {
030                    Object value = super.getColumnValue(arg0);
031                    if (propertyDescriptor.getFormat() != null)
032                    {
033                            try
034                            {
035                                    Format format = null;
036                                    if (propertyDescriptor.isDate())
037                                    {
038                                            format = new SimpleDateFormat(propertyDescriptor.getFormat());
039                                    }
040                                    if (propertyDescriptor.isNumeric())
041                                    {
042                                            format = new DecimalFormat(propertyDescriptor.getFormat());
043                                    }
044                                    return format.format(value);
045                            } catch (IllegalArgumentException e)
046                            {
047                                    return value;
048                            }
049                    } else
050                    {
051                            return value;
052                    }
053            }
054    }