You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/02/05 08:29:21 UTC

[2/3] git commit: WICKET-4946: allow passing paramters to Atmosphere JS

WICKET-4946: allow passing paramters to Atmosphere JS


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c24a561d
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c24a561d
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c24a561d

Branch: refs/heads/master
Commit: c24a561d5220a96f5bbac6af4393ed2478613331
Parents: 240fec3
Author: Emond Papegaaij <em...@topicus.nl>
Authored: Mon Feb 4 17:44:25 2013 +0100
Committer: Emond Papegaaij <em...@topicus.nl>
Committed: Tue Feb 5 08:28:43 2013 +0100

----------------------------------------------------------------------
 .../wicket/atmosphere/AtmosphereBehavior.java      |    2 +-
 .../org/apache/wicket/atmosphere/EventBus.java     |   14 +
 .../atmosphere/config/AtmosphereLogLevel.java      |   34 +
 .../wicket/atmosphere/config/AtmosphereMethod.java |   21 +
 .../atmosphere/config/AtmosphereParameters.java    |  667 +++++++++++++++
 .../atmosphere/config/AtmosphereTransport.java     |   35 +
 .../wicket/atmosphere/jquery.wicketatmosphere.js   |   10 +-
 7 files changed, 773 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index 862c300..c434ee9 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -201,7 +201,7 @@ public class AtmosphereBehavior extends Behavior
 			CoreLibrariesContributor.contributeAjax(component.getApplication(), response);
 
 			response.render(JavaScriptHeaderItem.forReference(JQueryWicketAtmosphereResourceReference.get()));
-			JSONObject options = new JSONObject();
+			JSONObject options = findEventBus().getParameters().toJSON();
 			options.put("url",
 				component.urlFor(this, IResourceListener.INTERFACE, new PageParameters())
 					.toString());

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index e9a3cd0..fe522ca 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -32,6 +32,7 @@ import org.apache.wicket.MetaDataKey;
 import org.apache.wicket.Page;
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
+import org.apache.wicket.atmosphere.config.AtmosphereParameters;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WicketFilter;
 import org.apache.wicket.request.Response;
@@ -99,6 +100,8 @@ public class EventBus implements UnboundListener
 
 	private List<ResourceRegistrationListener> registrationListeners = new CopyOnWriteArrayList<ResourceRegistrationListener>();
 
+	private AtmosphereParameters parameters = new AtmosphereParameters();
+
 	/**
 	 * Creates and registers an {@code EventBus} for the given application. The first broadcaster
 	 * returned by the {@code BroadcasterFactory} is used.
@@ -136,6 +139,17 @@ public class EventBus implements UnboundListener
 	}
 
 	/**
+	 * Returns the {@linkplain AtmosphereParameters paramters} that will be passed to the Atmosphere
+	 * JQuery plugin. You can change these parameters, for example to disable WebSockets.
+	 * 
+	 * @return The parameters.
+	 */
+	public AtmosphereParameters getParameters()
+	{
+		return parameters;
+	}
+
+	/**
 	 * Registers a page for the given tracking-id in the {@code EventBus}.
 	 * 
 	 * @param trackingId

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
new file mode 100644
index 0000000..31c500b
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereLogLevel.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.atmosphere.config;
+
+public enum AtmosphereLogLevel {
+	DEBUG("debug"), INFO("info"), ERROR("error");
+
+	private String name;
+
+	AtmosphereLogLevel(String name)
+	{
+		this.name = name;
+	}
+
+	@Override
+	public String toString()
+	{
+		return name;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
new file mode 100644
index 0000000..9258917
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereMethod.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.atmosphere.config;
+
+public enum AtmosphereMethod {
+	GET, PUT, POST, DELETE;
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereParameters.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereParameters.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereParameters.java
new file mode 100644
index 0000000..c72a796
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereParameters.java
@@ -0,0 +1,667 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.atmosphere.config;
+
+import java.util.List;
+
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+
+/**
+ * Contains the parameters passed to the Atmosphere JQuery plugin. See
+ * {@link "https://github.com/Atmosphere/atmosphere/wiki/jQuery.atmosphere.js-API"} for details.
+ * 
+ * @author papegaaij
+ */
+public class AtmosphereParameters
+{
+	private Integer connectTimeout;
+	private Integer reconnectInterval;
+	private Integer timeout;
+	private AtmosphereMethod method;
+	private List<String> headers;
+	private String contentType;
+	private String data;
+	private Boolean suspend;
+	private Integer maxRequest;
+	private Long maxStreamingLength;
+	private AtmosphereLogLevel logLevel;
+	private AtmosphereTransport transport = AtmosphereTransport.WEBSOCKET;
+	private AtmosphereTransport fallbackTransport;
+	private AtmosphereMethod fallbackMethod;
+	private String webSocketImpl;
+	private String webSocketUrl;
+	private String webSocketPathDelimiter;
+	private Boolean enableXDR;
+	private Boolean rewriteURL;
+	private Boolean attachHeadersAsQueryString;
+	private Boolean dropAtmosphereHeaders;
+	private Boolean executeCallbackBeforeReconnect;
+	private Boolean withCredentials;
+	private Boolean trackMessageLength = true;
+	private String messageDelimiter = "<|msg|>";
+	private Boolean shared;
+	private Boolean readResponsesHeaders;
+	private Integer maxReconnectOnClose;
+
+	/**
+	 * @return The connect timeout. If the client fail to connect, the fallbackTransport will be
+	 *         used.
+	 */
+	public Integer getConnectTimeout()
+	{
+		return connectTimeout;
+	}
+
+	/**
+	 * The connect timeout. If the client fail to connect, the fallbackTransport will be used.
+	 * 
+	 * @param connectTimeout
+	 */
+	public void setConnectTimeout(Integer connectTimeout)
+	{
+		this.connectTimeout = connectTimeout;
+	}
+
+	/**
+	 * @return The interval before an attempt to reconnect will be made.
+	 */
+	public Integer getReconnectInterval()
+	{
+		return reconnectInterval;
+	}
+
+	/**
+	 * The interval before an attempt to reconnect will be made.
+	 * 
+	 * @param reconnectInterval
+	 */
+	public void setReconnectInterval(Integer reconnectInterval)
+	{
+		this.reconnectInterval = reconnectInterval;
+	}
+
+	/**
+	 * @return The maximum time a connection stay opened when no message (or event) are sent or
+	 *         received.
+	 */
+	public Integer getTimeout()
+	{
+		return timeout;
+	}
+
+	/**
+	 * The maximum time a connection stay opened when no message (or event) are sent or received.
+	 * 
+	 * @param timeout
+	 */
+	public void setTimeout(Integer timeout)
+	{
+		this.timeout = timeout;
+	}
+
+	/**
+	 * @return The HTTP method to use.
+	 */
+	public AtmosphereMethod getMethod()
+	{
+		return method;
+	}
+
+	/**
+	 * The HTTP method to use.
+	 * 
+	 * @param method
+	 */
+	public void setMethod(AtmosphereMethod method)
+	{
+		this.method = method;
+	}
+
+	/**
+	 * @return A list of headers to send
+	 */
+	public List<String> getHeaders()
+	{
+		return headers;
+	}
+
+	/**
+	 * A list of headers to send
+	 * 
+	 * @param headers
+	 */
+	public void setHeaders(List<String> headers)
+	{
+		this.headers = headers;
+	}
+
+	/**
+	 * @return The request's content-type
+	 */
+	public String getContentType()
+	{
+		return contentType;
+	}
+
+	/**
+	 * The request's content-type
+	 * 
+	 * @param contentType
+	 */
+	public void setContentType(String contentType)
+	{
+		this.contentType = contentType;
+	}
+
+	/**
+	 * @return The request body (required when doing a POST or PUT)
+	 */
+	public String getData()
+	{
+		return data;
+	}
+
+	/**
+	 * The request body (required when doing a POST or PUT)
+	 * 
+	 * @param data
+	 */
+	public void setData(String data)
+	{
+		this.data = data;
+	}
+
+	/**
+	 * @return Suspend the request, always reconnect if the connection gets closed (for whatever
+	 *         reason), independently of the transport used.
+	 */
+	public Boolean getSuspend()
+	{
+		return suspend;
+	}
+
+	/**
+	 * Suspend the request, always reconnect if the connection gets closed (for whatever reason),
+	 * independently of the transport used.
+	 * 
+	 * @param suspend
+	 */
+	public void setSuspend(Boolean suspend)
+	{
+		this.suspend = suspend;
+	}
+
+	/**
+	 * @return The maximum number of requests that will be executed. Once the maximum gets reached,
+	 *         the connection will be closed.
+	 */
+	public Integer getMaxRequest()
+	{
+		return maxRequest;
+	}
+
+	/**
+	 * The maximum number of requests that will be executed. Once the maximum gets reached, the
+	 * connection will be closed.
+	 * 
+	 * @param maxRequest
+	 */
+	public void setMaxRequest(Integer maxRequest)
+	{
+		this.maxRequest = maxRequest;
+	}
+
+	/**
+	 * @return When the streaming transport is used, the maximum size of the body received. Once
+	 *         reached the connection will be closed and re-opened
+	 */
+	public Long getMaxStreamingLength()
+	{
+		return maxStreamingLength;
+	}
+
+	/**
+	 * When the streaming transport is used, the maximum size of the body received. Once reached the
+	 * connection will be closed and re-opened
+	 * 
+	 * @param maxStreamingLength
+	 */
+	public void setMaxStreamingLength(Long maxStreamingLength)
+	{
+		this.maxStreamingLength = maxStreamingLength;
+	}
+
+	/**
+	 * @return The log level. Value allowed are 'info', 'debug' and 'error'
+	 */
+	public AtmosphereLogLevel getLogLevel()
+	{
+		return logLevel;
+	}
+
+	/**
+	 * The log level. Value allowed are 'info', 'debug' and 'error'
+	 * 
+	 * @param logLevel
+	 */
+	public void setLogLevel(AtmosphereLogLevel logLevel)
+	{
+		this.logLevel = logLevel;
+	}
+
+	/**
+	 * @return The transport Atmosphere will use between the client and server. Allowed value are
+	 *         polling, long-polling, streaming, jsonp, sse and websocket
+	 */
+	public AtmosphereTransport getTransport()
+	{
+		return transport;
+	}
+
+	/**
+	 * The transport Atmosphere will use between the client and server. Allowed value are polling,
+	 * long-polling, streaming, jsonp, sse and websocket
+	 * 
+	 * @param transport
+	 */
+	public void setTransport(AtmosphereTransport transport)
+	{
+		this.transport = transport;
+	}
+
+	/**
+	 * @return If either the client or server isn't able to support the selected 'transport', the
+	 *         fallback value will be used. Allowed value are polling, long-polling, streaming,
+	 *         jsonp, sse and websocket
+	 */
+	public AtmosphereTransport getFallbackTransport()
+	{
+		return fallbackTransport;
+	}
+
+	/**
+	 * If either the client or server isn't able to support the selected 'transport', the fallback
+	 * value will be used. Allowed value are polling, long-polling, streaming, jsonp, sse and
+	 * websocket
+	 * 
+	 * @param fallbackTransport
+	 */
+	public void setFallbackTransport(AtmosphereTransport fallbackTransport)
+	{
+		this.fallbackTransport = fallbackTransport;
+	}
+
+	/**
+	 * @return Used when the fallbackTransport gets used.
+	 */
+	public AtmosphereMethod getFallbackMethod()
+	{
+		return fallbackMethod;
+	}
+
+	/**
+	 * Used when the fallbackTransport gets used.
+	 * 
+	 * @param fallbackMethod
+	 */
+	public void setFallbackMethod(AtmosphereMethod fallbackMethod)
+	{
+		this.fallbackMethod = fallbackMethod;
+	}
+
+	/**
+	 * @return The WebSocket API to use. As an example, you can use Flash WebSocket
+	 */
+	public String getWebSocketImpl()
+	{
+		return webSocketImpl;
+	}
+
+	/**
+	 * The WebSocket API to use. As an example, you can use Flash WebSocket
+	 * 
+	 * @param webSocketImpl
+	 */
+	public void setWebSocketImpl(String webSocketImpl)
+	{
+		this.webSocketImpl = webSocketImpl;
+	}
+
+	/**
+	 * @return The webSocketUrl appended to the request.data when defined
+	 */
+	public String getWebSocketUrl()
+	{
+		return webSocketUrl;
+	}
+
+	/**
+	 * The webSocketUrl appended to the request.data when defined. This is useful if the Atmosphere
+	 * Server Side Component is using a custom implementation of WebSocketProtocol implementation
+	 * and will be appended to WebSocket messages send to the server. The message will looks like:
+	 * 
+	 * <pre>
+	 * data = webSocketPathDelimiter + webSocketUrl + webSocketPathDelimiter + data;
+	 * </pre>
+	 * 
+	 * @param webSocketUrl
+	 */
+	public void setWebSocketUrl(String webSocketUrl)
+	{
+		this.webSocketUrl = webSocketUrl;
+	}
+
+	/**
+	 * @return The token delimiter used to wrap request.data when websockets messages are sent. This
+	 *         value is used with the webSocketUrl attribute.
+	 */
+	public String getWebSocketPathDelimiter()
+	{
+		return webSocketPathDelimiter;
+	}
+
+	/**
+	 * The token delimiter used to wrap request.data when websockets messages are sent. This value
+	 * is used with the webSocketUrl attribute.
+	 * 
+	 * @param webSocketPathDelimiter
+	 */
+	public void setWebSocketPathDelimiter(String webSocketPathDelimiter)
+	{
+		this.webSocketPathDelimiter = webSocketPathDelimiter;
+	}
+
+	/**
+	 * @return Enable CORS Cross Origin Resource Sharing.
+	 */
+	public Boolean getEnableXDR()
+	{
+		return enableXDR;
+	}
+
+	/**
+	 * Enable CORS Cross Origin Resource Sharing.
+	 * 
+	 * @param enableXDR
+	 */
+	public void setEnableXDR(Boolean enableXDR)
+	{
+		this.enableXDR = enableXDR;
+	}
+
+	/**
+	 * 
+	 * @return When enableXDR is set to true, the rewriteURL will be used to decide if the
+	 *         JSESSION_ID cookie be send to the remote server.
+	 */
+	public Boolean getRewriteURL()
+	{
+		return rewriteURL;
+	}
+
+	/**
+	 * When enableXDR is set to true, the rewriteURL will be used to decide if the JSESSION_ID
+	 * cookie be send to the remote server.
+	 * 
+	 * @param rewriteURL
+	 */
+	public void setRewriteURL(Boolean rewriteURL)
+	{
+		this.rewriteURL = rewriteURL;
+	}
+
+	/**
+	 * @return Pass all headers as query string.
+	 */
+	public Boolean getAttachHeadersAsQueryString()
+	{
+		return attachHeadersAsQueryString;
+	}
+
+	/**
+	 * Pass all headers as query string. Some browser only support the GET method with some
+	 * transport and prevent setting headers. As an example, the WebSocket API doesn't allow setting
+	 * headers, and instead the headers will be passed as a query string.
+	 * 
+	 * @param attachHeadersAsQueryString
+	 */
+	public void setAttachHeadersAsQueryString(Boolean attachHeadersAsQueryString)
+	{
+		this.attachHeadersAsQueryString = attachHeadersAsQueryString;
+	}
+
+	/**
+	 * @return Enable to drop the Atmosphere headers.
+	 */
+	public Boolean getDropAtmosphereHeaders()
+	{
+		return dropAtmosphereHeaders;
+	}
+
+	/**
+	 * By default Atmosphere adds headers like X-Atmosphere-Transport, X-Cache-Date etc. used by the
+	 * server to track the browser state. The same information is passed as a query string by
+	 * default (attachHeadersAsQueryString) so if you aren't planning to add any extra headers, set
+	 * that value to true and instead let the attachHeadersAsQueryString pass the same information.
+	 * Setting that value to true also facilitate CORS requests handling because no extra headers
+	 * are added.
+	 * 
+	 * @param dropAtmosphereHeaders
+	 */
+	public void setDropAtmosphereHeaders(Boolean dropAtmosphereHeaders)
+	{
+		this.dropAtmosphereHeaders = dropAtmosphereHeaders;
+	}
+
+	/**
+	 * @return Execute the request's callback before or after reconnecting again to the server.
+	 */
+	public Boolean getExecuteCallbackBeforeReconnect()
+	{
+		return executeCallbackBeforeReconnect;
+	}
+
+	/**
+	 * Execute the request's callback before or after reconnecting again to the server.
+	 * 
+	 * @param executeCallbackBeforeReconnect
+	 */
+	public void setExecuteCallbackBeforeReconnect(Boolean executeCallbackBeforeReconnect)
+	{
+		this.executeCallbackBeforeReconnect = executeCallbackBeforeReconnect;
+	}
+
+	/**
+	 * @return True when user credentials are to be included in a cross-origin request. False when
+	 *         they are to be excluded in a cross-origin request and when cookies are to be ignored
+	 *         in its response.
+	 */
+	public Boolean getWithCredentials()
+	{
+		return withCredentials;
+	}
+
+	/**
+	 * True when user credentials are to be included in a cross-origin request. False when they are
+	 * to be excluded in a cross-origin request and when cookies are to be ignored in its response.
+	 * 
+	 * @param withCredentials
+	 */
+	public void setWithCredentials(Boolean withCredentials)
+	{
+		this.withCredentials = withCredentials;
+	}
+
+	/**
+	 * @return Track the size of the received request.
+	 */
+	public Boolean getTrackMessageLength()
+	{
+		return trackMessageLength;
+	}
+
+	/**
+	 * Track the size of the received request. This attribute must be used with the help of the
+	 * Atmosphere's Server Side components called TrackMessageSizeFilter. When used, the server will
+	 * use the following protocol when sending messages back to the client
+	 * 
+	 * <pre>
+	 * {@literal
+	 * <message-length><message-delimiter> message <message-delimiter>}
+	 * </pre>
+	 * 
+	 * This attribute is useful when your server side component send large chunked message. Using
+	 * the trackMessageLength, the client will make sure the message has been fully received before
+	 * invoking the callback. If not set, the callback might be invoked with partial message.
+	 * 
+	 * @param trackMessageLength
+	 */
+	public void setTrackMessageLength(Boolean trackMessageLength)
+	{
+		this.trackMessageLength = trackMessageLength;
+	}
+
+	/**
+	 * 
+	 * @return The token that delimit the message when the trackMessageLength attribute is used.
+	 */
+	public String getMessageDelimiter()
+	{
+		return messageDelimiter;
+	}
+
+	/**
+	 * The token that delimit the message when the trackMessageLength attribute is used.
+	 * 
+	 * @param messageDelimiter
+	 */
+	public void setMessageDelimiter(String messageDelimiter)
+	{
+		this.messageDelimiter = messageDelimiter;
+	}
+
+	/**
+	 * @return When set to true, Atmospere will share a connection between different browser tabs
+	 *         and windows. Otherwise, a new connection will be established for each tab/window.
+	 */
+	public Boolean getShared()
+	{
+		return shared;
+	}
+
+	/**
+	 * When set to true, Atmospere will share a connection between different browser tabs and
+	 * windows. Otherwise, a new connection will be established for each tab/window.
+	 * 
+	 * @param shared
+	 */
+	public void setShared(Boolean shared)
+	{
+		this.shared = shared;
+	}
+
+	/**
+	 * @return *undocumented*
+	 */
+	public Boolean getReadResponsesHeaders()
+	{
+		return readResponsesHeaders;
+	}
+
+	/**
+	 * *undocumented*
+	 * 
+	 * @param readResponsesHeaders
+	 */
+	public void setReadResponsesHeaders(Boolean readResponsesHeaders)
+	{
+		this.readResponsesHeaders = readResponsesHeaders;
+	}
+
+	/**
+	 * 
+	 * @return *undocumented*
+	 */
+	public Integer getMaxReconnectOnClose()
+	{
+		return maxReconnectOnClose;
+	}
+
+	/**
+	 * *undocumented*
+	 * 
+	 * @param maxReconnectOnClose
+	 */
+	public void setMaxReconnectOnClose(Integer maxReconnectOnClose)
+	{
+		this.maxReconnectOnClose = maxReconnectOnClose;
+	}
+
+	/**
+	 * Transforms the paramters into a JSON object.
+	 * 
+	 * @return A JSON object with all set paramters.
+	 */
+	public JSONObject toJSON()
+	{
+		try
+		{
+			JSONObject ret = new JSONObject();
+			ret.put("connectTimeout", getConnectTimeout());
+			ret.put("reconnectInterval", getReconnectInterval());
+			ret.put("timeout", getTimeout());
+			if (getMethod() != null)
+				ret.put("method", getMethod().toString());
+			if (getHeaders() != null)
+				ret.put("headers", getHeaders());
+			ret.put("contentType", getContentType());
+			ret.put("data", getData());
+			ret.put("suspend", getSuspend());
+			ret.put("maxRequest", getMaxRequest());
+			ret.put("maxStreamingLength", getMaxStreamingLength());
+			if (getLogLevel() != null)
+				ret.put("logLevel", getLogLevel().toString());
+			if (getTransport() != null)
+				ret.put("transport", getTransport().toString());
+			if (getFallbackTransport() != null)
+				ret.put("fallbackTransport", getFallbackTransport().toString());
+			if (getFallbackMethod() != null)
+				ret.put("fallbackMethod", getFallbackMethod().toString());
+			ret.put("webSocketImpl", getWebSocketImpl());
+			ret.put("webSocketUrl", getWebSocketUrl());
+			ret.put("webSocketPathDelimiter", getWebSocketPathDelimiter());
+			ret.put("enableXDR", getEnableXDR());
+			ret.put("rewriteURL", getRewriteURL());
+			ret.put("attachHeadersAsQueryString", getAttachHeadersAsQueryString());
+			ret.put("dropAtmosphereHeaders", getDropAtmosphereHeaders());
+			ret.put("executeCallbackBeforeReconnect", getExecuteCallbackBeforeReconnect());
+			ret.put("withCredentials", getWithCredentials());
+			ret.put("trackMessageLength", getTrackMessageLength());
+			ret.put("messageDelimiter", getMessageDelimiter());
+			ret.put("shared", getShared());
+			ret.put("readResponsesHeaders", getReadResponsesHeaders());
+			ret.put("maxReconnectOnClose", getMaxReconnectOnClose());
+			return ret;
+		}
+		catch (JSONException e)
+		{
+			throw new WicketRuntimeException(e);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
new file mode 100644
index 0000000..f908e20
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/config/AtmosphereTransport.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.atmosphere.config;
+
+public enum AtmosphereTransport {
+	POLLING("polling"), LONG_POLLING("long-polling"), STREAMING("streaming"), JSONP("jsonp"), SSE(
+		"sse"), WEBSOCKET("websocket");
+
+	private String name;
+
+	AtmosphereTransport(String name)
+	{
+		this.name = name;
+	}
+
+	@Override
+	public String toString()
+	{
+		return name;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/c24a561d/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js
index 2751084..faa3cd6 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js
@@ -35,15 +35,7 @@
 		}
 
 		var connectedEndpoint = $.atmosphere.subscribe(params.url,
-				!callbackAdded ? callback : null, $.atmosphere.request = {
-					logLevel : "debug",
-					transport : "websocket",
-					// transport : "streaming",
-					// transport : "long-polling",
-					trackMessageLength : true,
-					messageDelimiter: "<|msg|>",
-					maxRequests : 100000
-				});
+				!callbackAdded ? callback : null, $.atmosphere.request = params);
 		callbackAdded = true;
 		response = $.atmosphere.response;