Repository: olingo-odata4 Updated Branches: refs/heads/master 55c4d69d8 -> 65ad2f48d
[OLINGO-472] BatchFascade refactoring to support boundary extraction Signed-off-by: Christian Amend <[email protected]> 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 <[email protected]> Authored: Tue Dec 16 12:09:40 2014 +0100 Committer: Christian Amend <[email protected]> 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
