diff options
author | Eike Stepper | 2008-05-25 06:42:25 +0000 |
---|---|---|
committer | Eike Stepper | 2008-05-25 06:42:25 +0000 |
commit | 950c53056cf1f6e316979f33cf1779fdb26a21d3 (patch) | |
tree | 1c669feaab33d037cce606f27942829be1c1b0b2 /plugins/org.eclipse.net4j.http/src/org | |
parent | f12610fcdb199cfeb16de0068d3788a2bc607cb9 (diff) | |
download | cdo-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')
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"); + } +} |