Updated Branches: refs/heads/master 74c0e98b0 -> 3ecfcb93d
WICKET-4638 Make it possible to use JsonFunction as a AjaxCallListener's handler Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3ecfcb93 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3ecfcb93 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3ecfcb93 Branch: refs/heads/master Commit: 3ecfcb93d6e77a8217c17ee4634281417be3e946 Parents: 8c350d0 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Jul 5 10:27:06 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Jul 5 10:27:06 2012 +0200 ---------------------------------------------------------------------- .../wicket/ajax/AbstractDefaultAjaxBehavior.java | 64 ++++++--------- .../org/apache/wicket/ajax/json/JsonFunction.java | 38 ++++++++- 2 files changed, 61 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3ecfcb93/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java index bfdcb9f..899d5e8 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java @@ -64,7 +64,7 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior private static final String DYNAMIC_PARAMETER_FUNCTION_TEMPLATE = "function(attrs){%s}"; private static final String PRECONDITION_FUNCTION_TEMPLATE = "function(attrs, jqXHR, settings){%s}"; private static final String COMPLETE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, textStatus){%s}"; - private static final String FAILURE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, errorMessage){%s}"; + private static final String FAILURE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, errorMessage, textStatus){%s}"; private static final String SUCCESS_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, data, textStatus){%s}"; private static final String AFTER_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; private static final String BEFORE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, settings){%s}"; @@ -249,52 +249,22 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior if (ajaxCallListener != null) { CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component); - if (Strings.isEmpty(beforeHandler) == false) - { - String func = String.format(BEFORE_HANDLER_FUNCTION_TEMPLATE, beforeHandler); - JsonFunction function = new JsonFunction(func); - attributesJson.append("bh", function); - } + appendListenerHandler(beforeHandler, attributesJson, "bh", BEFORE_HANDLER_FUNCTION_TEMPLATE); CharSequence afterHandler = ajaxCallListener.getAfterHandler(component); - if (Strings.isEmpty(afterHandler) == false) - { - String func = String.format(AFTER_HANDLER_FUNCTION_TEMPLATE, afterHandler); - JsonFunction function = new JsonFunction(func); - attributesJson.append("ah", function); - } + appendListenerHandler(afterHandler, attributesJson, "ah", AFTER_HANDLER_FUNCTION_TEMPLATE); CharSequence successHandler = ajaxCallListener.getSuccessHandler(component); - if (Strings.isEmpty(successHandler) == false) - { - String func = String.format(SUCCESS_HANDLER_FUNCTION_TEMPLATE, successHandler); - JsonFunction function = new JsonFunction(func); - attributesJson.append("sh", function); - } + appendListenerHandler(successHandler, attributesJson, "sh", SUCCESS_HANDLER_FUNCTION_TEMPLATE); CharSequence failureHandler = ajaxCallListener.getFailureHandler(component); - if (Strings.isEmpty(failureHandler) == false) - { - String func = String.format(FAILURE_HANDLER_FUNCTION_TEMPLATE, failureHandler); - JsonFunction function = new JsonFunction(func); - attributesJson.append("fh", function); - } + appendListenerHandler(failureHandler, attributesJson, "fh", FAILURE_HANDLER_FUNCTION_TEMPLATE); CharSequence completeHandler = ajaxCallListener.getCompleteHandler(component); - if (Strings.isEmpty(completeHandler) == false) - { - String func = String.format(COMPLETE_HANDLER_FUNCTION_TEMPLATE, completeHandler); - JsonFunction function = new JsonFunction(func); - attributesJson.append("coh", function); - } + appendListenerHandler(completeHandler, attributesJson, "coh", COMPLETE_HANDLER_FUNCTION_TEMPLATE); CharSequence precondition = ajaxCallListener.getPrecondition(component); - if (Strings.isEmpty(precondition) == false) - { - String func = String.format(PRECONDITION_FUNCTION_TEMPLATE, precondition); - JsonFunction function = new JsonFunction(func); - attributesJson.append("pre", function); - } + appendListenerHandler(precondition, attributesJson, "pre", PRECONDITION_FUNCTION_TEMPLATE); } } @@ -397,6 +367,26 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior return attributesAsJson; } + private void appendListenerHandler(final CharSequence handler, final JSONObject attributesJson, + final String propertyName, final String functionTemplate) + throws JSONException + { + if (Strings.isEmpty(handler) == false) + { + final JsonFunction function; + if (handler instanceof JsonFunction) + { + function = (JsonFunction) handler; + } + else + { + String func = String.format(functionTemplate, handler); + function = new JsonFunction(func); + } + attributesJson.append(propertyName, function); + } + } + /** * Gives a chance to modify the JSON attributesJson that is going to be used as attributes for * the Ajax call. http://git-wip-us.apache.org/repos/asf/wicket/blob/3ecfcb93/wicket-core/src/main/java/org/apache/wicket/ajax/json/JsonFunction.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JsonFunction.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JsonFunction.java index 355892a..f5ba58f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JsonFunction.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JsonFunction.java @@ -12,19 +12,49 @@ */ package org.apache.wicket.ajax.json; +import org.apache.wicket.util.io.IClusterable; +import org.apache.wicket.util.lang.Args; + /** * Represents a Json function. When written out these values are not escaped so its possible to write out raw * JavaScript. */ -public class JsonFunction implements JSONString { +public class JsonFunction implements JSONString, CharSequence, IClusterable +{ private final CharSequence value; - public JsonFunction(CharSequence value) { - this.value = value; + public JsonFunction(CharSequence value) + { + this.value = Args.notNull(value, "value"); + } + + @Override + public String toString() + { + return toJSONString(); } @Override - public String toJSONString() { + public String toJSONString() + { return value.toString(); } + + @Override + public int length() + { + return value.length(); + } + + @Override + public char charAt(int index) + { + return value.charAt(index); + } + + @Override + public CharSequence subSequence(int start, int end) + { + return value.subSequence(start, end); + } }
