You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by re...@apache.org on 2020/02/22 09:27:35 UTC

[wicket] 01/01: [NO_ISSUE] roll an abstract class that contains common functionality for AJAX and Web-socket request handlers

This is an automated email from the ASF dual-hosted git repository.

reiern70 pushed a commit to branch improvement/reiern70/remove-duplication-on-super-classes-of-IPartialRequestHandler
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 2dc9bd121c62aab1b742e55ce9c2675a8439f6df
Author: reiern70 <re...@gmail.com>
AuthorDate: Sat Feb 22 11:27:20 2020 +0200

    [NO_ISSUE] roll an abstract class that contains common functionality for AJAX and Web-socket request handlers
---
 .../org/apache/wicket/ajax/AjaxRequestHandler.java | 127 ++---------------
 .../handler/AbstractPartialPageRequestHandler.java | 155 +++++++++++++++++++++
 .../protocol/ws/api/WebSocketRequestHandler.java   | 121 +---------------
 3 files changed, 171 insertions(+), 232 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
index 230aead..bf64a80 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
@@ -26,8 +26,8 @@ import java.util.Set;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
+import org.apache.wicket.core.request.handler.AbstractPartialPageRequestHandler;
 import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.core.request.handler.logger.PageLogData;
@@ -42,7 +42,6 @@ import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.response.StringResponse;
 import org.apache.wicket.response.filter.IResponseFilter;
 import org.apache.wicket.util.encoding.UrlDecoder;
@@ -50,8 +49,6 @@ import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Classes;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.visit.IVisit;
-import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * A request target that produces ajax response envelopes used on the client side to update
@@ -80,7 +77,7 @@ import org.apache.wicket.util.visit.IVisitor;
  * @author Igor Vaynberg (ivaynberg)
  * @author Eelco Hillenius
  */
-public class AjaxRequestHandler implements AjaxRequestTarget
+public class AjaxRequestHandler extends AbstractPartialPageRequestHandler implements AjaxRequestTarget
 {
 	/**
 	 * Collector of page updates.
@@ -97,9 +94,6 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	protected transient boolean respondersFrozen;
 	protected transient boolean listenersFrozen;
 
-	/** The associated Page */
-	private final Page page;
-
 	private PageLogData logData;
 
 	/**
@@ -110,7 +104,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	 */
 	public AjaxRequestHandler(final Page page)
 	{
-		this.page = Args.notNull(page, "page");
+		super(page);
 
 		update = new XmlPartialPageUpdate(page)
 		{
@@ -172,15 +166,6 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 		};
 	}
 
-	/**
-	 * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPage()
-	 */
-	@Override
-	public Page getPage()
-	{
-		return page;
-	}
-
 	@Override
 	public void addListener(AjaxRequestTarget.IListener listener) throws IllegalStateException
 	{
@@ -199,44 +184,9 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	}
 
 	@Override
-	public final void addChildren(MarkupContainer parent, Class<?> childCriteria)
+	public PartialPageUpdate getUpdate()
 	{
-		Args.notNull(parent, "parent");
-		Args.notNull(childCriteria, "childCriteria");
-
-		parent.visitChildren(childCriteria, new IVisitor<Component, Void>()
-		{
-			@Override
-			public void component(final Component component, final IVisit<Void> visit)
-			{
-				add(component);
-				visit.dontGoDeeper();
-			}
-		});
-	}
-
-	@Override
-	public void add(Component... components)
-	{
-		for (final Component component : components)
-		{
-			Args.notNull(component, "component");
-
-			if (component.getOutputMarkupId() == false && !(component instanceof Page))
-			{
-				throw new IllegalArgumentException(
-					"Cannot update component that does not have setOutputMarkupId property set to true. Component: " +
-						component.toString());
-			}
-
-			add(component, component.getMarkupId());
-		}
-	}
-
-	@Override
-	public void add(Component component, String markupId)
-	{
-		update.add(component, markupId);
+		return update;
 	}
 
 	@Override
@@ -245,25 +195,6 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 		return update.getComponents();
 	}
 
-	@Override
-	public final void focusComponent(Component component)
-	{
-		if (component != null && component.getOutputMarkupId() == false)
-		{
-			throw new IllegalArgumentException(
-				"cannot update component that does not have setOutputMarkupId property set to true. Component: " +
-					component.toString());
-		}
-		final String id = component != null ? ("'" + component.getMarkupId() + "'") : "null";
-		appendJavaScript("Wicket.Focus.setFocusOnId(" + id + ");");
-	}
-
-	@Override
-	public final void appendJavaScript(CharSequence javascript)
-	{
-		update.appendJavaScript(javascript);
-	}
-
 	/**
 	 * @see org.apache.wicket.core.request.handler.IPageRequestHandler#detach(org.apache.wicket.request.IRequestCycle)
 	 */
@@ -272,7 +203,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	{
 		if (logData == null)
 		{
-			logData = new PageLogData(page);
+			logData = new PageLogData(getPage());
 		}
 
 		update.detach(requestCycle);
@@ -304,12 +235,6 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	}
 
 	@Override
-	public final void prependJavaScript(CharSequence javascript)
-	{
-		update.prependJavaScript(javascript);
-	}
-
-	@Override
 	public void registerRespondListener(ITargetRespondListener listener)
 	{
 		assertRespondersNotFrozen();
@@ -325,6 +250,8 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 		final RequestCycle rc = (RequestCycle)requestCycle;
 		final WebResponse response = (WebResponse)requestCycle.getResponse();
 
+		Page page = getPage();
+
 		if (shouldRedirectToPage(requestCycle))
 		{
 			// the page itself has been added to the request target, we simply issue a redirect
@@ -414,19 +341,13 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 		return "[AjaxRequestHandler@" + hashCode() + " responseObject [" + update + "]";
 	}
 
-	@Override
-	public IHeaderResponse getHeaderResponse()
-	{
-		return update.getHeaderResponse();
-	}
-
 	/**
 	 * @return the markup id of the focused element in the browser
 	 */
 	@Override
 	public String getLastFocusedElementId()
 	{
-		WebRequest request = (WebRequest)page.getRequest();
+		WebRequest request = (WebRequest)getPage().getRequest();
 
 		String id = request.getHeader("Wicket-FocusedElementId");
 		
@@ -435,36 +356,6 @@ public class AjaxRequestHandler implements AjaxRequestTarget
 	}
 
 	@Override
-	public Class<? extends IRequestablePage> getPageClass()
-	{
-		return page.getPageClass();
-	}
-
-	@Override
-	public Integer getPageId()
-	{
-		return page.getPageId();
-	}
-
-	@Override
-	public PageParameters getPageParameters()
-	{
-		return page.getPageParameters();
-	}
-
-	@Override
-	public final boolean isPageInstanceCreated()
-	{
-		return true;
-	}
-
-	@Override
-	public final Integer getRenderCount()
-	{
-		return page.getRenderCount();
-	}
-
-	@Override
 	public PageLogData getLogData()
 	{
 		return logData;
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandler.java
new file mode 100644
index 0000000..14d8358
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandler.java
@@ -0,0 +1,155 @@
+/*
+ * 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.core.request.handler;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.page.PartialPageUpdate;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
+
+/**
+ * Abstract  {@link IPartialPageRequestHandler} that implements common methods for Ajax and Web-sockets
+ * specializations of {@link IPartialPageRequestHandler}
+ */
+public abstract class AbstractPartialPageRequestHandler implements IPartialPageRequestHandler
+{
+    /** The associated Page */
+    private final Page page;
+
+    protected AbstractPartialPageRequestHandler(Page page) {
+        this.page = Args.notNull(page, "page");
+    }
+
+    @Override
+    public final void addChildren(MarkupContainer parent, Class<?> childCriteria)
+    {
+        Args.notNull(parent, "parent");
+        Args.notNull(childCriteria, "childCriteria");
+
+        parent.visitChildren(childCriteria, new IVisitor<Component, Void>()
+        {
+            @Override
+            public void component(final Component component, final IVisit<Void> visit)
+            {
+                add(component);
+                visit.dontGoDeeper();
+            }
+        });
+    }
+
+    @Override
+    public final void add(Component... components)
+    {
+        for (final Component component : components)
+        {
+            Args.notNull(component, "component");
+
+            if (component.getOutputMarkupId() == false)
+            {
+                throw new IllegalArgumentException(
+                        "cannot update component that does not have setOutputMarkupId property set to true. Component: " +
+                                component.toString());
+            }
+
+            add(component, component.getMarkupId());
+        }
+    }
+
+    @Override
+    public final Integer getPageId()
+    {
+        return page.getPageId();
+    }
+
+    @Override
+    public final Integer getRenderCount()
+    {
+        return page.getRenderCount();
+    }
+
+    @Override
+    public final PageParameters getPageParameters()
+    {
+        return page.getPageParameters();
+    }
+
+    @Override
+    public final void add(Component component, String markupId)
+    {
+        getUpdate().add(component, markupId);
+    }
+
+    @Override
+    public final void prependJavaScript(CharSequence javascript)
+    {
+        getUpdate().prependJavaScript(javascript);
+    }
+
+    @Override
+    public final void appendJavaScript(CharSequence javascript)
+    {
+        getUpdate().appendJavaScript(javascript);
+    }
+
+    @Override
+    public final void focusComponent(Component component)
+    {
+        if (component != null && component.getOutputMarkupId() == false)
+        {
+            throw new IllegalArgumentException(
+                    "cannot update component that does not have setOutputMarkupId property set to true. Component: " +
+                            component.toString());
+        }
+        final String id = component != null ? ("'" + component.getMarkupId() + "'") : "null";
+        appendJavaScript("Wicket.Focus.setFocusOnId(" + id + ");");
+    }
+
+    @Override
+    public final boolean isPageInstanceCreated()
+    {
+        return true;
+    }
+
+    @Override
+    public final IHeaderResponse getHeaderResponse()
+    {
+        return getUpdate().getHeaderResponse();
+    }
+
+    protected abstract PartialPageUpdate getUpdate();
+
+    /**
+     * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPage()
+     */
+    @Override
+    public final Page getPage()
+    {
+        return page;
+    }
+
+    @Override
+    public final Class<? extends IRequestablePage> getPageClass()
+    {
+        return page.getPageClass();
+    }
+}
diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
index 641844f..7df3735 100644
--- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
+++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/WebSocketRequestHandler.java
@@ -21,8 +21,8 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
+import org.apache.wicket.core.request.handler.AbstractPartialPageRequestHandler;
 import org.apache.wicket.core.request.handler.logger.PageLogData;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.page.PartialPageUpdate;
@@ -32,8 +32,6 @@ import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.visit.IVisit;
-import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,11 +40,10 @@ import org.slf4j.LoggerFactory;
  *
  * @since 6.0
  */
-public class WebSocketRequestHandler implements IWebSocketRequestHandler
+public class WebSocketRequestHandler extends AbstractPartialPageRequestHandler implements IWebSocketRequestHandler
 {
 	private static final Logger LOG = LoggerFactory.getLogger(WebSocketRequestHandler.class);
 
-	private final Page page;
 
 	private final IWebSocketConnection connection;
 
@@ -56,7 +53,7 @@ public class WebSocketRequestHandler implements IWebSocketRequestHandler
 
 	public WebSocketRequestHandler(final Component component, final IWebSocketConnection connection)
 	{
-		this.page = Args.notNull(component, "component").getPage();
+		super(Args.notNull(component, "component").getPage());
 		this.connection = Args.notNull(connection, "connection");
 	}
 
@@ -100,65 +97,15 @@ public class WebSocketRequestHandler implements IWebSocketRequestHandler
 		}
 	}
 
-	@Override
-	public void add(Component component, String markupId)
-	{
-		getUpdate().add(component, markupId);
-	}
 
-	private PartialPageUpdate getUpdate() {
+
+	protected PartialPageUpdate getUpdate() {
 		if (update == null) {
-			update = new XmlPartialPageUpdate(page);
+			update = new XmlPartialPageUpdate(getPage());
 		}
 		return update;
 	}
 
-	@Override
-	public void add(Component... components)
-	{
-		for (final Component component : components)
-		{
-			Args.notNull(component, "component");
-
-			if (component.getOutputMarkupId() == false)
-			{
-				throw new IllegalArgumentException(
-						"cannot update component that does not have setOutputMarkupId property set to true. Component: " +
-								component.toString());
-			}
-
-			add(component, component.getMarkupId());
-		}
-	}
-
-	@Override
-	public final void addChildren(MarkupContainer parent, Class<?> childCriteria)
-	{
-		Args.notNull(parent, "parent");
-		Args.notNull(childCriteria, "childCriteria");
-
-		parent.visitChildren(childCriteria, new IVisitor<Component, Void>()
-		{
-			@Override
-			public void component(final Component component, final IVisit<Void> visit)
-			{
-				add(component);
-				visit.dontGoDeeper();
-			}
-		});
-	}
-
-	@Override
-	public void appendJavaScript(CharSequence javascript)
-	{
-		getUpdate().appendJavaScript(javascript);
-	}
-
-	@Override
-	public void prependJavaScript(CharSequence javascript)
-	{
-		getUpdate().prependJavaScript(javascript);
-	}
 
 	@Override
 	public Collection<? extends Component> getComponents()
@@ -171,65 +118,11 @@ public class WebSocketRequestHandler implements IWebSocketRequestHandler
 	}
 
 	@Override
-	public final void focusComponent(Component component)
-	{
-		if (component != null && component.getOutputMarkupId() == false)
-		{
-			throw new IllegalArgumentException(
-					"cannot update component that does not have setOutputMarkupId property set to true. Component: " +
-							component.toString());
-		}
-		final String id = component != null ? ("'" + component.getMarkupId() + "'") : "null";
-		appendJavaScript("Wicket.Focus.setFocusOnId(" + id + ");");
-	}
-
-	@Override
-	public IHeaderResponse getHeaderResponse()
-	{
-		return getUpdate().getHeaderResponse();
-	}
-
-	@Override
-	public Page getPage()
-	{
-		return page;
-	}
-
-	@Override
-	public Integer getPageId()
-	{
-		return page.getPageId();
-	}
-
-	@Override
-	public boolean isPageInstanceCreated()
-	{
-		return true;
-	}
-
-	@Override
-	public Integer getRenderCount()
-	{
-		return page.getRenderCount();
-	}
-
-	@Override
 	public ILogData getLogData()
 	{
 		return logData;
 	}
 
-	@Override
-	public Class<? extends IRequestablePage> getPageClass()
-	{
-		return page.getPageClass();
-	}
-
-	@Override
-	public PageParameters getPageParameters()
-	{
-		return page.getPageParameters();
-	}
 
 	@Override
 	public void respond(IRequestCycle requestCycle)
@@ -245,7 +138,7 @@ public class WebSocketRequestHandler implements IWebSocketRequestHandler
 	{
 		if (logData == null)
 		{
-			logData = new PageLogData(page);
+			logData = new PageLogData(getPage());
 		}
 
 		if (update != null) {