EMPIREDB-311
Wrap column expressions for rendering in ValueTag
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index e151873..3e216f8 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -52,6 +52,7 @@
 import org.apache.empire.data.Record;

 import org.apache.empire.data.RecordData;

 import org.apache.empire.db.DBColumn;

+import org.apache.empire.db.DBColumnExpr;

 import org.apache.empire.db.DBDatabase;

 import org.apache.empire.db.DBRecord;

 import org.apache.empire.db.DBRowSet;

@@ -59,6 +60,7 @@
 import org.apache.empire.exceptions.BeanPropertyGetException;

 import org.apache.empire.exceptions.BeanPropertySetException;

 import org.apache.empire.exceptions.InvalidArgumentException;

+import org.apache.empire.exceptions.InvalidPropertyException;

 import org.apache.empire.exceptions.NotSupportedException;

 import org.apache.empire.exceptions.PropertyReadOnlyException;

 import org.apache.empire.jsf2.app.FacesUtils;

@@ -92,6 +94,11 @@
         {

             this.expr = expr;

         }

+        

+        public ColumnExpr getExpr()

+        {

+            return this.expr;

+        }

 

         @Override

         public DataType getDataType()

@@ -665,7 +672,8 @@
         {   // value

             if (record instanceof RecordData)

             { // a record

-                mostRecentValue = ((RecordData) record).getValue(getColumn());

+                ColumnExpr col = unwrapColumnExpr(getColumn());

+                mostRecentValue = ((RecordData) record).getValue(col);

                 return mostRecentValue;

             }   

             else

@@ -855,9 +863,18 @@
         // if parent is a record tag, get the record from there

         Object col = getTagAttributeValue("column");

         if (col instanceof Column)

-        { // cast to column

+        {   // cast to column

             return (Column) col;

         }

+        if (col instanceof ColumnExpr)

+        {   // check component

+            if ((component instanceof InputTag || component instanceof ControlTag))

+            {   log.warn("ColumnExpresion cannot be used with InputTag or ControlTag");

+                throw new InvalidPropertyException("column", column);

+            }

+            // wrap expression

+            return createColumnExprWrapper((ColumnExpr) col);

+        }

         if (col instanceof String)

         {   // parse String

             String name = String.valueOf(col);

@@ -921,6 +938,13 @@
     {

          return new ColumnExprWrapper(colExpr);

     }

+    

+    protected ColumnExpr unwrapColumnExpr(Column col)

+    {

+        if (col instanceof ColumnExprWrapper)

+            return ((ColumnExprWrapper) col).getExpr();

+        return col;

+    }

 

     protected Object findRecord()

     {