You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2018/08/06 11:21:25 UTC

olingo-odata2 git commit: [OLINGO-1283]Facet info for Function Import parameters not honored

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 9aa18ee4f -> b96a9d152


[OLINGO-1283]Facet info for Function Import parameters not honored


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/b96a9d15
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/b96a9d15
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/b96a9d15

Branch: refs/heads/master
Commit: b96a9d1525067d7241cbbc1af55ac91b6eeb18da
Parents: 9aa18ee
Author: Archana Rai <ar...@sap.com>
Authored: Mon Aug 6 16:51:16 2018 +0530
Committer: Archana Rai <ar...@sap.com>
Committed: Mon Aug 6 16:51:16 2018 +0530

----------------------------------------------------------------------
 .../odata2/api/edm/EdmSimpleTypeFacade.java      | 10 ++++++++++
 .../odata2/core/edm/EdmSimpleTypeFacadeImpl.java | 17 +++++++++++++----
 .../apache/olingo/odata2/core/edm/EdmString.java |  2 +-
 .../olingo/odata2/core/uri/UriParserImpl.java    | 19 ++++++++++++++++++-
 4 files changed, 42 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/b96a9d15/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmSimpleTypeFacade.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmSimpleTypeFacade.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmSimpleTypeFacade.java
index 82a82b8..c8988a5 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmSimpleTypeFacade.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/EdmSimpleTypeFacade.java
@@ -35,6 +35,16 @@ public interface EdmSimpleTypeFacade {
   public EdmLiteral parseUriLiteral(final String uriLiteral) throws EdmLiteralException;
 
   /**
+   * IMPORTANT: Use {@link EdmSimpleTypeKind} parseUriLiteral for the implementation.
+   * <p>This method definition is used only inside the core of this library.
+   * @param uriLiteral
+   * @param facets
+   * @return the parsed literal
+   * @throws EdmLiteralException
+   */
+  public EdmLiteral parseUriLiteral(final String uriLiteral, final EdmFacets facets) throws EdmLiteralException;
+  
+  /**
    * IMPORTANT: Use {@link EdmSimpleTypeKind#getEdmSimpleTypeInstance()} for the application development.
    * 
    * <p>This method definition is used only inside the core of this library.</p>

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/b96a9d15/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeFacadeImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeFacadeImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeFacadeImpl.java
index 25a5dc8..58d0e93 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeFacadeImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeFacadeImpl.java
@@ -18,6 +18,7 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.edm;
 
+import org.apache.olingo.odata2.api.edm.EdmFacets;
 import org.apache.olingo.odata2.api.edm.EdmLiteral;
 import org.apache.olingo.odata2.api.edm.EdmLiteralException;
 import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
@@ -31,6 +32,8 @@ import org.apache.olingo.odata2.core.exception.ODataRuntimeException;
  *  
  */
 public class EdmSimpleTypeFacadeImpl implements EdmSimpleTypeFacade {
+  
+  private EdmFacets facets = null;
 
   @Override
   public EdmLiteral parseUriLiteral(final String uriLiteral) throws EdmLiteralException {
@@ -46,7 +49,7 @@ public class EdmSimpleTypeFacadeImpl implements EdmSimpleTypeFacade {
         && uriLiteral.startsWith("'") && uriLiteral.endsWith("'")) {
       try {
         final EdmSimpleType type = getEdmSimpleType(EdmSimpleTypeKind.String);
-        return new EdmLiteral(type, type.valueOfString(uriLiteral, EdmLiteralKind.URI, null, String.class));
+        return new EdmLiteral(type, type.valueOfString(uriLiteral, EdmLiteralKind.URI, facets, String.class));
       } catch (EdmSimpleTypeException e) {
         throw new EdmLiteralException(EdmLiteralException.LITERALFORMAT.addContent(uriLiteral), e);
       }
@@ -56,7 +59,7 @@ public class EdmSimpleTypeFacadeImpl implements EdmSimpleTypeFacade {
       try {
         final int i =
             getEdmSimpleType(EdmSimpleTypeKind.Int32)
-                .valueOfString(uriLiteral, EdmLiteralKind.URI, null, Integer.class);
+                .valueOfString(uriLiteral, EdmLiteralKind.URI, facets, Integer.class);
         if (i == 0 || i == 1) {
           return new EdmLiteral(getInternalEdmSimpleTypeByString("Bit"), uriLiteral);
         }
@@ -109,8 +112,8 @@ public class EdmSimpleTypeFacadeImpl implements EdmSimpleTypeFacade {
     if (uriLiteral.startsWith("X'") || uriLiteral.startsWith("binary'")) {
       try {
         final EdmSimpleType type = getEdmSimpleType(EdmSimpleTypeKind.Binary);
-        final byte[] value = type.valueOfString(uriLiteral, EdmLiteralKind.URI, null, byte[].class);
-        return new EdmLiteral(type, type.valueToString(value, EdmLiteralKind.DEFAULT, null));
+        final byte[] value = type.valueOfString(uriLiteral, EdmLiteralKind.URI, facets, byte[].class);
+        return new EdmLiteral(type, type.valueToString(value, EdmLiteralKind.DEFAULT, facets));
       } catch (EdmSimpleTypeException e) {
         throw new EdmLiteralException(EdmLiteralException.LITERALFORMAT.addContent(uriLiteral), e);
       }
@@ -118,6 +121,12 @@ public class EdmSimpleTypeFacadeImpl implements EdmSimpleTypeFacade {
 
     throw new EdmLiteralException(EdmLiteralException.UNKNOWNLITERAL.addContent(uriLiteral));
   }
+  
+  @Override
+  public EdmLiteral parseUriLiteral(String uriLiteral, EdmFacets facets) throws EdmLiteralException {
+    this.facets = facets;
+    return parseUriLiteral(uriLiteral);
+  }
 
   private static EdmLiteral createEdmLiteral(final EdmSimpleTypeKind typeKind, final String literal,
       final int prefixLength, final int suffixLength) throws EdmLiteralException {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/b96a9d15/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmString.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmString.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmString.java
index 0be9b64..e52d46e 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmString.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmString.java
@@ -58,7 +58,7 @@ public class EdmString extends AbstractSimpleType {
 
     if (facets != null
         && (facets.isUnicode() != null && !facets.isUnicode() && !PATTERN_ASCII.matcher(result).matches()
-        || facets.getMaxLength() != null && facets.getMaxLength() < result.length())) {
+        || facets.getMaxLength() != null && facets.getMaxLength()!=0 && facets.getMaxLength() < result.length())) {
       throw new EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets));
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/b96a9d15/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
index ac1927e..8373df7 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
@@ -35,6 +35,7 @@ import org.apache.olingo.odata2.api.edm.EdmEntityContainer;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFacets;
 import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
 import org.apache.olingo.odata2.api.edm.EdmLiteral;
 import org.apache.olingo.odata2.api.edm.EdmLiteralException;
@@ -893,7 +894,7 @@ public class UriParserImpl extends UriParser {
           }
         }
 
-        EdmLiteral uriLiteral = parseLiteral(value, (EdmSimpleType) parameter.getType());
+        EdmLiteral uriLiteral = parseLiteral(value, (EdmSimpleType) parameter.getType(), parameter.getFacets());
         uriResult.addFunctionImportParameter(parameterName, uriLiteral);
       }
     }
@@ -901,6 +902,22 @@ public class UriParserImpl extends UriParser {
     uriResult.setCustomQueryOptions(otherQueryParameters);
   }
 
+  private EdmLiteral parseLiteral(String value, EdmSimpleType expectedType, EdmFacets facets) 
+      throws UriSyntaxException {
+    EdmLiteral literal;
+    try {
+      literal = simpleTypeFacade.parseUriLiteral(value, facets);
+    } catch (EdmLiteralException e) {
+      throw convertEdmLiteralException(e);
+    }
+
+    if (expectedType.isCompatible(literal.getType())) {
+      return literal;
+    } else {
+      throw new UriSyntaxException(UriSyntaxException.INCOMPATIBLELITERAL.addContent(value, expectedType));
+    }
+  }
+
   private EdmLiteral parseLiteral(final String value, final EdmSimpleType expectedType) throws UriSyntaxException {
     EdmLiteral literal;
     try {