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 <[email protected]> Authored: Tue Oct 20 16:28:09 2015 +0200 Committer: Christian Amend <[email protected]> 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; }
