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/22 10:39:46 UTC

[03/48] olingo-odata4 git commit: [OLINGO-786] First minor adaption to MetadataSerializer

[OLINGO-786] First minor adaption to MetadataSerializer


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

Branch: refs/heads/master
Commit: 3ec5a161ef02edf56a9ee6cc4f453f3583c108f4
Parents: a88800c
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Sep 30 15:28:00 2015 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Sep 30 15:28:00 2015 +0200

----------------------------------------------------------------------
 .../AbstractClientCsdlAnnotationExpression.java | 49 ---------------
 ...ctClientCsdlDynamicAnnotationExpression.java |  7 ++-
 .../ClientCsdlConstantAnnotationExpression.java | 29 +--------
 .../apache/olingo/client/core/MetadataTest.java |  6 +-
 .../api/edm/provider/CsdlAnnotation.java        |  3 +-
 .../api/edm/provider/CsdlBindingTarget.java     |  4 ++
 .../commons/api/edm/provider/CsdlEntitySet.java |  7 +++
 .../AbstractCsdlAnnotationExpression.java       | 49 +++++++++++++++
 .../CsdlConstantAnnotationExpression.java       | 58 ++++++++++++++++++
 .../olingo/commons/core/edm/AbstractEdm.java    |  2 +-
 .../core/edm/AbstractEdmAnnotatable.java        |  8 ++-
 .../EdmConstantAnnotationExpressionImpl.java    |  3 +-
 .../xml/MetadataDocumentXmlSerializer.java      | 41 +++++++++++++
 .../xml/MetadataDocumentXmlSerializerTest.java  | 22 +++++++
 .../tecsvc/provider/ContainerProvider.java      | 28 ++++++---
 .../server/tecsvc/provider/EdmTechProvider.java | 11 +++-
 .../server/tecsvc/provider/TermProvider.java    | 64 ++++++++++++++++++++
 .../serializer/xml/MetadataDocumentTest.java    | 24 ++++++--
 18 files changed, 312 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlAnnotationExpression.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlAnnotationExpression.java
deleted file mode 100644
index d362dfd..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlAnnotationExpression.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.client.core.edm.xml;
-
-import org.apache.olingo.commons.api.edm.provider.CsdlAbstractEdmItem;
-import org.apache.olingo.commons.api.edm.provider.annotation.AnnotationExpression;
-import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
-import org.apache.olingo.commons.api.edm.provider.annotation.DynamicAnnotationExpression;
-
-abstract class AbstractClientCsdlAnnotationExpression extends CsdlAbstractEdmItem implements AnnotationExpression {
-
-  private static final long serialVersionUID = -4238652997159205377L;
-
-  @Override
-  public boolean isConstant() {
-    return this instanceof ConstantAnnotationExpression;
-  }
-
-  @Override
-  public ConstantAnnotationExpression asConstant() {
-    return isConstant() ? (ConstantAnnotationExpression) this : null;
-  }
-
-  @Override
-  public boolean isDynamic() {
-    return this instanceof DynamicAnnotationExpression;
-  }
-
-  @Override
-  public DynamicAnnotationExpression asDynamic() {
-    return isDynamic() ? (DynamicAnnotationExpression) this : null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlDynamicAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlDynamicAnnotationExpression.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlDynamicAnnotationExpression.java
index 229ef87..4202471 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlDynamicAnnotationExpression.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractClientCsdlDynamicAnnotationExpression.java
@@ -25,6 +25,7 @@ import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ClassUtils;
+import org.apache.olingo.commons.api.edm.provider.annotation.AbstractCsdlAnnotationExpression;
 import org.apache.olingo.commons.api.edm.provider.annotation.AnnotationPath;
 import org.apache.olingo.commons.api.edm.provider.annotation.Apply;
 import org.apache.olingo.commons.api.edm.provider.annotation.Cast;
@@ -50,7 +51,7 @@ import java.io.IOException;
 
 @JsonDeserialize(using = AbstractClientCsdlDynamicAnnotationExpression.DynamicAnnotationExpressionDeserializer.class)
 abstract class AbstractClientCsdlDynamicAnnotationExpression
-        extends AbstractClientCsdlAnnotationExpression implements DynamicAnnotationExpression {
+        extends AbstractCsdlAnnotationExpression implements DynamicAnnotationExpression {
 
   private static final long serialVersionUID = 1093411847477874348L;
 
@@ -257,8 +258,8 @@ abstract class AbstractClientCsdlDynamicAnnotationExpression
       }
     }
 
-    private AbstractClientCsdlAnnotationExpression parseConstOrEnumExpression(final JsonParser jp) throws IOException {
-      AbstractClientCsdlAnnotationExpression result;
+    private AbstractCsdlAnnotationExpression parseConstOrEnumExpression(final JsonParser jp) throws IOException {
+      AbstractCsdlAnnotationExpression result;
       if (isAnnotationConstExprConstruct(jp)) {
         result = parseAnnotationConstExprConstruct(jp);
       } else {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlConstantAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlConstantAnnotationExpression.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlConstantAnnotationExpression.java
index 26e067f..97ac1cc 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlConstantAnnotationExpression.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ClientCsdlConstantAnnotationExpression.java
@@ -18,35 +18,10 @@
  */
 package org.apache.olingo.client.core.edm.xml;
 
-import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantAnnotationExpression;
 
 class ClientCsdlConstantAnnotationExpression
-        extends AbstractClientCsdlAnnotationExpression implements ConstantAnnotationExpression {
+        extends CsdlConstantAnnotationExpression {
 
   private static final long serialVersionUID = 5618680702707972904L;
-
-  private Type type;
-
-  private String value;
-
-  @Override
-  public Type getType() {
-    return type;
-  }
-
-  @Override
-  public void setType(final Type type) {
-    this.type = type;
-  }
-
-  @Override
-  public String getValue() {
-    return value;
-  }
-
-  @Override
-  public void setValue(final String value) {
-    this.value = value;
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java
----------------------------------------------------------------------
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 2ee68d7..566c143 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
@@ -173,7 +173,7 @@ public class MetadataTest extends AbstractTest {
     final EdmAnnotation annotation = annotationGroup.getAnnotations().get(0);
     assertNotNull(annotation);
     assertTrue(annotation.getExpression().isConstant());
-    assertEquals("Edm.String", annotation.getExpression().asConstant().getValue().getType());
+    assertEquals("String", annotation.getExpression().asConstant().getValue().getType());
 
     assertEquals(10, schema.getAnnotationGroups().get(3).getAnnotations().size());
   }
@@ -331,10 +331,10 @@ public class MetadataTest extends AbstractTest {
     assertNotNull(group);
 
     final EdmAnnotation time1 = group.getAnnotations().get(0);
-    assertEquals("Edm.TimeOfDay", time1.getExpression().asConstant().getValue().getType());
+    assertEquals("TimeOfDay", time1.getExpression().asConstant().getValue().getType());
 
     final EdmAnnotation time2 = group.getAnnotations().get(1);
-    assertEquals("Edm.TimeOfDay", time2.getExpression().asConstant().getValue().getType());
+    assertEquals("TimeOfDay", time2.getExpression().asConstant().getValue().getType());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlAnnotation.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlAnnotation.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlAnnotation.java
index 60354ca..caec733 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlAnnotation.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlAnnotation.java
@@ -50,8 +50,9 @@ public class CsdlAnnotation extends CsdlAbstractEdmItem implements CsdlAnnotatab
    * Sets the annotated expression
    * @param annotationExpression annotated expression
    */
-  public void setExpression(final AnnotationExpression annotationExpression) {
+  public CsdlAnnotation setExpression(final AnnotationExpression annotationExpression) {
     this.annotationExpression = annotationExpression;
+    return this;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlBindingTarget.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlBindingTarget.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlBindingTarget.java
index 2c8a0d3..2c9a99f 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlBindingTarget.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlBindingTarget.java
@@ -130,4 +130,8 @@ public abstract class CsdlBindingTarget extends CsdlAbstractEdmItem implements C
     return annotations;
   }
 
+  public CsdlBindingTarget setAnnotations(final List<CsdlAnnotation> annotations) {
+    this.annotations.addAll(annotations);
+    return this;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlEntitySet.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlEntitySet.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlEntitySet.java
index 3ba2c38..12b59ce 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlEntitySet.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/CsdlEntitySet.java
@@ -46,6 +46,13 @@ public class CsdlEntitySet extends CsdlBindingTarget {
   }
 
   @Override
+  public CsdlEntitySet setAnnotations(final List<CsdlAnnotation> annotations) {
+    super.setAnnotations(annotations);
+    return this;
+  }
+
+
+  @Override
   public CsdlEntitySet setType(final String type) {
     this.type = new FullQualifiedName(type);
     return this;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/AbstractCsdlAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/AbstractCsdlAnnotationExpression.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/AbstractCsdlAnnotationExpression.java
new file mode 100644
index 0000000..0c0f1d5
--- /dev/null
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/AbstractCsdlAnnotationExpression.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.api.edm.provider.annotation;
+
+import org.apache.olingo.commons.api.edm.provider.CsdlAbstractEdmItem;
+import org.apache.olingo.commons.api.edm.provider.annotation.AnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.DynamicAnnotationExpression;
+
+public abstract class AbstractCsdlAnnotationExpression extends CsdlAbstractEdmItem implements AnnotationExpression {
+
+  private static final long serialVersionUID = -4238652997159205377L;
+
+  @Override
+  public boolean isConstant() {
+    return this instanceof ConstantAnnotationExpression;
+  }
+
+  @Override
+  public ConstantAnnotationExpression asConstant() {
+    return isConstant() ? (ConstantAnnotationExpression) this : null;
+  }
+
+  @Override
+  public boolean isDynamic() {
+    return this instanceof DynamicAnnotationExpression;
+  }
+
+  @Override
+  public DynamicAnnotationExpression asDynamic() {
+    return isDynamic() ? (DynamicAnnotationExpression) this : null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/CsdlConstantAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/CsdlConstantAnnotationExpression.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/CsdlConstantAnnotationExpression.java
new file mode 100644
index 0000000..1f70276
--- /dev/null
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/annotation/CsdlConstantAnnotationExpression.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.api.edm.provider.annotation;
+
+public class CsdlConstantAnnotationExpression
+        extends AbstractCsdlAnnotationExpression implements ConstantAnnotationExpression {
+
+  private static final long serialVersionUID = 5618680702707972904L;
+
+  private Type type;
+
+  private String value;
+
+  public CsdlConstantAnnotationExpression() {
+  }
+
+  public CsdlConstantAnnotationExpression(Type type, String value) {
+    this.type = type;
+    this.value = value;
+  }
+
+  @Override
+  public Type getType() {
+    return type;
+  }
+
+  @Override
+  public void setType(final Type type) {
+    this.type = type;
+  }
+
+  @Override
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public void setValue(final String value) {
+    this.value = value;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdm.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdm.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdm.java
index f2f3c18..642de52 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdm.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdm.java
@@ -301,7 +301,7 @@ public abstract class AbstractEdm implements Edm {
     TargetQualifierMapKey key = new TargetQualifierMapKey(fqn, qualifier);
     EdmAnnotations _annotations = annotationGroups.get(key);
     if (_annotations == null) {
-      _annotations = createAnnotationGroup(targetName);
+      _annotations = createAnnotationGroup(fqn);
       if (_annotations != null) {
         annotationGroups.put(key, _annotations);
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmAnnotatable.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmAnnotatable.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmAnnotatable.java
index 223ceb1..658ca0b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmAnnotatable.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmAnnotatable.java
@@ -45,8 +45,7 @@ public abstract class AbstractEdmAnnotatable implements EdmAnnotatable {
     EdmAnnotation result = null;
     for (EdmAnnotation annotation : getAnnotations()) {
       if (term.getFullQualifiedName().equals(annotation.getTerm().getFullQualifiedName())) {
-        if (qualifier == annotation.getQualifier()
-            || (qualifier != null && qualifier.equals(annotation.getQualifier()))) {
+        if (qualifierEqual(qualifier, annotation.getQualifier())) {
           result = annotation;
           break;
         }
@@ -55,6 +54,11 @@ public abstract class AbstractEdmAnnotatable implements EdmAnnotatable {
     return result;
   }
 
+  private boolean qualifierEqual(String qualifier, String annotationQualifier) {
+    return (qualifier == null && annotationQualifier == null)
+        || (qualifier != null && qualifier.equals(annotationQualifier));
+  }
+
   @Override
   public List<EdmAnnotation> getAnnotations() {
     if (annotations == null) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
index 0096fbb..f7aca3b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
@@ -100,8 +100,7 @@ public class EdmConstantAnnotationExpressionImpl implements EdmConstantAnnotatio
         final Object valueOfString = type.valueOfString(constExprConstruct.getValue(),
             null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null,
             type.getDefaultType());
-        value = new Property(kind.getFullQualifiedName().getFullQualifiedNameAsString(),
-            null, ValueType.PRIMITIVE, valueOfString);
+        value = new Property(kind.getFullQualifiedName().getName(), null, ValueType.PRIMITIVE, valueOfString);
       } catch (EdmPrimitiveTypeException e) {
         throw new IllegalArgumentException(e);
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/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 81d516b..623f324 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
@@ -26,8 +26,11 @@ import java.util.Map;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.olingo.commons.api.data.Valuable;
 import org.apache.olingo.commons.api.edm.EdmAction;
 import org.apache.olingo.commons.api.edm.EdmActionImport;
+import org.apache.olingo.commons.api.edm.EdmAnnotatable;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmBindingTarget;
 import org.apache.olingo.commons.api.edm.EdmComplexType;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
@@ -50,6 +53,8 @@ import org.apache.olingo.commons.api.edm.EdmStructuredType;
 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.annotation.EdmAnnotationExpression;
+import org.apache.olingo.commons.api.edm.annotation.EdmConstantAnnotationExpression;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.edmx.EdmxReference;
@@ -102,6 +107,7 @@ public class MetadataDocumentXmlSerializer {
   private static final String XML_ALIAS = "Alias";
   private static final String XML_NAMESPACE = "Namespace";
   private static final String XML_TYPE_DEFINITION = "TypeDefinition";
+  private static final String XML_ANNOTATION = "Annotation";
   private static final String REFERENCE = "Reference";
   private static final String INCLUDE = "Include";
   private static final String INCLUDE_ANNOTATIONS = "IncludeAnnotations";
@@ -120,6 +126,8 @@ public class MetadataDocumentXmlSerializer {
   private static final String NS_EDM = "http://docs.oasis-open.org/odata/ns/edm";
   private static final String XML_ENTITY_SET_PATH = "EntitySetPath";
   private static final String XML_CONTAINS_TARGET = "ContainsTarget";
+  private static final String XML_TERM_ATT = "Term";
+  private static final String XML_QUALIFIER_ATT = "Qualifier";
 
   private final ServiceMetadata serviceMetadata;
   private final Map<String, String> namespaceToAlias = new HashMap<String, String>();
@@ -324,6 +332,7 @@ public class MetadataDocumentXmlSerializer {
       }
 
       appendNavigationPropertyBindings(writer, entitySet);
+      appendAnnotations(writer, entitySet);
       writer.writeEndElement();
     }
   }
@@ -482,10 +491,37 @@ public class MetadataDocumentXmlSerializer {
 
       appendNavigationProperties(writer, entityType);
 
+      appendAnnotations(writer, entityType);
+
       writer.writeEndElement();
     }
   }
 
+  private void appendAnnotations(XMLStreamWriter writer, EdmAnnotatable annotatable) throws XMLStreamException {
+    List<EdmAnnotation> annotations = annotatable.getAnnotations();
+    for (EdmAnnotation annotation : annotations) {
+      writer.writeStartElement(XML_ANNOTATION);
+      String term = getAliasedFullQualifiedName(annotation.getTerm().getFullQualifiedName(), false);
+      writer.writeAttribute(XML_TERM_ATT, term);
+      String qualifier = annotation.getQualifier();
+      if(qualifier != null) {
+        writer.writeAttribute(XML_QUALIFIER_ATT, qualifier);
+      }
+      EdmAnnotationExpression expression = annotation.getExpression();
+      if(expression != null) {
+        if(expression.isConstant()) {
+          EdmConstantAnnotationExpression constExpression = expression.asConstant();
+          Valuable value = constExpression.getValue();
+          writer.writeAttribute(value.getType(), constExpression.getValueAsString());
+        } else {
+          // TODO: mibo_150930: Handle dynamic expressions
+        }
+      }
+      writer.writeEndElement();
+    }
+  }
+
+
   private void appendNavigationProperties(final XMLStreamWriter writer, final EdmStructuredType type)
       throws XMLStreamException {
     List<String> navigationPropertyNames = new ArrayList<String>(type.getNavigationPropertyNames());
@@ -616,6 +652,10 @@ public class MetadataDocumentXmlSerializer {
 
   private String getAliasedFullQualifiedName(final EdmType type, final boolean isCollection) {
     FullQualifiedName fqn = type.getFullQualifiedName();
+    return getAliasedFullQualifiedName(fqn, isCollection);
+  }
+
+  private String getAliasedFullQualifiedName(final FullQualifiedName fqn, final boolean isCollection) {
     final String name;
     if (namespaceToAlias.get(fqn.getNamespace()) != null) {
       name = namespaceToAlias.get(fqn.getNamespace()) + "." + fqn.getName();
@@ -640,6 +680,7 @@ public class MetadataDocumentXmlSerializer {
         writer.writeStartElement(PREFIX_EDMX, INCLUDE, NS_EDMX);
         writer.writeAttribute(XML_NAMESPACE, include.getNamespace());
         if (include.getAlias() != null) {
+          namespaceToAlias.put(include.getNamespace(), include.getAlias());
           // Reference Aliases are ignored for now since they are not V2 compatible
           writer.writeAttribute(XML_ALIAS, include.getAlias());
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/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 52fc773..ea39b17 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
@@ -113,6 +113,28 @@ public class MetadataDocumentXmlSerializerTest {
         IOUtils.toString(metadata));
   }
 
+
+  /** Writes simplest (empty) Schema. */
+  @Test
+  public void writeMetadataWithSimpleSchema() throws Exception {
+    EdmSchema schema = mock(EdmSchema.class);
+    when(schema.getNamespace()).thenReturn("MyNamespace");
+    Edm edm = mock(Edm.class);
+    when(edm.getSchemas()).thenReturn(Arrays.asList(schema));
+    ServiceMetadata serviceMetadata = mock(ServiceMetadata.class);
+    when(serviceMetadata.getEdm()).thenReturn(edm);
+
+    InputStream metadata = serializer.metadataDocument(serviceMetadata).getContent();
+    assertNotNull(metadata);
+    assertEquals("<?xml version='1.0' encoding='UTF-8'?>" +
+            "<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">" +
+            "<edmx:DataServices>" +
+            "<Schema xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Namespace=\"MyNamespace\"/>" +
+            "</edmx:DataServices>" +
+            "</edmx:Edmx>",
+        IOUtils.toString(metadata));
+  }
+
   @Test
   public void writeEdmxWithLocalTestEdm() throws Exception {
     List<EdmxReference> edmxReferences = new ArrayList<EdmxReference>();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
index ff53d09..a38d7f9 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
@@ -22,6 +22,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.olingo.commons.api.edm.provider.CsdlAnnotation;
+import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantAnnotationExpression;
 import org.apache.olingo.commons.api.ex.ODataException;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.CsdlActionImport;
@@ -160,14 +163,23 @@ public class ContainerProvider {
         return new CsdlEntitySet()
             .setName("ESAllPrim")
             .setType(EntityTypeProvider.nameETAllPrim)
-            .setNavigationPropertyBindings(Arrays.asList(
-                new CsdlNavigationPropertyBinding()
-                    .setPath("NavPropertyETTwoPrimOne")
-                    .setTarget("ESTwoPrim"),
-                new CsdlNavigationPropertyBinding()
-                    .setPath("NavPropertyETTwoPrimMany")
-                    .setTarget("ESTwoPrim")
-                ));
+            .setNavigationPropertyBindings(Arrays
+                .asList(new CsdlNavigationPropertyBinding().setPath("NavPropertyETTwoPrimOne").setTarget("ESTwoPrim"),
+                    new CsdlNavigationPropertyBinding().setPath("NavPropertyETTwoPrimMany").setTarget("ESTwoPrim")))
+            .setAnnotations(Arrays.asList(new CsdlAnnotation().setTerm("Core.Description").setExpression(
+                    new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                        "Contains entities with all primitive types")),
+                new CsdlAnnotation().setTerm("Core.LongDescription").setQualifier("EnabledForEntitySet").setExpression(
+                    new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                        "System Query Options: $filter, $count, $orderby, $skip, $top, $expand, $select, $format; "
+                            + "Operations: Create, Create with Deep Insert, Create with Bind Operation, Read")),
+                new CsdlAnnotation().setTerm("Core.LongDescription").setQualifier("EnabledForEntity").setExpression(
+                    new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                        "System Query Options: $expand, $select, $format; Operations: "
+                            + "Read, Update, Update with Bind Operation, Delete")),
+                new CsdlAnnotation().setTerm("Core.LongDescription").setQualifier("EnabledNavigationProperties")
+                    .setExpression(new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                        "NavPropertyETTwoPrimOne, NavPropertyETTwoPrimMany"))));
 
       } else if (name.equals("ESCollAllPrim")) {
         return new CsdlEntitySet()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
index da47222..1e964a9 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.server.tecsvc.provider;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -43,6 +44,7 @@ import org.apache.olingo.commons.api.ex.ODataException;
 public class EdmTechProvider extends CsdlAbstractEdmProvider {
 
   public static final String nameSpace = "olingo.odata.test1";
+  public static final String CORE_VOCABULARY_NAMESPACE = "Org.OData.Core.V1";
 
   private final SchemaProvider schemaProvider;
   private final EntityTypeProvider entityTypeProvider;
@@ -52,6 +54,7 @@ public class EdmTechProvider extends CsdlAbstractEdmProvider {
   private final ActionProvider actionProvider;
   private final FunctionProvider functionProvider;
   private final TypeDefinitionProvider typeDefinitionProvider;
+  private final TermProvider termProvider;
 
   public EdmTechProvider() {
     containerProvider = new ContainerProvider(this);
@@ -62,12 +65,14 @@ public class EdmTechProvider extends CsdlAbstractEdmProvider {
     functionProvider = new FunctionProvider();
     typeDefinitionProvider = new TypeDefinitionProvider();
     schemaProvider = new SchemaProvider(this);
+    termProvider = new TermProvider();
   }
 
   @Override
   public List<CsdlAliasInfo> getAliasInfos() throws ODataException {
-    return Collections.singletonList(
-        new CsdlAliasInfo().setAlias("Namespace1_Alias").setNamespace(nameSpace));
+    return Arrays.asList(
+        new CsdlAliasInfo().setAlias("Namespace1_Alias").setNamespace(nameSpace),
+        new CsdlAliasInfo().setAlias("Core").setNamespace(CORE_VOCABULARY_NAMESPACE));
   }
 
   @Override
@@ -102,7 +107,7 @@ public class EdmTechProvider extends CsdlAbstractEdmProvider {
 
   @Override
   public CsdlTerm getTerm(final FullQualifiedName termName) throws ODataException {
-    return null;
+    return termProvider.getTerm(termName);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/TermProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/TermProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/TermProvider.java
new file mode 100644
index 0000000..8e2ae19
--- /dev/null
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/TermProvider.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.tecsvc.provider;
+
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlAnnotation;
+import org.apache.olingo.commons.api.edm.provider.CsdlTerm;
+import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.CsdlConstantAnnotationExpression;
+
+import java.util.Arrays;
+
+/**
+ */
+public class TermProvider {
+
+//  <Term Name="Description" Type="Edm.String">
+//  <Annotation Term="Core.Description" String="A brief description of a model element" />
+//  <Annotation Term="Core.IsLanguageDependent" />
+//  </Term>
+//
+//  <Term Name="LongDescription" Type="Edm.String">
+//  <Annotation Term="Core.Description" String="A lengthy description of a model element" />
+//  <Annotation Term="Core.IsLanguageDependent" />
+//  </Term>
+
+  private static FullQualifiedName TERM_DESCRIPTION = new FullQualifiedName("Org.OData.Core.V1", "Description");
+  private static FullQualifiedName TERM_LONG_DESCRIPTION =
+      new FullQualifiedName("Org.OData.Core.V1", "LongDescription");
+
+  public CsdlTerm getTerm(FullQualifiedName termName) {
+    if(TERM_DESCRIPTION.equals(termName)) {
+      return new CsdlTerm().setName("Description").setType("Edm.String")
+          .setAnnotations(Arrays.asList(new CsdlAnnotation().setTerm("Core.Description").setExpression(
+                  new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                      "A brief description of a model element")),
+              new CsdlAnnotation().setTerm("Core.IsLanguageDependent")));
+    } else if(TERM_LONG_DESCRIPTION.equals(termName)) {
+      return new CsdlTerm().setName("LongDescription").setType("Edm.String")
+          .setAnnotations(Arrays.asList(new CsdlAnnotation().setTerm("Core.Description").setExpression(
+                  new CsdlConstantAnnotationExpression(ConstantAnnotationExpression.Type.String,
+                      "A lengthy description of a model element")),
+              new CsdlAnnotation().setTerm("Core.IsLanguageDependent")));
+    }
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3ec5a161/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
index 6f59060..ec69f5f 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
@@ -49,10 +49,8 @@ public class MetadataDocumentTest {
     final String metadata = IOUtils.toString(
         odata.createSerializer(ContentType.APPLICATION_XML).metadataDocument(serviceMetadata).getContent());
     assertNotNull(metadata);
-    assertThat(metadata,
-        containsString("<edmx:Reference Uri=\"" + CORE_VOCABULARY + "\">"
-            + "<edmx:Include Namespace=\"Org.OData.Core.V1\" Alias=\"Core\"/>"
-            + "</edmx:Reference>"));
+    assertThat(metadata, containsString("<edmx:Reference Uri=\"" + CORE_VOCABULARY + "\">"
+            + "<edmx:Include Namespace=\"Org.OData.Core.V1\" Alias=\"Core\"/>" + "</edmx:Reference>"));
 
     assertThat(metadata,
         containsString("<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"));
@@ -76,6 +74,24 @@ public class MetadataDocumentTest {
             + "<Property Name=\"AdditionalPropertyString_5\" Type=\"Edm.String\"/>"
             + "</EntityType>"));
 
+//    assertThat(metadata, containsString("<EntitySet Name=\"ESAllPrim\" EntityType=\"Namespace1_Alias.ETAllPrim\">"
+//        + "<NavigationPropertyBinding Path=\"NavPropertyETTwoPrimOne\" Target=\"ESTwoPrim\"/>"
+//        + "<NavigationPropertyBinding Path=\"NavPropertyETTwoPrimMany\" Target=\"ESTwoPrim\"/>"
+//        + "</EntitySet>"));
+
+      assertThat(metadata, containsString("<EntitySet Name=\"ESAllPrim\" EntityType=\"Namespace1_Alias.ETAllPrim\">"
+        + "<NavigationPropertyBinding Path=\"NavPropertyETTwoPrimOne\" Target=\"ESTwoPrim\"/>"
+        + "<NavigationPropertyBinding Path=\"NavPropertyETTwoPrimMany\" Target=\"ESTwoPrim\"/>"
+        + "<Annotation Term=\"Core.Description\" String=\"Contains entities with all primitive types\"/>"
+        + "<Annotation Term=\"Core.LongDescription\" Qualifier=\"EnabledForEntitySet\" String=\"System Query Options:"
+        + " $filter, $count, $orderby, $skip, $top, $expand, $select, $format; Operations: Create, Create with Deep "
+        + "Insert, Create with Bind Operation, Read\"/>"
+        + "<Annotation Term=\"Core.LongDescription\" Qualifier=\"EnabledForEntity\" String=\"System Query Options: "
+        + "$expand, $select, $format; Operations: Read, Update, Update with Bind Operation, Delete\"/>"
+        + "<Annotation Term=\"Core.LongDescription\" Qualifier=\"EnabledNavigationProperties\" "
+        + "String=\"NavPropertyETTwoPrimOne, NavPropertyETTwoPrimMany\"/>"
+        + "</EntitySet>"));
+
     assertThat(metadata,
         containsString("<ComplexType Name=\"CTPrim\">"
             + "<Property Name=\"PropertyInt16\" Type=\"Edm.Int16\"/></ComplexType>"));