diff options
author | Juan G | 2016-01-23 12:56:09 +0000 |
---|---|---|
committer | Raymond Auge | 2016-01-29 14:45:30 +0000 |
commit | 2fc142b66c4dc6abf871cfec67768646cb3cd2bb (patch) | |
tree | f427eca4d95868b203bbd40f7b6f0a465aba4dd3 | |
parent | 5841cbadc941eb9c1cca822132a4109da5db932b (diff) | |
download | rt.equinox.bundles-2fc142b66c4dc6abf871cfec67768646cb3cd2bb.tar.gz rt.equinox.bundles-2fc142b66c4dc6abf871cfec67768646cb3cd2bb.tar.xz rt.equinox.bundles-2fc142b66c4dc6abf871cfec67768646cb3cd2bb.zip |
Bug 486412 - [http whiteboard] Implement equals and hashCode methods so object comparisons give the right result
Signed-off-by: Juan Gonzalez <juan.gonzalez@liferay.com>
3 files changed, 62 insertions, 1 deletions
diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java index c02966ded..3cfe72899 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/ServletTest.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Raymond Augé <raymond.auge@liferay.com> - Bug 436698 + * Juan Gonzalez <juan.gonzalez@liferay.com> - Bug 486412 *******************************************************************************/ package org.eclipse.equinox.http.servlet.tests; @@ -2693,7 +2694,25 @@ public class ServletTest extends TestCase { } } } - + + public void test_Listener10() throws Exception { + BaseServletContextListener scl1 = + new BaseServletContextListener(); + + Dictionary<String, String> listenerProps = new Hashtable<String, String>(); + listenerProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER, "true"); + ServiceRegistration<ServletContextListener> registration = getBundleContext().registerService(ServletContextListener.class, scl1, listenerProps); + registration.unregister(); + + ServletContext servletContext = scl1.servletContext; + Assert.assertNotNull(servletContext); + int hashCode = servletContext.hashCode(); + + Assert.assertTrue(servletContext.equals(servletContext)); + + Assert.assertEquals(hashCode, servletContext.hashCode()); + } + public void test_Async1() throws Exception { Servlet s1 = new BaseAsyncServlet("test_Listener8"); diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/util/BaseServletContextListener.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/util/BaseServletContextListener.java index f5bdfa8e4..4f42686e7 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/util/BaseServletContextListener.java +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/util/BaseServletContextListener.java @@ -13,6 +13,7 @@ package org.eclipse.equinox.http.servlet.tests.util; import java.util.concurrent.atomic.AtomicBoolean; +import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -23,6 +24,7 @@ public class BaseServletContextListener implements ServletContextListener { public AtomicBoolean initialized = new AtomicBoolean(false); public AtomicBoolean destroyed = new AtomicBoolean(false); + public ServletContext servletContext; @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { @@ -32,6 +34,7 @@ public class BaseServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { initialized.set(true); + servletContext = servletContextEvent.getServletContext(); } }
\ No newline at end of file diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/servlet/ServletContextAdaptor.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/servlet/ServletContextAdaptor.java index 81b4e81be..1e65de97d 100644 --- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/servlet/ServletContextAdaptor.java +++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/servlet/ServletContextAdaptor.java @@ -9,6 +9,7 @@ * Cognos Incorporated - initial API and implementation * IBM Corporation - bug fixes and enhancements * Raymond Augé <raymond.auge@liferay.com> - Bug 436698 + * Juan Gonzalez <juan.gonzalez@liferay.com> - Bug 486412 *******************************************************************************/ package org.eclipse.equinox.http.servlet.internal.servlet; @@ -54,6 +55,19 @@ public class ServletContextAdaptor { } } + try { + Method equalsMethod = Object.class.getMethod("equals", Object.class); //$NON-NLS-1$ + Method equalsHandlerMethod = ServletContextAdaptor.class.getMethod("equals", Object.class); //$NON-NLS-1$ + methods.put(equalsMethod, equalsHandlerMethod); + + Method hashCodeMethod = Object.class.getMethod("hashCode", (Class<?>[])null); //$NON-NLS-1$ + Method hashCodeHandlerMethod = ServletContextAdaptor.class.getMethod("hashCode", (Class<?>[])null); //$NON-NLS-1$ + methods.put(hashCodeMethod, hashCodeHandlerMethod); + } + catch (NoSuchMethodException e) { + // do nothing + } + return methods; } @@ -87,6 +101,21 @@ public class ServletContextAdaptor { curClassLoader, interfaces, invocationHandler); } + public boolean equals (Object obj) { + if (obj == null) { + return false; + } + + if (!(obj instanceof ServletContext)) { + return false; + } + + ServletContext servletContextObj = (ServletContext) obj; + + return (classLoader.equals(servletContextObj.getClassLoader()) && + getServletContextName().equals(servletContextObj.getServletContextName())); + } + public ClassLoader getClassLoader() { return classLoader; } @@ -244,6 +273,16 @@ public class ServletContextAdaptor { return contextController.getContextName(); } + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((classLoader == null) ? 0 : classLoader.hashCode()); + result = prime * result + + ((contextName == null) ? 0 : contextName.hashCode()); + return result; + } + public void removeAttribute(String attributeName) { Dictionary<String, Object> attributes = getContextAttributes(); Object attributeValue = attributes.remove(attributeName); |