You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/03/24 10:34:16 UTC
olingo-odata4 git commit: [OLINGO-603] new ActionVoidProcessor for
actions with no return type
Repository: olingo-odata4
Updated Branches:
refs/heads/master c8d49029f -> 926373bcd
[OLINGO-603] new ActionVoidProcessor for actions with no return type
Change-Id: Icc9d05bbc33f1449bc43fd1c82677cd0500ce00f
Signed-off-by: Christian Amend <ch...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/926373bc
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/926373bc
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/926373bc
Branch: refs/heads/master
Commit: 926373bcd497a5f28cf5a9b021eadacfa642c1eb
Parents: c8d4902
Author: Klaus Straubinger <kl...@sap.com>
Authored: Fri Mar 20 16:32:23 2015 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Mar 24 10:33:47 2015 +0100
----------------------------------------------------------------------
.../ActionComplexCollectionProcessor.java | 21 ++---
.../api/processor/ActionComplexProcessor.java | 25 +++--
.../ActionEntityCollectionProcessor.java | 23 +++--
.../api/processor/ActionEntityProcessor.java | 23 +++--
.../ActionPrimitiveCollectionProcessor.java | 19 ++--
.../api/processor/ActionPrimitiveProcessor.java | 21 ++---
.../api/processor/ActionVoidProcessor.java | 43 +++++++++
.../apache/olingo/server/core/ODataHandler.java | 97 ++++++++++----------
.../server/core/uri/UriResourceActionImpl.java | 11 +--
.../processor/TechnicalEntityProcessor.java | 12 ++-
.../server/tecsvc/provider/ActionProvider.java | 24 +++++
.../tecsvc/provider/ContainerProvider.java | 21 +++++
.../server/tecsvc/provider/SchemaProvider.java | 3 +
.../olingo/server/core/ODataHandlerTest.java | 16 +++-
.../server/core/uri/UriResourceImplTest.java | 6 ++
.../core/uri/antlr/TestFullResourcePath.java | 5 +
16 files changed, 243 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
index 31c525f..5f0c663 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of ComplexCollection.
+ * Processor interface for handling an action request with a return type of ComplexCollection.
*/
public interface ActionComplexCollectionProcessor extends ComplexCollectionProcessor {
/**
* Process an action which has as return type a complex-type collection.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
- * @param requestFormat content type of body sent with request
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
+ * @param requestFormat content type of body sent with request
* @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
void processActionComplexCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
- ContentType requestFormat, ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
index 11e8345..3acec8d 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionComplexProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of Complex.
+ * Processor interface for handling an action request with a return type of Complex.
*/
public interface ActionComplexProcessor extends ComplexProcessor {
/**
- * Process an action which has as return type a complex-type.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
- * @param requestFormat content type of body sent with request
+ * Process an action which has as return type a complex type.
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
+ * @param requestFormat content type of body sent with request
* @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
- void processActionComplex(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat,
- ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ void processActionComplex(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
index edabfce..82d776a 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of Entity Collection.
+ * Processor interface for handling an action request with a return type of Entity Collection.
*/
public interface ActionEntityCollectionProcessor extends EntityCollectionProcessor {
/**
* Process an action which has as return type a collection of entities.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information of a parsed OData URI
* @param requestFormat content type of body sent with request
- * @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @param responseFormat requested content type after content negotiation
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
- void processActionEntityCollection(ODataRequest request, ODataResponse response,
- UriInfo uriInfo, ContentType requestFormat, ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ void processActionEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
index 8a2043e..ec564d2 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionEntityProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of Entity.
+ * Processor interface for handling an action request with a return type of Entity.
*/
public interface ActionEntityProcessor extends EntityProcessor {
/**
* Process an action which has as return type an entity.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
- * @param requestFormat content type of body sent with request
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
+ * @param requestFormat content type of body sent with request
* @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
- void processActionEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat,
- ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ void processActionEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo,
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
index 9fd7549..ace9ff9 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveCollectionProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of Primitive Collection.
+ * Processor interface for handling an action request with a return type of Primitive Collection.
*/
public interface ActionPrimitiveCollectionProcessor extends PrimitiveCollectionProcessor {
/**
* Process an action which has as return type a primitive-type collection.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
* @param requestFormat content type of body sent with request
* @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
void processActionPrimitiveCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo,
- ContentType requestFormat, ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
index 362621b..8c11eb7 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionPrimitiveProcessor.java
@@ -27,22 +27,21 @@ import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.uri.UriInfo;
/**
- * Processor interface for handling an action import request which has a
- * return type of Primitive.
+ * Processor interface for handling an action request with a return type of Primitive.
*/
public interface ActionPrimitiveProcessor extends PrimitiveProcessor {
/**
* Process an action which has as return type a primitive-type.
- * @param request OData request object containing raw HTTP information
- * @param response OData response object for collecting response data
- * @param uriInfo information of a parsed OData URI
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
* @param requestFormat content type of body sent with request
- * @param responseFormat requested content type after content negotiation
- * @throws org.apache.olingo.server.api.ODataApplicationException if the service implementation encounters a failure
- * @throws org.apache.olingo.server.api.deserializer.DeserializerException if deserialization failed
- * @throws org.apache.olingo.server.api.serializer.SerializerException if serialization failed
+ * @param responseFormat requested content type after content negotiation
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ * @throws SerializerException if serialization failed
*/
void processActionPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo,
- ContentType requestFormat, ContentType responseFormat)
- throws ODataApplicationException, DeserializerException, SerializerException;
+ ContentType requestFormat, ContentType responseFormat)
+ throws ODataApplicationException, DeserializerException, SerializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
new file mode 100644
index 0000000..2798132
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ActionVoidProcessor.java
@@ -0,0 +1,43 @@
+/*
+ * 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 org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.server.api.ODataApplicationException;
+import org.apache.olingo.server.api.ODataRequest;
+import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.deserializer.DeserializerException;
+import org.apache.olingo.server.api.uri.UriInfo;
+
+/**
+ * Processor interface for handling an action request with no return type.
+ */
+public interface ActionVoidProcessor extends Processor {
+ /**
+ * Process an action which has no return type.
+ * @param request OData request object containing raw HTTP information
+ * @param response OData response object for collecting response data
+ * @param uriInfo information about a parsed OData URI
+ * @param requestFormat content type of body sent with request
+ * @throws ODataApplicationException if the service implementation encounters a failure
+ * @throws DeserializerException if deserialization failed
+ */
+ void processActionVoid(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestFormat)
+ throws ODataApplicationException, DeserializerException;
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/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 bafc231..6d98b5e 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
@@ -22,7 +22,6 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.commons.api.edm.EdmFunction;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
@@ -49,6 +48,7 @@ import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
import org.apache.olingo.server.api.processor.ActionEntityProcessor;
import org.apache.olingo.server.api.processor.ActionPrimitiveCollectionProcessor;
import org.apache.olingo.server.api.processor.ActionPrimitiveProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
import org.apache.olingo.server.api.processor.BatchProcessor;
import org.apache.olingo.server.api.processor.ComplexCollectionProcessor;
import org.apache.olingo.server.api.processor.ComplexProcessor;
@@ -318,20 +318,20 @@ public class ODataHandler {
ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
}
- EdmActionImport actionImport = uriResourceAction.getActionImport();
- // could be null for bound actions
- if (actionImport == null) {
- throw new ODataHandlerException("Bound actions are not implemented yet",
+ final EdmAction action = uriResourceAction.getAction();
+ if (action == null) {
+ throw new ODataHandlerException("No action defined for action import.",
ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
}
-
- EdmAction unboundActions = actionImport.getUnboundAction();
- if (unboundActions == null) {
- throw new ODataHandlerException("No unbound function defined for function import",
- ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
+ final EdmReturnType returnType = action.getReturnType();
+ if (returnType == null) {
+ final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
+ checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
+ selectProcessor(ActionVoidProcessor.class)
+ .processActionVoid(request, response, uriInfo, requestFormat);
+ } else {
+ handleOperationDispatching(request, response, true, returnType);
}
- EdmReturnType returnType = unboundActions.getReturnType();
- handleOperationDispatching(request, response, true, returnType);
}
private void handleOperationDispatching(final ODataRequest request, final ODataResponse response,
@@ -460,42 +460,44 @@ public class ODataHandler {
if (method == HttpMethod.GET) {
final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, complexRepresentationType);
- if (complexRepresentationType == RepresentationType.COMPLEX) {
- selectProcessor(ComplexProcessor.class)
- .readComplex(request, response, uriInfo, requestedContentType);
- } else {
+ if (isCollection) {
selectProcessor(ComplexCollectionProcessor.class)
.readComplexCollection(request, response, uriInfo, requestedContentType);
+ } else {
+ selectProcessor(ComplexProcessor.class)
+ .readComplex(request, response, uriInfo, requestedContentType);
}
} else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
checkContentTypeSupport(requestFormat, complexRepresentationType);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, complexRepresentationType);
- if (complexRepresentationType == RepresentationType.COMPLEX) {
- selectProcessor(ComplexProcessor.class)
- .updateComplex(request, response, uriInfo, requestFormat, responseFormat);
- } else {
+ if (isCollection) {
selectProcessor(ComplexCollectionProcessor.class)
.updateComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
+ } else {
+ selectProcessor(ComplexProcessor.class)
+ .updateComplex(request, response, uriInfo, requestFormat, responseFormat);
}
} else if (method == HttpMethod.POST && isAction) {
final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
- checkContentTypeSupport(requestFormat, complexRepresentationType);
+ checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, complexRepresentationType);
- if (complexRepresentationType == RepresentationType.COMPLEX) {
- selectProcessor(ActionComplexProcessor.class)
- .processActionComplex(request, response, uriInfo, requestFormat, responseFormat);
- } else {
+ if (isCollection) {
selectProcessor(ActionComplexCollectionProcessor.class)
.processActionComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
+ } else {
+ selectProcessor(ActionComplexProcessor.class)
+ .processActionComplex(request, response, uriInfo, requestFormat, responseFormat);
}
} else if (method == HttpMethod.DELETE) {
- if (complexRepresentationType == RepresentationType.COMPLEX) {
- selectProcessor(ComplexProcessor.class).deleteComplex(request, response, uriInfo);
+ if (isCollection) {
+ selectProcessor(ComplexCollectionProcessor.class)
+ .deleteComplexCollection(request, response, uriInfo);
} else {
- selectProcessor(ComplexCollectionProcessor.class).deleteComplexCollection(request, response, uriInfo);
+ selectProcessor(ComplexProcessor.class)
+ .deleteComplex(request, response, uriInfo);
}
} else {
throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
@@ -514,41 +516,44 @@ public class ODataHandler {
if (method == HttpMethod.GET) {
final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, representationType);
- if (representationType == RepresentationType.PRIMITIVE) {
- selectProcessor(PrimitiveProcessor.class).readPrimitive(request, response, uriInfo, requestedContentType);
- } else {
+ if (isCollection) {
selectProcessor(PrimitiveCollectionProcessor.class)
.readPrimitiveCollection(request, response, uriInfo, requestedContentType);
+ } else {
+ selectProcessor(PrimitiveProcessor.class)
+ .readPrimitive(request, response, uriInfo, requestedContentType);
}
} else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
checkContentTypeSupport(requestFormat, representationType);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, representationType);
- if (representationType == RepresentationType.PRIMITIVE) {
- selectProcessor(PrimitiveProcessor.class)
- .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
- } else {
+ if (isCollection) {
selectProcessor(PrimitiveCollectionProcessor.class)
.updatePrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
+ } else {
+ selectProcessor(PrimitiveProcessor.class)
+ .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
}
} else if (method == HttpMethod.DELETE) {
- if (representationType == RepresentationType.PRIMITIVE) {
- selectProcessor(PrimitiveProcessor.class).deletePrimitive(request, response, uriInfo);
+ if (isCollection) {
+ selectProcessor(PrimitiveCollectionProcessor.class)
+ .deletePrimitiveCollection(request, response, uriInfo);
} else {
- selectProcessor(PrimitiveCollectionProcessor.class).deletePrimitiveCollection(request, response, uriInfo);
+ selectProcessor(PrimitiveProcessor.class)
+ .deletePrimitive(request, response, uriInfo);
}
} else if (method == HttpMethod.POST && isAction) {
final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
- checkContentTypeSupport(requestFormat, representationType);
+ checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, representationType);
- if (representationType == RepresentationType.PRIMITIVE) {
- selectProcessor(ActionPrimitiveProcessor.class)
- .processActionPrimitive(request, response, uriInfo, requestFormat, responseFormat);
- } else {
+ if (isCollection) {
selectProcessor(ActionPrimitiveCollectionProcessor.class)
.processActionPrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
+ } else {
+ selectProcessor(ActionPrimitiveProcessor.class)
+ .processActionPrimitive(request, response, uriInfo, requestFormat, responseFormat);
}
} else {
throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
@@ -612,9 +617,9 @@ public class ODataHandler {
selectProcessor(MediaEntityProcessor.class)
.createMediaEntity(request, response, uriInfo, requestFormat, responseFormat);
} else if (isAction) {
- checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
+ checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
- request, customContentTypeSupport, RepresentationType.ENTITY);
+ request, customContentTypeSupport, RepresentationType.COLLECTION_ENTITY);
selectProcessor(ActionEntityCollectionProcessor.class)
.processActionEntityCollection(request, response, uriInfo, requestFormat, responseFormat);
} else {
@@ -642,7 +647,7 @@ public class ODataHandler {
selectProcessor(EntityProcessor.class).updateEntity(request, response, uriInfo, requestFormat, responseFormat);
} else if (method == HttpMethod.POST && isAction) {
final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
- checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
+ checkContentTypeSupport(requestFormat, RepresentationType.ACTION_PARAMETERS);
final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
request, customContentTypeSupport, RepresentationType.ENTITY);
selectProcessor(ActionEntityProcessor.class).processActionEntity(
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
index 4ca162c..82fe743 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/UriResourceActionImpl.java
@@ -56,22 +56,17 @@ public class UriResourceActionImpl extends UriResourceTypedImpl implements UriRe
@Override
public boolean isCollection() {
- return action.getReturnType().isCollection();
+ return action.getReturnType() !=null && action.getReturnType().isCollection();
}
@Override
public EdmType getType() {
- return action.getReturnType().getType();
+ return action.getReturnType() == null ? null : action.getReturnType().getType();
}
@Override
public String toString() {
- if (actionImport != null) {
- return actionImport.getName();
- } else if (action != null) {
- return action.getName();
- }
- return "";
+ return actionImport == null ? (action == null ? "" : action.getName()) : actionImport.getName();
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index b66482a..ff7bd5f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -41,6 +41,7 @@ import org.apache.olingo.server.api.deserializer.DeserializerException;
import org.apache.olingo.server.api.deserializer.ODataDeserializer;
import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
import org.apache.olingo.server.api.processor.ActionEntityProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
import org.apache.olingo.server.api.processor.CountEntityCollectionProcessor;
import org.apache.olingo.server.api.processor.EntityCollectionProcessor;
import org.apache.olingo.server.api.processor.EntityProcessor;
@@ -68,7 +69,8 @@ import org.apache.olingo.server.tecsvc.processor.queryoptions.options.TopHandler
*/
public class TechnicalEntityProcessor extends TechnicalProcessor
implements EntityCollectionProcessor, ActionEntityCollectionProcessor, CountEntityCollectionProcessor,
- EntityProcessor, ActionEntityProcessor, MediaEntityProcessor {
+ EntityProcessor, ActionEntityProcessor, MediaEntityProcessor,
+ ActionVoidProcessor {
public TechnicalEntityProcessor(final DataProvider dataProvider) {
super(dataProvider);
@@ -271,13 +273,19 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
}
@Override
- public void processActionEntity(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo,
+ public void processActionEntity(final ODataRequest request, ODataResponse response, final UriInfo uriInfo,
final ContentType requestFormat, final ContentType responseFormat)
throws ODataApplicationException, DeserializerException, SerializerException {
throw new ODataApplicationException("Process entity is not supported yet.",
HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT);
}
+ @Override
+ public void processActionVoid(final ODataRequest request, ODataResponse response, final UriInfo uriInfo,
+ final ContentType requestFormat) throws ODataApplicationException, DeserializerException {
+ response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
+ }
+
private void setCount(EntitySet entitySet) {
if (entitySet.getCount() == null) {
entitySet.setCount(entitySet.getEntities().size());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
index 9226e13..78ada0a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ActionProvider.java
@@ -19,6 +19,7 @@
package org.apache.olingo.server.tecsvc.provider;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import org.apache.olingo.commons.api.ODataException;
@@ -62,6 +63,11 @@ public class ActionProvider {
new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTETAllPrimParam");
public static final FullQualifiedName nameUARTCollETAllPrimParam =
new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTCollETAllPrimParam");
+ public static final FullQualifiedName nameUART = new FullQualifiedName(SchemaProvider.NAMESPACE, "UART");
+ public static final FullQualifiedName nameUARTParam =
+ new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTParam");
+ public static final FullQualifiedName nameUARTTwoParam =
+ new FullQualifiedName(SchemaProvider.NAMESPACE, "UARTTwoParam");
public List<Action> getActions(final FullQualifiedName actionName) throws ODataException {
@@ -132,6 +138,24 @@ public class ActionProvider {
new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true))
);
+ } else if (actionName.equals(nameUART)) {
+ return Collections.singletonList(new Action().setName(nameUART.getName()));
+
+ } else if (actionName.equals(nameUARTParam)) {
+ return Collections.singletonList(
+ new Action()
+ .setName(nameUARTParam.getName())
+ .setParameters(Collections.singletonList(
+ new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16))));
+
+ } else if (actionName.equals(nameUARTTwoParam)) {
+ return Collections.singletonList(
+ new Action()
+ .setName(nameUARTTwoParam.getName())
+ .setParameters(Arrays.asList(
+ new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16),
+ new Parameter().setName("ParameterDuration").setType(PropertyProvider.nameDuration))));
+
} else if (actionName.equals(nameBAETTwoKeyNavRTETTwoKeyNav)) {
return Arrays.asList(
new Action().setName("BAETTwoKeyNavRTETTwoKeyNav")
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
index aa8b60a..3882705 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
@@ -44,6 +44,9 @@ public class ContainerProvider {
public static final String AIRT_COLL_ET_KEY_NAV_PARAM = "AIRTCollETKeyNavParam";
public static final String AIRTES_ALL_PRIM_PARAM = "AIRTESAllPrimParam";
public static final String AIRT_COLL_ES_ALL_PRIM_PARAM = "AIRTCollESAllPrimParam";
+ public static final String AIRT = "AIRT";
+ public static final String AIRT_PARAM = "AIRTParam";
+ public static final String AIRT_TWO_PARAM = "AIRTTwoParam";
EntityContainerInfo entityContainerInfoTest1 =
new EntityContainerInfo().setContainerName(nameContainer);
@@ -115,6 +118,9 @@ public class ContainerProvider {
actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_COLL_ET_KEY_NAV_PARAM));
actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRTES_ALL_PRIM_PARAM));
actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_COLL_ES_ALL_PRIM_PARAM));
+ actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT));
+ actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_PARAM));
+ actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, AIRT_TWO_PARAM));
// FunctionImports
List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
@@ -434,6 +440,21 @@ public class ContainerProvider {
return new ActionImport()
.setName(AIRT_COLL_ES_ALL_PRIM_PARAM)
.setAction(ActionProvider.nameUARTCollETAllPrimParam);
+
+ } else if (name.equals(AIRT)) {
+ return new ActionImport()
+ .setName(AIRT)
+ .setAction(ActionProvider.nameUART);
+
+ } else if (name.equals(AIRT_PARAM)) {
+ return new ActionImport()
+ .setName(AIRT_PARAM)
+ .setAction(ActionProvider.nameUARTParam);
+
+ } else if (name.equals(AIRT_TWO_PARAM)) {
+ return new ActionImport()
+ .setName(AIRT_TWO_PARAM)
+ .setAction(ActionProvider.nameUARTTwoParam);
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
index 04e5060..057f4c9 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/SchemaProvider.java
@@ -120,6 +120,9 @@ public class SchemaProvider {
actions.addAll(prov.getActions(ActionProvider.nameUARTCollETKeyNavParam));
actions.addAll(prov.getActions(ActionProvider.nameUARTETAllPrimParam));
actions.addAll(prov.getActions(ActionProvider.nameUARTCollETAllPrimParam));
+ actions.addAll(prov.getActions(ActionProvider.nameUART));
+ actions.addAll(prov.getActions(ActionProvider.nameUARTParam));
+ actions.addAll(prov.getActions(ActionProvider.nameUARTTwoParam));
// Functions
List<Function> functions = new ArrayList<Function>();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/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 5424fda..45728e1 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
@@ -60,6 +60,7 @@ import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
import org.apache.olingo.server.api.processor.ActionEntityProcessor;
import org.apache.olingo.server.api.processor.ActionPrimitiveCollectionProcessor;
import org.apache.olingo.server.api.processor.ActionPrimitiveProcessor;
+import org.apache.olingo.server.api.processor.ActionVoidProcessor;
import org.apache.olingo.server.api.processor.BatchProcessor;
import org.apache.olingo.server.api.processor.ComplexCollectionProcessor;
import org.apache.olingo.server.api.processor.ComplexProcessor;
@@ -381,11 +382,15 @@ public class ODataHandlerTest {
@Test
public void dispatchAction() throws Exception {
- ActionPrimitiveProcessor primitiveProcessor = mock(ActionPrimitiveProcessor.class);
+ final ActionPrimitiveProcessor primitiveProcessor = mock(ActionPrimitiveProcessor.class);
dispatch(HttpMethod.POST, ContainerProvider.AIRT_STRING, primitiveProcessor);
verify(primitiveProcessor).processActionPrimitive(
any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class),
any(ContentType.class), any(ContentType.class));
+ dispatchMethodNotAllowed(HttpMethod.GET, ContainerProvider.AIRT_STRING, primitiveProcessor);
+ dispatchMethodNotAllowed(HttpMethod.PATCH, ContainerProvider.AIRT_STRING, primitiveProcessor);
+ dispatchMethodNotAllowed(HttpMethod.PUT, ContainerProvider.AIRT_STRING, primitiveProcessor);
+ dispatchMethodNotAllowed(HttpMethod.DELETE, ContainerProvider.AIRT_STRING, primitiveProcessor);
ActionPrimitiveCollectionProcessor primitiveCollectionProcessor = mock(ActionPrimitiveCollectionProcessor.class);
dispatch(HttpMethod.POST, ContainerProvider.AIRT_COLL_STRING_TWO_PARAM, primitiveCollectionProcessor);
@@ -429,7 +434,14 @@ public class ODataHandlerTest {
any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class),
any(ContentType.class), any(ContentType.class));
- dispatchMethodNotAllowed(HttpMethod.GET, "AIRTString", mock(Processor.class));
+ final ActionVoidProcessor voidProcessor = mock(ActionVoidProcessor.class);
+ dispatch(HttpMethod.POST, ContainerProvider.AIRT, voidProcessor);
+ verify(voidProcessor).processActionVoid(
+ any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class));
+ dispatchMethodNotAllowed(HttpMethod.GET, ContainerProvider.AIRT, voidProcessor);
+ dispatchMethodNotAllowed(HttpMethod.PATCH, ContainerProvider.AIRT, voidProcessor);
+ dispatchMethodNotAllowed(HttpMethod.PUT, ContainerProvider.AIRT, voidProcessor);
+ dispatchMethodNotAllowed(HttpMethod.DELETE, ContainerProvider.AIRT, voidProcessor);
}
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
index 6c72a0f..ab197e7 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
@@ -48,6 +48,7 @@ import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
public class UriResourceImplTest {
@@ -90,6 +91,11 @@ public class UriResourceImplTest {
assertEquals(false, impl.isCollection());
assertEquals("AIRTCTTwoPrimParam", impl.toString());
assertEquals(actionImport.getUnboundAction().getReturnType().getType(), impl.getType());
+
+ actionImport = edm.getEntityContainer(null).getActionImport("AIRT");
+ impl.setActionImport(actionImport);
+ assertEquals(false, impl.isCollection());
+ assertNull(impl.getType());
}
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/926373bc/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
index 6019218..3ace90e 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
@@ -2728,6 +2728,11 @@ public class TestFullResourcePath {
.goPath().first()
.isActionImport(ContainerProvider.AIRT_COLL_ES_ALL_PRIM_PARAM);
+ testUri.run(ContainerProvider.AIRT)
+ .isKind(UriInfoKind.resource)
+ .goPath().first()
+ .isActionImport(ContainerProvider.AIRT);
+
testUri.run("ESKeyNav/$count")
.isKind(UriInfoKind.resource)
.goPath().first()