Repository: olingo-odata4 Updated Branches: refs/heads/olingo-266-ref 70a989ce9 -> 7ba791e54
[OLINGO-266] first draft of ref handler Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/7ba791e5 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/7ba791e5 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/7ba791e5 Branch: refs/heads/olingo-266-ref Commit: 7ba791e54227be759853434b782ffd8da058d10f Parents: 70a989c Author: Stephan Klevenz <[email protected]> Authored: Fri May 9 16:28:16 2014 +0200 Committer: Stephan Klevenz <[email protected]> Committed: Fri May 9 16:28:16 2014 +0200 ---------------------------------------------------------------------- .../apache/olingo/server/api/ODataHandler.java | 28 +++++++ .../apache/olingo/server/api/ODataServer.java | 7 +- .../olingo/server/core/ODataHandlerImpl.java | 81 ++++++++++++++++++ .../olingo/server/core/ODataServerImpl.java | 19 ++--- .../server/core/servlet/ODataServlet.java | 86 -------------------- .../olingo/server/ref/ReferenceServlet.java | 7 +- 6 files changed, 123 insertions(+), 105 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java new file mode 100644 index 0000000..ff0ab06 --- /dev/null +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java @@ -0,0 +1,28 @@ +/* + * 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.olingo.server.api; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public interface ODataHandler { + + void process(HttpServletRequest request, HttpServletResponse response); + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java index 7390189..6ab0270 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java @@ -18,10 +18,8 @@ */ package org.apache.olingo.server.api; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.olingo.commons.api.ODataRuntimeException; +import org.apache.olingo.server.api.edm.provider.EdmProvider; import org.apache.olingo.server.api.serializer.ODataFormat; import org.apache.olingo.server.api.serializer.ODataSerializer; @@ -38,6 +36,7 @@ public abstract class ODataServer { * and avoid class loading issues also during hot deployment. */ final Object object = clazz.newInstance(); + return (ODataServer) object; } catch (final Exception e) { @@ -48,6 +47,6 @@ public abstract class ODataServer { public abstract ODataSerializer getSerializer(ODataFormat format); - public abstract void handle(HttpServletRequest req, HttpServletResponse resp); + public abstract ODataHandler getHandler(EdmProvider edmProvider); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java new file mode 100644 index 0000000..b4e7bab --- /dev/null +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java @@ -0,0 +1,81 @@ +/* + * 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.olingo.server.core; + +import java.io.IOException; +import java.io.InputStream; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.olingo.commons.api.ODataRuntimeException; +import org.apache.olingo.server.api.ODataHandler; +import org.apache.olingo.server.api.ODataServer; +import org.apache.olingo.server.api.edm.provider.EdmProvider; +import org.apache.olingo.server.api.serializer.ODataFormat; +import org.apache.olingo.server.api.serializer.ODataSerializer; +import org.apache.olingo.server.core.edm.provider.EdmProviderImpl; + +public class ODataHandlerImpl implements ODataHandler { + + private EdmProvider edmProvider; + private ODataServer server; + + public ODataHandlerImpl(ODataServer server, EdmProvider edmProvider) { + this.edmProvider = edmProvider; + this.server = server; + } + + @Override + public void process(HttpServletRequest request, HttpServletResponse response) { + try { + EdmProviderImpl edm = new EdmProviderImpl(edmProvider); + + InputStream responseEntity = null; + if (request.getPathInfo().contains("$metadata")) { + ODataSerializer serializer = server.getSerializer(ODataFormat.XML); + responseEntity = serializer.metadataDocument(edm); + } else { + ODataSerializer serializer = server.getSerializer(ODataFormat.JSON); + responseEntity = serializer.serviceDocument(edm, "http//:root"); + } + + response.setStatus(200); + response.setContentType("application/json"); + + if (responseEntity != null) { + ServletOutputStream out = response.getOutputStream(); + int curByte = -1; + if (responseEntity instanceof InputStream) { + while ((curByte = ((InputStream) responseEntity).read()) != -1) { + out.write((char) curByte); + } + ((InputStream) responseEntity).close(); + } + + out.flush(); + out.close(); + } + + } catch (Exception e) { + throw new ODataRuntimeException(e); + } + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java index 933422d..4827fa5 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java @@ -18,13 +18,10 @@ */ package org.apache.olingo.server.core; -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.olingo.commons.api.ODataRuntimeException; +import org.apache.olingo.server.api.ODataHandler; import org.apache.olingo.server.api.ODataServer; +import org.apache.olingo.server.api.edm.provider.EdmProvider; import org.apache.olingo.server.api.serializer.ODataFormat; import org.apache.olingo.server.api.serializer.ODataSerializer; import org.apache.olingo.server.core.serializer.ODataJsonSerializer; @@ -50,14 +47,10 @@ public class ODataServerImpl extends ODataServer { } @Override - public void handle(HttpServletRequest req, HttpServletResponse resp) { - - try { - resp.getWriter().print("Hello World!"); - } catch (IOException e) { - throw new ODataRuntimeException(e); - } - + public ODataHandler getHandler(EdmProvider edmProvider) { + return new ODataHandlerImpl(this, edmProvider); } + + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-core/src/main/java/org/apache/olingo/server/core/servlet/ODataServlet.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/servlet/ODataServlet.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/servlet/ODataServlet.java deleted file mode 100644 index b6d31c9..0000000 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/servlet/ODataServlet.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.olingo.server.core.servlet; - -import java.io.IOException; -import java.io.InputStream; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.olingo.server.api.edm.provider.EdmProvider; -import org.apache.olingo.server.api.serializer.ODataFormat; -import org.apache.olingo.server.api.serializer.ODataSerializer; -import org.apache.olingo.server.core.ODataServerImpl; -import org.apache.olingo.server.core.edm.provider.EdmProviderImpl; - -public class ODataServlet extends HttpServlet { - - private static final long serialVersionUID = 1L; - - private HttpServletResponse resp; - - @Override - protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { - this.resp = resp; - - EdmProvider provider = createEdmProvider(); - EdmProviderImpl edm = new EdmProviderImpl(provider); - - ODataServerImpl impl = new ODataServerImpl(); - InputStream responseEntity = null; - if (req.getPathInfo().contains("$metadata")) { - ODataSerializer serializer = impl.getSerializer(ODataFormat.XML); - responseEntity = serializer.metadataDocument(edm); - } else { - ODataSerializer serializer = impl.getSerializer(ODataFormat.JSON); - responseEntity = serializer.serviceDocument(edm, "http//:root"); - } - sendResponse(responseEntity); - } - - protected EdmProvider createEdmProvider() { - return null; - } - - // TODO: check throws - private void sendResponse(final Object entity) throws IOException { - resp.setStatus(200); - resp.setContentType("application/json"); - if (entity != null) { - ServletOutputStream out = resp.getOutputStream(); - int curByte = -1; - if (entity instanceof InputStream) { - while ((curByte = ((InputStream) entity).read()) != -1) { - out.write((char) curByte); - } - ((InputStream) entity).close(); - } else if (entity instanceof String) { - String body = (String) entity; - out.write(body.getBytes("utf-8")); - } - - out.flush(); - out.close(); - } - } - -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ba791e5/lib/server-ref/src/main/java/org/apache/olingo/server/ref/ReferenceServlet.java ---------------------------------------------------------------------- diff --git a/lib/server-ref/src/main/java/org/apache/olingo/server/ref/ReferenceServlet.java b/lib/server-ref/src/main/java/org/apache/olingo/server/ref/ReferenceServlet.java index 0be695f..47daecb 100644 --- a/lib/server-ref/src/main/java/org/apache/olingo/server/ref/ReferenceServlet.java +++ b/lib/server-ref/src/main/java/org/apache/olingo/server/ref/ReferenceServlet.java @@ -25,7 +25,9 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.olingo.server.api.ODataHandler; import org.apache.olingo.server.api.ODataServer; +import org.apache.olingo.server.ref.provider.EdmTechProvider; public class ReferenceServlet extends HttpServlet { @@ -34,8 +36,9 @@ public class ReferenceServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - ODataServer server = ODataServer.newInstance(); - server.handle(req, resp); + ODataHandler handler = ODataServer.newInstance().getHandler(new EdmTechProvider()); + + handler.process(req, resp); }
