You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2018/04/02 11:32:03 UTC

[22/24] olingo-odata2 git commit: [OLINGO-1253]Client Module for Olingo v2

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmFunctionImportParameter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmFunctionImportParameter.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmFunctionImportParameter.java
new file mode 100644
index 0000000..7a0ca1f
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmFunctionImportParameter.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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmFacets;
+import org.apache.olingo.odata2.api.edm.EdmMapping;
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
+import org.apache.olingo.odata2.client.api.edm.EdmDocumentation;
+
+/**
+ * Objects of this class represent function import parameters
+ * 
+ */
+public class EdmFunctionImportParameter {
+
+  private String name;
+  private String mode;
+  private EdmSimpleTypeKind type;
+  private EdmFacets facets;
+  private EdmMapping mapping;
+  private EdmDocumentation documentation;
+  private EdmAnnotations annotations;
+
+  /**
+   * @return <b>String</b> name of the parameter
+   */
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @return {@link EdmSimpleTypeKind} of this parameter
+   */
+  public EdmSimpleTypeKind getType() {
+    return type;
+  }
+
+  /**
+   * @return {@link EdmFacets} of this parameter
+   */
+  public EdmFacets getFacets() {
+    return facets;
+  }
+
+  /**
+   * @return {@link EdmMappingImpl} of this parameter
+   */
+  public EdmMapping getMapping() {
+    return mapping;
+  }
+
+  /**
+   * Sets the name of this {@link EdmFunctionImportParameter}
+   * @param name
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setName(final String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Sets the mode of this {@link EdmFunctionImportParameter}
+   * @param mode
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setMode(final String mode) {
+    this.mode = mode;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EdmSimpleTypeKind} of this {@link EdmFunctionImportParameter}
+   * @param type
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setType(final EdmSimpleTypeKind type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EdmFacets} of this {@link EdmFunctionImportParameter}
+   * @param facets
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setFacets(final EdmFacets facets) {
+    this.facets = facets;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EdmMappingImpl} of this {@link EdmFunctionImportParameter}
+   * @param mapping
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setMapping(final EdmMapping mapping) {
+    this.mapping = mapping;
+    return this;
+  }
+
+  /**
+   * Sets the {@link Documentation} of this {@link EdmFunctionImportParameter}
+   * @param documentation
+   * @return {@link EdmFunctionImportParameter} for method chaining
+   */
+  public EdmFunctionImportParameter setDocumentation(final EdmDocumentation documentation) {
+    this.documentation = documentation;
+    return this;
+  }
+
+  public void setAnnotations(EdmAnnotationsImpl annotations) {
+    this.annotations = annotations;
+  }
+  
+  public EdmAnnotations getAnnotations() {
+    return this.annotations;
+  }  
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmImpl.java
new file mode 100644
index 0000000..3933cb0
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmImpl.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.olingo.odata2.api.edm.EdmAssociation;
+import org.apache.olingo.odata2.api.edm.EdmComplexType;
+import org.apache.olingo.odata2.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.edm.EdmEntityType;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata2.api.edm.EdmServiceMetadata;
+import org.apache.olingo.odata2.api.edm.FullQualifiedName;
+import org.apache.olingo.odata2.client.api.edm.ClientEdm;
+import org.apache.olingo.odata2.client.api.edm.EdmSchema;
+
+/**
+ * Objects of this class represent Edm
+ */
+public class EdmImpl implements ClientEdm {
+
+  protected Map<FullQualifiedName, EdmEntityContainer> edmEntityContainers;
+  protected Map<FullQualifiedName, EdmEntityType> edmEntityTypes;
+  private Map<FullQualifiedName, EdmComplexType> edmComplexTypes;
+  private Map<FullQualifiedName, EdmAssociation> edmAssociations;
+  private Map<String, String> aliasToNamespaceInfo;
+  private List<EdmEntitySet> edmEntitySets;
+  private List<EdmFunctionImport> edmFunctionImports;
+  private List<EdmSchema> edmSchema;
+  private EdmEntityContainer defaultEdmEntityContainer;
+
+  public EdmImpl() {
+    edmEntityContainers = new HashMap<FullQualifiedName, EdmEntityContainer>();
+    edmEntityTypes = new HashMap<FullQualifiedName, EdmEntityType>();
+    edmComplexTypes = new HashMap<FullQualifiedName, EdmComplexType>();
+    edmAssociations = new HashMap<FullQualifiedName, EdmAssociation>();
+    aliasToNamespaceInfo = new HashMap<String, String>();
+  }
+
+  @Override
+  public EdmEntityContainer getEntityContainer(final String name)
+      throws EdmException {
+    for (Entry<FullQualifiedName, EdmEntityContainer> entry : edmEntityContainers.entrySet()) {
+      if (entry.getKey().getName().equals(name)) {
+        return entry.getValue();
+      }
+    }
+    return null;
+  }
+
+  public EdmImpl setEdmSchemas(List<EdmSchema> edmSchema) {
+    this.edmSchema = edmSchema;
+    return this;
+  }
+
+  @Override
+  public EdmEntityType getEntityType(final String namespaceOrAlias,
+      final String name) throws EdmException {
+    FullQualifiedName fqName = getNamespaceForAlias(namespaceOrAlias, name);
+    return edmEntityTypes.get(fqName);
+  }
+
+  private FullQualifiedName getNamespaceForAlias(final String namespaceOrAlias, String name)
+      throws EdmException {
+    String namespace = aliasToNamespaceInfo.get(namespaceOrAlias);
+    if (namespace != null) {
+      //Namespace to alias mapping found
+      return new FullQualifiedName(namespace, name);
+    } else {
+      //No mapping found. Parameter must be the namespace
+      return new FullQualifiedName(namespaceOrAlias, name);
+    }
+  }
+
+  @Override
+  public EdmComplexType getComplexType(final String namespaceOrAlias,
+      final String name) throws EdmException {
+    FullQualifiedName fqName = getNamespaceForAlias(namespaceOrAlias, name);
+    return edmComplexTypes.get(fqName);
+  }
+
+  @Override
+  public EdmAssociation getAssociation(final String namespaceOrAlias,
+      final String name) throws EdmException {
+    FullQualifiedName fqName = getNamespaceForAlias(namespaceOrAlias, name);
+    return edmAssociations.get(fqName);
+  }
+
+  public EdmImpl setDefaultEntityContainer(EdmEntityContainer defaultEdmEntityContainer) throws EdmException {
+    this.defaultEdmEntityContainer = defaultEdmEntityContainer;
+    return this;
+  }
+
+  @Override
+  public EdmEntityContainer getDefaultEntityContainer() throws EdmException {
+    return defaultEdmEntityContainer;
+  }
+
+  @Override
+  public List<EdmEntitySet> getEntitySets() throws EdmException {
+    return edmEntitySets;
+  }
+
+  @Override
+  public List<EdmFunctionImport> getFunctionImports() throws EdmException {
+    return edmFunctionImports;
+  }
+
+  @Override
+  public EdmServiceMetadata getServiceMetadata() {
+    return null;
+  }
+
+  public Map<FullQualifiedName, EdmEntityContainer> getEdmEntityContainers() {
+    return edmEntityContainers;
+  }
+
+  public EdmImpl setEdmEntityContainers(Map<FullQualifiedName, EdmEntityContainer> edmEntityContainers) {
+    this.edmEntityContainers = edmEntityContainers;
+    return this;
+  }
+
+  public Map<FullQualifiedName, EdmEntityType> getEdmEntityTypes() {
+    return edmEntityTypes;
+  }
+
+  public EdmImpl setEdmEntityTypes(Map<FullQualifiedName, EdmEntityType> edmEntityTypes) {
+    this.edmEntityTypes = edmEntityTypes;
+    return this;
+  }
+
+  public Map<FullQualifiedName, EdmComplexType> getEdmComplexTypes() {
+    return edmComplexTypes;
+  }
+
+  public EdmImpl setEdmComplexTypes(Map<FullQualifiedName, EdmComplexType> edmComplexTypes) {
+    this.edmComplexTypes = edmComplexTypes;
+    return this;
+  }
+
+  public Map<FullQualifiedName, EdmAssociation> getEdmAssociations() {
+    return edmAssociations;
+  }
+
+  public EdmImpl setEdmAssociations(Map<FullQualifiedName, EdmAssociation> edmAssociations) {
+    this.edmAssociations = edmAssociations;
+    return this;
+  }
+
+  public Map<String, String> getAliasToNamespaceInfo() {
+    return aliasToNamespaceInfo;
+  }
+
+  public EdmImpl setAliasToNamespaceInfo(Map<String, String> aliasToNamespaceInfo) {
+    this.aliasToNamespaceInfo = aliasToNamespaceInfo;
+    return this;
+  }
+
+  public List<EdmEntitySet> getEdmEntitySets() {
+    return edmEntitySets;
+  }
+
+  public EdmImpl setEdmEntitySets(List<EdmEntitySet> edmEntitySets) {
+    this.edmEntitySets = edmEntitySets;
+    return this;
+  }
+
+  public List<EdmFunctionImport> getEdmFunctionImports() {
+    return edmFunctionImports;
+  }
+
+  public EdmImpl setEdmFunctionImports(List<EdmFunctionImport> edmFunctionImports) {
+    this.edmFunctionImports = edmFunctionImports;
+    return this;
+  }
+
+  @Override
+  public List<EdmSchema> getSchemas() {
+    return edmSchema;
+  }
+
+  @Override
+  public String toString() {
+    return String.format("EdmImpl");
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmKeyImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmKeyImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmKeyImpl.java
new file mode 100644
index 0000000..6a3ad4b
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmKeyImpl.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmProperty;
+
+/**
+ * Objects of this class represent a key for an entity type
+ * 
+ */
+public class EdmKeyImpl {
+
+  private List<EdmProperty> keys;
+  private List<EdmAnnotationAttribute> annotationAttributes;
+  private List<EdmAnnotationElement> annotationElements;
+
+  /**
+   * @return List<{@link PropertyRef}> references to the key properties
+   */
+  public List<EdmProperty> getKeys() {
+    return keys;
+  }
+
+  /**
+   * @return List of {@link AnnotationAttribute} annotation attributes
+   */
+  public List<EdmAnnotationAttribute> getAnnotationAttributes() {
+    return annotationAttributes;
+  }
+
+  /**
+   * @return List of {@link AnnotationElement} annotation elements
+   */
+  public List<EdmAnnotationElement> getAnnotationElements() {
+    return annotationElements;
+  }
+
+  /**
+   * Sets the {@link Property}s by their {@link PropertyRef} for this {@link EdmKeyImpl}
+   * @param keys
+   * @return {@link EdmKeyImpl} for method chaining
+   */
+  public EdmKeyImpl setKeys(final List<EdmProperty> keys) {
+    this.keys = keys;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationAttribute} for this {@link EdmKeyImpl}
+   * @param annotationAttributes
+   * @return {@link EdmKeyImpl} for method chaining
+   */
+  public EdmKeyImpl setAnnotationAttributes(final List<EdmAnnotationAttribute> annotationAttributes) {
+    this.annotationAttributes = annotationAttributes;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationElement} for this {@link EdmKeyImpl}
+   * @param annotationElements
+   * @return {@link EdmKeyImpl} for method chaining
+   */
+  public EdmKeyImpl setAnnotationElements(final List<EdmAnnotationElement> annotationElements) {
+    this.annotationElements = annotationElements;
+    return this;
+  }
+  @Override
+  public String toString() {
+    StringBuffer keyValues = new StringBuffer();
+    for(EdmProperty key:keys){
+      try {
+        keyValues.append(key.getName().toString());
+      } catch (EdmException e) {
+        keyValues.append("null");
+      }
+      keyValues.append(",");
+    }
+    return String.format((keyValues.substring(0, keyValues.length()-1)).toString());
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmMappingImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmMappingImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmMappingImpl.java
new file mode 100644
index 0000000..6d09bb6
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmMappingImpl.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmMapping;
+
+/**
+ * Object of this class represent the mapping of a value to a MIME type.
+ * 
+ */
+public class EdmMappingImpl 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 EdmMappingImpl}.
+   * @param value
+   * @return {@link EdmMappingImpl} for method chaining
+   */
+  public EdmMappingImpl 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 EdmMappingImpl} for method chaining
+   */
+  public EdmMappingImpl 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 EdmMappingImpl} for method chaining
+   */
+  public EdmMappingImpl 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 EdmMappingImpl} for method chaining
+   */
+  public EdmMappingImpl setMediaResourceMimeTypeKey(final String mediaResourceMimeTypeKey) {
+    this.mediaResourceMimeTypeKey = mediaResourceMimeTypeKey;
+    return this;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(value);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNamedImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNamedImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNamedImpl.java
new file mode 100644
index 0000000..6d9411c
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNamedImpl.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmNamed;
+
+/**
+ * See in ABNF
+ * <p>
+ * <code>
+ *   Note:this pattern is overly restrictive, the normative definition is type TSimpleIdentifier in OData EDM XML Schema
+ *   <br/>
+ *   odataIdentifier             = identifierLeadingCharacter *127identifierCharacter
+ *   <br/>
+ *   identifierLeadingCharacter  = ALPHA / "_"         ; plus Unicode characters from the categories L or Nl
+ *   <br/>
+ *   identifierCharacter         = ALPHA / "_" / DIGIT ; plus Unicode characters from the categories L, Nl, Nd, Mn,
+ *   Mc, Pc, or Cf
+ *   <br/>
+ * </code>
+ * </p>
+ * And in OData V2 MC-CSDL (Release v20110610)
+ * <p>
+ * Section 2.2.6 SimpleIdentifier<br/>
+ * SimpleIdentifier is a string-based representation. The maximum length of the identifier MUST be less than 480.
+ * The below pattern represents the allowed identifiers in ECMA specification:
+ * Pattern: <code>value="[\p{L}\p{Nl}][\p{L}\p{Nl}\p{Nd}\p{Mn}\p{Mc}\p{Pc}\p{Cf}]{0,}"</code>
+ * </p>
+ *
+ */
+public abstract class EdmNamedImpl implements EdmNamed {
+  
+  private static final Pattern PATTERN_VALID_NAME = Pattern.compile(
+      "\\A[_\\p{L}\\p{Nl}][_\\p{L}\\p{Nl}\\p{Nd}\\p{Mn}\\p{Mc}\\p{Pc}\\p{Cf}]{0,}\\Z");
+ 
+  protected EdmImpl edm;
+  protected String name;
+
+  public void setEdm(EdmImpl edm) {
+    this.edm = edm;
+  }
+
+  public void setName(String name) throws EdmException  {
+    this.name = getValidatedName(name);
+  }
+
+  @Override
+  public String getName() throws EdmException {
+    return name;
+  }
+  private String getValidatedName(final String name) throws EdmException {
+    Matcher matcher = PATTERN_VALID_NAME.matcher(name);
+    if (matcher.matches()) {
+      return name;
+    }
+    throw new EdmException(EdmException.NAMINGERROR.addContent(name));
+  }
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNavigationPropertyImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNavigationPropertyImpl.java
new file mode 100644
index 0000000..11aa7e9
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmNavigationPropertyImpl.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmAssociation;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmMapping;
+import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
+import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
+import org.apache.olingo.odata2.api.edm.EdmType;
+import org.apache.olingo.odata2.api.edm.FullQualifiedName;
+import org.apache.olingo.odata2.api.edm.provider.Mapping;
+import org.apache.olingo.odata2.client.api.edm.EdmDocumentation;
+
+/**
+ * Objects of this class represent EdmNavigationProperty
+ *
+ */
+public class EdmNavigationPropertyImpl extends EdmTypedImpl implements EdmNavigationProperty, EdmAnnotatable {
+
+  private EdmAnnotations annotations;
+  private FullQualifiedName relationship;
+  private String fromRole;
+  private String toRole;
+  private EdmDocumentation documentation;
+  private Mapping mapping;
+
+  public EdmDocumentation getDocumentation() {
+    return documentation;
+  }
+
+  public void setDocumentation(EdmDocumentation documentation) {
+    this.documentation = documentation;
+  }
+
+  public void setMapping(Mapping mapping) {
+    this.mapping = mapping;
+  }
+
+
+  public void setAnnotations(EdmAnnotations annotations) {
+    this.annotations = annotations;
+  }
+
+  public void setFromRole(String fromRole) {
+    this.fromRole = fromRole;
+  }
+
+  public void setToRole(String toRole) {
+    this.toRole = toRole;
+  }
+
+  @Override
+  public EdmType getType() throws EdmException {
+    return edmType;
+  }
+
+  @Override
+  public EdmMultiplicity getMultiplicity() throws EdmException {
+    return multiplicity;
+  }
+
+  @Override
+  public EdmAssociation getRelationship() throws EdmException {
+    return edm.getAssociation(relationship.getNamespace(), relationship.getName());
+  }
+  
+  public FullQualifiedName getRelationshipName() throws EdmException {
+    return relationship;
+  }
+  
+  public void setRelationshipName( FullQualifiedName relationship){
+    this.relationship = relationship;
+  }
+
+  @Override
+  public String getFromRole() throws EdmException {
+    return fromRole;
+  }
+
+  @Override
+  public String getToRole() throws EdmException {
+    return toRole;
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+
+  @Override
+  public EdmMapping getMapping() throws EdmException {
+    return mapping;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmOnDeleteImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmOnDeleteImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmOnDeleteImpl.java
new file mode 100644
index 0000000..3f0fc01
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmOnDeleteImpl.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.EdmAction;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+import org.apache.olingo.odata2.client.api.edm.EdmDocumentation;
+import org.apache.olingo.odata2.client.core.edm.EdmOnDelete;
+
+/**
+ * Objects of this class represent an OnDelete Action
+ * 
+ */
+public class EdmOnDeleteImpl implements EdmOnDelete{
+
+  private EdmAction action;
+  private EdmDocumentation documentation;
+  private List<EdmAnnotationAttribute> annotationAttributes;
+  private List<EdmAnnotationElement> annotationElements;
+
+  /**
+   * @return {@link EdmAction} action
+   */
+  public EdmAction getAction() {
+    return action;
+  }
+
+  /**
+   * @return {@link Documentation} documentation
+   */
+  public EdmDocumentation getDocumentation() {
+    return documentation;
+  }
+
+  /**
+   * @return List of {@link AnnotationAttribute} annotation attributes
+   */
+  public List<EdmAnnotationAttribute> getAnnotationAttributes() {
+    return annotationAttributes;
+  }
+
+  /**
+   * @return List of {@link AnnotationElement} annotation elements
+   */
+  public List<EdmAnnotationElement> getAnnotationElements() {
+    return annotationElements;
+  }
+
+  /**
+   * Sets the {@link EdmAction} for this {@link EdmOnDeleteImpl}
+   * @param action
+   * @return {@link EdmOnDeleteImpl} for method chaining
+   */
+  public EdmOnDeleteImpl setAction(final EdmAction action) {
+    this.action = action;
+    return this;
+  }
+
+  /**
+   * Sets the {@link Documentation} for this {@link EdmOnDeleteImpl}
+   * @param documentation
+   * @return {@link EdmOnDeleteImpl} for method chaining
+   */
+  public EdmOnDeleteImpl setDocumentation(final EdmDocumentation documentation) {
+    this.documentation = documentation;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationAttribute} for this {@link EdmOnDeleteImpl}
+   * @param annotationAttributes
+   * @return {@link EdmOnDeleteImpl} for method chaining
+   */
+  public EdmOnDeleteImpl setAnnotationAttributes(final List<EdmAnnotationAttribute> annotationAttributes) {
+    this.annotationAttributes = annotationAttributes;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationElement} for this {@link EdmOnDeleteImpl}
+   * @param annotationElements
+   * @return {@link EdmOnDeleteImpl} for method chaining
+   */
+  public EdmOnDeleteImpl setAnnotationElements(final List<EdmAnnotationElement> annotationElements) {
+    this.annotationElements = annotationElements;
+    return this;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(action.name());
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmParameterImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmParameterImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmParameterImpl.java
new file mode 100644
index 0000000..239c99d
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmParameterImpl.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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmParameter;
+import org.apache.olingo.odata2.api.edm.EdmType;
+import org.apache.olingo.odata2.core.edm.EdmSimpleTypeFacadeImpl;
+
+/**
+ *  Objects of this class represent EdmParameter
+ */
+public class EdmParameterImpl extends EdmElementImpl implements EdmParameter, EdmAnnotatable {
+
+  private EdmFunctionImportParameter parameter;
+  private EdmAnnotations annotations;
+
+  
+  @Override
+  public EdmType getType() throws EdmException {
+    if (edmType == null) {
+      edmType = EdmSimpleTypeFacadeImpl.getEdmSimpleType(parameter.getType());
+      if (edmType == null) {
+        throw new EdmException(EdmException.TYPEPROBLEM);
+      }
+    }
+    return edmType;
+  }
+
+  /**
+   * @param parameter the parameter to set
+   */
+  public void setParameter(EdmFunctionImportParameter parameter) {
+    this.parameter = parameter;
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+
+  /**
+   * @param annotations the annotations to set
+   */
+  public void setAnnotations(EdmAnnotations annotations) {
+    this.annotations = annotations;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyImpl.java
new file mode 100644
index 0000000..91c0b00
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyImpl.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFacets;
+import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.provider.Mapping;
+import org.apache.olingo.odata2.client.api.edm.EdmDocumentation;
+
+/**
+ * Objects of this class represent EdmProperty
+ *
+ */
+public abstract class EdmPropertyImpl extends EdmElementImpl implements EdmProperty, EdmAnnotatable {
+
+  private EdmFacets facets;
+  private EdmCustomizableFeedMappings customizableFeedMappings;
+  private String mimeType;
+  private Mapping mapping;
+  private EdmDocumentation documentation;
+  private EdmAnnotations annotations;
+
+  public EdmFacets getFacets() {
+    return facets;
+  }
+
+  @Override
+  public void setFacets(EdmFacets facets) {
+    this.facets = facets;
+  }
+  
+  public void setMapping(Mapping mapping) {
+    this.mapping = mapping;
+  }
+
+  public void setDocumentation(EdmDocumentation documentation) {
+    this.documentation = documentation;
+  }
+
+  public void setCustomizableFeedMappings(EdmCustomizableFeedMappings customizableFeedMappings) {
+    this.customizableFeedMappings = customizableFeedMappings;
+  }
+
+  public void setMimeType(String mimeType) {
+    this.mimeType = mimeType;
+  }
+
+  @Override
+  public EdmCustomizableFeedMappings getCustomizableFeedMappings() throws EdmException {
+    return customizableFeedMappings;
+  }
+
+
+  public void setAnnotations(EdmAnnotations annotations) {
+    this.annotations = annotations;
+  }
+
+  @Override
+  public String getMimeType() throws EdmException {
+    return mimeType;
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyRefImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyRefImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyRefImpl.java
new file mode 100644
index 0000000..864e979
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmPropertyRefImpl.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+
+/**
+ * Objects of this class represent a reference to a property via its name
+ * 
+ * 
+ */
+public class EdmPropertyRefImpl extends EdmPropertyImpl {
+
+  protected boolean isSimple;
+
+  /**
+   * @return <b>String</b> name of the {@link Property} this {@link EdmPropertyRefImpl} is referencing to
+   */
+
+  public void setIsSimple(boolean isSimple) {
+    this.isSimple = isSimple;
+  }
+
+  @Override
+  public boolean isSimple() {
+    return isSimple;
+  }
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintImpl.java
new file mode 100644
index 0000000..131beaf
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintImpl.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmReferentialConstraint;
+import org.apache.olingo.odata2.api.edm.EdmReferentialConstraintRole;
+
+/**
+ * Objects of this class represent EdmReferentialConstraint
+ *
+ */
+public class EdmReferentialConstraintImpl implements EdmReferentialConstraint, EdmAnnotatable {
+  private EdmAnnotations annotations;
+  private EdmReferentialConstraintRole referentialConstraintDependentRole;
+  private EdmReferentialConstraintRole referentialConstraintPrincipalRole;
+
+
+  @Override
+  public EdmReferentialConstraintRole getPrincipal() throws EdmException {
+    return referentialConstraintPrincipalRole;
+  }
+
+  @Override
+  public EdmReferentialConstraintRole getDependent() throws EdmException {
+    return referentialConstraintDependentRole;
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+
+
+  public void setPrincipal(EdmReferentialConstraintRole referentialConstraintPrincipalRole) {
+    this.referentialConstraintPrincipalRole = referentialConstraintPrincipalRole;
+    
+  }
+
+  public void setDependent(EdmReferentialConstraintRole referentialConstraintDependentRole) {
+    this.referentialConstraintDependentRole = referentialConstraintDependentRole;
+    
+  }
+
+  public void setAnnotations(EdmAnnotations annotations) {
+    this.annotations = annotations;
+    
+  }
+  @Override
+  public String toString() {
+      return String.format("Dependent Role: " + referentialConstraintDependentRole.getRole() + 
+          "PrincipalRole: "+ referentialConstraintPrincipalRole);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintRoleImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintRoleImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintRoleImpl.java
new file mode 100644
index 0000000..d370e43
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmReferentialConstraintRoleImpl.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmReferentialConstraintRole;
+
+/**
+ * Objects of this class represent EdmReferentialConstraintRole
+ *
+ */
+public class EdmReferentialConstraintRoleImpl implements EdmReferentialConstraintRole, EdmAnnotatable {
+  protected List<String> refNames;
+  private EdmReferentialConstraintRole role;
+  private EdmAnnotations annotations;
+  private String roleName;
+  private List<EdmPropertyImpl> property;
+
+
+  public List<String> getRefNames() {
+    return refNames;
+  }
+
+  public void setRefNames(List<String> refNames) {
+    this.refNames = refNames;
+  }
+
+  public String getRoleName() {
+    return roleName;
+  }
+
+  @Override
+  public String getRole() {
+    return roleName;
+  }
+
+  /**
+   * @return the propertyRefs
+   */
+  public List<EdmPropertyImpl> getProperty() {
+    return property;
+  }
+
+  @Override
+  public List<String> getPropertyRefNames() {
+    return refNames;
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+
+  /**
+   * @param role the role to set
+   */
+  public void setRole(EdmReferentialConstraintRole role) {
+    this.role = role;
+  }
+
+  public void setRoleName(String roleName) {
+    this.roleName = roleName;
+    
+  }
+
+  public void setProperty(List<EdmPropertyImpl> property) {
+    this.property = property;
+    
+  }
+
+  public void setAnnotations(EdmAnnotations annotations) {
+   this.annotations = annotations;
+    
+  }  @Override
+  public String toString() {
+    return String.format(role.getRole());
+}
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSchemaImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSchemaImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSchemaImpl.java
new file mode 100644
index 0000000..68ec632
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSchemaImpl.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.List;
+import org.apache.olingo.odata2.client.api.edm.EdmSchema;
+import org.apache.olingo.odata2.client.api.edm.EdmUsing;
+import org.apache.olingo.odata2.api.edm.EdmEntityType;
+import org.apache.olingo.odata2.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata2.api.edm.EdmAssociation;
+import org.apache.olingo.odata2.api.edm.EdmComplexType;
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+
+/**
+ * Objects of this class represent a schema
+ * 
+ */
+public class EdmSchemaImpl implements EdmSchema{
+
+  private String namespace;
+  private String alias;
+  private List<EdmUsing > usings;
+  private List<EdmEntityType> entityTypes;
+  private List<EdmComplexType> complexTypes;
+  private List<EdmAssociation> associations;
+  private List<EdmEntityContainer> entityContainers;
+  private List<EdmAnnotationAttribute> annotationAttributes;
+  private List<EdmAnnotationElement> annotationElements;
+
+  /**
+   * Sets the namespace for this {@link EdmSchemaImpl}
+   * @param namespace
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setNamespace(final String namespace) {
+    this.namespace = namespace;
+    return this;
+  }
+
+  /**
+   * Sets the alias for this {@link EdmSchemaImpl}
+   * @param alias
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setAlias(final String alias) {
+    this.alias = alias;
+    return this;
+  }
+
+  /**
+   * Sets the {@link Using} for this {@link EdmSchemaImpl}
+   * @param usings
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setUsings(final List<EdmUsing> usings) {
+    this.usings = usings;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EntityType}s for this {@link EdmSchemaImpl}
+   * @param entityTypes
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setEntityTypes(final List<EdmEntityType> entityTypes) {
+    this.entityTypes = entityTypes;
+    return this;
+  }
+
+  /**
+   * Sets the {@link ComplexType}s for this {@link EdmSchemaImpl}
+   * @param complexTypes
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setComplexTypes(final List<EdmComplexType> complexTypes) {
+    this.complexTypes = complexTypes;
+    return this;
+  }
+
+  /**
+   * Sets the {@link Association}s for this {@link EdmSchemaImpl}
+   * @param associations
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setAssociations(final List<EdmAssociation> associations) {
+    this.associations = associations;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EntityContainer}s for this {@link EdmSchemaImpl}
+   * @param entityContainers
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setEntityContainers(final List<EdmEntityContainer> entityContainers) {
+    this.entityContainers = entityContainers;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationAttribute} for this {@link EdmSchemaImpl}
+   * @param annotationAttributes
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setAnnotationAttributes(final List<EdmAnnotationAttribute> annotationAttributes) {
+    this.annotationAttributes = annotationAttributes;
+    return this;
+  }
+
+  /**
+   * Sets the List of {@link AnnotationElement} for this {@link EdmSchemaImpl}
+   * @param annotationElements
+   * @return {@link EdmSchemaImpl} for method chaining
+   */
+  public EdmSchemaImpl setAnnotationElements(final List<EdmAnnotationElement> annotationElements) {
+    this.annotationElements = annotationElements;
+    return this;
+  }
+
+  /**
+   * @return <b>String</b> namespace of this {@link EdmSchemaImpl}
+   */
+  public String getNamespace() {
+    return namespace;
+  }
+
+  /**
+   * @return <b>String</b> alias of this {@link EdmSchemaImpl}
+   */
+  public String getAlias() {
+    return alias;
+  }
+
+  /**
+   * @return List<{@link Using}> of this {@link EdmSchemaImpl}
+   */
+  public List<EdmUsing> getUsings() {
+    return usings;
+  }
+
+  /**
+   * @return List<{@link EntityType}> of this {@link EdmSchemaImpl}
+   */
+  public List<EdmEntityType> getEntityTypes() {
+    return entityTypes;
+  }
+
+  /**
+   * @return List<{@link ComplexType}> of this {@link EdmSchemaImpl}
+   */
+  public List<EdmComplexType> getComplexTypes() {
+    return complexTypes;
+  }
+
+  /**
+   * @return List<{@link Association}> of this {@link EdmSchemaImpl}
+   */
+  public List<EdmAssociation> getAssociations() {
+    return associations;
+  }
+
+  /**
+   * @return List<{@link EntityContainer}> of this {@link EdmSchemaImpl}
+   */
+  public List<EdmEntityContainer> getEntityContainers() {
+    return entityContainers;
+  }
+
+  /**
+   * @return List of {@link AnnotationAttribute} annotation attributes
+   */
+  public List<EdmAnnotationAttribute> getAnnotationAttributes() {
+    return annotationAttributes;
+  }
+
+  /**
+   * @return List of {@link AnnotationElement} annotation elements
+   */
+  public List<EdmAnnotationElement> getAnnotationElements() {
+    return annotationElements;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(namespace + Edm.DELIMITER  + alias);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSimplePropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSimplePropertyImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSimplePropertyImpl.java
new file mode 100644
index 0000000..07c97f7
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmSimplePropertyImpl.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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
+import org.apache.olingo.odata2.api.edm.EdmType;
+import org.apache.olingo.odata2.core.edm.EdmSimpleTypeFacadeImpl;
+
+/**
+ * Objects of this class represent EdmSimpleProperty
+ *
+ */
+public class EdmSimplePropertyImpl extends EdmPropertyImpl {
+
+  private EdmSimpleTypeKind simpleType;
+
+  @Override
+  public EdmType getType() throws EdmException {
+    if (edmType == null) {
+      edmType = EdmSimpleTypeFacadeImpl.getEdmSimpleType(getSimpleType());
+      if (edmType == null) {
+        throw new EdmException(EdmException.TYPEPROBLEM);
+      }
+    }
+    return edmType;
+  }
+
+  public EdmSimpleTypeKind getSimpleType() {
+    return simpleType;
+  }
+
+  public void setSimpleType(EdmSimpleTypeKind simpleType) {
+    this.simpleType = simpleType;
+  }
+
+  @Override
+  public boolean isSimple() {
+    return true;
+  }
+  
+  @Override
+  public String toString() {
+      return String.format(name);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmStructuralTypeImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmStructuralTypeImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmStructuralTypeImpl.java
new file mode 100644
index 0000000..6a91ecf
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmStructuralTypeImpl.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmAnnotatable;
+import org.apache.olingo.odata2.api.edm.EdmAnnotations;
+import org.apache.olingo.odata2.api.edm.EdmComplexType;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmMapping;
+import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.EdmStructuralType;
+import org.apache.olingo.odata2.api.edm.EdmTypeKind;
+import org.apache.olingo.odata2.api.edm.EdmTyped;
+
+/**
+ *  Objects of this class represent structural type of the entity 
+ */
+public abstract class EdmStructuralTypeImpl extends EdmNamedImpl implements EdmStructuralType, EdmAnnotatable {
+
+  protected EdmStructuralType edmBaseType;
+  protected EdmComplexType structuralType;
+  private EdmTypeKind edmTypeKind;
+  protected String namespace;
+  private List<EdmProperty> properties;
+  private List<String> edmPropertyNames;
+  private EdmAnnotations annotations;
+
+
+  public EdmStructuralType getEdmBaseType() {
+    return edmBaseType;
+  }
+
+  public void setEdmBaseType(EdmStructuralType edmBaseType) {
+    this.edmBaseType = edmBaseType;
+  }
+
+  public EdmComplexType getStructuralType() {
+    return structuralType;
+  }
+
+  public void setStructuralType(EdmComplexType structuralType) {
+    this.structuralType = structuralType;
+  }
+
+  public EdmTypeKind getEdmTypeKind() {
+    return edmTypeKind;
+  }
+
+  public void setEdmTypeKind(EdmTypeKind edmTypeKind) {
+    this.edmTypeKind = edmTypeKind;
+  }
+
+  public void setEdmPropertyNames(List<String> edmPropertyNames) {
+    this.edmPropertyNames = edmPropertyNames;
+  }
+
+  public void setNamespace(String namespace) {
+    this.namespace = namespace;
+  }
+
+  public void setAnnotations(EdmAnnotations annotations) {
+    this.annotations = annotations;
+  }
+
+
+  public List<EdmProperty> getProperties() {
+    return properties;
+  }
+
+  public void setProperties(List<EdmProperty> properties) {
+    this.properties = properties;
+  }
+
+  @Override
+  public String getNamespace() throws EdmException {
+    return namespace;
+  }
+
+  @Override
+  public EdmTyped getProperty(final String name) throws EdmException {
+    EdmTyped property = getPropertyInternal(name);
+    if (property == null && edmBaseType != null) {
+      property = edmBaseType.getProperty(name);
+    }
+    return property;
+  }
+
+  @Override
+  public List<String> getPropertyNames() throws EdmException {
+    return edmPropertyNames;
+  }
+
+  @Override
+  public EdmStructuralType getBaseType() throws EdmException {
+    return edmBaseType;
+  }
+
+  @Override
+  public EdmTypeKind getKind() {
+    return edmTypeKind;
+  }
+
+  @Override
+  public EdmMapping getMapping() throws EdmException {
+    return structuralType.getMapping();
+  }
+
+  protected EdmTyped getPropertyInternal(final String name) throws EdmException {
+    EdmTyped edmProperty = null;
+    for (EdmProperty property : properties) {
+      if (property.getName().equals(name)) {
+        return property;
+      } 
+    }
+    if (edmBaseType!=null) {
+      edmProperty = edmBaseType.getProperty(name);
+    }
+    return edmProperty;
+  }
+
+  @Override
+  public String toString() {
+    try {
+      return namespace + Edm.DELIMITER + getName();
+    } catch (final EdmException e) {
+      return null; //NOSONAR
+    }
+  }
+
+  @Override
+  public EdmAnnotations getAnnotations() throws EdmException {
+    return annotations;
+  }
+  
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmTypedImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmTypedImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmTypedImpl.java
new file mode 100644
index 0000000..597d426
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmTypedImpl.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
+import org.apache.olingo.odata2.api.edm.EdmSimpleType;
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
+import org.apache.olingo.odata2.api.edm.EdmType;
+import org.apache.olingo.odata2.api.edm.EdmTyped;
+import org.apache.olingo.odata2.api.edm.FullQualifiedName;
+import org.apache.olingo.odata2.core.edm.EdmSimpleTypeFacadeImpl;
+
+/**
+ *  Objects of this class represent type of the entity
+ */
+public class EdmTypedImpl extends EdmNamedImpl implements EdmTyped {
+
+  protected EdmType edmType;
+  protected FullQualifiedName typeName;
+  protected EdmMultiplicity multiplicity;
+
+  public void setEdmType(EdmType edmType) {
+    this.edmType = edmType;
+  }
+
+  public EdmTypedImpl setTypeName(FullQualifiedName typeName) {
+    this.typeName = typeName;
+    return this;
+  }
+
+  public EdmTypedImpl setMultiplicity(EdmMultiplicity multiplicity) {
+    this.multiplicity = multiplicity;
+    return this;
+  }
+
+  @Override
+  public EdmType getType() throws EdmException {
+    if (edmType == null) {
+      final String namespace = typeName.getNamespace();
+      if (EdmSimpleType.EDM_NAMESPACE.equals(typeName.getNamespace())) {
+        edmType = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.valueOf(typeName.getName()));
+      } else {
+        edmType = edm.getComplexType(namespace, typeName.getName());
+      }
+      if (edmType == null) {
+        edmType = edm.getEntityType(namespace, typeName.getName());
+      }
+
+      if (edmType == null) {
+        throw new EdmException(EdmException.TYPEPROBLEM);
+      }
+
+    }
+    return edmType;
+  }
+
+  @Override
+  public EdmMultiplicity getMultiplicity() throws EdmException {
+    return multiplicity;
+  }
+  
+  @Override
+  public String toString() {
+    return typeName.getNamespace() + Edm.DELIMITER + typeName.getName();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmUsingImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmUsingImpl.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmUsingImpl.java
new file mode 100644
index 0000000..0bfdec2
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/edm/Impl/EdmUsingImpl.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * 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.odata2.client.core.edm.Impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.EdmAnnotationElement;
+import org.apache.olingo.odata2.client.api.edm.EdmUsing;
+
+/**
+ *  Objects of this class represent EdmUsing
+ */
+public class EdmUsingImpl implements EdmUsing{
+
+  private String namespace;
+  private String alias;
+  private EdmDocumentationImpl documentation;
+  private List<EdmAnnotationAttribute> annotationAttributes;
+  private List<EdmAnnotationElement> annotationElements;
+
+  /**
+   * Sets the namespace for this {@link EdmUsingImpl}
+   * @param namespace
+   * @return {@link EdmUsingImpl} for method chaining
+   */
+  public EdmUsingImpl setNamespace(final String namespace) {
+    this.namespace = namespace;
+    return this;
+  }
+
+  /**
+   * Sets the alias for this {@link EdmUsingImpl}
+   * @param alias
+   * @return {@link EdmUsingImpl} for method chaining
+   */
+  public EdmUsingImpl setAlias(final String alias) {
+    this.alias = alias;
+    return this;
+  }
+
+  /**
+   * Sets the {@link EdmDocumentation} for this {@link EdmUsingImpl}
+   * @param documentation
+   * @return {@link EdmUsingImpl} for method chaining
+   */
+  public EdmUsingImpl setDocumentation(final EdmDocumentationImpl documentation) {
+    this.documentation = documentation;
+    return this;
+  }
+
+  /**
+   * Sets the collection of {@link AnnotationAttribute} for this {@link EdmUsingImpl}
+   * @param annotationAttributes
+   * @return {@link EdmUsingImpl} for method chaining
+   */
+  public EdmUsingImpl setAnnotationAttributes(final List<EdmAnnotationAttribute> annotationAttributes) {
+    this.annotationAttributes = annotationAttributes;
+    return this;
+  }
+
+  /**
+   * Sets the collection of {@link AnnotationElement} for this {@link EdmUsingImpl}
+   * @param annotationElements
+   * @return {@link EdmUsingImpl} for method chaining
+   */
+  public EdmUsingImpl setAnnotationElements(final List<EdmAnnotationElement> annotationElements) {
+    this.annotationElements = annotationElements;
+    return this;
+  }
+
+  /**
+   * @return <b>String</b> namespace
+   */
+  public String getNamespace() {
+    return namespace;
+  }
+
+  /**
+   * @return <b>String</b> alias
+   */
+  public String getAlias() {
+    return alias;
+  }
+
+  /**
+   * @return {@link EdmDocumentation} documentation
+   */
+  public EdmDocumentationImpl getDocumentation() {
+    return documentation;
+  }
+
+  /**
+   * @return collection of {@link AnnotationAttribute} annotation attributes
+   */
+  public Collection<EdmAnnotationAttribute> getAnnotationAttributes() {
+    return annotationAttributes;
+  }
+
+  /**
+   * @return collection of {@link AnnotationElement} annotation elements
+   */
+  public Collection<EdmAnnotationElement> getAnnotationElements() {
+    return annotationElements;
+  }
+  
+  @Override
+  public String toString() {
+    return namespace + Edm.DELIMITER + alias;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/9e949e40/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/AtomSerializerDeserializer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/AtomSerializerDeserializer.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/AtomSerializerDeserializer.java
new file mode 100644
index 0000000..0298567
--- /dev/null
+++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/AtomSerializerDeserializer.java
@@ -0,0 +1,211 @@
+/*******************************************************************************
+ * 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.odata2.client.core.ep;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.olingo.odata2.api.batch.BatchException;
+import org.apache.olingo.odata2.api.batch.BatchResponsePart;
+import org.apache.olingo.odata2.api.client.batch.BatchPart;
+import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
+import org.apache.olingo.odata2.api.edm.EdmTypeKind;
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
+import org.apache.olingo.odata2.api.ep.feed.ODataFeed;
+import org.apache.olingo.odata2.api.processor.ODataErrorContext;
+import org.apache.olingo.odata2.api.processor.ODataResponse;
+import org.apache.olingo.odata2.api.processor.ODataResponse.ODataResponseBuilder;
+import org.apache.olingo.odata2.client.api.ep.ContentTypeBasedDeserializer;
+import org.apache.olingo.odata2.client.api.ep.ContentTypeBasedSerializer;
+import org.apache.olingo.odata2.client.api.ep.Entity;
+import org.apache.olingo.odata2.client.api.ep.EntityCollection;
+import org.apache.olingo.odata2.client.api.ep.EntityCollectionSerializerProperties;
+import org.apache.olingo.odata2.client.api.ep.EntitySerializerProperties;
+import org.apache.olingo.odata2.client.api.ep.EntityStream;
+import org.apache.olingo.odata2.client.core.ep.deserializer.XmlEntityDeserializer;
+import org.apache.olingo.odata2.client.core.ep.deserializer.XmlErrorDocumentDeserializer;
+import org.apache.olingo.odata2.client.core.ep.serializer.AtomEntryEntitySerializer;
+import org.apache.olingo.odata2.client.core.ep.serializer.AtomFeedSerializer;
+import org.apache.olingo.odata2.core.batch.BatchRequestWriter;
+import org.apache.olingo.odata2.core.batch.BatchResponseWriter;
+import org.apache.olingo.odata2.core.commons.ContentType;
+import org.apache.olingo.odata2.core.commons.ContentType.ODataFormat;
+import org.apache.olingo.odata2.core.commons.XmlHelper;
+import org.apache.olingo.odata2.core.ep.EntityProviderProducerException;
+import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
+import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
+import org.apache.olingo.odata2.core.ep.util.CircleStreamBuffer;
+
+/**
+ *  This class includes methods to serialize deserialize XML Content type
+ */
+public class AtomSerializerDeserializer implements ContentTypeBasedSerializer, ContentTypeBasedDeserializer {
+
+  /** Default used charset for writer and response content header */
+  private static final String DEFAULT_CHARSET = ContentType.CHARSET_UTF_8;
+  private static final String XML_VERSION = "1.0";
+
+  /**
+   * 
+   * @throws EntityProviderException
+   */
+  public AtomSerializerDeserializer() throws EntityProviderException {
+    this(ODataFormat.ATOM);
+  }
+
+  /**
+   * 
+   * @param odataFormat
+   * @throws EntityProviderException
+   */
+  public AtomSerializerDeserializer(final ODataFormat odataFormat) throws EntityProviderException {
+    if (odataFormat != ODataFormat.ATOM && odataFormat != ODataFormat.XML) {
+      throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT
+          .addContent("Got unsupported ODataFormat '" + odataFormat + "'."));
+    }
+  }
+
+
+  @Override
+  public ODataResponse writeEntry( EdmEntitySet entitySet, Entity data
+      ) throws EntityProviderException {
+
+    CircleStreamBuffer csb = new CircleStreamBuffer();
+    
+    try {
+      if(data == null){
+        throw new EntityProviderProducerException(EntityProviderException.NULL_VALUE);
+      }
+      OutputStream outStream = csb.getOutputStream();
+      XMLStreamWriter writer = XmlHelper.getXMLOutputFactory().createXMLStreamWriter(outStream, DEFAULT_CHARSET);
+      writer.writeStartDocument(DEFAULT_CHARSET, XML_VERSION);
+      EntitySerializerProperties properties = data.getWriteProperties();
+      AtomEntryEntitySerializer as = new AtomEntryEntitySerializer(properties );
+      EntityInfoAggregator eia = EntityInfoAggregator.create(entitySet, null);
+      as.append(writer, eia, data, true, false);
+
+      writer.flush();
+      csb.closeWrite();
+
+      ODataResponseBuilder response = ODataResponse.entity(csb.getInputStream());
+      return response.build();
+    } catch (EntityProviderException e) {
+      csb.close();
+      throw e;
+    } catch (Exception e) {
+      csb.close();
+      throw new EntityProviderProducerException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
+          .getSimpleName()), e);
+    }
+  
+  }
+
+  @Override
+  public ODataFeed readFeed( EdmEntitySet entitySet, EntityStream content)
+      throws EntityProviderException {
+    XmlEntityDeserializer xec = new XmlEntityDeserializer();
+    return xec.readFeed(entitySet, content);
+  }
+
+  @Override
+  public ODataEntry readEntry( EdmEntitySet entitySet, EntityStream content)
+      throws EntityProviderException {
+
+    XmlEntityDeserializer xec = new XmlEntityDeserializer();
+    return xec.readEntry(entitySet, content);
+  
+  }
+
+  @Override
+  public ODataErrorContext readErrorDocument(InputStream errorDocument) throws EntityProviderException {
+    XmlErrorDocumentDeserializer xmlErrorDocumentConsumer = new XmlErrorDocumentDeserializer();
+    return xmlErrorDocumentConsumer.readError(errorDocument);
+  }
+
+  @Override
+  public ODataResponse writeFeed(EdmEntitySet entitySet, EntityCollection data) throws EntityProviderException {
+    CircleStreamBuffer csb = new CircleStreamBuffer();
+
+    try {
+      if(data == null){
+        throw new EntityProviderProducerException(EntityProviderException.NULL_VALUE);
+      }
+      
+      OutputStream outStream = csb.getOutputStream();
+      XMLStreamWriter writer = XmlHelper.getXMLOutputFactory().createXMLStreamWriter(outStream, DEFAULT_CHARSET);
+      writer.writeStartDocument(DEFAULT_CHARSET, XML_VERSION);
+
+      EntityCollectionSerializerProperties properties = data.getCollectionProperties();
+      AtomFeedSerializer atomFeedProvider = new AtomFeedSerializer(properties);
+      EntityInfoAggregator eia = EntityInfoAggregator.create(entitySet, null);
+      atomFeedProvider.append(writer, eia, data, false);
+
+      writer.flush();
+      csb.closeWrite();
+
+      return ODataResponse.entity(csb.getInputStream()).build();
+    } catch (EntityProviderException e) {
+      csb.close();
+      throw e;
+    } catch (XMLStreamException e) {
+      csb.close();
+      throw new EntityProviderProducerException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
+          .getSimpleName()), e);
+    }
+  }
+
+  @Override
+  public InputStream readBatchRequest(List<BatchPart> batchParts, String boundary) {
+    BatchRequestWriter batchWriter = new BatchRequestWriter();
+    return batchWriter.writeBatchRequest(batchParts, boundary);
+  }
+
+  @Override
+  public ODataResponse writeBatchResponse(List<BatchResponsePart> batchResponseParts) throws BatchException {
+    BatchResponseWriter batchWriter = new BatchResponseWriter();
+    return batchWriter.writeResponse(batchResponseParts);
+  }
+
+  @Override
+  public Object readFunctionImport(EdmFunctionImport functionImport, EntityStream content)
+      throws EntityProviderException {
+    try {
+      if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) {
+        return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY
+            ? new XmlEntityDeserializer().readFeed(functionImport.getEntitySet(), content)
+            : new XmlEntityDeserializer().readEntry(functionImport.getEntitySet(), content);
+      } else {
+        final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
+        return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ?
+          new XmlEntityDeserializer().readCollection(info, content) :
+          new XmlEntityDeserializer().readProperty(info, content).get(info.getName());
+      }
+    } catch (final EdmException e) {
+      throw new EntityProviderException(e.getMessageReference(), e);
+    }
+  }
+}