[OLINGO-1472]Support Scale having values variable and floating
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlProperty.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlProperty.java
index 4ac0c9a..807395d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlProperty.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlProperty.java
@@ -71,6 +71,7 @@
             final String scale = jp.nextTextValue();
             property.setScale("variable".equalsIgnoreCase(scale) || "floating".equalsIgnoreCase(scale) ?
                 0 : Integer.valueOf(scale));
+            property.setScaleAsString(scale);
           } else if ("Unicode".equals(jp.getCurrentName())) {
             property.setUnicode(BooleanUtils.toBoolean(jp.nextTextValue()));
           } else if ("SRID".equals(jp.getCurrentName())) {
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java
index 76872c1..72dcf4f 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java
@@ -585,7 +585,24 @@
    assertEquals("UI.HeaderInfo", property.getAnnotations().get(0).getTerm().
        getFullQualifiedName().getFullQualifiedNameAsString());
  }
- 
+
+ @Test
+ public void readVariableFloatingDecimalProperty() {
+   final Edm edm = fetchEdm();
+   assertNotNull(edm);
+   EdmEntityType entity = edm.getEntityTypeWithAnnotations(
+       new FullQualifiedName("SEPMRA_SO_MAN2", "I_DraftAdministrativeDataType"));
+   EdmProperty VariableDecimalType = (EdmProperty) entity.getProperty("VariableDecimalType");
+   assertEquals("variable", VariableDecimalType.getScaleAsString());
+   assertEquals(Integer.valueOf(0), VariableDecimalType.getScale());
+   assertNull(VariableDecimalType.getPrecision());
+
+   EdmProperty FloatingDecimalType = (EdmProperty) entity.getProperty("FloatingDecimalType");
+   assertEquals("floating", FloatingDecimalType.getScaleAsString());
+   assertEquals(Integer.valueOf(0), FloatingDecimalType.getScale());
+   assertEquals(Integer.valueOf(7), FloatingDecimalType.getPrecision());
+ }
+
  @Test
  public void readAnnotationOnActionImport() {
    final Edm edm = fetchEdm();
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/$metadata.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/$metadata.xml
index 1523669..85a3382 100644
--- a/lib/client-core/src/test/resources/org/apache/olingo/client/core/$metadata.xml
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/$metadata.xml
@@ -71,6 +71,8 @@
         <Property Name="DraftIsCreatedByMe" Type="Edm.Boolean"/>
         <Property Name="DraftIsLastChangedByMe" Type="Edm.Boolean"/>
         <Property Name="DraftIsProcessedByMe" Type="Edm.Boolean"/>
+        <Property Name="VariableDecimalType" Type="Edm.Decimal" Scale="variable"/>
+        <Property Name="FloatingDecimalType" Type="Edm.Decimal" Precision="7" Scale="floating"/>
         <Property Name="CreatedByUserDescription" Type="Edm.String" MaxLength="80"/>
         <Property Name="LastChangedByUserDescription" Type="Edm.String" MaxLength="80"/>
         <Property Name="InProcessByUserDescription" Type="Edm.String" MaxLength="80"/>
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmProperty.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmProperty.java
index 6d4baec..71cce4d 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmProperty.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmProperty.java
@@ -62,6 +62,11 @@
   Integer getScale();
 
   /**
+   * @return the scale as an String or null if not specified
+   */
+  String getScaleAsString();
+
+  /**
    * @return a non-negative integer or the special value <tt>variable</tt>
    */
   SRID getSrid();
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlProperty.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlProperty.java
index 3878417..593d4ee 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlProperty.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlProperty.java
@@ -50,6 +50,8 @@
 
   private Integer scale;
 
+  private String scaleAsString;
+
   private boolean unicode = true;
 
   private SRID srid;
@@ -233,6 +235,26 @@
   }
 
   /**
+   * Gets scaleAsString.
+   *
+   * @return the scaleAsString
+   */
+  public String getScaleAsString() {
+    return scaleAsString;
+  }
+
+  /**
+   * Sets scaleAsString.
+   *
+   * @param scaleAsString the scaleAsString
+   * @return the scaleAsString
+   */
+  public CsdlProperty setScaleAsString(final String scaleAsString) {
+    this.scaleAsString = scaleAsString;
+    return this;
+  }
+
+  /**
    * Is unicode.
    *
    * @return the boolean
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmPropertyImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmPropertyImpl.java
index b74292a..62fc645 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmPropertyImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmPropertyImpl.java
@@ -120,6 +120,11 @@
   }
 
   @Override
+  public String getScaleAsString() {
+    return property.getScaleAsString();
+  }
+
+  @Override
   public SRID getSrid() {
     return property.getSrid();
   }
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
index ef45af5..3f09524 100644
--- a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
@@ -57,6 +57,7 @@
     assertNull(property.getMaxLength());
     assertNull(property.getPrecision());
     assertNull(property.getScale());
+    assertNull(property.getScaleAsString());
     assertNull(property.getSrid());
     assertNotNull(property.getAnnotations());
     assertTrue(property.getAnnotations().isEmpty());
@@ -172,6 +173,7 @@
     propertyProvider.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
     propertyProvider.setPrecision(42);
     propertyProvider.setScale(12);
+    propertyProvider.setScaleAsString("12");
     propertyProvider.setMaxLength(128);
     propertyProvider.setUnicode(true);
     propertyProvider.setNullable(false);
@@ -182,6 +184,7 @@
     assertNull(property.getMimeType());
     assertEquals(Integer.valueOf(42), property.getPrecision());
     assertEquals(Integer.valueOf(12), property.getScale());
+    assertEquals("12", property.getScaleAsString());
     assertEquals(Integer.valueOf(128), property.getMaxLength());
     assertTrue(property.isUnicode());
     assertFalse(property.isNullable());
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/apply/DynamicProperty.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/apply/DynamicProperty.java
index 7cfde33..654bb04 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/apply/DynamicProperty.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/queryoption/apply/DynamicProperty.java
@@ -36,6 +36,7 @@
   private final EdmType propertyType;
   private Integer precision;
   private Integer scale;
+  private String scaleAsString;
 
   /** Creates a dynamic property with a mandatory name and an optional type. */
   public DynamicProperty(final String name, final EdmType type) {
@@ -89,6 +90,11 @@
   }
 
   @Override
+  public String getScaleAsString() {
+    return scaleAsString;
+  }
+
+  @Override
   public SRID getSrid() {
     return null;
   }
@@ -132,4 +138,9 @@
     this.scale = scale;
     return this;
   }
+
+  public DynamicProperty setScaleAsString(String scaleAsString) {
+	this.scaleAsString = scaleAsString;
+	return this;
+  }
 }