Return-Path: X-Original-To: apmail-click-commits-archive@www.apache.org Delivered-To: apmail-click-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BB30E950E for ; Sun, 8 Apr 2012 11:55:41 +0000 (UTC) Received: (qmail 49948 invoked by uid 500); 8 Apr 2012 11:55:41 -0000 Delivered-To: apmail-click-commits-archive@click.apache.org Received: (qmail 49931 invoked by uid 500); 8 Apr 2012 11:55:41 -0000 Mailing-List: contact commits-help@click.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: click-dev@click.apache.org Delivered-To: mailing list commits@click.apache.org Received: (qmail 49913 invoked by uid 99); 8 Apr 2012 11:55:41 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Apr 2012 11:55:41 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Apr 2012 11:55:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 51D2823889E1; Sun, 8 Apr 2012 11:55:16 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 -0000 To: commits@click.apache.org From: medgar@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120408115516.51D2823889E1@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@
-
Latest Stable Release - Version 2.3.1 - ??? 2011
+
Latest Stable Release - Version 2.3.1 - ?? April 2012
@@ -79,28 +79,33 @@
  • - Upgraded to Servlet API 2.4 - [CLK-763]. -
  • -
  • Added Page method getCharacterEncoding. The response character encoding can be overridden through this method. getCharacterEncoding should be used instead of returning the charset through the getContentType method [CLK-764].
  • +
  • + Added PropertyService interface with OGNL and MVEL property service implementations. + The default property service is OGNLPropertyService principally for + backward compatibility + [CLK-306]. +
  • Added SessionMap methods getCreationTime, getId, getLastAccessedTime and getMaxInactiveInterval - to expose underlying read only HttpSession properties. + to expose underlying read only HttpSession properties [CLK-773].
  • - Added URL request params options to the PageSubmit class. + Added URL request params options to the PageSubmit class [CLK-779].
  • - Replaced OGNL expression library with MVEl. - [CLK-306]. + 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 + [CLK-761].
  • Fixed AutoCompleteTextField to not send duplicate content type in @@ -108,18 +113,13 @@ [CLK-757].
  • - 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 [CLK-767].
  • - 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 - [CLK-761]. -
  • -
  • - 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 [CLK-759].
  • @@ -127,6 +127,10 @@ This issue has been raised by Tsuyoshi Yamamoto [CLK-762].
  • +
  • + Upgraded to Servlet API 2.4 + [CLK-763]. +
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 @@ + + 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:   <select></select>. @@ -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(); 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 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 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(); 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(); 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(); } - 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(); + 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:   <select></select>. @@ -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. + *

+ * For performance and backward compatibility reasons this method uses + * reflection internally to get the property value. + *

+ * This method is thread-safe, and caches reflected accessor methods in an + * internal synchronized cache + *

+ * If the given source object is a Map 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. + *

+ * For performance and backward compatibility reasons this method uses + * reflection internally to get the property value. + *

+ * This method uses reflection internally to get the property value. + *

+ * 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 Collections.synchronizedMap(new HashMap()). + *

+ * If the given source object is a Map 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. + * + *

Configuration

+ * 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. + *

+ * You can instruct Click to use a different implementation by adding + * the following element to your click.xml configuration file. + * + *

+ * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ * <click-app charset="UTF-8">
+ *
+ *     <pages package="org.apache.click.examples.page"/>
+ *
+ *     <property-service classname="org.apache.click.service.MVELPropertyService"/>
+ *
+ * </click-app> 
*/ 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. - *

- * This method is thread-safe, and caches reflected accessor methods in an - * internal synchronized cache. - *

- * If the given source object is a Map 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. - *

- * 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 Collections.synchronizedMap(new HashMap()). - *

- * If the given source object is a Map 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] = """; // " - double-quote - HTML_ENTITIES[38] = "&"; // & - ampersand - HTML_ENTITIES[60] = "<"; // < - less-than - HTML_ENTITIES[62] = ">"; // > - greater-than - HTML_ENTITIES[160] = " "; // non-breaking space - HTML_ENTITIES[161] = "¡"; // inverted exclamation mark - HTML_ENTITIES[162] = "¢"; // cent sign - HTML_ENTITIES[163] = "£"; // pound sign + HTML_ENTITIES[34] = """; // " - double-quote + HTML_ENTITIES[38] = "&"; // & - ampersand + HTML_ENTITIES[60] = "<"; // < - less-than + HTML_ENTITIES[62] = ">"; // > - greater-than + HTML_ENTITIES[160] = " "; // non-breaking space + HTML_ENTITIES[161] = "¡"; // inverted exclamation mark + HTML_ENTITIES[162] = "¢"; // cent sign + HTML_ENTITIES[163] = "£"; // pound sign HTML_ENTITIES[164] = "¤"; // currency sign - HTML_ENTITIES[165] = "¥"; // yen sign = yuan sign + HTML_ENTITIES[165] = "¥"; // yen sign = yuan sign HTML_ENTITIES[166] = "¦"; // broken bar = broken vertical bar - HTML_ENTITIES[167] = "§"; // section sign - HTML_ENTITIES[168] = "¨"; // diaeresis = spacing diaeresis - HTML_ENTITIES[169] = "©"; // © - copyright sign - HTML_ENTITIES[170] = "ª"; // feminine ordinal indicator - HTML_ENTITIES[171] = "«"; // left-pointing double angle quotation mark = left pointing guillemet - HTML_ENTITIES[172] = "¬"; //not sign - HTML_ENTITIES[173] = "­"; //soft hyphen = discretionary hyphen - HTML_ENTITIES[174] = "®"; // ® - registered trademark sign + HTML_ENTITIES[167] = "§"; // section sign + HTML_ENTITIES[168] = "¨"; // diaeresis = spacing diaeresis + HTML_ENTITIES[169] = "©"; // copyright sign + HTML_ENTITIES[170] = "ª"; // feminine ordinal indicator + HTML_ENTITIES[171] = "«"; // left-pointing double angle quotation mark = left pointing guillemet + HTML_ENTITIES[172] = "¬"; // not sign + HTML_ENTITIES[173] = "­"; // soft hyphen = discretionary hyphen + HTML_ENTITIES[174] = "®"; // registered trademark sign HTML_ENTITIES[175] = "¯"; //macron = spacing macron = overline = APL overbar - HTML_ENTITIES[176] = "°"; //degree sign - HTML_ENTITIES[177] = "±"; //plus-minus sign = plus-or-minus sign + HTML_ENTITIES[176] = "°"; //degree sign + HTML_ENTITIES[177] = "±"; //plus-minus sign = plus-or-minus sign HTML_ENTITIES[178] = "²"; //superscript two = superscript digit two = squared HTML_ENTITIES[179] = "³"; //superscript three = superscript digit three = cubed - HTML_ENTITIES[180] = "´"; //acute accent = spacing acute - HTML_ENTITIES[181] = "µ"; //micro sign + HTML_ENTITIES[180] = "´"; //acute accent = spacing acute + HTML_ENTITIES[181] = "µ"; //micro sign HTML_ENTITIES[182] = "¶"; //pilcrow sign = paragraph sign - HTML_ENTITIES[183] = "·"; //middle dot = Georgian comma = Greek middle dot - HTML_ENTITIES[184] = "¸"; //cedilla = spacing cedilla + HTML_ENTITIES[183] = "·"; //middle dot = Georgian comma = Greek middle dot + HTML_ENTITIES[184] = "¸"; //cedilla = spacing cedilla HTML_ENTITIES[185] = "¹"; //superscript one = superscript digit one HTML_ENTITIES[186] = "º"; //masculine ordinal indicator - HTML_ENTITIES[187] = "»"; //right-pointing double angle quotation mark = right pointing guillemet - HTML_ENTITIES[188] = "¼"; //vulgar fraction one quarter = fraction one quarter - HTML_ENTITIES[189] = "½"; //vulgar fraction one half = fraction one half - HTML_ENTITIES[190] = "¾"; //vulgar fraction three quarters = fraction three quarters - HTML_ENTITIES[191] = "¿"; //inverted question mark = turned question mark - HTML_ENTITIES[192] = "À"; // À - uppercase A, grave accent - HTML_ENTITIES[193] = "Á"; // � - uppercase A, acute accent - HTML_ENTITIES[194] = "Â"; //  - uppercase A, circumflex accent - HTML_ENTITIES[195] = "Ã"; // à - uppercase A, tilde + HTML_ENTITIES[187] = "»"; //right-pointing double angle quotation mark = right pointing guillemet + HTML_ENTITIES[188] = "¼"; //vulgar fraction one quarter = fraction one quarter + HTML_ENTITIES[189] = "½"; //vulgar fraction one half = fraction one half + HTML_ENTITIES[190] = "¾"; //vulgar fraction three quarters = fraction three quarters + HTML_ENTITIES[191] = "¿"; //inverted question mark = turned question mark + HTML_ENTITIES[192] = "À"; // À - uppercase A, grave accent + HTML_ENTITIES[193] = "Á"; // � - uppercase A, acute accent + HTML_ENTITIES[194] = "Â"; //  - uppercase A, circumflex accent + HTML_ENTITIES[195] = "Ã"; // à - uppercase A, tilde HTML_ENTITIES[196] = "Ä"; // Ä - uppercase A, umlaut - HTML_ENTITIES[197] = "Å"; // Ã… - uppercase A, ring - HTML_ENTITIES[198] = "Æ"; // Æ - uppercase AE - HTML_ENTITIES[199] = "Ç"; // Ç - uppercase C, cedilla - HTML_ENTITIES[200] = "È"; // È - uppercase E, grave accent - HTML_ENTITIES[201] = "É"; // É - uppercase E, acute accent - HTML_ENTITIES[202] = "Ê"; // Ê - uppercase E, circumflex accent + HTML_ENTITIES[197] = "Å"; // Ã… - uppercase A, ring + HTML_ENTITIES[198] = "Æ"; // Æ - uppercase AE + HTML_ENTITIES[199] = "Ç"; // Ç - uppercase C, cedilla + HTML_ENTITIES[200] = "È"; // È - uppercase E, grave accent + HTML_ENTITIES[201] = "É"; // É - uppercase E, acute accent + HTML_ENTITIES[202] = "Ê"; // Ê - uppercase E, circumflex accent HTML_ENTITIES[203] = "Ë"; // Ë - uppercase E, umlaut - HTML_ENTITIES[204] = "Ì"; // ÃŒ - uppercase I, grave accent - HTML_ENTITIES[205] = "Í"; // � - uppercase I, acute accent - HTML_ENTITIES[206] = "Î"; // ÃŽ - uppercase I, circumflex accent + HTML_ENTITIES[204] = "Ì"; // ÃŒ - uppercase I, grave accent + HTML_ENTITIES[205] = "Í"; // � - uppercase I, acute accent + HTML_ENTITIES[206] = "Î"; // ÃŽ - uppercase I, circumflex accent HTML_ENTITIES[207] = "Ï"; // � - uppercase I, umlaut - HTML_ENTITIES[208] = "Ð"; // � - uppercase Eth, Icelandic - HTML_ENTITIES[209] = "Ñ"; // Ñ - uppercase N, tilde - HTML_ENTITIES[210] = "Ò"; // Ã’ - uppercase O, grave accent - HTML_ENTITIES[211] = "Ó"; // Ó - uppercase O, acute accent - HTML_ENTITIES[212] = "Ô"; // Ãâ€? - uppercase O, circumflex accent - HTML_ENTITIES[213] = "Õ"; // Õ - uppercase O, tilde + HTML_ENTITIES[208] = "Ð"; // � - uppercase Eth, Icelandic + HTML_ENTITIES[209] = "Ñ"; // Ñ - uppercase N, tilde + HTML_ENTITIES[210] = "Ò"; // Ã’ - uppercase O, grave accent + HTML_ENTITIES[211] = "Ó"; // Ó - uppercase O, acute accent + HTML_ENTITIES[212] = "Ô"; // �? - uppercase O, circumflex accent + HTML_ENTITIES[213] = "Õ"; // Õ - uppercase O, tilde HTML_ENTITIES[214] = "Ö"; // Ö - uppercase O, umlaut - HTML_ENTITIES[215] = "×"; //multiplication sign - HTML_ENTITIES[216] = "Ø"; // Ø - uppercase O, slash - HTML_ENTITIES[217] = "Ù"; // Ù - uppercase U, grave accent - HTML_ENTITIES[218] = "Ú"; // Ú - uppercase U, acute accent - HTML_ENTITIES[219] = "Û"; // Û - uppercase U, circumflex accent + HTML_ENTITIES[215] = "×"; //multiplication sign + HTML_ENTITIES[216] = "Ø"; // Ø - uppercase O, slash + HTML_ENTITIES[217] = "Ù"; // Ù - uppercase U, grave accent + HTML_ENTITIES[218] = "Ú"; // Ú - uppercase U, acute accent + HTML_ENTITIES[219] = "Û"; // Û - uppercase U, circumflex accent HTML_ENTITIES[220] = "Ü"; // Ãœ - uppercase U, umlaut - HTML_ENTITIES[221] = "Ý"; // � - uppercase Y, acute accent - HTML_ENTITIES[222] = "Þ"; // Þ - uppercase THORN, Icelandic - HTML_ENTITIES[223] = "ß"; // ß - lowercase sharps, German - HTML_ENTITIES[224] = "à"; // à - lowercase a, grave accent - HTML_ENTITIES[225] = "á"; // á - lowercase a, acute accent - HTML_ENTITIES[226] = "â"; // â - lowercase a, circumflex accent - HTML_ENTITIES[227] = "ã"; // ã - lowercase a, tilde + HTML_ENTITIES[221] = "Ý"; // � - uppercase Y, acute accent + HTML_ENTITIES[222] = "Þ"; // Þ - uppercase THORN, Icelandic + HTML_ENTITIES[223] = "ß"; // ß - lowercase sharps, German + HTML_ENTITIES[224] = "à"; // à - lowercase a, grave accent + HTML_ENTITIES[225] = "á"; // á - lowercase a, acute accent + HTML_ENTITIES[226] = "â"; // â - lowercase a, circumflex accent + HTML_ENTITIES[227] = "ã"; // ã - lowercase a, tilde HTML_ENTITIES[228] = "ä"; // ä - lowercase a, umlaut - HTML_ENTITIES[229] = "å"; // Ã¥ - lowercase a, ring - HTML_ENTITIES[230] = "æ"; // æ - lowercase ae - HTML_ENTITIES[231] = "ç"; // ç - lowercase c, cedilla - HTML_ENTITIES[232] = "è"; // è - lowercase e, grave accent - HTML_ENTITIES[233] = "é"; // é - lowercase e, acute accent - HTML_ENTITIES[234] = "ê"; // ê - lowercase e, circumflex accent + HTML_ENTITIES[229] = "å"; // Ã¥ - lowercase a, ring + HTML_ENTITIES[230] = "æ"; // æ - lowercase ae + HTML_ENTITIES[231] = "ç"; // ç - lowercase c, cedilla + HTML_ENTITIES[232] = "è"; // è - lowercase e, grave accent + HTML_ENTITIES[233] = "é"; // é - lowercase e, acute accent + HTML_ENTITIES[234] = "ê"; // ê - lowercase e, circumflex accent HTML_ENTITIES[235] = "ë"; // ë - lowercase e, umlaut - HTML_ENTITIES[236] = "ì"; // ì - lowercase i, grave accent - HTML_ENTITIES[237] = "í"; // í - lowercase i, acute accent - HTML_ENTITIES[238] = "î"; // î - lowercase i, circumflex accent + HTML_ENTITIES[236] = "ì"; // ì - lowercase i, grave accent + HTML_ENTITIES[237] = "í"; // í - lowercase i, acute accent + HTML_ENTITIES[238] = "î"; // î - lowercase i, circumflex accent HTML_ENTITIES[239] = "ï"; // ï - lowercase i, umlaut - HTML_ENTITIES[240] = "ð"; // ð - lowercase eth, Icelandic - HTML_ENTITIES[241] = "ñ"; // ñ - lowercase n, tilde - HTML_ENTITIES[242] = "ò"; // ò - lowercase o, grave accent - HTML_ENTITIES[243] = "ó"; // ó - lowercase o, acute accent - HTML_ENTITIES[244] = "ô"; // ô - lowercase o, circumflex accent - HTML_ENTITIES[245] = "õ"; // õ - lowercase o, tilde + HTML_ENTITIES[240] = "ð"; // ð - lowercase eth, Icelandic + HTML_ENTITIES[241] = "ñ"; // ñ - lowercase n, tilde + HTML_ENTITIES[242] = "ò"; // ò - lowercase o, grave accent + HTML_ENTITIES[243] = "ó"; // ó - lowercase o, acute accent + HTML_ENTITIES[244] = "ô"; // ô - lowercase o, circumflex accent + HTML_ENTITIES[245] = "õ"; // õ - lowercase o, tilde HTML_ENTITIES[246] = "ö"; // ö - lowercase o, umlaut - HTML_ENTITIES[247] = "÷"; // division sign - HTML_ENTITIES[248] = "ø"; // ø - lowercase o, slash - HTML_ENTITIES[249] = "ù"; // ù - lowercase u, grave accent - HTML_ENTITIES[250] = "ú"; // ú - lowercase u, acute accent - HTML_ENTITIES[251] = "û"; // û - lowercase u, circumflex accent + HTML_ENTITIES[247] = "÷"; // division sign + HTML_ENTITIES[248] = "ø"; // ø - lowercase o, slash + HTML_ENTITIES[249] = "ù"; // ù - lowercase u, grave accent + HTML_ENTITIES[250] = "ú"; // ú - lowercase u, acute accent + HTML_ENTITIES[251] = "û"; // û - lowercase u, circumflex accent HTML_ENTITIES[252] = "ü"; // ü - lowercase u, umlaut - HTML_ENTITIES[253] = "ý"; // ý - lowercase y, acute accent - HTML_ENTITIES[254] = "þ"; // þ - lowercase thorn, Icelandic + HTML_ENTITIES[253] = "ý"; // ý - lowercase y, acute accent + HTML_ENTITIES[254] = "þ"; // þ - lowercase thorn, Icelandic HTML_ENTITIES[255] = "ÿ"; // ÿ - lowercase y, umlaut // http://www.w3.org/TR/REC-html40/sgml/entities.html // HTML_ENTITIES[402] = "ƒ"; //latin small f with hook = function= florin, U+0192 ISOtech --> // - HTML_ENTITIES[913] = "Α"; //greek capital letter alpha, U+0391 --> + HTML_ENTITIES[913] = "Α"; //greek capital letter alpha, U+0391 --> HTML_ENTITIES[914] = "Β"; //greek capital letter beta, U+0392 --> - HTML_ENTITIES[915] = "Γ"; //greek capital letter gamma,U+0393 ISOgrk3 --> - HTML_ENTITIES[916] = "Δ"; //greek capital letter delta,U+0394 ISOgrk3 --> - HTML_ENTITIES[917] = "Ε"; //greek capital letter epsilon, U+0395 --> + HTML_ENTITIES[915] = "Γ"; //greek capital letter gamma,U+0393 ISOgrk3 --> + HTML_ENTITIES[916] = "Δ"; //greek capital letter delta,U+0394 ISOgrk3 --> + HTML_ENTITIES[917] = "Ε"; //greek capital letter epsilon, U+0395 --> HTML_ENTITIES[918] = "Ζ"; //greek capital letter zeta, U+0396 --> - HTML_ENTITIES[919] = "Η"; //greek capital letter eta, U+0397 --> - HTML_ENTITIES[920] = "Θ"; //greek capital letter theta,U+0398 ISOgrk3 --> + HTML_ENTITIES[919] = "Η"; //greek capital letter eta, U+0397 --> + HTML_ENTITIES[920] = "Θ"; //greek capital letter theta,U+0398 ISOgrk3 --> HTML_ENTITIES[921] = "Ι"; //greek capital letter iota, U+0399 --> - HTML_ENTITIES[922] = "Κ"; //greek capital letter kappa, U+039A --> - HTML_ENTITIES[923] = "Λ"; //greek capital letter lambda,U+039B ISOgrk3 --> - HTML_ENTITIES[924] = "Μ"; //greek capital letter mu, U+039C --> - HTML_ENTITIES[925] = "Ν"; //greek capital letter nu, U+039D --> - HTML_ENTITIES[926] = "Ξ"; //greek capital letter xi, U+039E ISOgrk3 --> - HTML_ENTITIES[927] = "Ο"; //greek capital letter omicron, U+039F --> - HTML_ENTITIES[928] = "Π"; //greek capital letter pi, U+03A0 ISOgrk3 --> - HTML_ENTITIES[929] = "Ρ"; //greek capital letter rho, U+03A1 --> + HTML_ENTITIES[922] = "Κ"; //greek capital letter kappa, U+039A --> + HTML_ENTITIES[923] = "Λ"; //greek capital letter lambda,U+039B ISOgrk3 --> + HTML_ENTITIES[924] = "Μ"; //greek capital letter mu, U+039C --> + HTML_ENTITIES[925] = "Ν"; //greek capital letter nu, U+039D --> + HTML_ENTITIES[926] = "Ξ"; //greek capital letter xi, U+039E ISOgrk3 --> + HTML_ENTITIES[927] = "Ο"; //greek capital letter omicron, U+039F --> + HTML_ENTITIES[928] = "Π"; //greek capital letter pi, U+03A0 ISOgrk3 --> + HTML_ENTITIES[929] = "Ρ"; //greek capital letter rho, U+03A1 --> // - HTML_ENTITIES[931] = "Σ"; //greek capital letter sigma,U+03A3 ISOgrk3 --> - HTML_ENTITIES[932] = "Τ"; //greek capital letter tau, U+03A4 --> - HTML_ENTITIES[933] = "Υ"; //greek capital letter upsilon,U+03A5 ISOgrk3 --> - HTML_ENTITIES[934] = "Φ"; //greek capital letter phi,U+03A6 ISOgrk3 --> - HTML_ENTITIES[935] = "Χ"; //greek capital letter chi, U+03A7 --> - HTML_ENTITIES[936] = "Ψ"; //greek capital letter psi,U+03A8 ISOgrk3 --> - HTML_ENTITIES[937] = "Ω"; //greek capital letter omega,U+03A9 ISOgrk3 --> - HTML_ENTITIES[945] = "α"; //greek small letter alpha,U+03B1 ISOgrk3 --> + HTML_ENTITIES[931] = "Σ"; //greek capital letter sigma,U+03A3 ISOgrk3 --> + HTML_ENTITIES[932] = "Τ"; //greek capital letter tau, U+03A4 --> + HTML_ENTITIES[933] = "Υ"; //greek capital letter upsilon,U+03A5 ISOgrk3 --> + HTML_ENTITIES[934] = "Φ"; //greek capital letter phi,U+03A6 ISOgrk3 --> + HTML_ENTITIES[935] = "Χ"; //greek capital letter chi, U+03A7 --> + HTML_ENTITIES[936] = "Ψ"; //greek capital letter psi,U+03A8 ISOgrk3 --> + HTML_ENTITIES[937] = "Ω"; //greek capital letter omega,U+03A9 ISOgrk3 --> + HTML_ENTITIES[945] = "α"; //greek small letter alpha,U+03B1 ISOgrk3 --> HTML_ENTITIES[946] = "β"; //greek small letter beta, U+03B2 ISOgrk3 --> - HTML_ENTITIES[947] = "γ"; //greek small letter gamma,U+03B3 ISOgrk3 --> - HTML_ENTITIES[948] = "δ"; //greek small letter delta,U+03B4 ISOgrk3 --> - HTML_ENTITIES[949] = "ε"; //greek small letter epsilon,U+03B5 ISOgrk3 --> + HTML_ENTITIES[947] = "γ"; //greek small letter gamma,U+03B3 ISOgrk3 --> + HTML_ENTITIES[948] = "δ"; //greek small letter delta,U+03B4 ISOgrk3 --> + HTML_ENTITIES[949] = "ε"; //greek small letter epsilon,U+03B5 ISOgrk3 --> HTML_ENTITIES[950] = "ζ"; //greek small letter zeta, U+03B6 ISOgrk3 --> - HTML_ENTITIES[951] = "η"; //greek small letter eta, U+03B7 ISOgrk3 --> - HTML_ENTITIES[952] = "θ"; //greek small letter theta,U+03B8 ISOgrk3 --> + HTML_ENTITIES[951] = "η"; //greek small letter eta, U+03B7 ISOgrk3 --> + HTML_ENTITIES[952] = "θ"; //greek small letter theta,U+03B8 ISOgrk3 --> HTML_ENTITIES[953] = "ι"; //greek small letter iota, U+03B9 ISOgrk3 --> - HTML_ENTITIES[954] = "κ"; //greek small letter kappa,U+03BA ISOgrk3 --> - HTML_ENTITIES[955] = "λ"; //greek small letter lambda,U+03BB ISOgrk3 --> - HTML_ENTITIES[956] = "μ"; //greek small letter mu, U+03BC ISOgrk3 --> - HTML_ENTITIES[957] = "ν"; //greek small letter nu, U+03BD ISOgrk3 --> - HTML_ENTITIES[958] = "ξ"; //greek small letter xi, U+03BE ISOgrk3 --> - HTML_ENTITIES[959] = "ο"; //greek small letter omicron, U+03BF NEW --> - HTML_ENTITIES[960] = "π"; //greek small letter pi, U+03C0 ISOgrk3 --> - HTML_ENTITIES[961] = "ρ"; //greek small letter rho, U+03C1 ISOgrk3 --> - HTML_ENTITIES[962] = "ς"; //greek small letter final sigma,U+03C2 ISOgrk3 --> - HTML_ENTITIES[963] = "σ"; //greek small letter sigma,U+03C3 ISOgrk3 --> - HTML_ENTITIES[964] = "τ"; //greek small letter tau, U+03C4 ISOgrk3 --> - HTML_ENTITIES[965] = "υ"; //greek small letter upsilon,U+03C5 ISOgrk3 --> - HTML_ENTITIES[966] = "φ"; //greek small letter phi, U+03C6 ISOgrk3 --> - HTML_ENTITIES[967] = "χ"; //greek small letter chi, U+03C7 ISOgrk3 --> - HTML_ENTITIES[968] = "ψ"; //greek small letter psi, U+03C8 ISOgrk3 --> - HTML_ENTITIES[969] = "ω"; //greek small letter omega,U+03C9 ISOgrk3 --> + HTML_ENTITIES[954] = "κ"; //greek small letter kappa,U+03BA ISOgrk3 --> + HTML_ENTITIES[955] = "λ"; //greek small letter lambda,U+03BB ISOgrk3 --> + HTML_ENTITIES[956] = "μ"; //greek small letter mu, U+03BC ISOgrk3 --> + HTML_ENTITIES[957] = "ν"; //greek small letter nu, U+03BD ISOgrk3 --> + HTML_ENTITIES[958] = "ξ"; //greek small letter xi, U+03BE ISOgrk3 --> + HTML_ENTITIES[959] = "ο"; //greek small letter omicron, U+03BF NEW --> + HTML_ENTITIES[960] = "π"; //greek small letter pi, U+03C0 ISOgrk3 --> + HTML_ENTITIES[961] = "ρ"; //greek small letter rho, U+03C1 ISOgrk3 --> + HTML_ENTITIES[962] = "ς"; //greek small letter final sigma,U+03C2 ISOgrk3 --> + HTML_ENTITIES[963] = "σ"; //greek small letter sigma,U+03C3 ISOgrk3 --> + HTML_ENTITIES[964] = "τ"; //greek small letter tau, U+03C4 ISOgrk3 --> + HTML_ENTITIES[965] = "υ"; //greek small letter upsilon,U+03C5 ISOgrk3 --> + HTML_ENTITIES[966] = "φ"; //greek small letter phi, U+03C6 ISOgrk3 --> + HTML_ENTITIES[967] = "χ"; //greek small letter chi, U+03C7 ISOgrk3 --> + HTML_ENTITIES[968] = "ψ"; //greek small letter psi, U+03C8 ISOgrk3 --> + HTML_ENTITIES[969] = "ω"; //greek small letter omega,U+03C9 ISOgrk3 --> HTML_ENTITIES[977] = "ϑ"; //greek small letter theta symbol,U+03D1 NEW --> HTML_ENTITIES[978] = "ϒ"; //greek upsilon with hook symbol,U+03D2 NEW --> - HTML_ENTITIES[982] = "ϖ"; //greek pi symbol, U+03D6 ISOgrk3 --> + HTML_ENTITIES[982] = "ϖ"; //greek pi symbol, U+03D6 ISOgrk3 --> // - HTML_ENTITIES[8226] = "•"; //bullet = black small circle,U+2022 ISOpub --> + HTML_ENTITIES[8226] = "•"; //bullet = black small circle,U+2022 ISOpub --> // - HTML_ENTITIES[8230] = "…"; //horizontal ellipsis = three dot leader,U+2026 ISOpub --> - HTML_ENTITIES[8242] = "′"; //prime = minutes = feet, U+2032 ISOtech --> - HTML_ENTITIES[8243] = "″"; //double prime = seconds = inches,U+2033 ISOtech --> - HTML_ENTITIES[8254] = "‾"; //overline = spacing overscore,U+203E NEW --> - HTML_ENTITIES[8260] = "⁄"; //fraction slash, U+2044 NEW --> + HTML_ENTITIES[8230] = "…"; //horizontal ellipsis = three dot leader,U+2026 ISOpub --> + HTML_ENTITIES[8242] = "′"; //prime = minutes = feet, U+2032 ISOtech --> + HTML_ENTITIES[8243] = "″"; //double prime = seconds = inches,U+2033 ISOtech --> + HTML_ENTITIES[8254] = "‾"; //overline = spacing overscore,U+203E NEW --> + HTML_ENTITIES[8260] = "⁄"; //fraction slash, U+2044 NEW --> // - HTML_ENTITIES[8472] = "℘"; //script capital P = power set= Weierstrass p, U+2118 ISOamso --> - HTML_ENTITIES[8465] = "ℑ"; //blackletter capital I = imaginary part,U+2111 ISOamso --> + HTML_ENTITIES[8472] = "℘"; //script capital P = power set= Weierstrass p, U+2118 ISOamso --> + HTML_ENTITIES[8465] = "ℑ"; //blackletter capital I = imaginary part,U+2111 ISOamso --> HTML_ENTITIES[8476] = "ℜ"; //blackletter capital R = real part symbol,U+211C ISOamso --> - HTML_ENTITIES[8482] = "™"; //trade mark sign, U+2122 ISOnum --> + HTML_ENTITIES[8482] = "™"; //trade mark sign, U+2122 ISOnum --> HTML_ENTITIES[8501] = "ℵ"; //alef symbol = first transfinite cardinal,U+2135 NEW --> // // @@ -336,7 +336,7 @@ public class ClickUtils { HTML_ENTITIES[8594] = "→"; //rightwards arrow, U+2192 ISOnum --> HTML_ENTITIES[8595] = "↓"; //downwards arrow, U+2193 ISOnum --> HTML_ENTITIES[8596] = "↔"; //left right arrow, U+2194 ISOamsa --> - HTML_ENTITIES[8629] = "↵"; //downwards arrow with corner leftwards= carriage return, U+21B5 NEW --> + HTML_ENTITIES[8629] = "↵"; //downwards arrow with corner leftwards= carriage return, U+21B5 NEW --> HTML_ENTITIES[8656] = "⇐"; //leftwards double arrow, U+21D0 ISOtech --> // HTML_ENTITIES[8657] = "⇑"; //upwards double arrow, U+21D1 ISOamsa --> @@ -345,84 +345,84 @@ public class ClickUtils { HTML_ENTITIES[8659] = "⇓"; //downwards double arrow, U+21D3 ISOamsa --> HTML_ENTITIES[8660] = "⇔"; //left right double arrow,U+21D4 ISOamsa --> // - HTML_ENTITIES[8704] = "∀"; //for all, U+2200 ISOtech --> + HTML_ENTITIES[8704] = "∀"; //for all, U+2200 ISOtech --> HTML_ENTITIES[8706] = "∂"; //partial differential, U+2202 ISOtech --> - HTML_ENTITIES[8707] = "∃"; //there exists, U+2203 ISOtech --> - HTML_ENTITIES[8709] = "∅"; //empty set = null set = diameter,U+2205 ISOamso --> - HTML_ENTITIES[8711] = "∇"; //nabla = backward difference,U+2207 ISOtech --> + HTML_ENTITIES[8707] = "∃"; //there exists, U+2203 ISOtech --> + HTML_ENTITIES[8709] = "∅"; //empty set = null set = diameter,U+2205 ISOamso --> + HTML_ENTITIES[8711] = "∇"; //nabla = backward difference,U+2207 ISOtech --> HTML_ENTITIES[8712] = "∈"; //element of, U+2208 ISOtech --> - HTML_ENTITIES[8713] = "∉"; //not an element of, U+2209 ISOtech --> - HTML_ENTITIES[8715] = "∋"; //contains as member, U+220B ISOtech --> + HTML_ENTITIES[8713] = "∉"; //not an element of, U+2209 ISOtech --> + HTML_ENTITIES[8715] = "∋"; //contains as member, U+220B ISOtech --> // HTML_ENTITIES[8719] = "∏"; //n-ary product = product sign,U+220F ISOamsb --> // HTML_ENTITIES[8721] = "∑"; //n-ary summation, U+2211 ISOamsb --> // - HTML_ENTITIES[8722] = "−"; //minus sign, U+2212 ISOtech --> - HTML_ENTITIES[8727] = "∗"; //asterisk operator, U+2217 ISOtech --> - HTML_ENTITIES[8730] = "√"; //square root = radical sign,U+221A ISOtech --> + HTML_ENTITIES[8722] = "−"; //minus sign, U+2212 ISOtech --> + HTML_ENTITIES[8727] = "∗"; //asterisk operator, U+2217 ISOtech --> + HTML_ENTITIES[8730] = "√"; //square root = radical sign,U+221A ISOtech --> HTML_ENTITIES[8733] = "∝"; //proportional to, U+221D ISOtech --> - HTML_ENTITIES[8734] = "∞"; //infinity, U+221E ISOtech --> - HTML_ENTITIES[8736] = "∠"; //angle, U+2220 ISOamso --> - HTML_ENTITIES[8743] = "∧"; //logical and = wedge, U+2227 ISOtech --> - HTML_ENTITIES[8744] = "∨"; //logical or = vee, U+2228 ISOtech --> - HTML_ENTITIES[8745] = "∩"; //intersection = cap, U+2229 ISOtech --> - HTML_ENTITIES[8746] = "∪"; //union = cup, U+222A ISOtech --> - HTML_ENTITIES[8747] = "∫"; //integral, U+222B ISOtech --> - HTML_ENTITIES[8756] = "∴"; //therefore, U+2234 ISOtech --> - HTML_ENTITIES[8764] = "∼"; //tilde operator = varies with = similar to,U+223C ISOtech --> + HTML_ENTITIES[8734] = "∞"; //infinity, U+221E ISOtech --> + HTML_ENTITIES[8736] = "∠"; //angle, U+2220 ISOamso --> + HTML_ENTITIES[8743] = "∧"; //logical and = wedge, U+2227 ISOtech --> + HTML_ENTITIES[8744] = "∨"; //logical or = vee, U+2228 ISOtech --> + HTML_ENTITIES[8745] = "∩"; //intersection = cap, U+2229 ISOtech --> + HTML_ENTITIES[8746] = "∪"; //union = cup, U+222A ISOtech --> + HTML_ENTITIES[8747] = "∫"; //integral, U+222B ISOtech --> + HTML_ENTITIES[8756] = "∴"; //therefore, U+2234 ISOtech --> + HTML_ENTITIES[8764] = "∼"; //tilde operator = varies with = similar to,U+223C ISOtech --> // - HTML_ENTITIES[8773] = "≅"; //approximately equal to, U+2245 ISOtech --> + HTML_ENTITIES[8773] = "≅"; //approximately equal to, U+2245 ISOtech --> HTML_ENTITIES[8776] = "≈"; //almost equal to = asymptotic to,U+2248 ISOamsr --> - HTML_ENTITIES[8800] = "≠"; //not equal to, U+2260 ISOtech --> + HTML_ENTITIES[8800] = "≠"; //not equal to, U+2260 ISOtech --> HTML_ENTITIES[8801] = "≡"; //identical to, U+2261 ISOtech --> - HTML_ENTITIES[8804] = "≤"; //less-than or equal to, U+2264 ISOtech --> - HTML_ENTITIES[8805] = "≥"; //greater-than or equal to,U+2265 ISOtech --> - HTML_ENTITIES[8834] = "⊂"; //subset of, U+2282 ISOtech --> - HTML_ENTITIES[8835] = "⊃"; //superset of, U+2283 ISOtech --> + HTML_ENTITIES[8804] = "≤"; //less-than or equal to, U+2264 ISOtech --> + HTML_ENTITIES[8805] = "≥"; //greater-than or equal to,U+2265 ISOtech --> + HTML_ENTITIES[8834] = "⊂"; //subset of, U+2282 ISOtech --> + HTML_ENTITIES[8835] = "⊃"; //superset of, U+2283 ISOtech --> // - HTML_ENTITIES[8838] = "⊆"; //subset of or equal to, U+2286 ISOtech --> - HTML_ENTITIES[8839] = "⊇"; //superset of or equal to,U+2287 ISOtech --> + HTML_ENTITIES[8838] = "⊆"; //subset of or equal to, U+2286 ISOtech --> + HTML_ENTITIES[8839] = "⊇"; //superset of or equal to,U+2287 ISOtech --> HTML_ENTITIES[8853] = "⊕"; //circled plus = direct sum,U+2295 ISOamsb --> - HTML_ENTITIES[8855] = "⊗"; //circled times = vector product,U+2297 ISOamsb --> - HTML_ENTITIES[8869] = "⊥"; //up tack = orthogonal to = perpendicular,U+22A5 ISOtech --> - HTML_ENTITIES[8901] = "⋅"; //dot operator, U+22C5 ISOamsb --> + HTML_ENTITIES[8855] = "⊗"; //circled times = vector product,U+2297 ISOamsb --> + HTML_ENTITIES[8869] = "⊥"; //up tack = orthogonal to = perpendicular,U+22A5 ISOtech --> + HTML_ENTITIES[8901] = "⋅"; //dot operator, U+22C5 ISOamsb --> // // HTML_ENTITIES[8968] = "⌈"; //left ceiling = apl upstile,U+2308 ISOamsc --> HTML_ENTITIES[8969] = "⌉"; //right ceiling, U+2309 ISOamsc --> - HTML_ENTITIES[8970] = "⌊"; //left floor = apl downstile,U+230A ISOamsc --> - HTML_ENTITIES[8971] = "⌋"; //right floor, U+230B ISOamsc --> - HTML_ENTITIES[9001] = "⟨"; //left-pointing angle bracket = bra,U+2329 ISOtech --> + HTML_ENTITIES[8970] = "⌊"; //left floor = apl downstile,U+230A ISOamsc --> + HTML_ENTITIES[8971] = "⌋"; //right floor, U+230B ISOamsc --> + HTML_ENTITIES[9001] = "⟨"; //left-pointing angle bracket = bra,U+2329 ISOtech --> // HTML_ENTITIES[9002] = "⟩"; //right-pointing angle bracket = ket,U+232A ISOtech --> // // - HTML_ENTITIES[9674] = "◊"; //lozenge, U+25CA ISOpub --> + HTML_ENTITIES[9674] = "◊"; //lozenge, U+25CA ISOpub --> // - HTML_ENTITIES[9824] = "♠"; //black spade suit, U+2660 ISOpub --> + HTML_ENTITIES[9824] = "♠"; //black spade suit, U+2660 ISOpub --> // HTML_ENTITIES[9827] = "♣"; //black club suit = shamrock,U+2663 ISOpub --> - HTML_ENTITIES[9829] = "♥"; //black heart suit = valentine,U+2665 ISOpub --> + HTML_ENTITIES[9829] = "♥"; //black heart suit = valentine,U+2665 ISOpub --> HTML_ENTITIES[9830] = "♦"; //black diamond suit, U+2666 ISOpub --> // - HTML_ENTITIES[338] = "Œ"; // -- latin capital ligature OE,U+0152 ISOlat2 --> - HTML_ENTITIES[339] = "œ"; // -- latin small ligature oe, U+0153 ISOlat2 --> + HTML_ENTITIES[338] = "Œ"; // -- latin capital ligature OE,U+0152 ISOlat2 --> + HTML_ENTITIES[339] = "œ"; // -- latin small ligature oe, U+0153 ISOlat2 --> // HTML_ENTITIES[352] = "Š"; // -- latin capital letter S with caron,U+0160 ISOlat2 --> HTML_ENTITIES[353] = "š"; // -- latin small letter s with caron,U+0161 ISOlat2 --> - HTML_ENTITIES[376] = "Ÿ"; // -- latin capital letter Y with diaeresis,U+0178 ISOlat2 --> + HTML_ENTITIES[376] = "Ÿ"; // -- latin capital letter Y with diaeresis,U+0178 ISOlat2 --> // - HTML_ENTITIES[710] = "ˆ"; // -- modifier letter circumflex accent,U+02C6 ISOpub --> - HTML_ENTITIES[732] = "˜"; //small tilde, U+02DC ISOdia --> + HTML_ENTITIES[710] = "ˆ"; // -- modifier letter circumflex accent,U+02C6 ISOpub --> + HTML_ENTITIES[732] = "˜"; //small tilde, U+02DC ISOdia --> // - HTML_ENTITIES[8194] = " "; //en space, U+2002 ISOpub --> - HTML_ENTITIES[8195] = " "; //em space, U+2003 ISOpub --> - HTML_ENTITIES[8201] = " "; //thin space, U+2009 ISOpub --> - HTML_ENTITIES[8204] = "‌"; //zero width non-joiner,U+200C NEW RFC 2070 --> - HTML_ENTITIES[8205] = "‍"; //zero width joiner, U+200D NEW RFC 2070 --> - HTML_ENTITIES[8206] = "‎"; //left-to-right mark, U+200E NEW RFC 2070 --> - HTML_ENTITIES[8207] = "‏"; //right-to-left mark, U+200F NEW RFC 2070 --> + HTML_ENTITIES[8194] = " "; //en space, U+2002 ISOpub --> + HTML_ENTITIES[8195] = " "; //em space, U+2003 ISOpub --> + HTML_ENTITIES[8201] = " "; //thin space, U+2009 ISOpub --> + HTML_ENTITIES[8204] = "‌"; //zero width non-joiner,U+200C NEW RFC 2070 --> + HTML_ENTITIES[8205] = "‍"; //zero width joiner, U+200D NEW RFC 2070 --> + HTML_ENTITIES[8206] = "‎"; //left-to-right mark, U+200E NEW RFC 2070 --> + HTML_ENTITIES[8207] = "‏"; //right-to-left mark, U+200F NEW RFC 2070 --> HTML_ENTITIES[8211] = "–"; //en dash, U+2013 ISOpub --> HTML_ENTITIES[8212] = "—"; //em dash, U+2014 ISOpub --> HTML_ENTITIES[8216] = "‘"; //left single quotation mark,U+2018 ISOnum --> @@ -431,14 +431,14 @@ public class ClickUtils { HTML_ENTITIES[8220] = "“"; //left double quotation mark,U+201C ISOnum --> HTML_ENTITIES[8221] = "”"; //right double quotation mark,U+201D ISOnum --> HTML_ENTITIES[8222] = "„"; //double low-9 quotation mark, U+201E NEW --> - HTML_ENTITIES[8224] = "†"; //dagger, U+2020 ISOpub --> - HTML_ENTITIES[8225] = "‡"; //double dagger, U+2021 ISOpub --> - HTML_ENTITIES[8240] = "‰"; //per mille sign, U+2030 ISOtech --> - HTML_ENTITIES[8249] = "‹"; //single left-pointing angle quotation mark,U+2039 ISO proposed --> + HTML_ENTITIES[8224] = "†"; //dagger, U+2020 ISOpub --> + HTML_ENTITIES[8225] = "‡"; //double dagger, U+2021 ISOpub --> + HTML_ENTITIES[8240] = "‰"; //per mille sign, U+2030 ISOtech --> + HTML_ENTITIES[8249] = "‹"; //single left-pointing angle quotation mark,U+2039 ISO proposed --> // - HTML_ENTITIES[8250] = "›"; //single right-pointing angle quotation mark,U+203A ISO proposed --> + HTML_ENTITIES[8250] = "›"; //single right-pointing angle quotation mark,U+203A ISO proposed --> // - HTML_ENTITIES[8364] = "€"; // -- euro sign, U+20AC NEW --> + HTML_ENTITIES[8364] = "€"; // -- 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. *

* This method was derived from Atlassian CookieUtils 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.