You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/08/14 11:42:04 UTC
[35/37] git commit: Merge branch 'master' into 5299-ajax-strategy
Merge branch 'master' into 5299-ajax-strategy
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7af68957
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7af68957
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7af68957
Branch: refs/heads/5299-ajax-strategy
Commit: 7af68957d9a156a21e370bda1cbfa6ccada49a12
Parents: 30603f4 bfd4649
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 14 12:23:20 2013 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Aug 14 12:23:20 2013 +0300
----------------------------------------------------------------------
.../main/resources/archetype-resources/pom.xml | 2 +-
pom.xml | 4 +-
.../authentication/AuthenticatedWebSession.java | 2 +-
.../wicket/ajax/AbstractAjaxResponse.java | 23 +-
.../apache/wicket/ajax/AjaxRequestHandler.java | 4 +-
.../apache/wicket/ajax/AjaxRequestTarget.java | 2 +-
.../ajax/attributes/ThrottlingSettings.java | 69 +-
.../wicket/ajax/res/js/wicket-ajax-jquery.js | 77 +-
.../ajax/strategies/Wicket6AjaxStrategy.java | 8 +-
.../ComponentRenderingRequestHandler.java | 13 +-
.../wicket/markup/head/ResourceAggregator.java | 2 +-
.../protocol/http/AjaxEnclosureListener.java | 24 +-
.../http/servlet/ServletWebRequest.java | 2 +-
.../request/handler/render/WebPageRenderer.java | 160 +-
.../request/resource/AbstractResource.java | 14 +-
...enameWithVersionResourceCachingStrategy.java | 10 +
.../caching/IResourceCachingStrategy.java | 10 +
...tringWithVersionResourceCachingStrategy.java | 11 +
.../loader/BundleStringResourceLoader.java | 11 +-
.../form/FormComponentTest$TestPage2.properties | 0
.../markup/html/internal/TogglePageTest.java | 6 +-
.../http/servlet/ServletWebRequestTest.java | 15 +
...eWithVersionResourceCachingStrategyTest.java | 87 +
...gWithVersionResourceCachingStrategyTest.java | 94 +
.../request/resource/caching/TestResource.java | 51 +
wicket-core/src/test/js/ajax.js | 58 +-
.../examples/ajax/builtin/EffectsPage.html | 9 +-
.../examples/ajax/builtin/EffectsPage.java | 6 +-
.../wicket/examples/ajax/builtin/Index.html | 2 +-
.../bean/validation/BeanValidationPage.html | 2 +-
.../wicket/examples/compref/MyBorder.html | 2 +-
.../apache/wicket/examples/navomatic/Page1.html | 8 +-
.../apache/wicket/examples/navomatic/Page2.html | 8 +-
.../apache/wicket/examples/navomatic/Page3.html | 10 +-
.../wicket/examples/source/SourcesPage.html | 3 -
wicket-examples/src/main/webapp/effects.js | 903 -------
.../src/main/webapp/jquery-ui-1.10.3.custom.js | 2261 ++++++++++++++++++
.../src/main/webapp/scriptaculous.js | 45 -
.../wicket/examples/JettyTestCaseDecorator.java | 5 +-
.../wicket/examples/WicketWebTestCase.java | 3 +-
.../wicket/filtertest/WithCPWithFPTest.java | 4 +-
.../wicket/filtertest/WithCPWithoutFPTest.java | 4 +-
.../util/license/ApacheLicenceHeaderTest.java | 9 +-
.../wicket/bean/validation/SizeTagModifier.java | 5 +-
.../wicket-native-websocket/pom.xml | 1 +
.../ws/api/AbstractWebSocketProcessor.java | 1 -
.../protocol/ws/api/WebSocketBehavior.java | 4 +
.../ws/api/res/js/wicket-websocket-jquery.js | 23 +-
.../api/res/js/wicket-websocket-setup.js.tmpl | 2 +-
.../wicket-native-websocket-javax/pom.xml | 67 +
.../ws/javax/JavaxUpgradeHttpRequest.java | 558 +++++
.../ws/javax/JavaxWebSocketConnection.java | 119 +
.../protocol/ws/javax/JavaxWebSocketFilter.java | 280 +++
.../ws/javax/JavaxWebSocketProcessor.java | 83 +
.../protocol/ws/javax/WicketEndpoint.java | 70 +
.../src/test/java/log4j.properties | 16 +
.../util/licence/ApacheLicenceHeaderTest.java | 34 +
.../AbstractAutoCompleteBehavior.java | 1 +
.../html/autocomplete/AutoCompleteSettings.java | 23 +
.../html/autocomplete/wicket-autocomplete.js | 20 +-
.../repeater/data/table/AbstractToolbar.java | 5 +-
.../html/repeater/data/table/DataTable.java | 11 +
.../java/org/apache/wicket/request/Url.java | 17 +-
63 files changed, 4210 insertions(+), 1173 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/7af68957/wicket-core/src/main/java/org/apache/wicket/ajax/strategies/Wicket6AjaxStrategy.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/ajax/strategies/Wicket6AjaxStrategy.java
index 6df17b0,0000000..e737eaf
mode 100644,000000..100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/strategies/Wicket6AjaxStrategy.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/strategies/Wicket6AjaxStrategy.java
@@@ -1,326 -1,0 +1,330 @@@
+package org.apache.wicket.ajax.strategies;
+
+import java.util.List;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxChannel;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.attributes.AjaxAttributeName;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.attributes.CallbackParameter;
+import org.apache.wicket.ajax.attributes.IAjaxCallListener;
+import org.apache.wicket.ajax.attributes.ThrottlingSettings;
+import org.apache.wicket.ajax.json.JSONArray;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.ajax.json.JsonFunction;
+import org.apache.wicket.ajax.json.JsonUtils;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
+
+/**
+ *
+ */
+public class Wicket6AjaxStrategy implements IAjaxStrategy
+{
+ public void renderHead(final AjaxEventBehavior behavior, final IHeaderResponse response)
+ {
+ CharSequence js = behavior.getCallbackScript();
+
+ response.render(OnDomReadyHeaderItem.forScript(js.toString()));
+ }
+
+ public void onComponentTag(final AjaxEventBehavior behavior, final ComponentTag tag)
+ {
+ }
+
+ /**
+ * @return the attributes as string in JSON format
+ */
+ @Override
+ public final JSONObject getAjaxAttributes(AbstractDefaultAjaxBehavior behavior, Component component, AjaxRequestAttributes attributes)
+ {
+ JSONObject attributesJson = new JSONObject();
+
+ try
+ {
+ attributesJson.put(AjaxAttributeName.URL.jsonName(), behavior.getCallbackUrl());
+ AjaxRequestAttributes.Method method = attributes.getMethod();
+ if (AjaxRequestAttributes.Method.POST == method)
+ {
+ attributesJson.put(AjaxAttributeName.METHOD.jsonName(), method);
+ }
+
+ if (component instanceof Page == false)
+ {
+ String componentId = component.getMarkupId();
+ attributesJson.put(AjaxAttributeName.MARKUP_ID.jsonName(), componentId);
+ }
+
+ String formId = attributes.getFormId();
+ if (Strings.isEmpty(formId) == false)
+ {
+ attributesJson.put(AjaxAttributeName.FORM_ID.jsonName(), formId);
+ }
+
+ if (attributes.isMultipart())
+ {
+ attributesJson.put(AjaxAttributeName.IS_MULTIPART.jsonName(), true);
+ }
+
+ String submittingComponentId = attributes.getSubmittingComponentName();
+ if (Strings.isEmpty(submittingComponentId) == false)
+ {
+ attributesJson.put(AjaxAttributeName.SUBMITTING_COMPONENT_NAME.jsonName(),
+ submittingComponentId);
+ }
+
+ String indicatorId = behavior.findIndicatorId();
+ if (Strings.isEmpty(indicatorId) == false)
+ {
+ attributesJson.put(AjaxAttributeName.INDICATOR_ID.jsonName(), indicatorId);
+ }
+
+ for (IAjaxCallListener ajaxCallListener : attributes.getAjaxCallListeners())
+ {
+ if (ajaxCallListener != null)
+ {
+ CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component);
+ appendListenerHandler(beforeHandler, attributesJson,
+ AjaxAttributeName.BEFORE_HANDLER.jsonName(),
+ BEFORE_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence beforeSendHandler = ajaxCallListener
+ .getBeforeSendHandler(component);
+ appendListenerHandler(beforeSendHandler, attributesJson,
+ AjaxAttributeName.BEFORE_SEND_HANDLER.jsonName(),
+ BEFORE_SEND_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence afterHandler = ajaxCallListener.getAfterHandler(component);
+ appendListenerHandler(afterHandler, attributesJson,
+ AjaxAttributeName.AFTER_HANDLER.jsonName(), AFTER_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence successHandler = ajaxCallListener.getSuccessHandler(component);
+ appendListenerHandler(successHandler, attributesJson,
+ AjaxAttributeName.SUCCESS_HANDLER.jsonName(),
+ SUCCESS_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence failureHandler = ajaxCallListener.getFailureHandler(component);
+ appendListenerHandler(failureHandler, attributesJson,
+ AjaxAttributeName.FAILURE_HANDLER.jsonName(),
+ FAILURE_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence completeHandler = ajaxCallListener.getCompleteHandler(component);
+ appendListenerHandler(completeHandler, attributesJson,
+ AjaxAttributeName.COMPLETE_HANDLER.jsonName(),
+ COMPLETE_HANDLER_FUNCTION_TEMPLATE);
+
+ CharSequence precondition = ajaxCallListener.getPrecondition(component);
+ appendListenerHandler(precondition, attributesJson,
+ AjaxAttributeName.PRECONDITION.jsonName(), PRECONDITION_FUNCTION_TEMPLATE);
+ }
+ }
+
+ JSONArray extraParameters = JsonUtils.asArray(attributes.getExtraParameters());
+
+ if (extraParameters.length() > 0)
+ {
+ attributesJson.put(AjaxAttributeName.EXTRA_PARAMETERS.jsonName(), extraParameters);
+ }
+
+ List<CharSequence> dynamicExtraParameters = attributes.getDynamicExtraParameters();
+ if (dynamicExtraParameters != null)
+ {
+ for (CharSequence dynamicExtraParameter : dynamicExtraParameters)
+ {
+ String func = String.format(DYNAMIC_PARAMETER_FUNCTION_TEMPLATE,
+ dynamicExtraParameter);
+ JsonFunction function = new JsonFunction(func);
+ attributesJson.append(AjaxAttributeName.DYNAMIC_PARAMETER_FUNCTION.jsonName(),
+ function);
+ }
+ }
+
+ if (attributes.isAsynchronous() == false)
+ {
+ attributesJson.put(AjaxAttributeName.IS_ASYNC.jsonName(), false);
+ }
+
+ String[] eventNames = attributes.getEventNames();
+ if (eventNames.length == 1)
+ {
+ attributesJson.put(AjaxAttributeName.EVENT_NAME.jsonName(), eventNames[0]);
+ }
+ else
+ {
+ for (String eventName : eventNames)
+ {
+ attributesJson.append(AjaxAttributeName.EVENT_NAME.jsonName(), eventName);
+ }
+ }
+
+ AjaxChannel channel = attributes.getChannel();
+ if (channel != null)
+ {
+ attributesJson.put(AjaxAttributeName.CHANNEL.jsonName(), channel);
+ }
+
+ if (attributes.isPreventDefault())
+ {
+ attributesJson.put(AjaxAttributeName.IS_PREVENT_DEFAULT.jsonName(), true);
+ }
+
+ if (AjaxRequestAttributes.EventPropagation.STOP
+ .equals(attributes.getEventPropagation()))
+ {
+ attributesJson.put(AjaxAttributeName.EVENT_PROPAGATION.jsonName(), "stop");
+ }
+ else if (AjaxRequestAttributes.EventPropagation.STOP_IMMEDIATE.equals(attributes
+ .getEventPropagation()))
+ {
+ attributesJson.put(AjaxAttributeName.EVENT_PROPAGATION.jsonName(), "stopImmediate");
+ }
+
+ Duration requestTimeout = attributes.getRequestTimeout();
+ if (requestTimeout != null)
+ {
+ attributesJson.put(AjaxAttributeName.REQUEST_TIMEOUT.jsonName(),
+ requestTimeout.getMilliseconds());
+ }
+
+ boolean wicketAjaxResponse = attributes.isWicketAjaxResponse();
+ if (wicketAjaxResponse == false)
+ {
+ attributesJson.put(AjaxAttributeName.IS_WICKET_AJAX_RESPONSE.jsonName(), false);
+ }
+
+ String dataType = attributes.getDataType();
+ if (AjaxRequestAttributes.XML_DATA_TYPE.equals(dataType) == false)
+ {
+ attributesJson.put(AjaxAttributeName.DATATYPE.jsonName(), dataType);
+ }
+
+ ThrottlingSettings throttlingSettings = attributes.getThrottlingSettings();
+ if (throttlingSettings != null)
+ {
+ JSONObject throttlingSettingsJson = new JSONObject();
- throttlingSettingsJson.put(AjaxAttributeName.THROTTLING_ID.jsonName(),
- throttlingSettings.getId());
++ String throttleId = throttlingSettings.getId();
++ if (throttleId == null)
++ {
++ throttleId = component.getMarkupId();
++ }
++ throttlingSettingsJson.put(AjaxAttributeName.THROTTLING_ID.jsonName(), throttleId);
+ throttlingSettingsJson.put(AjaxAttributeName.THROTTLING_DELAY.jsonName(),
+ throttlingSettings.getDelay().getMilliseconds());
+ if (throttlingSettings.getPostponeTimerOnUpdate())
+ {
+ throttlingSettingsJson.put(
+ AjaxAttributeName.THROTTLING_POSTPONE_ON_UPDATE.jsonName(), true);
+ }
+ attributesJson.put(AjaxAttributeName.THROTTLING.jsonName(), throttlingSettingsJson);
+ }
+
+ postprocessConfiguration(behavior, attributesJson, component);
+ }
+ catch (JSONException e)
+ {
+ throw new WicketRuntimeException(e);
+ }
+
+ return attributesJson;
+ }
+
+ @Override
+ public void postprocessConfiguration(AbstractDefaultAjaxBehavior behavior, JSONObject attributesJson,
+ Component component) throws JSONException
+ {
+ behavior.postprocessConfiguration(attributesJson, component);
+ }
+
+ @Override
+ public CharSequence getCallbackScript(Component component, JSONObject ajaxAttributes)
+ {
+ return "Wicket.Ajax.ajax(" + ajaxAttributes + ");";
+ }
+
+ @Override
+ public CharSequence getCallbackFunction(AjaxRequestAttributes attributes, CallbackParameter... extraParameters)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("function (");
+ boolean first = true;
+ for (CallbackParameter curExtraParameter : extraParameters)
+ {
+ if (curExtraParameter.getFunctionParameterName() != null)
+ {
+ if (!first)
+ sb.append(',');
+ else
+ first = false;
+ sb.append(curExtraParameter.getFunctionParameterName());
+ }
+ }
+ sb.append(") {\n");
+ sb.append(getCallbackFunctionBody(attributes, extraParameters));
+ sb.append("}\n");
+ return sb;
+ }
+
+ @Override
+ public CharSequence getCallbackFunctionBody(AjaxRequestAttributes attributes, CallbackParameter... extraParameters)
+ {
+ attributes.setEventNames();
+ StringBuilder sb = new StringBuilder();
+ sb.append("var attrs = ");
+ sb.append(attributes);
+ sb.append(";\n");
+ sb.append("var params = {");
+ boolean first = true;
+ for (CallbackParameter curExtraParameter : extraParameters)
+ {
+ if (curExtraParameter.getAjaxParameterName() != null)
+ {
+ if (!first)
+ sb.append(',');
+ else
+ first = false;
+ sb.append('\'').append(curExtraParameter.getAjaxParameterName()).append("': ")
+ .append(curExtraParameter.getAjaxParameterCode());
+ }
+ }
+ sb.append("};\n");
+ if (attributes.getExtraParameters().isEmpty())
+ {
+ sb.append("attrs.").append(AjaxAttributeName.EXTRA_PARAMETERS).append(" = params;\n");
+ }
+ else
+ {
+ sb.append("attrs.").append(AjaxAttributeName.EXTRA_PARAMETERS).append(" = Wicket.merge(attrs.")
+ .append(AjaxAttributeName.EXTRA_PARAMETERS).append(", params);\n");
+ }
+ sb.append("Wicket.Ajax.ajax(attrs);\n");
+ return sb;
+ }
+
+ 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);
+ }
+ }
+
+}