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

Reply via email to