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);
+       }
 }

Reply via email to