You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/02/19 14:41:53 UTC

[13/29] [OLINGO-170] Moved provider and implementation to server module

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Action.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Action.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Action.java
new file mode 100644
index 0000000..7c7feb4
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Action.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+public class Action extends Operation {
+  @Override
+  public Action setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public Action setBound(final boolean isBound) {
+    this.isBound = isBound;
+    return this;
+  }
+
+  @Override
+  public Action setEntitySetPath(final EntitySetPath entitySetPath) {
+    this.entitySetPath = entitySetPath;
+    return this;
+  }
+
+  @Override
+  public Action setParameters(final List<Parameter> parameters) {
+    this.parameters = parameters;
+    return this;
+  }
+
+  @Override
+  public Action setReturnType(final ReturnType returnType) {
+    this.returnType = returnType;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ActionImport.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ActionImport.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ActionImport.java
new file mode 100644
index 0000000..0cb2d11
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ActionImport.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class ActionImport extends OperationImport {
+  private FullQualifiedName action;
+
+  @Override
+  public ActionImport setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public ActionImport setEntitySet(final Target entitySet) {
+    this.entitySet = entitySet;
+    return this;
+  }
+
+  public FullQualifiedName getAction() {
+    return action;
+  }
+
+  public ActionImport setAction(final FullQualifiedName action) {
+    this.action = action;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/AliasInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/AliasInfo.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/AliasInfo.java
new file mode 100644
index 0000000..11057e3
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/AliasInfo.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+public class AliasInfo {
+  private String namespace;
+  private String alias;
+
+  public String getNamespace() {
+    return namespace;
+  }
+
+  public AliasInfo setNamespace(final String namespace) {
+    this.namespace = namespace;
+    return this;
+  }
+
+  public String getAlias() {
+    return alias;
+  }
+
+  public AliasInfo setAlias(final String alias) {
+    this.alias = alias;
+    return this;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Annotation.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Annotation.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Annotation.java
new file mode 100644
index 0000000..a7f3644
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Annotation.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class Annotation {
+  private FullQualifiedName term;
+  // Target should be a target path
+//  private String targetPath;
+  private String qualifier;
+  private Expression expression;
+  private List<Annotation> annotation;
+
+  public FullQualifiedName getTerm() {
+    return term;
+  }
+
+  public Annotation setTerm(final FullQualifiedName term) {
+    this.term = term;
+    return this;
+  }
+
+  public String getQualifier() {
+    return qualifier;
+  }
+
+  public Annotation setQualifier(final String qualifier) {
+    this.qualifier = qualifier;
+    return this;
+  }
+
+  public Expression getExpression() {
+    return expression;
+  }
+
+  public Annotation setExpression(final Expression expression) {
+    this.expression = expression;
+    return this;
+  }
+
+  public List<Annotation> getAnnotation() {
+    return annotation;
+  }
+
+  public Annotation setAnnotation(final List<Annotation> annotation) {
+    this.annotation = annotation;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/BindingTarget.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/BindingTarget.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/BindingTarget.java
new file mode 100644
index 0000000..d28e05a
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/BindingTarget.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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public abstract class BindingTarget {
+
+  protected String name;
+  protected FullQualifiedName type;
+  protected List<NavigationPropertyBinding> navigationPropertyBindings;
+
+  public String getName() {
+    return name;
+  }
+
+  public BindingTarget setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public FullQualifiedName getType() {
+    return type;
+  }
+
+  public BindingTarget setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  public List<NavigationPropertyBinding> getNavigationPropertyBindings() {
+    return navigationPropertyBindings;
+  }
+
+  public BindingTarget setNavigationPropertyBindings(final List<NavigationPropertyBinding> navigationPropertyBindings) {
+    this.navigationPropertyBindings = navigationPropertyBindings;
+    return this;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ComplexType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ComplexType.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ComplexType.java
new file mode 100644
index 0000000..2741f97
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ComplexType.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class ComplexType extends StructuralType {
+
+  @Override
+  public ComplexType setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public ComplexType setOpenType(final boolean isOpenType) {
+    this.isOpenType = isOpenType;
+    return this;
+  }
+
+  @Override
+  public ComplexType setBaseType(final FullQualifiedName baseType) {
+    this.baseType = baseType;
+    return this;
+  }
+
+  @Override
+  public ComplexType setAbstract(final boolean isAbstract) {
+    this.isAbstract = isAbstract;
+    return this;
+  }
+
+  @Override
+  public ComplexType setProperties(final List<Property> properties) {
+    this.properties = properties;
+    return this;
+  }
+
+  @Override
+  public ComplexType setNavigationProperties(final List<NavigationProperty> navigationProperties) {
+    this.navigationProperties = navigationProperties;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EdmProvider.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EdmProvider.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EdmProvider.java
new file mode 100644
index 0000000..187fda9
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EdmProvider.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.ODataException;
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public abstract class EdmProvider {
+
+  /**
+   * This method should return an {@link EnumType} or <b>null</b> if nothing is found
+   * @param enumTypeName
+   * @return {@link EnumType} for given name
+   * @throws ODataException
+   */
+  public EnumType getEnumType(final FullQualifiedName enumTypeName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link TypeDefinition} or <b>null</b> if nothing is found
+   * @param typeDefinitionName
+   * @return {@link TypeDefinition} for given name
+   * @throws ODataException
+   */
+  public TypeDefinition getTypeDefinition(final FullQualifiedName typeDefinitionName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link EntityType} or <b>null</b> if nothing is found
+   * @param entityTypeName
+   * @return {@link EntityType} for the given name
+   * @throws ODataException
+   */
+  public EntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a {@link ComplexType} or <b>null</b> if nothing is found
+   * @param complexTypeName
+   * @return {@link StructuralType} for the given name
+   * @throws ODataException
+   */
+  public ComplexType getComplexType(final FullQualifiedName complexTypeName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a list of all {@link Action} for the FullQualifiedname or <b>null</b> if nothing is found
+   * @param actionName
+   * @return List of {@link Action} or null
+   * @throws ODataException
+   */
+  public List<Action> getActions(final FullQualifiedName actionName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a list of all {@link Function} for the FullQualifiedname or <b>null</b> if nothing is
+   * found
+   * @param functionName
+   * @return List of {@link Function} or null
+   * @throws ODataException
+   */
+  public List<Function> getFunctions(final FullQualifiedName functionName) throws ODataException {
+    return null;
+  };
+
+  // TODO: document
+  public Term getTerm(final FullQualifiedName termName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link EntitySet} or <b>null</b> if nothing is found
+   * @param entityContainer this EntitySet is contained in
+   * @param entitySetName
+   * @return {@link EntitySet} for the given container and entityset name
+   * @throws ODataException
+   */
+  public EntitySet getEntitySet(final FullQualifiedName entityContainer, final String entitySetName)
+      throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link Singleton} or <b>null</b> if nothing is found
+   * @param entityContainer this Singleton is contained in
+   * @param singletonName
+   * @return {@link Singleton} for given container and singleton name
+   * @throws ODataException
+   */
+  public Singleton getSingleton(final FullQualifiedName entityContainer, final String singletonName)
+      throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link ActionImport} or <b>null</b> if nothing is found
+   * @param entityContainer this ActionImport is contained in
+   * @param actionImportName
+   * @return {@link ActionImport} for the given container and ActionImport name
+   * @throws ODataException
+   */
+  public ActionImport getActionImport(final FullQualifiedName entityContainer, final String actionImportName)
+      throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a {@link FunctionImport} or <b>null</b> if nothing is found
+   * @param entityContainer this FunctionImport is contained in
+   * @param functionImportName
+   * @return {@link FunctionImport} for the given container name and function import name
+   * @throws ODataException
+   */
+  public FunctionImport getFunctionImport(final FullQualifiedName entityContainer, final String functionImportName)
+      throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return an {@link EntityContainerInfo} or <b>null</b> if nothing is found
+   * @param name (null for default container)
+   * @return {@link EntityContainerInfo} for the given name
+   * @throws ODataException
+   */
+  public EntityContainerInfo getEntityContainerInfo(final FullQualifiedName entityContainerName) throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a list of all namespaces which have an alias
+   * @return List of alias info
+   * @throws ODataException
+   */
+  public List<AliasInfo> getAliasInfos() throws ODataException {
+    return null;
+  };
+
+  /**
+   * This method should return a collection of all {@link Schema}
+   * @return List<{@link Schema}>
+   * @throws ODataException
+   */
+  public List<Schema> getSchemas() throws ODataException {
+    return null;
+  };
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainer.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainer.java
new file mode 100644
index 0000000..8eafd3d
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainer.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class EntityContainer {
+
+  private String name;
+  private FullQualifiedName extendsContainer;
+  private List<EntitySet> entitySets;
+  private List<ActionImport> actionImports;
+  private List<FunctionImport> functionImports;
+  private List<Singleton> singletons;
+
+  // Annotations
+
+  public String getName() {
+    return name;
+  }
+
+  public EntityContainer setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public FullQualifiedName getExtendsContainer() {
+    return extendsContainer;
+  }
+
+  public EntityContainer setExtendsContainer(final FullQualifiedName extendsContainer) {
+    this.extendsContainer = extendsContainer;
+    return this;
+  }
+
+  public List<EntitySet> getEntitySets() {
+    return entitySets;
+  }
+
+  public EntityContainer setEntitySets(final List<EntitySet> entitySets) {
+    this.entitySets = entitySets;
+    return this;
+  }
+
+  public List<ActionImport> getActionImports() {
+    return actionImports;
+  }
+
+  public EntityContainer setActionImports(final List<ActionImport> actionImports) {
+    this.actionImports = actionImports;
+    return this;
+  }
+
+  public List<FunctionImport> getFunctionImports() {
+    return functionImports;
+  }
+
+  public EntityContainer setFunctionImports(final List<FunctionImport> functionImports) {
+    this.functionImports = functionImports;
+    return this;
+  }
+
+  public List<Singleton> getSingletons() {
+    return singletons;
+  }
+
+  public EntityContainer setSingletons(final List<Singleton> singletons) {
+    this.singletons = singletons;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
new file mode 100644
index 0000000..3f83b8d
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class EntityContainerInfo {
+  private FullQualifiedName containerName;
+  private FullQualifiedName extendsContainer;
+
+  public FullQualifiedName getContainerName() {
+    return containerName;
+  }
+
+  public EntityContainerInfo setContainerName(final FullQualifiedName containerName) {
+    this.containerName = containerName;
+    return this;
+  }
+
+  public FullQualifiedName getExtendsContainer() {
+    return extendsContainer;
+  }
+
+  public EntityContainerInfo setExtendsContainer(final FullQualifiedName extendsContainer) {
+    this.extendsContainer = extendsContainer;
+    return this;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySet.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySet.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySet.java
new file mode 100644
index 0000000..ddf1e08
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySet.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class EntitySet extends BindingTarget {
+
+  private boolean includeInServiceDocument;
+
+  @Override
+  public EntitySet setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public EntitySet setNavigationPropertyBindings(final List<NavigationPropertyBinding> navigationPropertyBindings) {
+    this.navigationPropertyBindings = navigationPropertyBindings;
+    return this;
+  }
+
+  @Override
+  public EntitySet setType(final FullQualifiedName entityType) {
+    type = entityType;
+    return this;
+  }
+
+  public boolean isIncludeInServiceDocument() {
+    return includeInServiceDocument;
+  }
+
+  public EntitySet setIncludeInServiceDocument(final boolean includeInServiceDocument) {
+    this.includeInServiceDocument = includeInServiceDocument;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySetPath.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySetPath.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySetPath.java
new file mode 100644
index 0000000..7dad11a
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntitySetPath.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+//TODO: Do we really need this class?
+public class EntitySetPath {
+
+  private String bindingParameter;
+  private String path;
+
+  public String getBindingParameter() {
+    return bindingParameter;
+  }
+
+  public EntitySetPath setBindingParameter(final String bindingParameter) {
+    this.bindingParameter = bindingParameter;
+    return this;
+  }
+
+  public String getPath() {
+    return path;
+  }
+
+  public EntitySetPath setPath(final String path) {
+    this.path = path;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityType.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityType.java
new file mode 100644
index 0000000..153ed3c
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityType.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class EntityType extends StructuralType {
+
+  private List<PropertyRef> key;
+  private boolean hasStream;
+
+  public boolean hasStream() {
+    return hasStream;
+  }
+
+  public EntityType setHasStream(final boolean hasStream) {
+    this.hasStream = hasStream;
+    return this;
+  }
+
+  public List<PropertyRef> getKey() {
+    return key;
+  }
+
+  public EntityType setKey(final List<PropertyRef> key) {
+    this.key = key;
+    return this;
+  }
+
+  @Override
+  public EntityType setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public EntityType setOpenType(final boolean isOpenType) {
+    this.isOpenType = isOpenType;
+    return this;
+  }
+
+  @Override
+  public EntityType setBaseType(final FullQualifiedName baseType) {
+    this.baseType = baseType;
+    return this;
+  }
+
+  @Override
+  public EntityType setAbstract(final boolean isAbstract) {
+    this.isAbstract = isAbstract;
+    return this;
+  }
+
+  @Override
+  public EntityType setProperties(final List<Property> properties) {
+    this.properties = properties;
+    return this;
+  }
+
+  @Override
+  public EntityType setNavigationProperties(final List<NavigationProperty> navigationProperties) {
+    this.navigationProperties = navigationProperties;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumMember.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumMember.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumMember.java
new file mode 100644
index 0000000..3fe7236
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumMember.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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmMember;
+
+public class EnumMember implements EdmMember {
+
+  private String name;
+  private String value;
+
+  // Annotations?
+
+  @Override
+  public String getName() {
+    return name;
+  }
+
+  public EnumMember setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public String getValue() {
+    return value;
+  }
+
+  public EnumMember setValue(final String value) {
+    this.value = value;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumType.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumType.java
new file mode 100644
index 0000000..b465af2
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EnumType.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class EnumType {
+
+  private String name;
+  private boolean isFlags;
+  // Underlying Type can only be primitve...
+  private FullQualifiedName underlyingType;
+  private List<EnumMember> members;
+
+  // Facets
+  // Annotations?
+
+  public String getName() {
+    return name;
+  }
+
+  public EnumType setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public boolean isFlags() {
+    return isFlags;
+  }
+
+  public EnumType setFlags(final boolean isFlags) {
+    this.isFlags = isFlags;
+    return this;
+  }
+
+  public FullQualifiedName getUnderlyingType() {
+    return underlyingType;
+  }
+
+  public EnumType setUnderlyingType(final FullQualifiedName underlyingType) {
+    this.underlyingType = underlyingType;
+    return this;
+  }
+
+  public List<EnumMember> getMembers() {
+    return members;
+  }
+
+  public EnumType setMembers(final List<EnumMember> members) {
+    this.members = members;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Expression.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Expression.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Expression.java
new file mode 100644
index 0000000..fd8361c
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Expression.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+//TODO: Expression implementation
+public class Expression {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Function.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Function.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Function.java
new file mode 100644
index 0000000..6be13e6
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Function.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+public class Function extends Operation {
+
+  private boolean isComposable;
+
+  public boolean isComposable() {
+    return isComposable;
+  }
+
+  public Function setComposable(final boolean isComposable) {
+    this.isComposable = isComposable;
+    return this;
+  }
+
+  @Override
+  public Function setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public Function setBound(final boolean isBound) {
+    this.isBound = isBound;
+    return this;
+  }
+
+  @Override
+  public Function setEntitySetPath(final EntitySetPath entitySetPath) {
+    this.entitySetPath = entitySetPath;
+    return this;
+  }
+
+  @Override
+  public Function setParameters(final List<Parameter> parameters) {
+    this.parameters = parameters;
+    return this;
+  }
+
+  @Override
+  public Function setReturnType(final ReturnType returnType) {
+    this.returnType = returnType;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/FunctionImport.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/FunctionImport.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/FunctionImport.java
new file mode 100644
index 0000000..a3ec68c
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/FunctionImport.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class FunctionImport extends OperationImport {
+
+  private FullQualifiedName function;
+  private boolean includeInServiceDocument;
+
+  @Override
+  public String getName() {
+    return name;
+  }
+
+  @Override
+  public FunctionImport setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public FunctionImport setEntitySet(final Target entitySet) {
+    this.entitySet = entitySet;
+    return this;
+  }
+
+  public FullQualifiedName getFunction() {
+    return function;
+  }
+
+  public FunctionImport setFunction(final FullQualifiedName function) {
+    this.function = function;
+    return this;
+  }
+
+  public boolean isIncludeInServiceDocument() {
+    return includeInServiceDocument;
+  }
+
+  public FunctionImport setIncludeInServiceDocument(final boolean includeInServiceDocument) {
+    this.includeInServiceDocument = includeInServiceDocument;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Mapping.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Mapping.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Mapping.java
new file mode 100644
index 0000000..45f785d
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Mapping.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmMapping;
+
+public class Mapping implements EdmMapping {
+
+  private String value;
+  private Object object;
+  private String mediaResourceSourceKey;
+  private String mediaResourceMimeTypeKey;
+
+  @Override
+  public String getInternalName() {
+    return value;
+  }
+
+  @Override
+  public Object getObject() {
+    return object;
+  }
+
+  @Override
+  public String getMediaResourceSourceKey() {
+    return mediaResourceSourceKey;
+  }
+
+  @Override
+  public String getMediaResourceMimeTypeKey() {
+    return mediaResourceMimeTypeKey;
+  }
+
+  /**
+   * Sets the value for this {@link Mapping}.
+   * @param value
+   * @return {@link Mapping} for method chaining
+   */
+  public Mapping setInternalName(final String value) {
+    this.value = value;
+    return this;
+  }
+
+  /**
+   * Sets an object. This method can be used by a provider to set whatever it wants to associate with this.
+   * @param object
+   * @return {@link Mapping} for method chaining
+   */
+  public Mapping setObject(final Object object) {
+    this.object = object;
+    return this;
+  }
+
+  /**
+   * Sets the key for the resource source key which is used for the lookup in the data map
+   * @param mediaResourceSourceKey under which the source can be found in the data map
+   * @return {@link Mapping} for method chaining
+   */
+  public Mapping setMediaResourceSourceKey(final String mediaResourceSourceKey) {
+    this.mediaResourceSourceKey = mediaResourceSourceKey;
+    return this;
+  }
+
+  /**
+   * Sets the key for the resource mime type key which is used for the lookup in the data map
+   * @param mediaResourceMimeTypeKey under which the mime type can be found in the data map
+   * @return {@link Mapping} for method chaining
+   */
+  public Mapping setMediaResourceMimeTypeKey(final String mediaResourceMimeTypeKey) {
+    this.mediaResourceMimeTypeKey = mediaResourceMimeTypeKey;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationProperty.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationProperty.java
new file mode 100644
index 0000000..1eb04a6
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationProperty.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.odata4.commons.api.edm.constants.EdmOnDelete;
+
+public class NavigationProperty {
+
+  private String name;
+  private FullQualifiedName type;
+  private boolean isCollection;
+
+  private String partner;
+  private boolean containsTarget;
+  private List<ReferentialConstraint> referentialConstraints;
+  // Facets
+  private Boolean nullable;
+  // Refactor this onDelete
+  private EdmOnDelete onDelete;
+
+//Annotations?
+
+  public String getName() {
+    return name;
+  }
+
+  public boolean isCollection() {
+    return isCollection;
+  }
+
+  public NavigationProperty setCollection(final boolean isCollection) {
+    this.isCollection = isCollection;
+    return this;
+  }
+
+  public NavigationProperty setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public FullQualifiedName getType() {
+    return type;
+  }
+
+  public NavigationProperty setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  public String getPartner() {
+    return partner;
+  }
+
+  public NavigationProperty setPartner(final String partner) {
+    this.partner = partner;
+    return this;
+  }
+
+  public boolean isContainsTarget() {
+    return containsTarget;
+  }
+
+  public NavigationProperty setContainsTarget(final boolean containsTarget) {
+    this.containsTarget = containsTarget;
+    return this;
+  }
+
+  public List<ReferentialConstraint> getReferentialConstraints() {
+    return referentialConstraints;
+  }
+
+  public NavigationProperty setReferentialConstraints(final List<ReferentialConstraint> referentialConstraints) {
+    this.referentialConstraints = referentialConstraints;
+    return this;
+  }
+
+  public Boolean getNullable() {
+    return nullable;
+  }
+
+  public NavigationProperty setNullable(final Boolean nullable) {
+    this.nullable = nullable;
+    return this;
+  }
+
+  public EdmOnDelete getOnDelete() {
+    return onDelete;
+  }
+
+  public NavigationProperty setOnDelete(final EdmOnDelete onDelete) {
+    this.onDelete = onDelete;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationPropertyBinding.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationPropertyBinding.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationPropertyBinding.java
new file mode 100644
index 0000000..d64c74b
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/NavigationPropertyBinding.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+public class NavigationPropertyBinding {
+
+  private String path;
+  private Target target;
+
+  public String getPath() {
+    return path;
+  }
+
+  public NavigationPropertyBinding setPath(final String path) {
+    this.path = path;
+    return this;
+  }
+
+  public Target getTarget() {
+    return target;
+  }
+
+  public NavigationPropertyBinding setTarget(final Target target) {
+    this.target = target;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Operation.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Operation.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Operation.java
new file mode 100644
index 0000000..aec6e40
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Operation.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+public abstract class Operation {
+
+  protected String name;
+  protected boolean isBound;
+  // Do we need EntitySetPath as a class?
+  protected EntitySetPath entitySetPath;
+  protected List<Parameter> parameters;
+  protected ReturnType returnType;
+
+  // Annotations?
+
+  public String getName() {
+    return name;
+  }
+
+  public Operation setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public boolean isBound() {
+    return isBound;
+  }
+
+  public Operation setBound(final boolean isBound) {
+    this.isBound = isBound;
+    return this;
+  }
+
+  public EntitySetPath getEntitySetPath() {
+    return entitySetPath;
+  }
+
+  public Operation setEntitySetPath(final EntitySetPath entitySetPath) {
+    this.entitySetPath = entitySetPath;
+    return this;
+  }
+
+  public List<Parameter> getParameters() {
+    return parameters;
+  }
+
+  public Operation setParameters(final List<Parameter> parameters) {
+    this.parameters = parameters;
+    return this;
+  }
+
+  public ReturnType getReturnType() {
+    return returnType;
+  }
+
+  public Operation setReturnType(final ReturnType returnType) {
+    this.returnType = returnType;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/OperationImport.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/OperationImport.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/OperationImport.java
new file mode 100644
index 0000000..53cb5df
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/OperationImport.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+public abstract class OperationImport {
+
+  protected String name;
+  protected Target entitySet;
+
+  // Annotations?
+
+  public String getName() {
+    return name;
+  }
+
+  public OperationImport setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public Target getEntitySet() {
+    return entitySet;
+  }
+
+  public OperationImport setEntitySet(final Target entitySet) {
+    this.entitySet = entitySet;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Parameter.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Parameter.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Parameter.java
new file mode 100644
index 0000000..78ee179
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Parameter.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class Parameter {
+
+  private String name;
+  private FullQualifiedName type;
+  private boolean isCollection;
+  private Mapping mapping;
+
+  // Facets?
+  private Boolean nullable;
+  private Integer maxLength;
+  private Integer precision;
+  private Integer scale;
+
+  public String getName() {
+    return name;
+  }
+
+  public Parameter setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public FullQualifiedName getType() {
+    return type;
+  }
+
+  public Parameter setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  public boolean isCollection() {
+    return isCollection;
+  }
+
+  public Parameter setCollection(final boolean isCollection) {
+    this.isCollection = isCollection;
+    return this;
+  }
+
+  public Boolean getNullable() {
+    return nullable;
+  }
+
+  public Parameter setNullable(final Boolean nullable) {
+    this.nullable = nullable;
+    return this;
+  }
+
+  public Integer getMaxLength() {
+    return maxLength;
+  }
+
+  public Parameter setMaxLength(final Integer maxLength) {
+    this.maxLength = maxLength;
+    return this;
+  }
+
+  public Integer getPrecision() {
+    return precision;
+  }
+
+  public Parameter setPrecision(final Integer precision) {
+    this.precision = precision;
+    return this;
+  }
+
+  public Integer getScale() {
+    return scale;
+  }
+
+  public Parameter setScale(final Integer scale) {
+    this.scale = scale;
+    return this;
+  }
+
+  public Mapping getMapping() {
+    return mapping;
+  }
+
+  public Parameter setMapping(final Mapping mapping) {
+    this.mapping = mapping;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Property.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Property.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Property.java
new file mode 100644
index 0000000..58779c2
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Property.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class Property {
+
+  private String name;
+  // Can be simple or complex
+  private FullQualifiedName type;
+  private boolean collection;
+
+  // TODO: Mimetype and mapping what here
+  private String mimeType;
+  private Mapping mapping;
+
+  // Facets
+  private String defaultValue;
+  private Boolean nullable;
+  private Integer maxLength;
+  private Integer precision;
+  private Integer scale;
+  private Boolean unicode;
+
+  public String getName() {
+    return name;
+  }
+
+  public Property setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public FullQualifiedName getType() {
+    return type;
+  }
+
+  public Property setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  public boolean isCollection() {
+    return collection;
+  }
+
+  public Property setCollection(final boolean isCollection) {
+    collection = isCollection;
+    return this;
+  }
+
+  public String getDefaultValue() {
+    return defaultValue;
+  }
+
+  public Property setDefaultValue(final String defaultValue) {
+    this.defaultValue = defaultValue;
+    return this;
+  }
+
+  public Boolean getNullable() {
+    return nullable;
+  }
+
+  public Property setNullable(final Boolean nullable) {
+    this.nullable = nullable;
+    return this;
+  }
+
+  public Integer getMaxLength() {
+    return maxLength;
+  }
+
+  public Property setMaxLength(final Integer maxLength) {
+    this.maxLength = maxLength;
+    return this;
+  }
+
+  public Integer getPrecision() {
+    return precision;
+  }
+
+  public Property setPrecision(final Integer precision) {
+    this.precision = precision;
+    return this;
+  }
+
+  public Integer getScale() {
+    return scale;
+  }
+
+  public Property setScale(final Integer scale) {
+    this.scale = scale;
+    return this;
+  }
+
+  public Boolean isUnicode() {
+    return unicode;
+  }
+
+  public Property setUnicode(final Boolean isUnicode) {
+    unicode = isUnicode;
+    return this;
+  }
+
+  public String getMimeType() {
+    return mimeType;
+  }
+
+  public Property setMimeType(final String mimeType) {
+    this.mimeType = mimeType;
+    return this;
+  }
+
+  public Mapping getMapping() {
+    return mapping;
+  }
+
+  public Property setMapping(final Mapping mapping) {
+    this.mapping = mapping;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/PropertyRef.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/PropertyRef.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/PropertyRef.java
new file mode 100644
index 0000000..25d16d6
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/PropertyRef.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+public class PropertyRef {
+
+  private String propertyName;
+  private String alias;
+  private String path;
+
+  public String getPath() {
+    return path;
+  }
+
+  public PropertyRef setPath(final String path) {
+    this.path = path;
+    return this;
+  }
+
+  public String getPropertyName() {
+    return propertyName;
+  }
+
+  public PropertyRef setPropertyName(final String name) {
+    propertyName = name;
+    return this;
+  }
+
+  public String getAlias() {
+    return alias;
+  }
+
+  public PropertyRef setAlias(final String alias) {
+    this.alias = alias;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReferentialConstraint.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReferentialConstraint.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReferentialConstraint.java
new file mode 100644
index 0000000..27a4c47
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReferentialConstraint.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+public class ReferentialConstraint {
+
+  // TODO: check data type
+  private String property;
+  private String referencedProperty;
+
+  // Annotations
+
+  public String getProperty() {
+    return property;
+  }
+
+  public ReferentialConstraint setProperty(final String property) {
+    this.property = property;
+    return this;
+  }
+
+  public String getReferencedProperty() {
+    return referencedProperty;
+  }
+
+  public ReferentialConstraint setReferencedProperty(final String referencedProperty) {
+    this.referencedProperty = referencedProperty;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReturnType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReturnType.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReturnType.java
new file mode 100644
index 0000000..2f6abf6
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/ReturnType.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class ReturnType {
+
+  private FullQualifiedName type;
+  private boolean isCollection;
+
+  // facets
+  private Boolean nullable;
+  private Integer maxLength;
+  private Integer precision;
+  private Integer scale;
+
+  public FullQualifiedName getType() {
+    return type;
+  }
+
+  public ReturnType setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  public boolean isCollection() {
+    return isCollection;
+  }
+
+  public ReturnType setCollection(final boolean isCollection) {
+    this.isCollection = isCollection;
+    return this;
+  }
+
+  public Boolean getNullable() {
+    return nullable;
+  }
+
+  public ReturnType setNullable(final Boolean nullable) {
+    this.nullable = nullable;
+    return this;
+  }
+
+  public Integer getMaxLength() {
+    return maxLength;
+  }
+
+  public ReturnType setMaxLength(final Integer maxLength) {
+    this.maxLength = maxLength;
+    return this;
+  }
+
+  public Integer getPrecision() {
+    return precision;
+  }
+
+  public ReturnType setPrecision(final Integer precision) {
+    this.precision = precision;
+    return this;
+  }
+
+  public Integer getScale() {
+    return scale;
+  }
+
+  public ReturnType setScale(final Integer scale) {
+    this.scale = scale;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Schema.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Schema.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Schema.java
new file mode 100644
index 0000000..8a23348
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Schema.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+public class Schema {
+
+  private String namespace;
+  private String alias;
+  private List<EnumType> enumTypes;
+  private List<TypeDefinition> typeDefinitions;
+  private List<EntityType> entityTypes;
+  private List<ComplexType> complexTypes;
+  private List<Action> actions;
+  private List<Function> functions;
+  private EntityContainer entityContainer;
+  private List<Term> terms;
+
+  // Annotations
+
+  public String getNamespace() {
+    return namespace;
+  }
+
+  public Schema setNamespace(final String namespace) {
+    this.namespace = namespace;
+    return this;
+  }
+
+  public String getAlias() {
+    return alias;
+  }
+
+  public Schema setAlias(final String alias) {
+    this.alias = alias;
+    return this;
+  }
+
+  public List<EnumType> getEnumTypes() {
+    return enumTypes;
+  }
+
+  public Schema setEnumTypes(final List<EnumType> enumTypes) {
+    this.enumTypes = enumTypes;
+    return this;
+  }
+
+  public List<TypeDefinition> getTypeDefinitions() {
+    return typeDefinitions;
+  }
+
+  public Schema setTypeDefinitions(final List<TypeDefinition> typeDefinitions) {
+    this.typeDefinitions = typeDefinitions;
+    return this;
+  }
+
+  public List<EntityType> getEntityTypes() {
+    return entityTypes;
+  }
+
+  public Schema setEntityTypes(final List<EntityType> entityTypes) {
+    this.entityTypes = entityTypes;
+    return this;
+  }
+
+  public List<ComplexType> getComplexTypes() {
+    return complexTypes;
+  }
+
+  public Schema setComplexTypes(final List<ComplexType> complexTypes) {
+    this.complexTypes = complexTypes;
+    return this;
+  }
+
+  public List<Action> getActions() {
+    return actions;
+  }
+
+  public Schema setActions(final List<Action> actions) {
+    this.actions = actions;
+    return this;
+  }
+
+  public List<Function> getFunctions() {
+    return functions;
+  }
+
+  public Schema setFunctions(final List<Function> functions) {
+    this.functions = functions;
+    return this;
+  }
+
+  public EntityContainer getEntityContainer() {
+    return entityContainer;
+  }
+
+  public Schema setEntityContainer(final EntityContainer entityContainer) {
+    this.entityContainer = entityContainer;
+    return this;
+  }
+
+  public List<Term> getTerms() {
+    return terms;
+  }
+
+  public Schema setTerms(final List<Term> terms) {
+    this.terms = terms;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Singleton.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Singleton.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Singleton.java
new file mode 100644
index 0000000..1cc4fe0
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/Singleton.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public class Singleton extends BindingTarget {
+
+  @Override
+  public Singleton setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  @Override
+  public Singleton setType(final FullQualifiedName type) {
+    this.type = type;
+    return this;
+  }
+
+  @Override
+  public Singleton setNavigationPropertyBindings(final List<NavigationPropertyBinding> navigationPropertyBindings) {
+    this.navigationPropertyBindings = navigationPropertyBindings;
+    return this;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/e8dccaf0/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/StructuralType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/StructuralType.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/StructuralType.java
new file mode 100644
index 0000000..c524e6c
--- /dev/null
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/StructuralType.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * 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.odata4.server.api.edm.provider;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+
+public abstract class StructuralType {
+
+  protected String name;
+  protected boolean isOpenType;
+  protected FullQualifiedName baseType;
+  protected boolean isAbstract;
+  protected List<Property> properties;
+  protected List<NavigationProperty> navigationProperties;
+
+  // What about mapping and annotations?
+
+  public String getName() {
+    return name;
+  }
+
+  public StructuralType setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  public boolean isOpenType() {
+    return isOpenType;
+  }
+
+  public StructuralType setOpenType(final boolean isOpenType) {
+    this.isOpenType = isOpenType;
+    return this;
+  }
+
+  public FullQualifiedName getBaseType() {
+    return baseType;
+  }
+
+  public StructuralType setBaseType(final FullQualifiedName baseType) {
+    this.baseType = baseType;
+    return this;
+  }
+
+  public boolean isAbstract() {
+    return isAbstract;
+  }
+
+  public StructuralType setAbstract(final boolean isAbstract) {
+    this.isAbstract = isAbstract;
+    return this;
+  }
+
+  public List<Property> getProperties() {
+    return properties;
+  }
+
+  public StructuralType setProperties(final List<Property> properties) {
+    this.properties = properties;
+    return this;
+  }
+
+  public List<NavigationProperty> getNavigationProperties() {
+    return navigationProperties;
+  }
+
+  public StructuralType setNavigationProperties(final List<NavigationProperty> navigationProperties) {
+    this.navigationProperties = navigationProperties;
+    return this;
+  }
+}