[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;
+ }
}