You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/10/20 16:48:30 UTC

olingo-odata4 git commit: [OLINGO-786] Added terms to metadata document

Repository: olingo-odata4
Updated Branches:
  refs/heads/olingo786 15164da8f -> a57b7d054


[OLINGO-786] Added terms to metadata document


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

Branch: refs/heads/olingo786
Commit: a57b7d0541cbaf8e0f41ff3428292385bedc8e30
Parents: 15164da
Author: Christian Amend <ch...@sap.com>
Authored: Tue Oct 20 16:28:09 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Tue Oct 20 16:48:05 2015 +0200

----------------------------------------------------------------------
 .../xml/MetadataDocumentXmlSerializer.java      | 59 ++++++++++++++++++++
 .../xml/MetadataDocumentXmlSerializerTest.java  | 43 ++++++++++++--
 2 files changed, 98 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a57b7d05/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index b761374..52432ca 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@ -51,9 +51,11 @@ import org.apache.olingo.commons.api.edm.EdmReturnType;
 import org.apache.olingo.commons.api.edm.EdmSchema;
 import org.apache.olingo.commons.api.edm.EdmSingleton;
 import org.apache.olingo.commons.api.edm.EdmStructuredType;
+import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.TargetType;
 import org.apache.olingo.commons.api.edm.annotation.EdmApply;
 import org.apache.olingo.commons.api.edm.annotation.EdmCast;
 import org.apache.olingo.commons.api.edm.annotation.EdmConstantExpression;
@@ -147,6 +149,8 @@ public class MetadataDocumentXmlSerializer {
   private static final String XML_TERM_ATT = "Term";
   private static final String XML_QUALIFIER_ATT = "Qualifier";
   private static final String XML_PROPERTY_Value = "PropertyValue";
+  private static final String XML_BASE_TERM = "BaseTerm";
+  private static final String XML_APPLIES_TO = "AppliesTo";
 
   private final ServiceMetadata serviceMetadata;
   private final Map<String, String> namespaceToAlias = new HashMap<String, String>();
@@ -209,6 +213,8 @@ public class MetadataDocumentXmlSerializer {
     // Functions
     appendFunctions(writer, schema.getFunctions());
 
+    appendTerms(writer, schema.getTerms());
+
     // EntityContainer
     appendEntityContainer(writer, schema.getEntityContainer());
 
@@ -220,6 +226,59 @@ public class MetadataDocumentXmlSerializer {
     writer.writeEndElement();
   }
 
+  private void appendTerms(XMLStreamWriter writer, List<EdmTerm> terms) throws XMLStreamException {
+    for (EdmTerm term : terms) {
+      writer.writeStartElement(XML_TERM_ATT);
+
+      writer.writeAttribute(XML_NAME, term.getName());
+
+      writer.writeAttribute(XML_TYPE, getAliasedFullQualifiedName(term.getType(), false));
+
+      if (term.getBaseTerm() != null) {
+        writer.writeAttribute(XML_BASE_TERM, getAliasedFullQualifiedName(term.getBaseTerm().getFullQualifiedName(),
+            false));
+      }
+      
+      if(term.getAppliesTo() != null && !term.getAppliesTo().isEmpty()){
+        String appliesToString = "";
+        boolean first = true;
+        for(TargetType target : term.getAppliesTo()){
+          if(first){
+            first = false;
+            appliesToString = target.toString();
+          }else{
+            appliesToString = appliesToString + " " + target.toString();
+          }
+        }
+        writer.writeAttribute(XML_APPLIES_TO, appliesToString);
+      }
+
+      // Facets
+      if (!term.isNullable()) {
+        writer.writeAttribute(XML_NULLABLE, "" + term.isNullable());
+      }
+
+      if (term.getDefaultValue() != null) {
+        writer.writeAttribute(XML_DEFAULT_VALUE, term.getDefaultValue());
+      }
+
+      if (term.getMaxLength() != null) {
+        writer.writeAttribute(XML_MAX_LENGTH, "" + term.getMaxLength());
+      }
+
+      if (term.getPrecision() != null) {
+        writer.writeAttribute(XML_PRECISION, "" + term.getPrecision());
+      }
+
+      if (term.getScale() != null) {
+        writer.writeAttribute(XML_SCALE, "" + term.getScale());
+      }
+      
+      appendAnnotations(writer, term);
+      writer.writeEndElement();
+    }
+  }
+
   private void appendAnnotationGroups(XMLStreamWriter writer, List<EdmAnnotations> annotationGroups)
       throws XMLStreamException {
     for (EdmAnnotations annotationGroup : annotationGroups) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a57b7d05/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
index 365da7a..e750aad 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
@@ -66,12 +66,10 @@ import org.apache.olingo.commons.api.edm.provider.annotation.CsdlApply;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlCast;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlCollection;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantExpression;
-import org.apache.olingo.commons.api.edm.provider.annotation.CsdlIf;
-import org.apache.olingo.commons.api.edm.provider.annotation.CsdlIsOf;
-import org.apache.olingo.commons.api.edm.provider.annotation.CsdlPath;
-import org.apache.olingo.commons.api.edm.provider.annotation.CsdlPropertyValue;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantExpression.ConstantExpressionType;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlIf;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlIsOf;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlLabeledElement;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlLabeledElementReference;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlLogicalOrComparisonExpression;
@@ -79,7 +77,9 @@ import org.apache.olingo.commons.api.edm.provider.annotation.CsdlLogicalOrCompar
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlLogicalOrComparisonExpression.LogicalOrComparisonExpressionType;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlNavigationPropertyPath;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlNull;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlPath;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlPropertyPath;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlPropertyValue;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlRecord;
 import org.apache.olingo.commons.api.edm.provider.annotation.CsdlUrlRef;
 //CHECKSTYLE:ON
@@ -274,6 +274,17 @@ public class MetadataDocumentXmlSerializerTest {
   }
 
   @Test
+  public void terms() throws Exception {
+    String metadata = localMetadata();
+    assertTrue(metadata.contains("<Term Name=\"Term1\" Type=\"Edm.String\"/>"));
+    assertTrue(metadata
+        .contains("<Term Name=\"Term2\" Type=\"Edm.String\" Nullable=\"false\" DefaultValue=\"default\" "
+            + "MaxLength=\"1\" Precision=\"2\" Scale=\"3\"/>"));
+    assertTrue(metadata.contains("<Term Name=\"Term3\" Type=\"Edm.String\" AppliesTo=\"Property EntitySet Schema\"/>"));
+    assertTrue(metadata.contains("<Term Name=\"Term4\" Type=\"Edm.String\" BaseTerm=\"Alias.Term1\"/>"));
+  }
+
+  @Test
   public void annotationsTest() throws Exception {
     String metadata = localMetadata();
     // All constant expressions
@@ -587,6 +598,15 @@ public class MetadataDocumentXmlSerializerTest {
       // EntityContainer
       schema.setEntityContainer(getEntityContainer());
 
+      //Terms
+      List<CsdlTerm> terms = new ArrayList<CsdlTerm>();
+      terms.add(getTerm(new FullQualifiedName("ns.term")));
+      terms.add(getTerm(new FullQualifiedName("namespace.Term1")));
+      terms.add(getTerm(new FullQualifiedName("ns.Term2")));
+      terms.add(getTerm(new FullQualifiedName("ns.Term3")));
+      terms.add(getTerm(new FullQualifiedName("ns.Term4")));
+      schema.setTerms(terms);
+      
       // Annotationgroups
       List<CsdlAnnotations> annotationGroups = new ArrayList<CsdlAnnotations>();
       annotationGroups.add(getAnnotationsGroup(new FullQualifiedName("Alias.ETAbstract"), "Tablett"));
@@ -641,6 +661,21 @@ public class MetadataDocumentXmlSerializerTest {
     public CsdlTerm getTerm(FullQualifiedName termName) throws ODataException {
       if (new FullQualifiedName("ns.term").equals(termName)) {
         return new CsdlTerm().setType("Edm.String").setName("term");
+        
+      } else if(new FullQualifiedName("namespace.Term1").equals(termName)){
+        return new CsdlTerm().setType("Edm.String").setName("Term1");
+        
+      } else if(new FullQualifiedName("ns.Term2").equals(termName)){
+        return new CsdlTerm().setType("Edm.String").setName("Term2")
+            .setNullable(false).setDefaultValue("default").setMaxLength(1).setPrecision(2).setScale(3);
+        
+      } else if(new FullQualifiedName("ns.Term3").equals(termName)){
+        return new CsdlTerm().setType("Edm.String").setName("Term3")
+            .setAppliesTo(Arrays.asList("Property", "EntitySet", "Schema"));
+        
+      } else if(new FullQualifiedName("ns.Term4").equals(termName)){
+        return new CsdlTerm().setType("Edm.String").setName("Term4").setBaseTerm("namespace.Term1");
+        
       }
       return null;
     }