Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-05-25 06:42:25 +0000
committerEike Stepper2008-05-25 06:42:25 +0000
commit950c53056cf1f6e316979f33cf1779fdb26a21d3 (patch)
tree1c669feaab33d037cce606f27942829be1c1b0b2 /plugins/org.eclipse.net4j.http/src/org
parentf12610fcdb199cfeb16de0068d3788a2bc607cb9 (diff)
downloadcdo-950c53056cf1f6e316979f33cf1779fdb26a21d3.tar.gz
cdo-950c53056cf1f6e316979f33cf1779fdb26a21d3.tar.xz
cdo-950c53056cf1f6e316979f33cf1779fdb26a21d3.zip
[232648] Provide an HTTPConnector
https://bugs.eclipse.org/bugs/show_bug.cgi?id=232648
Diffstat (limited to 'plugins/org.eclipse.net4j.http/src/org')
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/HTTPUtil.java9
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/IHTTPAcceptor.java2
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPAcceptor.java25
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPConnectorFactory.java58
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/Net4jTransportServlet.java45
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/RandomizerInjector.java47
-rw-r--r--plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/tests/HTTPTest.java46
7 files changed, 174 insertions, 58 deletions
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/HTTPUtil.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/HTTPUtil.java
index d466a3b032..25a09f2c3b 100644
--- a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/HTTPUtil.java
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/HTTPUtil.java
@@ -12,6 +12,7 @@ package org.eclipse.net4j.http;
import org.eclipse.net4j.internal.http.HTTPAcceptorFactory;
import org.eclipse.net4j.internal.http.HTTPConnectorFactory;
+import org.eclipse.net4j.internal.http.RandomizerInjector;
import org.eclipse.net4j.util.container.IManagedContainer;
/**
@@ -27,16 +28,18 @@ public final class HTTPUtil
{
container.registerFactory(new HTTPAcceptorFactory());
container.registerFactory(new HTTPConnectorFactory());
+ container.addPostProcessor(new RandomizerInjector());
}
public static IHTTPAcceptor getAcceptor(IManagedContainer container, String description)
{
- return (IHTTPAcceptor)container.getElement(HTTPAcceptorFactory.PRODUCT_GROUP, HTTPAcceptorFactory.TYPE, description);
+ return (IHTTPAcceptor)container
+ .getElement(HTTPAcceptorFactory.PRODUCT_GROUP, HTTPAcceptorFactory.TYPE, description);
}
public static IHTTPConnector getConnector(IManagedContainer container, String description)
{
- return (IHTTPConnector)container
- .getElement(HTTPConnectorFactory.PRODUCT_GROUP, HTTPConnectorFactory.TYPE, description);
+ return (IHTTPConnector)container.getElement(HTTPConnectorFactory.PRODUCT_GROUP, HTTPConnectorFactory.TYPE,
+ description);
}
}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/IHTTPAcceptor.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/IHTTPAcceptor.java
index b11f9365b0..9f761b21c6 100644
--- a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/IHTTPAcceptor.java
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/http/IHTTPAcceptor.java
@@ -18,4 +18,6 @@ import org.eclipse.net4j.acceptor.IAcceptor;
public interface IHTTPAcceptor extends IAcceptor
{
public INet4jTransportServlet getServlet();
+
+ public void setServlet(INet4jTransportServlet servlet);
}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPAcceptor.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPAcceptor.java
index 8f957afa8f..0a169dd371 100644
--- a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPAcceptor.java
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPAcceptor.java
@@ -54,7 +54,13 @@ public class HTTPAcceptor extends Acceptor implements IHTTPAcceptor, INet4jTrans
public void setServlet(INet4jTransportServlet servlet)
{
+ if (this.servlet != null)
+ {
+ this.servlet.setRequestHandler(null);
+ }
+
this.servlet = servlet;
+ servlet.setRequestHandler(this);
}
public int getConnectorIDLength()
@@ -95,22 +101,7 @@ public class HTTPAcceptor extends Acceptor implements IHTTPAcceptor, INet4jTrans
protected void doBeforeActivate() throws Exception
{
super.doBeforeActivate();
- checkArg(randomizer, "randomizer == null");
- checkArg(servlet, "servlet == null");
- checkArg(connectorIDLength > 0, "Constraint violated: connectorIDLength > 0");
- }
-
- @Override
- protected void doActivate() throws Exception
- {
- super.doActivate();
- servlet.setRequestHandler(this);
- }
-
- @Override
- protected void doDeactivate() throws Exception
- {
- servlet.setRequestHandler(null);
- super.doDeactivate();
+ checkState(randomizer, "randomizer");
+ checkState(connectorIDLength > 0, "Constraint violated: connectorIDLength > 0");
}
}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPConnectorFactory.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPConnectorFactory.java
index a54f60b4a1..a37fcc8c1c 100644
--- a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPConnectorFactory.java
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/HTTPConnectorFactory.java
@@ -12,6 +12,9 @@ package org.eclipse.net4j.internal.http;
import org.eclipse.internal.net4j.connector.ConnectorFactory;
+import java.net.MalformedURLException;
+import java.net.URL;
+
/**
* @author Eike Stepper
*/
@@ -19,8 +22,6 @@ public class HTTPConnectorFactory extends ConnectorFactory
{
public static final String TYPE = "http";
- private static final String URL_SCHEME = "http://";
-
public HTTPConnectorFactory()
{
super(TYPE);
@@ -28,50 +29,31 @@ public class HTTPConnectorFactory extends ConnectorFactory
public HTTPClientConnector create(String description)
{
- // try
- // {
- // URL url = new URL(URL_SCHEME + description);
- // String userID = url.getUserInfo();
- // String host = url.getHost();
- // int port = url.getPort();
- // if (port == -1)
- // {
- // port = IHTTPConnector.DEFAULT_PORT;
- // }
+ String userID = null;
+ try
+ {
+ URL url = new URL(description);
+ userID = url.getUserInfo();
+ }
+ catch (MalformedURLException ex)
+ {
+ ex.printStackTrace();
+ }
HTTPClientConnector connector = new HTTPClientConnector();
- // connector.setUserID(userID);
- // connector.setHost(host);
- // connector.setPort(port);
+ connector.setURL(description);
+ connector.setUserID(userID);
return connector;
- // }
- // catch (MalformedURLException ex)
- // {
- // throw new ProductCreationException(ex);
- // }
}
@Override
public String getDescriptionFor(Object object)
{
- // if (object instanceof HTTPClientConnector)
- // {
- // HTTPClientConnector connector = (HTTPClientConnector)object;
- // String description = connector.getHost();
- // String userID = connector.getUserID();
- // if (!StringUtil.isEmpty(userID))
- // {
- // description = userID + "@" + description;
- // }
- //
- // int port = connector.getPort();
- // if (port != IHTTPConnector.DEFAULT_PORT)
- // {
- // description = description + ":" + port;
- // }
- //
- // return description;
- // }
+ if (object instanceof HTTPClientConnector)
+ {
+ HTTPClientConnector connector = (HTTPClientConnector)object;
+ return connector.getURL();
+ }
return null;
}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/Net4jTransportServlet.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/Net4jTransportServlet.java
index d153ec5eba..bff0746066 100644
--- a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/Net4jTransportServlet.java
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/Net4jTransportServlet.java
@@ -11,9 +11,12 @@
package org.eclipse.net4j.internal.http;
import org.eclipse.net4j.http.INet4jTransportServlet;
+import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+import org.eclipse.internal.net4j.acceptor.AcceptorFactory;
+
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
@@ -89,4 +92,46 @@ public class Net4jTransportServlet extends HttpServlet implements INet4jTranspor
String connectorID = requestHandler.connectRequested(userID);
out.writeString(connectorID);
}
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class ContainerAware extends Net4jTransportServlet
+ {
+ private static final String ACCEPTORS_GROUP = AcceptorFactory.PRODUCT_GROUP;
+
+ private static final String HTTP_TYPE = HTTPAcceptorFactory.TYPE;
+
+ private static final long serialVersionUID = 1L;
+
+ private HTTPAcceptor acceptor;
+
+ public ContainerAware()
+ {
+ }
+
+ @Override
+ public void init() throws ServletException
+ {
+ super.init();
+
+ acceptor = (HTTPAcceptor)IPluginContainer.INSTANCE.getElement(ACCEPTORS_GROUP, HTTP_TYPE, null);
+ if (acceptor == null)
+ {
+ throw new ServletException("Acceptor not found");
+ }
+
+ acceptor.setServlet(this);
+ setRequestHandler(acceptor);
+ }
+
+ @Override
+ public void destroy()
+ {
+ setRequestHandler(null);
+ acceptor.setServlet(null);
+ acceptor = null;
+ super.destroy();
+ }
+ }
}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/RandomizerInjector.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/RandomizerInjector.java
new file mode 100644
index 0000000000..ac89791ea6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/RandomizerInjector.java
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.http;
+
+import org.eclipse.net4j.util.container.IElementProcessor;
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.security.IRandomizer;
+
+/**
+ * @author Eike Stepper
+ */
+public class RandomizerInjector implements IElementProcessor
+{
+ public static final String TYPE = null;
+
+ public RandomizerInjector()
+ {
+ }
+
+ public Object process(IManagedContainer container, String productGroup, String factoryType, String description,
+ Object element)
+ {
+ if (element instanceof HTTPAcceptor)
+ {
+ HTTPAcceptor acceptor = (HTTPAcceptor)element;
+ if (acceptor.getRandomizer() == null)
+ {
+ acceptor.setRandomizer(getRandomizer(container));
+ }
+ }
+
+ return element;
+ }
+
+ protected IRandomizer getRandomizer(IManagedContainer container)
+ {
+ return (IRandomizer)container.getElement("org.eclipse.net4j.randomizers", "default", TYPE);
+ }
+}
diff --git a/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/tests/HTTPTest.java b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/tests/HTTPTest.java
new file mode 100644
index 0000000000..c6deda79fe
--- /dev/null
+++ b/plugins/org.eclipse.net4j.http/src/org/eclipse/net4j/internal/http/tests/HTTPTest.java
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.http.tests;
+
+import org.eclipse.net4j.http.HTTPUtil;
+import org.eclipse.net4j.http.IHTTPConnector;
+import org.eclipse.net4j.tests.AbstractTransportTest;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+/**
+ * @author Eike Stepper
+ */
+public class HTTPTest extends AbstractTransportTest
+{
+ public HTTPTest()
+ {
+ }
+
+ @Override
+ protected IManagedContainer createContainer()
+ {
+ IManagedContainer container = super.createContainer();
+ HTTPUtil.prepareContainer(container);
+ return container;
+ }
+
+ public void test1() throws Exception
+ {
+ IHTTPConnector connector = getHTTPConnector();
+
+ }
+
+ private IHTTPConnector getHTTPConnector()
+ {
+ return (IHTTPConnector)container.getElement("org.eclipse.net4j.connectors", "http",
+ "http://eike@localhost:8080/net4j");
+ }
+}

Back to the top