click-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From med...@apache.org
Subject svn commit: r1310981 - in /click/trunk/click: build/ documentation/docs/ examples/src/org/apache/click/examples/page/ examples/webapp/WEB-INF/ extras/src/org/apache/click/extras/cayenne/ extras/src/org/apache/click/extras/control/ framework/src/org/apa...
Date Sun, 08 Apr 2012 11:55:15 GMT
Author: medgar
Date: Sun Apr  8 11:55:14 2012
New Revision: 1310981

URL: http://svn.apache.org/viewvc?rev=1310981&view=rev
Log:
CLK-306

Modified:
    click/trunk/click/build/build.properties
    click/trunk/click/documentation/docs/roadmap-changes.html
    click/trunk/click/examples/src/org/apache/click/examples/page/SourceViewer.java
    click/trunk/click/examples/webapp/WEB-INF/click.xml
    click/trunk/click/extras/src/org/apache/click/extras/cayenne/PropertySelect.java
    click/trunk/click/extras/src/org/apache/click/extras/cayenne/QuerySelect.java
    click/trunk/click/extras/src/org/apache/click/extras/control/CheckList.java
    click/trunk/click/extras/src/org/apache/click/extras/control/FieldColumn.java
    click/trunk/click/extras/src/org/apache/click/extras/control/LinkDecorator.java
    click/trunk/click/extras/src/org/apache/click/extras/control/PickList.java
    click/trunk/click/framework/src/org/apache/click/ClickServlet.java
    click/trunk/click/framework/src/org/apache/click/control/Column.java
    click/trunk/click/framework/src/org/apache/click/control/RadioGroup.java
    click/trunk/click/framework/src/org/apache/click/control/Select.java
    click/trunk/click/framework/src/org/apache/click/service/MVELPropertyService.java
    click/trunk/click/framework/src/org/apache/click/service/OGNLPropertyService.java
    click/trunk/click/framework/src/org/apache/click/service/PropertyService.java
    click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
    click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java
    click/trunk/click/framework/src/org/apache/click/util/ContainerUtils.java
    click/trunk/click/framework/test/org/apache/click/control/ColumnTest.java

Modified: click/trunk/click/build/build.properties
URL: http://svn.apache.org/viewvc/click/trunk/click/build/build.properties?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/build/build.properties (original)
+++ click/trunk/click/build/build.properties Sun Apr  8 11:55:14 2012
@@ -19,7 +19,7 @@
 version=2.3.1
 
 # App Server deployment directory by Ant target 'deploy-webapps'
-dir.appserver=C:/Java/jboss-as-7.0.1.Final/standalone/deployments
+dir.appserver=c:/java/apache-tomcat-7/webapps
 
 # Proxy hostname used by Ant target 'get-deps-proxy'
 proxy.host=192.168.0.3

Modified: click/trunk/click/documentation/docs/roadmap-changes.html
URL: http://svn.apache.org/viewvc/click/trunk/click/documentation/docs/roadmap-changes.html?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/documentation/docs/roadmap-changes.html (original)
+++ click/trunk/click/documentation/docs/roadmap-changes.html Sun Apr  8 11:55:14 2012
@@ -67,7 +67,7 @@
 
 <dl>
   <dt><a name="2.3.1"></a>
-      <div class="release-header">Latest Stable Release - Version 2.3.1 - ??? 2011</div>
+      <div class="release-header">Latest Stable Release - Version 2.3.1 - ?? April 2012</div>
   </dt>
   <dd>
     <div style="margin-left:-2em;margin-bottom:1em;">
@@ -79,28 +79,33 @@
       </div>
       <ul style="padding: 0em; margin-left:0em;margin-bottom: 2em">
           <li class="change">
-              Upgraded to Servlet API 2.4
-          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-763">CLK-763</a>].
-          </li>
-          <li class="change">
               Added Page method getCharacterEncoding. The response character encoding
               can be overridden through this method. getCharacterEncoding should be
               used instead of returning the <tt>charset</tt> through the getContentType
               method
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-764">CLK-764</a>].
           </li>
+          <li>
+              Added PropertyService interface with OGNL and MVEL property service implementations.
+              The default property service is OGNLPropertyService principally for
+              backward compatibility
+          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-306">CLK-306</a>].
+          </li>
           <li class="change">
               Added SessionMap methods getCreationTime, getId, getLastAccessedTime and getMaxInactiveInterval
-              to expose underlying read only HttpSession properties.
+              to expose underlying read only HttpSession properties
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-773">CLK-773</a>].
           </li>
           <li class="change">
-              Added URL request params options to the PageSubmit class.
+              Added URL request params options to the PageSubmit class
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-779">CLK-779</a>].
           </li>
           <li class="change">
-              Replaced OGNL expression library with MVEl.
-          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-306">CLK-306</a>].
+              Removed AutoCompleteTextField dependency on Page. The Ajax callback
+              URL is instead looked up from the request itself. This change removes
+              the restriction that AutoCompleteTextField must be attached to the
+              Page
+          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-761">CLK-761</a>].
           </li>
           <li class="change">
               Fixed AutoCompleteTextField to not send duplicate content type in
@@ -108,18 +113,13 @@
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-757">CLK-757</a>].
           </li>
           <li class="change">
-              Fixed page actions to show error page if error occurs
+              Fixed page actions to show error page if error occurs.
+              This issue was raised by Tim Christensen
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-767">CLK-767</a>].
           </li>
           <li class="change">
-              Removed AutoCompleteTextField dependency on Page. The Ajax callback
-              URL is instead looked up from the request itself. This change removes
-              the restriction that AutoCompleteTextField must be attached to the
-              Page
-          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-761">CLK-761</a>].
-          </li>
-          <li class="change">
-              Fixed AutoCompleteTextField to add extra parameters correctly
+              Fixed AutoCompleteTextField to add extra parameters correctly.
+              This issue was raised by Jose Luis Vázquez González
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-759">CLK-759</a>].
           </li>
           <li class="change">
@@ -127,6 +127,10 @@
               This issue has been raised by Tsuyoshi Yamamoto
           [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-762">CLK-762</a>].
           </li>
+          <li class="change">
+              Upgraded to Servlet API 2.4
+          [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-763">CLK-763</a>].
+          </li>
       </ul>
   </dd>
 

Modified: click/trunk/click/examples/src/org/apache/click/examples/page/SourceViewer.java
URL: http://svn.apache.org/viewvc/click/trunk/click/examples/src/org/apache/click/examples/page/SourceViewer.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/examples/src/org/apache/click/examples/page/SourceViewer.java (original)
+++ click/trunk/click/examples/src/org/apache/click/examples/page/SourceViewer.java Sun Apr  8 11:55:14 2012
@@ -79,7 +79,8 @@ public class SourceViewer extends Border
             "context:component-scan", "property", "constructor-arg",
             "list", "value", "ref", "beans:beans", "beans:bean", "http",
             "intercept-url", "form-login", "logout", "beans:property",
-            "beans:list", "beans:ref", "authentication-provider"};
+            "beans:list", "beans:ref", "authentication-provider",
+            "page-interceptor", "property-service" };
 
     private static final String[] VELOCITY_KEYWORDS = { "#if", "#if(",
             "#elseif", "#elseif(", "#else", "#else(", "#end", "#set", "#set(",

Modified: click/trunk/click/examples/webapp/WEB-INF/click.xml
URL: http://svn.apache.org/viewvc/click/trunk/click/examples/webapp/WEB-INF/click.xml?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/examples/webapp/WEB-INF/click.xml (original)
+++ click/trunk/click/examples/webapp/WEB-INF/click.xml Sun Apr  8 11:55:14 2012
@@ -26,4 +26,6 @@
 
   <page-interceptor classname="org.apache.click.examples.interceptor.ProfilingInterceptor"/>
 
+  <property-service classname="org.apache.click.service.MVELPropertyService"/>
+
 </click-app>

Modified: click/trunk/click/extras/src/org/apache/click/extras/cayenne/PropertySelect.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/cayenne/PropertySelect.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/cayenne/PropertySelect.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/cayenne/PropertySelect.java Sun Apr  8 11:55:14 2012
@@ -23,13 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.click.control.Decorator;
-import org.apache.click.control.Option;
-import org.apache.click.control.Select;
-import org.apache.click.util.ClickUtils;
-import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
-
 import org.apache.cayenne.DataObject;
 import org.apache.cayenne.DataObjectUtils;
 import org.apache.cayenne.access.DataContext;
@@ -37,6 +30,13 @@ import org.apache.cayenne.query.NamedQue
 import org.apache.cayenne.query.Ordering;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.click.Context;
+import org.apache.click.control.Decorator;
+import org.apache.click.control.Option;
+import org.apache.click.control.Select;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
+import org.apache.click.util.ClickUtils;
+import org.apache.click.util.HtmlStringBuffer;
 import org.apache.commons.lang.StringUtils;
 
 /**
@@ -633,8 +633,10 @@ public class PropertySelect extends Sele
                 optionList.add(Option.EMPTY_OPTION);
             }
 
-            Context context = getContext();
             Map cache = new HashMap();
+            Context context = getContext();
+            ConfigService configService = ClickUtils.getConfigService();
+            PropertyService propertyService = configService.getPropertyService();
 
             for (int i = 0; i < list.size(); i++) {
                 DataObject dataObject = (DataObject) list.get(i);
@@ -651,7 +653,8 @@ public class PropertySelect extends Sele
                             "optionLabel not defined for PropertySelect: " + getName();
                         throw new IllegalStateException(msg);
                     }
-                    label = PropertyUtils.getValue(dataObject, getOptionLabel(), cache);
+
+                    label = propertyService.getValue(dataObject, getOptionLabel(), cache);
                 }
 
                 Option option = null;

Modified: click/trunk/click/extras/src/org/apache/click/extras/cayenne/QuerySelect.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/cayenne/QuerySelect.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/cayenne/QuerySelect.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/cayenne/QuerySelect.java Sun Apr  8 11:55:14 2012
@@ -23,17 +23,18 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.click.control.Decorator;
-import org.apache.click.control.Option;
-import org.apache.click.control.Select;
-import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
-
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.query.NamedQuery;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.click.Context;
+import org.apache.click.control.Decorator;
+import org.apache.click.control.Option;
+import org.apache.click.control.Select;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
+import org.apache.click.util.ClickUtils;
+import org.apache.click.util.HtmlStringBuffer;
 
 /**
  * Provides a Cayenne Query Select control: &nbsp; &lt;select&gt;&lt;/select&gt;.
@@ -451,6 +452,8 @@ public class QuerySelect extends Select 
         }
 
         Context context = getContext();
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
         Map cache = new HashMap();
 
         for (int i = 0; i < list.size(); i++) {
@@ -490,10 +493,10 @@ public class QuerySelect extends Select 
 
                 try {
 
-                    value = PropertyUtils.getValue(row, getOptionValue(), cache);
+                    value = propertyService.getValue(row, getOptionValue(), cache);
 
                     if (getOptionLabel() != null) {
-                        label = PropertyUtils.getValue(row, getOptionLabel(), cache);
+                        label = propertyService.getValue(row, getOptionLabel(), cache);
 
                     } else {
                         label = getDecorator().render(row, context);

Modified: click/trunk/click/extras/src/org/apache/click/extras/control/CheckList.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/control/CheckList.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/control/CheckList.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/control/CheckList.java Sun Apr  8 11:55:14 2012
@@ -29,16 +29,16 @@ import java.util.Map;
 import org.apache.click.Context;
 import org.apache.click.control.Field;
 import org.apache.click.control.Option;
+import org.apache.click.dataprovider.DataProvider;
 import org.apache.click.element.CssImport;
 import org.apache.click.element.Element;
 import org.apache.click.element.JsImport;
 import org.apache.click.element.JsScript;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
 import org.apache.click.util.ClickUtils;
-import org.apache.click.dataprovider.DataProvider;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 import org.apache.commons.lang.StringEscapeUtils;
-
 import org.apache.commons.lang.StringUtils;
 
 /**
@@ -455,12 +455,16 @@ public class CheckList extends Field {
             return;
         }
 
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
         Map<?, ?> methodCache = new HashMap<Object, Object>();
 
         for (Object object : objects) {
             try {
-                Object valueResult = PropertyUtils.getValue(object,
-                    optionValueProperty, methodCache);
+                Object valueResult =
+                    propertyService.getValue(object,
+                                             optionValueProperty,
+                                             methodCache);
 
                 // Default labelResult to valueResult
                 Object labelResult = valueResult;
@@ -468,8 +472,10 @@ public class CheckList extends Field {
                 // If optionLabelProperty is specified, lookup the labelResult
                 // from the object
                 if (optionLabelProperty != null) {
-                    labelResult = PropertyUtils.getValue(object,
-                        optionLabelProperty, methodCache);
+                    labelResult =
+                        propertyService.getValue(object,
+                                                 optionLabelProperty,
+                                                 methodCache);
                 }
 
                 Option option = null;

Modified: click/trunk/click/extras/src/org/apache/click/extras/control/FieldColumn.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/control/FieldColumn.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/control/FieldColumn.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/control/FieldColumn.java Sun Apr  8 11:55:14 2012
@@ -24,8 +24,10 @@ import org.apache.click.Context;
 import org.apache.click.control.Column;
 import org.apache.click.control.Field;
 import org.apache.click.control.Form;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
+import org.apache.click.util.ClickUtils;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 
 /**
  * Provides a FieldColumn for rendering table data cells.
@@ -175,7 +177,9 @@ public class FieldColumn extends Column 
             }
 
         } else {
-            PropertyUtils.setValue(row, propertyName, value);
+            ConfigService configService = ClickUtils.getConfigService();
+            PropertyService propertyService = configService.getPropertyService();
+            propertyService.setValue(row, propertyName, value);
         }
     }
 

Modified: click/trunk/click/extras/src/org/apache/click/extras/control/LinkDecorator.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/control/LinkDecorator.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/control/LinkDecorator.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/control/LinkDecorator.java Sun Apr  8 11:55:14 2012
@@ -31,9 +31,10 @@ import org.apache.click.control.ActionLi
 import org.apache.click.control.Decorator;
 import org.apache.click.control.PageLink;
 import org.apache.click.control.Table;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
+import org.apache.click.util.ClickUtils;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
-
 import org.apache.commons.lang.StringUtils;
 
 /**
@@ -536,7 +537,9 @@ public class LinkDecorator implements De
             methodCache = new HashMap<Object, Object>();
         }
 
-        Object value = PropertyUtils.getValue(row, idProperty, methodCache);
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
+        Object value = propertyService.getValue(row, idProperty, methodCache);
 
         HtmlStringBuffer buffer = new HtmlStringBuffer();
 
@@ -584,7 +587,9 @@ public class LinkDecorator implements De
             methodCache = new HashMap<Object, Object>();
         }
 
-        Object value = PropertyUtils.getValue(row, idProperty, methodCache);
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
+        Object value = propertyService.getValue(row, idProperty, methodCache);
 
         HtmlStringBuffer buffer = new HtmlStringBuffer();
 

Modified: click/trunk/click/extras/src/org/apache/click/extras/control/PickList.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/control/PickList.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/control/PickList.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/control/PickList.java Sun Apr  8 11:55:14 2012
@@ -24,17 +24,18 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.click.Context;
 
+import org.apache.click.Context;
 import org.apache.click.control.Field;
 import org.apache.click.control.Option;
+import org.apache.click.dataprovider.DataProvider;
 import org.apache.click.element.Element;
 import org.apache.click.element.JsImport;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
 import org.apache.click.util.ClickUtils;
-import org.apache.click.dataprovider.DataProvider;
 import org.apache.click.util.Format;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 
 /**
  * Provides a twin multiple Select box control to select items.
@@ -410,12 +411,16 @@ public class PickList extends Field {
             return;
         }
 
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
         Map<?, ?> methodCache = new HashMap<Object, Object>();
 
         for (Object object : objects) {
             try {
-                Object valueResult = PropertyUtils.getValue(object,
-                    optionValueProperty, methodCache);
+                Object valueResult =
+                    propertyService.getValue(object,
+                                             optionValueProperty,
+                                             methodCache);
 
                 // Default labelResult to valueResult
                 Object labelResult = valueResult;
@@ -423,8 +428,10 @@ public class PickList extends Field {
                 // If optionLabelProperty is specified, lookup the labelResult
                 // from the object
                 if (optionLabelProperty != null) {
-                    labelResult = PropertyUtils.getValue(object,
-                        optionLabelProperty, methodCache);
+                    labelResult =
+                        propertyService.getValue(object,
+                                                 optionLabelProperty,
+                                                 methodCache);
                 }
 
                 Option option = null;
@@ -620,11 +627,14 @@ public class PickList extends Field {
             return;
         }
 
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
         Map<?, ?> cache = new HashMap<Object, Object>();
 
         for (Object object : objects) {
             try {
-                Object valueResult = PropertyUtils.getValue(object, value, cache);
+                Object valueResult =
+                    propertyService.getValue(object, value, cache);
 
                 if (valueResult != null) {
                     addSelectedValue(valueResult.toString());

Modified: click/trunk/click/framework/src/org/apache/click/ClickServlet.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/ClickServlet.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/ClickServlet.java (original)
+++ click/trunk/click/framework/src/org/apache/click/ClickServlet.java Sun Apr  8 11:55:14 2012
@@ -42,6 +42,7 @@ import javax.servlet.http.HttpSession;
 import org.apache.click.service.ConfigService;
 import org.apache.click.service.ConfigService.AutoBinding;
 import org.apache.click.service.LogService;
+import org.apache.click.service.PropertyService;
 import org.apache.click.service.ResourceService;
 import org.apache.click.service.TemplateException;
 import org.apache.click.service.XmlConfigService;
@@ -49,7 +50,6 @@ import org.apache.click.util.ClickUtils;
 import org.apache.click.util.ErrorPage;
 import org.apache.click.util.HtmlStringBuffer;
 import org.apache.click.util.PageImports;
-import org.apache.click.util.PropertyUtils;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.lang.ClassUtils;
 import org.apache.commons.lang.StringUtils;
@@ -1320,6 +1320,8 @@ public class ClickServlet extends HttpSe
             return;
         }
 
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
         HttpServletRequest request = page.getContext().getRequest();
 
         for (Enumeration<?> e = request.getParameterNames(); e.hasMoreElements();) {
@@ -1338,7 +1340,7 @@ public class ClickServlet extends HttpSe
                         || Number.class.isAssignableFrom(type)
                         || Boolean.class.isAssignableFrom(type)) {
 
-                        PropertyUtils.setValue(page, name, value);
+                        propertyService.setValue(page, name, value);
 
                         if (logger.isTraceEnabled()) {
                             logger.trace("   auto bound variable: " + name + "=" + value);

Modified: click/trunk/click/framework/src/org/apache/click/control/Column.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/Column.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/Column.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/Column.java Sun Apr  8 11:55:14 2012
@@ -27,10 +27,10 @@ import java.util.Map;
 import java.util.StringTokenizer;
 
 import org.apache.click.Context;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
 import org.apache.click.util.ClickUtils;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
-
 import org.apache.commons.lang.math.NumberUtils;
 
 /**
@@ -263,6 +263,9 @@ public class Column implements Serializa
     /** The column sortable status. The default value is false. */
     protected Boolean sortable;
 
+    /** The column property service. */
+    protected PropertyService propertyService;
+
     /** The parent Table. */
     protected Table table;
 
@@ -1328,7 +1331,12 @@ public class Column implements Serializa
                 methodCache = new HashMap<Object, Object>();
             }
 
-            return PropertyUtils.getValue(row, name, methodCache);
+            if (propertyService == null) {
+                ConfigService configService = ClickUtils.getConfigService();
+                propertyService = configService.getPropertyService();
+            }
+
+            return propertyService.getValue(row, name, methodCache);
         }
     }
 

Modified: click/trunk/click/framework/src/org/apache/click/control/RadioGroup.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/RadioGroup.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/RadioGroup.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/RadioGroup.java Sun Apr  8 11:55:14 2012
@@ -24,11 +24,12 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.click.Context;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
 import org.apache.click.util.ClickUtils;
-
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 
 /**
  * Provides a RadioGroup control.
@@ -277,10 +278,13 @@ public class RadioGroup extends Field {
 
         Map<?, ?> cache = new HashMap<Object, Object>();
 
+        ConfigService configService = ClickUtils.getConfigService();
+        PropertyService propertyService = configService.getPropertyService();
+
         for (Object object : objects) {
             try {
-                Object valueResult = PropertyUtils.getValue(object, value, cache);
-                Object labelResult = PropertyUtils.getValue(object, label, cache);
+                Object valueResult = propertyService.getValue(object, value, cache);
+                Object labelResult = propertyService.getValue(object, label, cache);
 
                 Radio radio = null;
 

Modified: click/trunk/click/framework/src/org/apache/click/control/Select.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/Select.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/Select.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/Select.java Sun Apr  8 11:55:14 2012
@@ -26,11 +26,14 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import org.apache.click.util.ClickUtils;
-import org.apache.click.dataprovider.DataProvider;
 
+import javax.servlet.ServletContext;
+
+import org.apache.click.dataprovider.DataProvider;
+import org.apache.click.service.ConfigService;
+import org.apache.click.service.PropertyService;
+import org.apache.click.util.ClickUtils;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 
 /**
  * Provides a Select control: &nbsp; &lt;select&gt;&lt;/select&gt;.
@@ -334,6 +337,9 @@ public class Select extends Field {
      */
     protected Option defaultOption;
 
+    /** The column property service. */
+    protected PropertyService propertyService;
+
     // Constructors -----------------------------------------------------------
 
     /**
@@ -603,10 +609,18 @@ public class Select extends Field {
 
         Map methodCache = new HashMap();
 
+        if (propertyService == null) {
+            ServletContext sc = getContext().getServletContext();
+            ConfigService configService = ClickUtils.getConfigService(sc);
+            propertyService = configService.getPropertyService();
+        }
+
         for (Object object : objects) {
             try {
-                Object valueResult = PropertyUtils.getValue(object,
-                    optionValueProperty, methodCache);
+                Object valueResult =
+                    propertyService.getValue(object,
+                                             optionValueProperty,
+                                             methodCache);
 
                 // Default labelResult to valueResult
                 Object labelResult = valueResult;
@@ -614,8 +628,10 @@ public class Select extends Field {
                 // If optionLabelProperty is specified, lookup the labelResult
                 // from the object
                 if (optionLabelProperty != null) {
-                    labelResult = PropertyUtils.getValue(object,
-                        optionLabelProperty, methodCache);
+                    labelResult =
+                        propertyService.getValue(object,
+                                                 optionLabelProperty,
+                                                 methodCache);
                 }
 
                 Option option = null;

Modified: click/trunk/click/framework/src/org/apache/click/service/MVELPropertyService.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/MVELPropertyService.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/service/MVELPropertyService.java (original)
+++ click/trunk/click/framework/src/org/apache/click/service/MVELPropertyService.java Sun Apr  8 11:55:14 2012
@@ -80,6 +80,8 @@ public class MVELPropertyService impleme
     }
 
     /**
+     * Set the named property value on the target object using the MVEL library.
+     *
      * @see PropertyService#setValue(Object, String, Object)
      *
      * @param target the target object to set the property of

Modified: click/trunk/click/framework/src/org/apache/click/service/OGNLPropertyService.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/OGNLPropertyService.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/service/OGNLPropertyService.java (original)
+++ click/trunk/click/framework/src/org/apache/click/service/OGNLPropertyService.java Sun Apr  8 11:55:14 2012
@@ -56,6 +56,17 @@ public class OGNLPropertyService impleme
     }
 
     /**
+     * Return the property value for the given object and property name.
+     * <p/>
+     * For performance and backward compatibility reasons this method uses
+     * reflection internally to get the property value.
+     * <p/>
+     * This method is thread-safe, and caches reflected accessor methods in an
+     * internal synchronized cache
+     * <p/>
+     * If the given source object is a <tt>Map</tt> this method will simply
+     * return the value for the given key name.
+     *
      * @see PropertyService#getValue(Object, String)
      *
      * @param source the source object
@@ -67,6 +78,22 @@ public class OGNLPropertyService impleme
     }
 
     /**
+     * Return the property value for the given object and property name.
+     * <p/>
+     * For performance and backward compatibility reasons this method uses
+     * reflection internally to get the property value.
+     * <p/>
+     * This method uses reflection internally to get the property value.
+     * <p/>
+     * This method caches the reflected property methods in the given Map cache.
+     * You must NOT modify the cache. Also note cache is ONLY valid for the
+     * current thread, as access to the cache is not synchronized. If you need
+     * multi-threaded access to shared cache use a thread-safe Map object, such
+     * as <tt>Collections.synchronizedMap(new HashMap())</tt>.
+     * <p/>
+     * If the given source object is a <tt>Map</tt> this method will simply
+     * return the value for the given key name.
+     *
      * @see PropertyService#getValue(Object, String, Map)
      *
      * @param source the source object
@@ -80,6 +107,8 @@ public class OGNLPropertyService impleme
     }
 
     /**
+     * Set the named property value on the target object using the OGNL library.
+     *
      * @see PropertyService#setValue(Object, String, Object)
      *
      * @param target the target object to set the property of

Modified: click/trunk/click/framework/src/org/apache/click/service/PropertyService.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/PropertyService.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/service/PropertyService.java (original)
+++ click/trunk/click/framework/src/org/apache/click/service/PropertyService.java Sun Apr  8 11:55:14 2012
@@ -25,6 +25,24 @@ import javax.servlet.ServletContext;
 
 /**
  * Provide a property service with property get and set utility methods.
+ *
+ * <h3>Configuration</h3>
+ * The default {@link PropertyService} implementation is {@link OGNLPropertyService} for
+ * backward compatibility reasons. Please note {@link MVELPropertyService} provides
+ * better property write performance than the OGNL property service.
+ * <p/>
+ * You can instruct Click to use a different implementation by adding
+ * the following element to your <tt>click.xml</tt> configuration file.
+ *
+ * <pre class="codeConfig">
+ * &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
+ * &lt;click-app charset="UTF-8"&gt;
+ *
+ *     &lt;pages package="org.apache.click.examples.page"/&gt;
+ *
+ *     &lt;<span class="red">property-service</span> classname="<span class="blue">org.apache.click.service.MVELPropertyService</span>"/&gt;
+ *
+ * &lt;/click-app&gt; </pre>
  */
 public interface PropertyService {
 
@@ -45,14 +63,7 @@ public interface PropertyService {
     public void onDestroy();
 
     /**
-     * Return the property value for the given object and property name. This
-     * method uses reflection internally to get the property value.
-     * <p/>
-     * This method is thread-safe, and caches reflected accessor methods in an
-     * internal synchronized cache.
-     * <p/>
-     * If the given source object is a <tt>Map</tt> this method will simply
-     * return the value for the given key name.
+     * Return the property value for the given object and property name.
      *
      * @param source the source object
      * @param name the name of the property
@@ -61,17 +72,9 @@ public interface PropertyService {
     public Object getValue(Object source, String name);
 
     /**
-     * Return the property value for the given object and property name. This
-     * method uses reflection internally to get the property value.
-     * <p/>
-     * This method caches the reflected property methods in the given Map cache.
-     * You must NOT modify the cache. Also note cache is ONLY valid for the
-     * current thread, as access to the cache is not synchronized. If you need
-     * multi-threaded access to shared cache use a thread-safe Map object, such
-     * as <tt>Collections.synchronizedMap(new HashMap())</tt>.
-     * <p/>
-     * If the given source object is a <tt>Map</tt> this method will simply
-     * return the value for the given key name.
+     * Return the property value for the given object and property name. The
+     * cache parameter may be used by the implementing service to provide
+     * improved performance.
      *
      * @param source the source object
      * @param name the name of the property
@@ -82,7 +85,7 @@ public interface PropertyService {
     public Object getValue(Object source, String name, Map<?, ?> cache);
 
     /**
-     * Return the property value for the given object and property name using the MVEL library.
+     * Set the named property value on the target object.
      *
      * @param target the target object to set the property of
      * @param name the name of the property to set

Modified: click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java (original)
+++ click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java Sun Apr  8 11:55:14 2012
@@ -46,7 +46,6 @@ import org.apache.click.util.Bindable;
 import org.apache.click.util.ClickUtils;
 import org.apache.click.util.Format;
 import org.apache.click.util.HtmlStringBuffer;
-import org.apache.click.util.PropertyUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.Validate;
 import org.w3c.dom.Document;
@@ -2201,10 +2200,13 @@ public class XmlConfigService implements
                 try {
                     listener = interceptorClass.newInstance();
 
+                    ConfigService configService = ClickUtils.getConfigService();
+                    PropertyService propertyService = configService.getPropertyService();
+
                     for (Property property : properties) {
-                        PropertyUtils.setValue(listener,
-                                               property.getName(),
-                                               property.getValue());
+                        propertyService.setValue(listener,
+                                                 property.getName(),
+                                                 property.getValue());
                     }
 
                 } catch (Exception e) {

Modified: click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java (original)
+++ click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java Sun Apr  8 11:55:14 2012
@@ -158,176 +158,176 @@ public class ClickUtils {
     private static final String[] HTML_ENTITIES = new String[9999];
 
     static {
-        HTML_ENTITIES[34] = "&quot;"; // " - double-quote
-        HTML_ENTITIES[38] = "&amp;"; // & - ampersand
-        HTML_ENTITIES[60] = "&lt;"; // < - less-than
-        HTML_ENTITIES[62] = "&gt;"; // > - greater-than
-        HTML_ENTITIES[160] = "&nbsp;"; // non-breaking space
-        HTML_ENTITIES[161] = "&iexcl;"; // inverted exclamation mark
-        HTML_ENTITIES[162] = "&cent;";  // cent sign
-        HTML_ENTITIES[163] = "&pound;"; // pound sign
+        HTML_ENTITIES[34] = "&quot;";    // " - double-quote
+        HTML_ENTITIES[38] = "&amp;";     // & - ampersand
+        HTML_ENTITIES[60] = "&lt;";      // < - less-than
+        HTML_ENTITIES[62] = "&gt;";      // > - greater-than
+        HTML_ENTITIES[160] = "&nbsp;";   // non-breaking space
+        HTML_ENTITIES[161] = "&iexcl;";  // inverted exclamation mark
+        HTML_ENTITIES[162] = "&cent;";   // cent sign
+        HTML_ENTITIES[163] = "&pound;";  // pound sign
         HTML_ENTITIES[164] = "&curren;"; // currency sign
-        HTML_ENTITIES[165] = "&yen;";  // yen sign = yuan sign
+        HTML_ENTITIES[165] = "&yen;";    // yen sign = yuan sign
         HTML_ENTITIES[166] = "&brvbar;"; // broken bar = broken vertical bar
-        HTML_ENTITIES[167] = "&sect;"; // section sign
-        HTML_ENTITIES[168] = "&uml;"; // diaeresis = spacing diaeresis
-        HTML_ENTITIES[169] = "&copy;"; // © - copyright sign
-        HTML_ENTITIES[170] = "&ordf;"; // feminine ordinal indicator
-        HTML_ENTITIES[171] = "&laquo;"; // left-pointing double angle quotation mark = left pointing guillemet
-        HTML_ENTITIES[172] = "&not;";   //not sign
-        HTML_ENTITIES[173] = "&shy;";   //soft hyphen = discretionary hyphen
-        HTML_ENTITIES[174] = "&reg;";   // ® - registered trademark sign
+        HTML_ENTITIES[167] = "&sect;";   // section sign
+        HTML_ENTITIES[168] = "&uml;";    // diaeresis = spacing diaeresis
+        HTML_ENTITIES[169] = "&copy;";   // copyright sign
+        HTML_ENTITIES[170] = "&ordf;";   // feminine ordinal indicator
+        HTML_ENTITIES[171] = "&laquo;";  // left-pointing double angle quotation mark = left pointing guillemet
+        HTML_ENTITIES[172] = "&not;";    // not sign
+        HTML_ENTITIES[173] = "&shy;";    // soft hyphen = discretionary hyphen
+        HTML_ENTITIES[174] = "&reg;";    // registered trademark sign
         HTML_ENTITIES[175] = "&macr;";   //macron = spacing macron = overline = APL overbar
-        HTML_ENTITIES[176] = "&deg;";   //degree sign
-        HTML_ENTITIES[177] = "&plusmn;";   //plus-minus sign = plus-or-minus sign
+        HTML_ENTITIES[176] = "&deg;";    //degree sign
+        HTML_ENTITIES[177] = "&plusmn;"; //plus-minus sign = plus-or-minus sign
         HTML_ENTITIES[178] = "&sup2;";   //superscript two = superscript digit two = squared
         HTML_ENTITIES[179] = "&sup3;";   //superscript three = superscript digit three = cubed
-        HTML_ENTITIES[180] = "&acute;";   //acute accent = spacing acute
-        HTML_ENTITIES[181] = "&micro;";   //micro sign
+        HTML_ENTITIES[180] = "&acute;";  //acute accent = spacing acute
+        HTML_ENTITIES[181] = "&micro;";  //micro sign
         HTML_ENTITIES[182] = "&para;";   //pilcrow sign = paragraph sign
-        HTML_ENTITIES[183] = "&middot;";   //middle dot = Georgian comma = Greek middle dot
-        HTML_ENTITIES[184] = "&cedil;";   //cedilla = spacing cedilla
+        HTML_ENTITIES[183] = "&middot;"; //middle dot = Georgian comma = Greek middle dot
+        HTML_ENTITIES[184] = "&cedil;";  //cedilla = spacing cedilla
         HTML_ENTITIES[185] = "&sup1;";   //superscript one = superscript digit one
         HTML_ENTITIES[186] = "&ordm;";   //masculine ordinal indicator
-        HTML_ENTITIES[187] = "&raquo;";   //right-pointing double angle quotation mark = right pointing guillemet
-        HTML_ENTITIES[188] = "&frac14;";   //vulgar fraction one quarter = fraction one quarter
-        HTML_ENTITIES[189] = "&frac12;";   //vulgar fraction one half = fraction one half
-        HTML_ENTITIES[190] = "&frac34;";   //vulgar fraction three quarters = fraction three quarters
-        HTML_ENTITIES[191] = "&iquest;";   //inverted question mark = turned question mark
-        HTML_ENTITIES[192] = "&Agrave;";   // À - uppercase A, grave accent
-        HTML_ENTITIES[193] = "&Aacute;";   // � - uppercase A, acute accent
-        HTML_ENTITIES[194] = "&Acirc;";   // Â - uppercase A, circumflex accent
-        HTML_ENTITIES[195] = "&Atilde;";   // Ã - uppercase A, tilde
+        HTML_ENTITIES[187] = "&raquo;";  //right-pointing double angle quotation mark = right pointing guillemet
+        HTML_ENTITIES[188] = "&frac14;"; //vulgar fraction one quarter = fraction one quarter
+        HTML_ENTITIES[189] = "&frac12;"; //vulgar fraction one half = fraction one half
+        HTML_ENTITIES[190] = "&frac34;"; //vulgar fraction three quarters = fraction three quarters
+        HTML_ENTITIES[191] = "&iquest;"; //inverted question mark = turned question mark
+        HTML_ENTITIES[192] = "&Agrave;"; // À - uppercase A, grave accent
+        HTML_ENTITIES[193] = "&Aacute;"; // � - uppercase A, acute accent
+        HTML_ENTITIES[194] = "&Acirc;";  // Â - uppercase A, circumflex accent
+        HTML_ENTITIES[195] = "&Atilde;"; // Ã - uppercase A, tilde
         HTML_ENTITIES[196] = "&Auml;";   // Ä - uppercase A, umlaut
-        HTML_ENTITIES[197] = "&Aring;";   // Ã… - uppercase A, ring
-        HTML_ENTITIES[198] = "&AElig;";   // Æ - uppercase AE
-        HTML_ENTITIES[199] = "&Ccedil;";   // Ç - uppercase C, cedilla
-        HTML_ENTITIES[200] = "&Egrave;";   // È - uppercase E, grave accent
-        HTML_ENTITIES[201] = "&Eacute;";   // É - uppercase E, acute accent
-        HTML_ENTITIES[202] = "&Ecirc;";   // Ê - uppercase E, circumflex accent
+        HTML_ENTITIES[197] = "&Aring;";  // Ã… - uppercase A, ring
+        HTML_ENTITIES[198] = "&AElig;";  // Æ - uppercase AE
+        HTML_ENTITIES[199] = "&Ccedil;"; // Ç - uppercase C, cedilla
+        HTML_ENTITIES[200] = "&Egrave;"; // È - uppercase E, grave accent
+        HTML_ENTITIES[201] = "&Eacute;"; // É - uppercase E, acute accent
+        HTML_ENTITIES[202] = "&Ecirc;";  // Ê - uppercase E, circumflex accent
         HTML_ENTITIES[203] = "&Euml;";   // Ë - uppercase E, umlaut
-        HTML_ENTITIES[204] = "&Igrave;";   // Ì - uppercase I, grave accent
-        HTML_ENTITIES[205] = "&Iacute;";   // � - uppercase I, acute accent
-        HTML_ENTITIES[206] = "&Icirc;";   // ÃŽ - uppercase I, circumflex accent
+        HTML_ENTITIES[204] = "&Igrave;"; // Ì - uppercase I, grave accent
+        HTML_ENTITIES[205] = "&Iacute;"; // � - uppercase I, acute accent
+        HTML_ENTITIES[206] = "&Icirc;";  // ÃŽ - uppercase I, circumflex accent
         HTML_ENTITIES[207] = "&Iuml;";   // � - uppercase I, umlaut
-        HTML_ENTITIES[208] = "&ETH;";   // � - uppercase Eth, Icelandic
-        HTML_ENTITIES[209] = "&Ntilde;";   // Ñ - uppercase N, tilde
-        HTML_ENTITIES[210] = "&Ograve;";   // Ã’ - uppercase O, grave accent
-        HTML_ENTITIES[211] = "&Oacute;";   // Ó - uppercase O, acute accent
-        HTML_ENTITIES[212] = "&Ocirc;";   // Ãâ€? - uppercase O, circumflex accent
-        HTML_ENTITIES[213] = "&Otilde;";   // Õ - uppercase O, tilde
+        HTML_ENTITIES[208] = "&ETH;";    // � - uppercase Eth, Icelandic
+        HTML_ENTITIES[209] = "&Ntilde;"; // Ñ - uppercase N, tilde
+        HTML_ENTITIES[210] = "&Ograve;"; // Ã’ - uppercase O, grave accent
+        HTML_ENTITIES[211] = "&Oacute;"; // Ó - uppercase O, acute accent
+        HTML_ENTITIES[212] = "&Ocirc;";  // �? - uppercase O, circumflex accent
+        HTML_ENTITIES[213] = "&Otilde;"; // Õ - uppercase O, tilde
         HTML_ENTITIES[214] = "&Ouml;";   // Ö - uppercase O, umlaut
-        HTML_ENTITIES[215] = "&times;";   //multiplication sign
-        HTML_ENTITIES[216] = "&Oslash;";   // Ø - uppercase O, slash
-        HTML_ENTITIES[217] = "&Ugrave;";   // Ù - uppercase U, grave accent
-        HTML_ENTITIES[218] = "&Uacute;";   // Ú - uppercase U, acute accent
-        HTML_ENTITIES[219] = "&Ucirc;";   // Û - uppercase U, circumflex accent
+        HTML_ENTITIES[215] = "&times;";  //multiplication sign
+        HTML_ENTITIES[216] = "&Oslash;"; // Ø - uppercase O, slash
+        HTML_ENTITIES[217] = "&Ugrave;"; // Ù - uppercase U, grave accent
+        HTML_ENTITIES[218] = "&Uacute;"; // Ú - uppercase U, acute accent
+        HTML_ENTITIES[219] = "&Ucirc;";  // Û - uppercase U, circumflex accent
         HTML_ENTITIES[220] = "&Uuml;";   // Ü - uppercase U, umlaut
-        HTML_ENTITIES[221] = "&Yacute;";   // � - uppercase Y, acute accent
-        HTML_ENTITIES[222] = "&THORN;";   // Þ - uppercase THORN, Icelandic
-        HTML_ENTITIES[223] = "&szlig;";   // ß - lowercase sharps, German
-        HTML_ENTITIES[224] = "&agrave;";   // à - lowercase a, grave accent
-        HTML_ENTITIES[225] = "&aacute;";   // á - lowercase a, acute accent
-        HTML_ENTITIES[226] = "&acirc;";   // â - lowercase a, circumflex accent
-        HTML_ENTITIES[227] = "&atilde;";   // ã - lowercase a, tilde
+        HTML_ENTITIES[221] = "&Yacute;"; // � - uppercase Y, acute accent
+        HTML_ENTITIES[222] = "&THORN;";  // Þ - uppercase THORN, Icelandic
+        HTML_ENTITIES[223] = "&szlig;";  // ß - lowercase sharps, German
+        HTML_ENTITIES[224] = "&agrave;"; // à - lowercase a, grave accent
+        HTML_ENTITIES[225] = "&aacute;"; // á - lowercase a, acute accent
+        HTML_ENTITIES[226] = "&acirc;";  // â - lowercase a, circumflex accent
+        HTML_ENTITIES[227] = "&atilde;"; // ã - lowercase a, tilde
         HTML_ENTITIES[228] = "&auml;";   // ä - lowercase a, umlaut
-        HTML_ENTITIES[229] = "&aring;";   // å - lowercase a, ring
-        HTML_ENTITIES[230] = "&aelig;";   // æ - lowercase ae
-        HTML_ENTITIES[231] = "&ccedil;";   // ç - lowercase c, cedilla
-        HTML_ENTITIES[232] = "&egrave;";   // è - lowercase e, grave accent
-        HTML_ENTITIES[233] = "&eacute;";   // é - lowercase e, acute accent
-        HTML_ENTITIES[234] = "&ecirc;";   // ê - lowercase e, circumflex accent
+        HTML_ENTITIES[229] = "&aring;";  // å - lowercase a, ring
+        HTML_ENTITIES[230] = "&aelig;";  // æ - lowercase ae
+        HTML_ENTITIES[231] = "&ccedil;"; // ç - lowercase c, cedilla
+        HTML_ENTITIES[232] = "&egrave;"; // è - lowercase e, grave accent
+        HTML_ENTITIES[233] = "&eacute;"; // é - lowercase e, acute accent
+        HTML_ENTITIES[234] = "&ecirc;";  // ê - lowercase e, circumflex accent
         HTML_ENTITIES[235] = "&euml;";   // ë - lowercase e, umlaut
-        HTML_ENTITIES[236] = "&igrave;";   // ì - lowercase i, grave accent
-        HTML_ENTITIES[237] = "&iacute;";   // í - lowercase i, acute accent
-        HTML_ENTITIES[238] = "&icirc;";   // î - lowercase i, circumflex accent
+        HTML_ENTITIES[236] = "&igrave;"; // ì - lowercase i, grave accent
+        HTML_ENTITIES[237] = "&iacute;"; // í - lowercase i, acute accent
+        HTML_ENTITIES[238] = "&icirc;";  // î - lowercase i, circumflex accent
         HTML_ENTITIES[239] = "&iuml;";   // ï - lowercase i, umlaut
-        HTML_ENTITIES[240] = "&eth;";   // ð - lowercase eth, Icelandic
-        HTML_ENTITIES[241] = "&ntilde;";   // ñ - lowercase n, tilde
-        HTML_ENTITIES[242] = "&ograve;";   // ò - lowercase o, grave accent
-        HTML_ENTITIES[243] = "&oacute;";   // ó - lowercase o, acute accent
-        HTML_ENTITIES[244] = "&ocirc;";   // ô - lowercase o, circumflex accent
-        HTML_ENTITIES[245] = "&otilde;";   // õ - lowercase o, tilde
+        HTML_ENTITIES[240] = "&eth;";    // ð - lowercase eth, Icelandic
+        HTML_ENTITIES[241] = "&ntilde;"; // ñ - lowercase n, tilde
+        HTML_ENTITIES[242] = "&ograve;"; // ò - lowercase o, grave accent
+        HTML_ENTITIES[243] = "&oacute;"; // ó - lowercase o, acute accent
+        HTML_ENTITIES[244] = "&ocirc;";  // ô - lowercase o, circumflex accent
+        HTML_ENTITIES[245] = "&otilde;"; // õ - lowercase o, tilde
         HTML_ENTITIES[246] = "&ouml;";   // ö - lowercase o, umlaut
-        HTML_ENTITIES[247] = "&divide;";   // division sign
-        HTML_ENTITIES[248] = "&oslash;";   // ø - lowercase o, slash
-        HTML_ENTITIES[249] = "&ugrave;";   // ù - lowercase u, grave accent
-        HTML_ENTITIES[250] = "&uacute;";   // ú - lowercase u, acute accent
-        HTML_ENTITIES[251] = "&ucirc;";   // û - lowercase u, circumflex accent
+        HTML_ENTITIES[247] = "&divide;"; // division sign
+        HTML_ENTITIES[248] = "&oslash;"; // ø - lowercase o, slash
+        HTML_ENTITIES[249] = "&ugrave;"; // ù - lowercase u, grave accent
+        HTML_ENTITIES[250] = "&uacute;"; // ú - lowercase u, acute accent
+        HTML_ENTITIES[251] = "&ucirc;";  // û - lowercase u, circumflex accent
         HTML_ENTITIES[252] = "&uuml;";   // ü - lowercase u, umlaut
-        HTML_ENTITIES[253] = "&yacute;";   // ý - lowercase y, acute accent
-        HTML_ENTITIES[254] = "&thorn;";   // þ - lowercase thorn, Icelandic
+        HTML_ENTITIES[253] = "&yacute;"; // ý - lowercase y, acute accent
+        HTML_ENTITIES[254] = "&thorn;";  // þ - lowercase thorn, Icelandic
         HTML_ENTITIES[255] = "&yuml;";   // ÿ - lowercase y, umlaut
         // http://www.w3.org/TR/REC-html40/sgml/entities.html
         // <!-- Latin Extended-B -->
         HTML_ENTITIES[402] = "&fnof;";   //latin small f with hook = function= florin, U+0192 ISOtech -->
         // <!-- Greek -->
-        HTML_ENTITIES[913] = "&Alpha;";   //greek capital letter alpha, U+0391 -->
+        HTML_ENTITIES[913] = "&Alpha;";  //greek capital letter alpha, U+0391 -->
         HTML_ENTITIES[914] = "&Beta;";   //greek capital letter beta, U+0392 -->
-        HTML_ENTITIES[915] = "&Gamma;";   //greek capital letter gamma,U+0393 ISOgrk3 -->
-        HTML_ENTITIES[916] = "&Delta;";   //greek capital letter delta,U+0394 ISOgrk3 -->
-        HTML_ENTITIES[917] = "&Epsilon;";   //greek capital letter epsilon, U+0395 -->
+        HTML_ENTITIES[915] = "&Gamma;";  //greek capital letter gamma,U+0393 ISOgrk3 -->
+        HTML_ENTITIES[916] = "&Delta;";  //greek capital letter delta,U+0394 ISOgrk3 -->
+        HTML_ENTITIES[917] = "&Epsilon;"; //greek capital letter epsilon, U+0395 -->
         HTML_ENTITIES[918] = "&Zeta;";   //greek capital letter zeta, U+0396 -->
-        HTML_ENTITIES[919] = "&Eta;";   //greek capital letter eta, U+0397 -->
-        HTML_ENTITIES[920] = "&Theta;";   //greek capital letter theta,U+0398 ISOgrk3 -->
+        HTML_ENTITIES[919] = "&Eta;";    //greek capital letter eta, U+0397 -->
+        HTML_ENTITIES[920] = "&Theta;";  //greek capital letter theta,U+0398 ISOgrk3 -->
         HTML_ENTITIES[921] = "&Iota;";   //greek capital letter iota, U+0399 -->
-        HTML_ENTITIES[922] = "&Kappa;";   //greek capital letter kappa, U+039A -->
-        HTML_ENTITIES[923] = "&Lambda;";   //greek capital letter lambda,U+039B ISOgrk3 -->
-        HTML_ENTITIES[924] = "&Mu;";   //greek capital letter mu, U+039C -->
-        HTML_ENTITIES[925] = "&Nu;";   //greek capital letter nu, U+039D -->
-        HTML_ENTITIES[926] = "&Xi;";   //greek capital letter xi, U+039E ISOgrk3 -->
-        HTML_ENTITIES[927] = "&Omicron;";   //greek capital letter omicron, U+039F -->
-        HTML_ENTITIES[928] = "&Pi;";   //greek capital letter pi, U+03A0 ISOgrk3 -->
-        HTML_ENTITIES[929] = "&Rho;";   //greek capital letter rho, U+03A1 -->
+        HTML_ENTITIES[922] = "&Kappa;";  //greek capital letter kappa, U+039A -->
+        HTML_ENTITIES[923] = "&Lambda;"; //greek capital letter lambda,U+039B ISOgrk3 -->
+        HTML_ENTITIES[924] = "&Mu;";     //greek capital letter mu, U+039C -->
+        HTML_ENTITIES[925] = "&Nu;";     //greek capital letter nu, U+039D -->
+        HTML_ENTITIES[926] = "&Xi;";     //greek capital letter xi, U+039E ISOgrk3 -->
+        HTML_ENTITIES[927] = "&Omicron;"; //greek capital letter omicron, U+039F -->
+        HTML_ENTITIES[928] = "&Pi;";     //greek capital letter pi, U+03A0 ISOgrk3 -->
+        HTML_ENTITIES[929] = "&Rho;";    //greek capital letter rho, U+03A1 -->
         // <!-- there is no Sigmaf, and no U+03A2 character either -->
-        HTML_ENTITIES[931] = "&Sigma;";   //greek capital letter sigma,U+03A3 ISOgrk3 -->
-        HTML_ENTITIES[932] = "&Tau;";   //greek capital letter tau, U+03A4 -->
-        HTML_ENTITIES[933] = "&Upsilon;";   //greek capital letter upsilon,U+03A5 ISOgrk3 -->
-        HTML_ENTITIES[934] = "&Phi;";   //greek capital letter phi,U+03A6 ISOgrk3 -->
-        HTML_ENTITIES[935] = "&Chi;";   //greek capital letter chi, U+03A7 -->
-        HTML_ENTITIES[936] = "&Psi;";   //greek capital letter psi,U+03A8 ISOgrk3 -->
-        HTML_ENTITIES[937] = "&Omega;";   //greek capital letter omega,U+03A9 ISOgrk3 -->
-        HTML_ENTITIES[945] = "&alpha;";   //greek small letter alpha,U+03B1 ISOgrk3 -->
+        HTML_ENTITIES[931] = "&Sigma;";  //greek capital letter sigma,U+03A3 ISOgrk3 -->
+        HTML_ENTITIES[932] = "&Tau;";    //greek capital letter tau, U+03A4 -->
+        HTML_ENTITIES[933] = "&Upsilon;"; //greek capital letter upsilon,U+03A5 ISOgrk3 -->
+        HTML_ENTITIES[934] = "&Phi;";    //greek capital letter phi,U+03A6 ISOgrk3 -->
+        HTML_ENTITIES[935] = "&Chi;";    //greek capital letter chi, U+03A7 -->
+        HTML_ENTITIES[936] = "&Psi;";    //greek capital letter psi,U+03A8 ISOgrk3 -->
+        HTML_ENTITIES[937] = "&Omega;";  //greek capital letter omega,U+03A9 ISOgrk3 -->
+        HTML_ENTITIES[945] = "&alpha;";  //greek small letter alpha,U+03B1 ISOgrk3 -->
         HTML_ENTITIES[946] = "&beta;";   //greek small letter beta, U+03B2 ISOgrk3 -->
-        HTML_ENTITIES[947] = "&gamma;";   //greek small letter gamma,U+03B3 ISOgrk3 -->
-        HTML_ENTITIES[948] = "&delta;";   //greek small letter delta,U+03B4 ISOgrk3 -->
-        HTML_ENTITIES[949] = "&epsilon;";   //greek small letter epsilon,U+03B5 ISOgrk3 -->
+        HTML_ENTITIES[947] = "&gamma;";  //greek small letter gamma,U+03B3 ISOgrk3 -->
+        HTML_ENTITIES[948] = "&delta;";  //greek small letter delta,U+03B4 ISOgrk3 -->
+        HTML_ENTITIES[949] = "&epsilon;"; //greek small letter epsilon,U+03B5 ISOgrk3 -->
         HTML_ENTITIES[950] = "&zeta;";   //greek small letter zeta, U+03B6 ISOgrk3 -->
-        HTML_ENTITIES[951] = "&eta;";   //greek small letter eta, U+03B7 ISOgrk3 -->
-        HTML_ENTITIES[952] = "&theta;";   //greek small letter theta,U+03B8 ISOgrk3 -->
+        HTML_ENTITIES[951] = "&eta;";    //greek small letter eta, U+03B7 ISOgrk3 -->
+        HTML_ENTITIES[952] = "&theta;";  //greek small letter theta,U+03B8 ISOgrk3 -->
         HTML_ENTITIES[953] = "&iota;";   //greek small letter iota, U+03B9 ISOgrk3 -->
-        HTML_ENTITIES[954] = "&kappa;";   //greek small letter kappa,U+03BA ISOgrk3 -->
-        HTML_ENTITIES[955] = "&lambda;";   //greek small letter lambda,U+03BB ISOgrk3 -->
-        HTML_ENTITIES[956] = "&mu;";   //greek small letter mu, U+03BC ISOgrk3 -->
-        HTML_ENTITIES[957] = "&nu;";   //greek small letter nu, U+03BD ISOgrk3 -->
-        HTML_ENTITIES[958] = "&xi;";   //greek small letter xi, U+03BE ISOgrk3 -->
-        HTML_ENTITIES[959] = "&omicron;";   //greek small letter omicron, U+03BF NEW -->
-        HTML_ENTITIES[960] = "&pi;";   //greek small letter pi, U+03C0 ISOgrk3 -->
-        HTML_ENTITIES[961] = "&rho;";   //greek small letter rho, U+03C1 ISOgrk3 -->
-        HTML_ENTITIES[962] = "&sigmaf;";   //greek small letter final sigma,U+03C2 ISOgrk3 -->
-        HTML_ENTITIES[963] = "&sigma;";   //greek small letter sigma,U+03C3 ISOgrk3 -->
-        HTML_ENTITIES[964] = "&tau;";   //greek small letter tau, U+03C4 ISOgrk3 -->
-        HTML_ENTITIES[965] = "&upsilon;";   //greek small letter upsilon,U+03C5 ISOgrk3 -->
-        HTML_ENTITIES[966] = "&phi;";   //greek small letter phi, U+03C6 ISOgrk3 -->
-        HTML_ENTITIES[967] = "&chi;";   //greek small letter chi, U+03C7 ISOgrk3 -->
-        HTML_ENTITIES[968] = "&psi;";   //greek small letter psi, U+03C8 ISOgrk3 -->
-        HTML_ENTITIES[969] = "&omega;";   //greek small letter omega,U+03C9 ISOgrk3 -->
+        HTML_ENTITIES[954] = "&kappa;";  //greek small letter kappa,U+03BA ISOgrk3 -->
+        HTML_ENTITIES[955] = "&lambda;"; //greek small letter lambda,U+03BB ISOgrk3 -->
+        HTML_ENTITIES[956] = "&mu;";     //greek small letter mu, U+03BC ISOgrk3 -->
+        HTML_ENTITIES[957] = "&nu;";     //greek small letter nu, U+03BD ISOgrk3 -->
+        HTML_ENTITIES[958] = "&xi;";     //greek small letter xi, U+03BE ISOgrk3 -->
+        HTML_ENTITIES[959] = "&omicron;"; //greek small letter omicron, U+03BF NEW -->
+        HTML_ENTITIES[960] = "&pi;";     //greek small letter pi, U+03C0 ISOgrk3 -->
+        HTML_ENTITIES[961] = "&rho;";    //greek small letter rho, U+03C1 ISOgrk3 -->
+        HTML_ENTITIES[962] = "&sigmaf;"; //greek small letter final sigma,U+03C2 ISOgrk3 -->
+        HTML_ENTITIES[963] = "&sigma;";  //greek small letter sigma,U+03C3 ISOgrk3 -->
+        HTML_ENTITIES[964] = "&tau;";    //greek small letter tau, U+03C4 ISOgrk3 -->
+        HTML_ENTITIES[965] = "&upsilon;"; //greek small letter upsilon,U+03C5 ISOgrk3 -->
+        HTML_ENTITIES[966] = "&phi;";    //greek small letter phi, U+03C6 ISOgrk3 -->
+        HTML_ENTITIES[967] = "&chi;";    //greek small letter chi, U+03C7 ISOgrk3 -->
+        HTML_ENTITIES[968] = "&psi;";    //greek small letter psi, U+03C8 ISOgrk3 -->
+        HTML_ENTITIES[969] = "&omega;";  //greek small letter omega,U+03C9 ISOgrk3 -->
         HTML_ENTITIES[977] = "&thetasym;";   //greek small letter theta symbol,U+03D1 NEW -->
         HTML_ENTITIES[978] = "&upsih;";   //greek upsilon with hook symbol,U+03D2 NEW -->
-        HTML_ENTITIES[982] = "&piv;";   //greek pi symbol, U+03D6 ISOgrk3 -->
+        HTML_ENTITIES[982] = "&piv;";    //greek pi symbol, U+03D6 ISOgrk3 -->
         // <!-- General Punctuation -->
-        HTML_ENTITIES[8226] = "&bull;";   //bullet = black small circle,U+2022 ISOpub  -->
+        HTML_ENTITIES[8226] = "&bull;";  //bullet = black small circle,U+2022 ISOpub  -->
         // <!-- bullet is NOT the same as bullet operator, U+2219 -->
-        HTML_ENTITIES[8230] = "&hellip;";   //horizontal ellipsis = three dot leader,U+2026 ISOpub  -->
-        HTML_ENTITIES[8242] = "&prime;";   //prime = minutes = feet, U+2032 ISOtech -->
-        HTML_ENTITIES[8243] = "&Prime;";   //double prime = seconds = inches,U+2033 ISOtech -->
-        HTML_ENTITIES[8254] = "&oline;";   //overline = spacing overscore,U+203E NEW -->
-        HTML_ENTITIES[8260] = "&frasl;";   //fraction slash, U+2044 NEW -->
+        HTML_ENTITIES[8230] = "&hellip;"; //horizontal ellipsis = three dot leader,U+2026 ISOpub  -->
+        HTML_ENTITIES[8242] = "&prime;";  //prime = minutes = feet, U+2032 ISOtech -->
+        HTML_ENTITIES[8243] = "&Prime;";  //double prime = seconds = inches,U+2033 ISOtech -->
+        HTML_ENTITIES[8254] = "&oline;";  //overline = spacing overscore,U+203E NEW -->
+        HTML_ENTITIES[8260] = "&frasl;";  //fraction slash, U+2044 NEW -->
         // <!-- Letterlike Symbols -->
-        HTML_ENTITIES[8472] = "&weierp;";   //script capital P = power set= Weierstrass p, U+2118 ISOamso -->
-        HTML_ENTITIES[8465] = "&image;";   //blackletter capital I = imaginary part,U+2111 ISOamso -->
+        HTML_ENTITIES[8472] = "&weierp;"; //script capital P = power set= Weierstrass p, U+2118 ISOamso -->
+        HTML_ENTITIES[8465] = "&image;";  //blackletter capital I = imaginary part,U+2111 ISOamso -->
         HTML_ENTITIES[8476] = "&real;";   //blackletter capital R = real part symbol,U+211C ISOamso -->
-        HTML_ENTITIES[8482] = "&trade;";   //trade mark sign, U+2122 ISOnum -->
+        HTML_ENTITIES[8482] = "&trade;";  //trade mark sign, U+2122 ISOnum -->
         HTML_ENTITIES[8501] = "&alefsym;";   //alef symbol = first transfinite cardinal,U+2135 NEW -->
         // <!-- alef symbol is NOT the same as hebrew letter alef,U+05D0 although the same glyph could be used to depict both characters -->
         // <!-- Arrows -->
@@ -336,7 +336,7 @@ public class ClickUtils {
         HTML_ENTITIES[8594] = "&rarr;";   //rightwards arrow, U+2192 ISOnum -->
         HTML_ENTITIES[8595] = "&darr;";   //downwards arrow, U+2193 ISOnum -->
         HTML_ENTITIES[8596] = "&harr;";   //left right arrow, U+2194 ISOamsa -->
-        HTML_ENTITIES[8629] = "&crarr;";   //downwards arrow with corner leftwards= carriage return, U+21B5 NEW -->
+        HTML_ENTITIES[8629] = "&crarr;";  //downwards arrow with corner leftwards= carriage return, U+21B5 NEW -->
         HTML_ENTITIES[8656] = "&lArr;";   //leftwards double arrow, U+21D0 ISOtech -->
         // <!-- ISO 10646 does not say that lArr is the same as the 'is implied by' arrowbut also does not have any other character for that function. So ? lArr canbe used for 'is implied by' as ISOtech suggests -->
         HTML_ENTITIES[8657] = "&uArr;";   //upwards double arrow, U+21D1 ISOamsa -->
@@ -345,84 +345,84 @@ public class ClickUtils {
         HTML_ENTITIES[8659] = "&dArr;";   //downwards double arrow, U+21D3 ISOamsa -->
         HTML_ENTITIES[8660] = "&hArr;";   //left right double arrow,U+21D4 ISOamsa -->
         // <!-- Mathematical Operators -->
-        HTML_ENTITIES[8704] = "&forall;";   //for all, U+2200 ISOtech -->
+        HTML_ENTITIES[8704] = "&forall;"; //for all, U+2200 ISOtech -->
         HTML_ENTITIES[8706] = "&part;";   //partial differential, U+2202 ISOtech  -->
-        HTML_ENTITIES[8707] = "&exist;";   //there exists, U+2203 ISOtech -->
-        HTML_ENTITIES[8709] = "&empty;";   //empty set = null set = diameter,U+2205 ISOamso -->
-        HTML_ENTITIES[8711] = "&nabla;";   //nabla = backward difference,U+2207 ISOtech -->
+        HTML_ENTITIES[8707] = "&exist;";  //there exists, U+2203 ISOtech -->
+        HTML_ENTITIES[8709] = "&empty;";  //empty set = null set = diameter,U+2205 ISOamso -->
+        HTML_ENTITIES[8711] = "&nabla;";  //nabla = backward difference,U+2207 ISOtech -->
         HTML_ENTITIES[8712] = "&isin;";   //element of, U+2208 ISOtech -->
-        HTML_ENTITIES[8713] = "&notin;";   //not an element of, U+2209 ISOtech -->
-        HTML_ENTITIES[8715] = "&ni;";   //contains as member, U+220B ISOtech -->
+        HTML_ENTITIES[8713] = "&notin;";  //not an element of, U+2209 ISOtech -->
+        HTML_ENTITIES[8715] = "&ni;";     //contains as member, U+220B ISOtech -->
         // <!-- should there be a more memorable name than 'ni'? -->
         HTML_ENTITIES[8719] = "&prod;";   //n-ary product = product sign,U+220F ISOamsb -->
         // <!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though the same glyph might be used for both -->
         HTML_ENTITIES[8721]  = "&sum;";   //n-ary summation, U+2211 ISOamsb -->
         // <!-- sum is NOT the same character as U+03A3 'greek capital letter sigma' though the same glyph might be used for both -->
-        HTML_ENTITIES[8722]  = "&minus;";   //minus sign, U+2212 ISOtech -->
-        HTML_ENTITIES[8727]  = "&lowast;";   //asterisk operator, U+2217 ISOtech -->
-        HTML_ENTITIES[8730]  = "&radic;";   //square root = radical sign,U+221A ISOtech -->
+        HTML_ENTITIES[8722]  = "&minus;";  //minus sign, U+2212 ISOtech -->
+        HTML_ENTITIES[8727]  = "&lowast;"; //asterisk operator, U+2217 ISOtech -->
+        HTML_ENTITIES[8730]  = "&radic;";  //square root = radical sign,U+221A ISOtech -->
         HTML_ENTITIES[8733]  = "&prop;";   //proportional to, U+221D ISOtech -->
-        HTML_ENTITIES[8734]  = "&infin;";   //infinity, U+221E ISOtech -->
-        HTML_ENTITIES[8736] = "&ang;";   //angle, U+2220 ISOamso -->
-        HTML_ENTITIES[8743] = "&and;";   //logical and = wedge, U+2227 ISOtech -->
-        HTML_ENTITIES[8744] = "&or;";   //logical or = vee, U+2228 ISOtech -->
-        HTML_ENTITIES[8745] = "&cap;";   //intersection = cap, U+2229 ISOtech -->
-        HTML_ENTITIES[8746] = "&cup;";   //union = cup, U+222A ISOtech -->
-        HTML_ENTITIES[8747] = "&int;";   //integral, U+222B ISOtech -->
-        HTML_ENTITIES[8756] = "&there4;";   //therefore, U+2234 ISOtech -->
-        HTML_ENTITIES[8764] = "&sim;";   //tilde operator = varies with = similar to,U+223C ISOtech -->
+        HTML_ENTITIES[8734]  = "&infin;";  //infinity, U+221E ISOtech -->
+        HTML_ENTITIES[8736] = "&ang;";     //angle, U+2220 ISOamso -->
+        HTML_ENTITIES[8743] = "&and;";     //logical and = wedge, U+2227 ISOtech -->
+        HTML_ENTITIES[8744] = "&or;";      //logical or = vee, U+2228 ISOtech -->
+        HTML_ENTITIES[8745] = "&cap;";     //intersection = cap, U+2229 ISOtech -->
+        HTML_ENTITIES[8746] = "&cup;";     //union = cup, U+222A ISOtech -->
+        HTML_ENTITIES[8747] = "&int;";     //integral, U+222B ISOtech -->
+        HTML_ENTITIES[8756] = "&there4;";  //therefore, U+2234 ISOtech -->
+        HTML_ENTITIES[8764] = "&sim;";     //tilde operator = varies with = similar to,U+223C ISOtech -->
         // <!-- tilde operator is NOT the same character as the tilde, U+007E,although the same glyph might be used to represent both  -->
-        HTML_ENTITIES[8773] = "&cong;";   //approximately equal to, U+2245 ISOtech -->
+        HTML_ENTITIES[8773] = "&cong;";    //approximately equal to, U+2245 ISOtech -->
         HTML_ENTITIES[8776] = "&asymp;";   //almost equal to = asymptotic to,U+2248 ISOamsr -->
-        HTML_ENTITIES[8800] = "&ne;";   //not equal to, U+2260 ISOtech -->
+        HTML_ENTITIES[8800] = "&ne;";      //not equal to, U+2260 ISOtech -->
         HTML_ENTITIES[8801] = "&equiv;";   //identical to, U+2261 ISOtech -->
-        HTML_ENTITIES[8804] = "&le;";   //less-than or equal to, U+2264 ISOtech -->
-        HTML_ENTITIES[8805] = "&ge;";   //greater-than or equal to,U+2265 ISOtech -->
-        HTML_ENTITIES[8834] = "&sub;";   //subset of, U+2282 ISOtech -->
-        HTML_ENTITIES[8835] = "&sup;";   //superset of, U+2283 ISOtech -->
+        HTML_ENTITIES[8804] = "&le;";      //less-than or equal to, U+2264 ISOtech -->
+        HTML_ENTITIES[8805] = "&ge;";      //greater-than or equal to,U+2265 ISOtech -->
+        HTML_ENTITIES[8834] = "&sub;";     //subset of, U+2282 ISOtech -->
+        HTML_ENTITIES[8835] = "&sup;";     //superset of, U+2283 ISOtech -->
         // <!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included. Should it be, for symmetry?It is in ISOamsn  --> <!ENTITY nsub"; 8836   //not a subset of, U+2284 ISOamsn -->
-        HTML_ENTITIES[8838] = "&sube;";   //subset of or equal to, U+2286 ISOtech -->
-        HTML_ENTITIES[8839] = "&supe;";   //superset of or equal to,U+2287 ISOtech -->
+        HTML_ENTITIES[8838] = "&sube;";    //subset of or equal to, U+2286 ISOtech -->
+        HTML_ENTITIES[8839] = "&supe;";    //superset of or equal to,U+2287 ISOtech -->
         HTML_ENTITIES[8853] = "&oplus;";   //circled plus = direct sum,U+2295 ISOamsb -->
-        HTML_ENTITIES[8855] = "&otimes;";   //circled times = vector product,U+2297 ISOamsb -->
-        HTML_ENTITIES[8869] = "&perp;";   //up tack = orthogonal to = perpendicular,U+22A5 ISOtech -->
-        HTML_ENTITIES[8901] = "&sdot;";   //dot operator, U+22C5 ISOamsb -->
+        HTML_ENTITIES[8855] = "&otimes;";  //circled times = vector product,U+2297 ISOamsb -->
+        HTML_ENTITIES[8869] = "&perp;";    //up tack = orthogonal to = perpendicular,U+22A5 ISOtech -->
+        HTML_ENTITIES[8901] = "&sdot;";    //dot operator, U+22C5 ISOamsb -->
         // <!-- dot operator is NOT the same character as U+00B7 middle dot -->
         // <!-- Miscellaneous Technical -->
         HTML_ENTITIES[8968] = "&lceil;";   //left ceiling = apl upstile,U+2308 ISOamsc  -->
         HTML_ENTITIES[8969] = "&rceil;";   //right ceiling, U+2309 ISOamsc  -->
-        HTML_ENTITIES[8970] = "&lfloor;";   //left floor = apl downstile,U+230A ISOamsc  -->
-        HTML_ENTITIES[8971] = "&rfloor;";   //right floor, U+230B ISOamsc  -->
-        HTML_ENTITIES[9001] = "&lang;";   //left-pointing angle bracket = bra,U+2329 ISOtech -->
+        HTML_ENTITIES[8970] = "&lfloor;";  //left floor = apl downstile,U+230A ISOamsc  -->
+        HTML_ENTITIES[8971] = "&rfloor;";  //right floor, U+230B ISOamsc  -->
+        HTML_ENTITIES[9001] = "&lang;";    //left-pointing angle bracket = bra,U+2329 ISOtech -->
         // <!-- lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark' -->
         HTML_ENTITIES[9002]  = "&rang;";   //right-pointing angle bracket = ket,U+232A ISOtech -->
         // <!-- rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark' -->
         // <!-- Geometric Shapes -->
-        HTML_ENTITIES[9674] = "&loz;";   //lozenge, U+25CA ISOpub -->
+        HTML_ENTITIES[9674] = "&loz;";     //lozenge, U+25CA ISOpub -->
         // <!-- Miscellaneous Symbols -->
-        HTML_ENTITIES[9824] = "&spades;";   //black spade suit, U+2660 ISOpub -->
+        HTML_ENTITIES[9824] = "&spades;";  //black spade suit, U+2660 ISOpub -->
         // <!-- black here seems to mean filled as opposed to hollow -->
         HTML_ENTITIES[9827] = "&clubs;";   //black club suit = shamrock,U+2663 ISOpub -->
-        HTML_ENTITIES[9829] = "&hearts;";   //black heart suit = valentine,U+2665 ISOpub -->
+        HTML_ENTITIES[9829] = "&hearts;";  //black heart suit = valentine,U+2665 ISOpub -->
         HTML_ENTITIES[9830] = "&diams;";   //black diamond suit, U+2666 ISOpub -->
         // <!-- Latin Extended-A -->
-        HTML_ENTITIES[338] = "&OElig;";   //  -- latin capital ligature OE,U+0152 ISOlat2 -->
-        HTML_ENTITIES[339] = "&oelig;";   //  -- latin small ligature oe, U+0153 ISOlat2 -->
+        HTML_ENTITIES[338] = "&OElig;";    //  -- latin capital ligature OE,U+0152 ISOlat2 -->
+        HTML_ENTITIES[339] = "&oelig;";    //  -- latin small ligature oe, U+0153 ISOlat2 -->
         // <!-- ligature is a misnomer, this is a separate character in some languages -->
         HTML_ENTITIES[352] = "&Scaron;";   //  -- latin capital letter S with caron,U+0160 ISOlat2 -->
         HTML_ENTITIES[353] = "&scaron;";   //  -- latin small letter s with caron,U+0161 ISOlat2 -->
-        HTML_ENTITIES[376] = "&Yuml;";   //  -- latin capital letter Y with diaeresis,U+0178 ISOlat2 -->
+        HTML_ENTITIES[376] = "&Yuml;";     //  -- latin capital letter Y with diaeresis,U+0178 ISOlat2 -->
         // <!-- Spacing Modifier Letters -->
-        HTML_ENTITIES[710] = "&circ;";   //  -- modifier letter circumflex accent,U+02C6 ISOpub -->
-        HTML_ENTITIES[732] = "&tilde;";   //small tilde, U+02DC ISOdia -->
+        HTML_ENTITIES[710] = "&circ;";     //  -- modifier letter circumflex accent,U+02C6 ISOpub -->
+        HTML_ENTITIES[732] = "&tilde;";    //small tilde, U+02DC ISOdia -->
         // <!-- General Punctuation -->
-        HTML_ENTITIES[8194] = "&ensp;";   //en space, U+2002 ISOpub -->
-        HTML_ENTITIES[8195] = "&emsp;";   //em space, U+2003 ISOpub -->
-        HTML_ENTITIES[8201] = "&thinsp;";   //thin space, U+2009 ISOpub -->
-        HTML_ENTITIES[8204] = "&zwnj;";   //zero width non-joiner,U+200C NEW RFC 2070 -->
-        HTML_ENTITIES[8205] = "&zwj;";   //zero width joiner, U+200D NEW RFC 2070 -->
-        HTML_ENTITIES[8206] = "&lrm;";   //left-to-right mark, U+200E NEW RFC 2070 -->
-        HTML_ENTITIES[8207] = "&rlm;";   //right-to-left mark, U+200F NEW RFC 2070 -->
+        HTML_ENTITIES[8194] = "&ensp;";    //en space, U+2002 ISOpub -->
+        HTML_ENTITIES[8195] = "&emsp;";    //em space, U+2003 ISOpub -->
+        HTML_ENTITIES[8201] = "&thinsp;";  //thin space, U+2009 ISOpub -->
+        HTML_ENTITIES[8204] = "&zwnj;";    //zero width non-joiner,U+200C NEW RFC 2070 -->
+        HTML_ENTITIES[8205] = "&zwj;";     //zero width joiner, U+200D NEW RFC 2070 -->
+        HTML_ENTITIES[8206] = "&lrm;";     //left-to-right mark, U+200E NEW RFC 2070 -->
+        HTML_ENTITIES[8207] = "&rlm;";     //right-to-left mark, U+200F NEW RFC 2070 -->
         HTML_ENTITIES[8211] = "&ndash;";   //en dash, U+2013 ISOpub -->
         HTML_ENTITIES[8212] = "&mdash;";   //em dash, U+2014 ISOpub -->
         HTML_ENTITIES[8216] = "&lsquo;";   //left single quotation mark,U+2018 ISOnum -->
@@ -431,14 +431,14 @@ public class ClickUtils {
         HTML_ENTITIES[8220] = "&ldquo;";   //left double quotation mark,U+201C ISOnum -->
         HTML_ENTITIES[8221] = "&rdquo;";   //right double quotation mark,U+201D ISOnum -->
         HTML_ENTITIES[8222] = "&bdquo;";   //double low-9 quotation mark, U+201E NEW -->
-        HTML_ENTITIES[8224] = "&dagger;";   //dagger, U+2020 ISOpub -->
-        HTML_ENTITIES[8225] = "&Dagger;";   //double dagger, U+2021 ISOpub -->
-        HTML_ENTITIES[8240] = "&permil;";   //per mille sign, U+2030 ISOtech -->
-        HTML_ENTITIES[8249] = "&lsaquo;";   //single left-pointing angle quotation mark,U+2039 ISO proposed -->
+        HTML_ENTITIES[8224] = "&dagger;";  //dagger, U+2020 ISOpub -->
+        HTML_ENTITIES[8225] = "&Dagger;";  //double dagger, U+2021 ISOpub -->
+        HTML_ENTITIES[8240] = "&permil;";  //per mille sign, U+2030 ISOtech -->
+        HTML_ENTITIES[8249] = "&lsaquo;";  //single left-pointing angle quotation mark,U+2039 ISO proposed -->
         // <!-- lsaquo is proposed but not yet ISO standardized -->
-        HTML_ENTITIES[8250] = "&rsaquo;";   //single right-pointing angle quotation mark,U+203A ISO proposed -->
+        HTML_ENTITIES[8250] = "&rsaquo;";  //single right-pointing angle quotation mark,U+203A ISO proposed -->
         // <!-- rsaquo is proposed but not yet ISO standardized -->
-        HTML_ENTITIES[8364] = "&euro;";   //  -- euro sign, U+20AC NEW -->
+        HTML_ENTITIES[8364] = "&euro;";    //  -- euro sign, U+20AC NEW -->
     };
 
     /**
@@ -1207,6 +1207,19 @@ public class ClickUtils {
     }
 
     /**
+     * Return the application configuration service instance from the thread
+     * local context.
+     *
+     * @return the application config service instance
+     */
+    public static ConfigService getConfigService() {
+        ServletContext servletContext =
+            Context.getThreadLocalContext().getServletContext();
+
+        return getConfigService(servletContext);
+    }
+
+    /**
      * Returns the specified Cookie object, or null if the cookie does not exist.
      * <p/>
      * This method was derived from Atlassian <tt>CookieUtils</tt> method of

Modified: click/trunk/click/framework/src/org/apache/click/util/ContainerUtils.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/util/ContainerUtils.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/util/ContainerUtils.java (original)
+++ click/trunk/click/framework/src/org/apache/click/util/ContainerUtils.java Sun Apr  8 11:55:14 2012
@@ -27,6 +27,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
+import javax.servlet.ServletContext;
+
+import org.apache.click.Context;
 import org.apache.click.Control;
 import org.apache.click.Page;
 import org.apache.click.control.Button;
@@ -35,7 +38,9 @@ import org.apache.click.control.Field;
 import org.apache.click.control.FieldSet;
 import org.apache.click.control.Form;
 import org.apache.click.control.Label;
+import org.apache.click.service.ConfigService;
 import org.apache.click.service.LogService;
+import org.apache.click.service.PropertyService;
 import org.apache.commons.lang.ClassUtils;
 
 /**
@@ -146,8 +151,11 @@ public class ContainerUtils {
 
             ensureObjectPathNotNull(object, fieldName);
 
+            ConfigService configService = ClickUtils.getConfigService();
+            PropertyService propertyService = configService.getPropertyService();
+
             try {
-                PropertyUtils.setValue(object, fieldName, field.getValueObject());
+                propertyService.setValue(object, fieldName, field.getValueObject());
 
                 if (logService.isDebugEnabled()) {
                     String containerClassName =
@@ -258,7 +266,7 @@ public class ContainerUtils {
 
             String fieldName = field.getName();
             try {
-                Object result = PropertyUtils.getValue(object, fieldName);
+                Object result = getPropertyService().getValue(object, fieldName);
 
                 field.setValueObject(result);
 
@@ -1374,4 +1382,10 @@ public class ContainerUtils {
         ClickUtils.getLogService().warn(message);
     }
 
+    private static PropertyService getPropertyService() {
+        ServletContext sc = Context.getThreadLocalContext().getServletContext();
+        ConfigService configService = ClickUtils.getConfigService(sc);
+        return configService.getPropertyService();
+    }
+
 }

Modified: click/trunk/click/framework/test/org/apache/click/control/ColumnTest.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/test/org/apache/click/control/ColumnTest.java?rev=1310981&r1=1310980&r2=1310981&view=diff
==============================================================================
--- click/trunk/click/framework/test/org/apache/click/control/ColumnTest.java (original)
+++ click/trunk/click/framework/test/org/apache/click/control/ColumnTest.java Sun Apr  8 11:55:14 2012
@@ -19,12 +19,18 @@
 package org.apache.click.control;
 
 import junit.framework.TestCase;
+
+import org.apache.click.MockContext;
 import org.apache.click.util.HtmlStringBuffer;
 
 /**
  * Test Column behavior.
  */
 public class ColumnTest extends TestCase {
+	
+	public void setUp() {
+		 MockContext.initContext();
+	}
 
     /**
      * Sanity checks for Column.



Mime
View raw message