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 2014/12/16 13:09:40 UTC
olingo-odata4 git commit: [OLINGO-472] BatchFascade refactoring to
support boundary extraction
Repository: olingo-odata4
Updated Branches:
refs/heads/master 55c4d69d8 -> 65ad2f48d
[OLINGO-472] BatchFascade refactoring to support boundary extraction
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/65ad2f48
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/65ad2f48
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/65ad2f48
Branch: refs/heads/master
Commit: 65ad2f48d56c54164c915baeab2b0d7621ed3acb
Parents: 55c4d69
Author: Christian Holzer <c....@sap.com>
Authored: Tue Dec 16 12:09:40 2014 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Dec 16 13:03:27 2014 +0100
----------------------------------------------------------------------
.../olingo/server/api/batch/BatchFacade.java | 9 +++++
.../core/batchhandler/BatchFascadeImpl.java | 6 ++++
.../processor/TechnicalBatchProcessor.java | 38 +-------------------
3 files changed, 16 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/65ad2f48/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/BatchFacade.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/BatchFacade.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/BatchFacade.java
index 080a15e..64d6a51 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/BatchFacade.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/BatchFacade.java
@@ -55,4 +55,13 @@ public interface BatchFacade {
* @throws BatchDeserializerException
*/
public ODataResponsePart handleBatchRequest(BatchRequestPart request) throws BatchDeserializerException;
+
+ /**
+ * Extracts the boundary of a multipart/mixed header.
+ * See RFC 2046#5.1
+ *
+ * @param contentType Content Type
+ * @return Boundary
+ */
+ public String extractBoundaryFromContentType(String contentType) throws BatchDeserializerException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/65ad2f48/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
index 7f97106..6b2ee39 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
import org.apache.olingo.server.api.deserializer.batch.ODataResponsePart;
import org.apache.olingo.server.api.processor.BatchProcessor;
import org.apache.olingo.server.core.ODataHandler;
+import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
public class BatchFascadeImpl implements BatchFacade {
private final BatchPartHandler partHandler;
@@ -44,4 +45,9 @@ public class BatchFascadeImpl implements BatchFacade {
public ODataResponsePart handleBatchRequest(BatchRequestPart request) throws BatchDeserializerException {
return partHandler.handleBatchRequest(request);
}
+
+ @Override
+ public String extractBoundaryFromContentType(String contentType) throws BatchDeserializerException {
+ return BatchParserCommon.getBoundary(contentType, 0);
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/65ad2f48/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java
index cb83a47..37884be 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalBatchProcessor.java
@@ -21,7 +21,6 @@ package org.apache.olingo.server.tecsvc.processor;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
import java.util.UUID;
import org.apache.olingo.commons.api.format.ContentType;
@@ -39,7 +38,6 @@ import org.apache.olingo.server.api.processor.BatchProcessor;
import org.apache.olingo.server.tecsvc.data.DataProvider;
public class TechnicalBatchProcessor extends TechnicalProcessor implements BatchProcessor {
- // TODO remove
private static final String PREFERENCE_CONTINUE_ON_ERROR = "odata.continue-on-error";
public TechnicalBatchProcessor(DataProvider dataProvider) {
@@ -49,10 +47,9 @@ public class TechnicalBatchProcessor extends TechnicalProcessor implements Batch
@Override
public void processBatch(BatchFacade fascade, ODataRequest request, ODataResponse response)
throws BatchSerializerException, BatchDeserializerException {
- // TODO refactor isContinueOnError
boolean continueOnError = isContinueOnError(request);
- final String boundary = getBoundary(request.getHeader(HttpHeader.CONTENT_TYPE));
+ final String boundary = fascade.extractBoundaryFromContentType(request.getHeader(HttpHeader.CONTENT_TYPE));
final BatchOptions options = BatchOptions.with()
.rawBaseUri(request.getRawBaseUri())
.rawServiceResolutionUri(request.getRawServiceResolutionUri()).build();
@@ -82,7 +79,6 @@ public class TechnicalBatchProcessor extends TechnicalProcessor implements Batch
response.setStatusCode(HttpStatusCode.ACCEPTED.getStatusCode());
}
- // TODO refactor isContinueOnError
private boolean isContinueOnError(ODataRequest request) {
final List<String> preferValues = request.getHeaders(HttpHeader.PREFER);
@@ -94,38 +90,6 @@ public class TechnicalBatchProcessor extends TechnicalProcessor implements Batch
}
}
return false;
-
- }
-
- // TODO refactor getBoundary
- private String getBoundary(String contentType) {
- if (contentType == null) {
- throw new IllegalArgumentException("Content mustn`t be null.");
- }
-
- if (contentType.toLowerCase(Locale.ENGLISH).startsWith("multipart/mixed")) {
- final String[] parameter = contentType.split(";");
-
- for (final String pair : parameter) {
- final String[] attrValue = pair.split("=");
- if (attrValue.length == 2 && "boundary".equals(attrValue[0].trim().toLowerCase(Locale.ENGLISH))) {
- if (attrValue[1].matches("([a-zA-Z0-9_\\-\\.'\\+]{1,70})|\"([a-zA-Z0-9_\\-\\.'\\+\\s\\" +
- "(\\),/:=\\?]{1,69}[a-zA-Z0-9_\\-\\.'\\+\\(\\),/:=\\?])\"")) {
-
- String boundary = attrValue[1].trim();
- if (boundary.matches("\".*\"")) {
- boundary = boundary.replace("\"", "");
- }
-
- return boundary;
- } else {
- throw new IllegalArgumentException("Invalid boundary");
- }
- }
-
- }
- }
- throw new IllegalArgumentException("Content type is not multipart mixed.");
}
@Override