You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/06/27 17:39:02 UTC
[3/6] git commit: [OLINGO-328] API design and setup of TDD
[OLINGO-328] API design and setup of TDD
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/97222fad
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/97222fad
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/97222fad
Branch: refs/heads/olingo-328
Commit: 97222fad310abc68adb0190eaabf598285098d48
Parents: 77af7df
Author: Stephan Klevenz <st...@sap.com>
Authored: Tue Jun 24 17:20:48 2014 +0200
Committer: Stephan Klevenz <st...@sap.com>
Committed: Tue Jun 24 17:21:11 2014 +0200
----------------------------------------------------------------------
.../olingo/server/api/ODataHttpHandler.java | 2 +
.../server/api/processor/DefaultProcessor.java | 2 +
.../olingo/server/api/processor/Processor.java | 2 +
.../processor/SupportCustomContentTypes.java | 27 +++
.../server/core/DefaultRedirectProcessor.java | 4 +
.../apache/olingo/server/core/ODataHandler.java | 15 +-
.../olingo/server/tecsvc/TechnicalServlet.java | 5 +-
.../server/core/ContentNegotiationTest.java | 201 +++++++++++++++++++
.../olingo/server/core/ODataHandlerTest.java | 7 +-
9 files changed, 254 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
index 8372f80..e9d9caa 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
@@ -18,6 +18,8 @@
*/
package org.apache.olingo.server.api;
+import java.util.List;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
index e14e6d3..4d1a94d 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
@@ -19,6 +19,8 @@
package org.apache.olingo.server.api.processor;
import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.format.ODataFormat;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/Processor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/Processor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/Processor.java
index 014fba7..ef2b8a0 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/Processor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/Processor.java
@@ -18,6 +18,8 @@
*/
package org.apache.olingo.server.api.processor;
+import java.util.List;
+
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.server.api.OData;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/SupportCustomContentTypes.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/SupportCustomContentTypes.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/SupportCustomContentTypes.java
new file mode 100644
index 0000000..0a032e1
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/SupportCustomContentTypes.java
@@ -0,0 +1,27 @@
+/*
+ * 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.processor;
+
+import java.util.List;
+
+public interface SupportCustomContentTypes {
+
+ public List<String> getSupportedContentTypes(Class<? extends Processor> processorClass);
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
index 0d47d55..400dd55 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
@@ -18,12 +18,16 @@
*/
package org.apache.olingo.server.core;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.processor.Processor;
public class DefaultRedirectProcessor implements RedirectProcessor {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
index a46281f..f7248c3 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
@@ -18,6 +18,10 @@
*/
package org.apache.olingo.server.core;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
@@ -27,7 +31,12 @@ import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.processor.*;
+import org.apache.olingo.server.api.processor.CollectionProcessor;
+import org.apache.olingo.server.api.processor.DefaultProcessor;
+import org.apache.olingo.server.api.processor.EntityProcessor;
+import org.apache.olingo.server.api.processor.MetadataProcessor;
+import org.apache.olingo.server.api.processor.Processor;
+import org.apache.olingo.server.api.processor.ServiceDocumentProcessor;
import org.apache.olingo.server.api.uri.UriInfo;
import org.apache.olingo.server.api.uri.UriResource;
import org.apache.olingo.server.api.uri.UriResourceNavigation;
@@ -35,10 +44,6 @@ import org.apache.olingo.server.api.uri.UriResourcePartTyped;
import org.apache.olingo.server.core.uri.parser.Parser;
import org.apache.olingo.server.core.uri.validator.UriValidator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
public class ODataHandler {
private final OData odata;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
index 9841dd8..f03350d 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
@@ -26,11 +26,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.tecsvc.data.DataProvider;
import org.apache.olingo.server.tecsvc.processor.SampleJsonProcessor;
-import org.apache.olingo.server.tecsvc.processor.TechnicalProcessor;
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,7 +58,7 @@ public class TechnicalServlet extends HttpServlet {
// handler.register(new TechnicalProcessor(dataProvider));
handler.register(new SampleJsonProcessor());
-
+
handler.process(req, resp);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-test/src/test/java/org/apache/olingo/server/core/ContentNegotiationTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ContentNegotiationTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ContentNegotiationTest.java
new file mode 100644
index 0000000..db5b984
--- /dev/null
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ContentNegotiationTest.java
@@ -0,0 +1,201 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataRequest;
+import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.processor.CollectionProcessor;
+import org.apache.olingo.server.api.processor.MetadataProcessor;
+import org.apache.olingo.server.api.processor.Processor;
+import org.apache.olingo.server.api.processor.ServiceDocumentProcessor;
+import org.apache.olingo.server.api.processor.SupportCustomContentTypes;
+import org.apache.olingo.server.api.uri.UriInfo;
+import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class ContentNegotiationTest {
+
+// static final private String ACCEPT_CASE1 = "text/plain;q=0.5";
+// static final private String ACCEPT_CASE2 = "application/json;odata=verbose;q=0.2";
+
+ //@formatter:off (Eclipse formatter)
+ //CHECKSTYLE:OFF (Maven checkstyle)
+
+ String[][] casesServiceDocument = {
+ /* expected $format accept supported */
+ { "application/json", null, null, null },
+ { "application/json", "json", null, null },
+ { "application/json", "json", "application/json", null },
+ { "application/json", null, "application/json", null },
+ { "application/json", null, "*/*", null },
+// { "aaa", "aaa", null, "aaa, bbb" },
+// { "aaa", null, "*/*", "aaa, bbb" },
+ };
+
+ String[][] casesMetadata = {
+ /* expected $format accept supported */
+ { "application/xml", null, null, null },
+ { "application/xml", "xml", null, null },
+ { "application/xml", null, "application/xml", null },
+ { "application/xml", "xml", "application/xml", null },
+ { "application/xml", null, "*/*", null },
+// { "aaa", "aaa", null, "aaa, bbb" },
+ };
+
+ String[][] casesEntitySet = {
+ /* expected $format accept supported */
+ { "application/json", null, null, null },
+ { "application/json", "json", null, null },
+ { "application/json", "json", "application/json", null },
+ { "application/json", null, "*/*", null },
+ };
+
+ //CHECKSTYLE:ON
+ //@formatter:on
+
+ private ODataHandler createHandler() {
+ OData odata = OData.newInstance();
+ Edm edm = odata.createEdm(new EdmTechProvider());
+ return new ODataHandler(odata, edm);
+
+ }
+
+ @Test
+ public void testServiceDocumentDefault() {
+
+ for (String[] useCase : casesServiceDocument) {
+ ODataRequest request = new ODataRequest();
+ request.setMethod(HttpMethod.GET);
+ request.setRawODataPath("/" + (useCase[1] == null ? "" : "?$format=" + useCase[1]));
+
+ ODataResponse response = callHandler(useCase, request);
+
+ assertEquals(useCase[0], response.getHeaders().get(HttpHeader.CONTENT_TYPE));
+ }
+ }
+
+ @Test
+ public void testMetadataDefault() {
+
+ for (String[] useCase : casesMetadata) {
+ ODataRequest request = new ODataRequest();
+ request.setMethod(HttpMethod.GET);
+ request.setRawODataPath("/$metadata" + (useCase[1] == null ? "" : "?$format=" + useCase[1]));
+
+ ODataResponse response = callHandler(useCase, request);
+
+ assertEquals(useCase[0], response.getHeaders().get(HttpHeader.CONTENT_TYPE));
+ }
+ }
+
+ @Test
+ public void testEntitySet() {
+
+ for (String[] useCase : casesEntitySet) {
+ ODataRequest request = new ODataRequest();
+ request.setMethod(HttpMethod.GET);
+ request.setRawODataPath("/ESAllPrim" + (useCase[1] == null ? "" : "?$format=" + useCase[1]));
+
+ ODataResponse response = callHandler(useCase, request, new CollectionProcessorStub());
+
+ assertEquals(useCase[0], response.getHeaders().get(HttpHeader.CONTENT_TYPE));
+ }
+ }
+
+ private ODataResponse callHandler(String[] useCase, ODataRequest request,
+ Processor defaultProcessor) {
+ ODataHandler handler = createHandler();
+
+ if (useCase[3] != null) {
+ ProcessorStub stub = new ProcessorStub(useCase[3].split(","));
+ handler.register(stub);
+ } else {
+ if (defaultProcessor != null) {
+ handler.register(defaultProcessor);
+ }
+ }
+
+ ODataResponse response = handler.process(request);
+ return response;
+ }
+
+ ODataResponse callHandler(String[] useCase, ODataRequest request) {
+ return callHandler(useCase, request, null);
+ }
+
+ private class ProcessorStub implements ServiceDocumentProcessor, MetadataProcessor, CollectionProcessor,
+ SupportCustomContentTypes {
+
+ String[] formats;
+
+ ProcessorStub(String[] strings) {
+ this.formats = strings;
+ }
+
+ @Override
+ public void init(OData odata, Edm edm) {}
+
+ @Override
+ public List<String> getSupportedContentTypes(Class<? extends Processor> processorClass) {
+ return Arrays.asList(formats);
+ }
+
+ @Override
+ public void readServiceDocument(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
+ response.setHeader(HttpHeader.CONTENT_TYPE, format);
+ }
+
+ @Override
+ public void readCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
+ response.setHeader(HttpHeader.CONTENT_TYPE, format);
+ }
+
+ @Override
+ public void readMetadata(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
+ response.setHeader(HttpHeader.CONTENT_TYPE, format);
+ }
+
+ }
+
+ private class CollectionProcessorStub implements CollectionProcessor {
+
+ @Override
+ public void init(OData odata, Edm edm) {}
+
+ @Override
+ public void readCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
+ response.setHeader(HttpHeader.CONTENT_TYPE, format);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/97222fad/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
index 78ef177..6e825bb 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
@@ -47,10 +47,10 @@ public class ODataHandlerTest {
@Before
public void before() {
- OData server = OData.newInstance();
- Edm edm = server.createEdm(new EdmTechProvider());
+ OData odata = OData.newInstance();
+ Edm edm = odata.createEdm(new EdmTechProvider());
- handler = new ODataHandler(server, edm);
+ handler = new ODataHandler(odata, edm);
}
@Test
@@ -182,4 +182,5 @@ public class ODataHandlerTest {
assertEquals(ODataServiceVersion.V40.toString(), response.getHeaders().get(HttpHeader.ODATA_VERSION));
}
+
}