You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/04/01 16:18:53 UTC

[26/51] [abbrv] [OLINGO-200] Introducing interfaces for domain object

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataCollectionValueImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataCollectionValueImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataCollectionValueImpl.java
new file mode 100644
index 0000000..1189aae
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataCollectionValueImpl.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.domain;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.olingo.commons.api.domain.AbstractODataValue;
+import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataValue;
+
+/**
+ * OData collection property value.
+ */
+public class ODataCollectionValueImpl extends AbstractODataValue implements ODataCollectionValue {
+
+  private static final long serialVersionUID = -3665659846001987187L;
+
+  /**
+   * Values.
+   */
+  private final List<ODataValue> values = new ArrayList<ODataValue>();
+
+  /**
+   * Constructor.
+   *
+   * @param typeName type name.
+   */
+  public ODataCollectionValueImpl(final String typeName) {
+    super(typeName);
+  }
+
+  /**
+   * Adds a value to the collection.
+   *
+   * @param value value to be added.
+   */
+  @Override
+  public void add(final ODataValue value) {
+    if (value.isPrimitive() || value.isComplex()) {
+      values.add(value);
+    }
+  }
+
+  /**
+   * Value iterator.
+   *
+   * @return value iterator.
+   */
+  @Override
+  public Iterator<ODataValue> iterator() {
+    return values.iterator();
+  }
+
+  /**
+   * Gets collection size.
+   *
+   * @return collection size.
+   */
+  @Override
+  public int size() {
+    return values.size();
+  }
+
+  /**
+   * Checks if collection is empty.
+   *
+   * @return 'TRUE' if empty; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean isEmpty() {
+    return values.isEmpty();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataComplexValueImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataComplexValueImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataComplexValueImpl.java
new file mode 100644
index 0000000..07d6055
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataComplexValueImpl.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.commons.core.domain;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.apache.olingo.commons.api.domain.AbstractODataValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataProperty;
+
+/**
+ * OData complex property value.
+ */
+public class ODataComplexValueImpl extends AbstractODataValue implements ODataComplexValue {
+
+  private static final long serialVersionUID = -1878555027714020431L;
+
+  /**
+   * Complex type fields.
+   */
+  private final Map<String, ODataProperty> fields = new LinkedHashMap<String, ODataProperty>();
+
+  /**
+   * Constructor.
+   *
+   * @param typeName type name.
+   */
+  public ODataComplexValueImpl(final String typeName) {
+    super(typeName);
+  }
+
+  /**
+   * Adds field to the complex type.
+   *
+   * @param field field to be added.
+   */
+  @Override
+  public void add(final ODataProperty field) {
+    fields.put(field.getName(), field);
+  }
+
+  /**
+   * Gets field.
+   *
+   * @param name name of the field to be retrieved.
+   * @return requested field.
+   */
+  @Override
+  public ODataProperty get(final String name) {
+    return fields.get(name);
+  }
+
+  /**
+   * Complex property fields iterator.
+   *
+   * @return fields iterator.
+   */
+  @Override
+  public Iterator<ODataProperty> iterator() {
+    return fields.values().iterator();
+  }
+
+  /**
+   * Gets number of fields.
+   *
+   * @return number of fields.
+   */
+  @Override
+  public int size() {
+    return fields.size();
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntityImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntityImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntityImpl.java
new file mode 100644
index 0000000..62d1e42
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntityImpl.java
@@ -0,0 +1,372 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.domain;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.commons.api.domain.AbstractODataPayload;
+import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.ODataOperation;
+import org.apache.olingo.commons.api.domain.ODataProperty;
+
+/**
+ * OData entity.
+ */
+public class ODataEntityImpl extends AbstractODataPayload implements ODataEntity {
+
+  private static final long serialVersionUID = 8360640095932811034L;
+
+  /**
+   * Entity reference.
+   */
+  private String reference;
+
+  /**
+   * ETag.
+   */
+  private String eTag;
+
+  /**
+   * Media entity flag.
+   */
+  private boolean mediaEntity = false;
+
+  /**
+   * In case of media entity, media content type.
+   */
+  private String mediaContentType;
+
+  /**
+   * In case of media entity, media content source.
+   */
+  private String mediaContentSource;
+
+  /**
+   * Edit link.
+   */
+  private URI editLink;
+
+  /**
+   * Navigation links (might contain in-line entities or feeds).
+   */
+  private final List<ODataLink> navigationLinks = new ArrayList<ODataLink>();
+
+  /**
+   * Association links.
+   */
+  private final List<ODataLink> associationLinks = new ArrayList<ODataLink>();
+
+  /**
+   * Media edit links.
+   */
+  private final List<ODataLink> editMediaLinks = new ArrayList<ODataLink>();
+
+  /**
+   * Operations (legacy, functions, actions).
+   */
+  private final List<ODataOperation> operations = new ArrayList<ODataOperation>();
+
+  /**
+   * Entity properties.
+   */
+  private final List<ODataProperty> properties = new ArrayList<ODataProperty>();
+
+  /**
+   * Constructor.
+   *
+   * @param name OData entity name.
+   */
+  public ODataEntityImpl(final String name) {
+    super(name);
+  }
+
+  /**
+   * To request entity references in place of the actual entities, the client issues a GET request with /$ref appended
+   * to the resource path.
+   * <br />
+   * If the resource path does not identify an entity or a collection of entities, the service returns 404 Not Found.
+   * <br />
+   * If the resource path terminates on a collection, the response MUST be the format-specific representation of a
+   * collection of entity references pointing to the related entities. If no entities are related, the response is the
+   * format-specific representation of an empty collection.
+   * <br />
+   * If the resource path terminates on a single entity, the response MUST be the format-specific representation of an
+   * entity reference pointing to the related single entity. If the resource path terminates on a single entity and no
+   * such entity exists, the service returns 404 Not Found.
+   *
+   * @return entity reference.
+   */
+  @Override
+  public String getReference() {
+    return reference;
+  }
+
+  @Override
+  public void setReference(final String reference) {
+    this.reference = reference;
+  }
+
+  /**
+   * Gets ETag.
+   *
+   * @return ETag.
+   */
+  @Override
+  public String getETag() {
+    return eTag;
+  }
+
+  /**
+   * Sets ETag.
+   *
+   * @param eTag ETag.
+   */
+  @Override
+  public void setETag(final String eTag) {
+    this.eTag = eTag;
+  }
+
+  /**
+   * Searches for operation with given title.
+   *
+   * @param title operation to look for
+   * @return operation if found with given title, <tt>null</tt> otherwise
+   */
+  @Override
+  public ODataOperation getOperation(final String title) {
+    ODataOperation result = null;
+    for (ODataOperation operation : operations) {
+      if (title.equals(operation.getTitle())) {
+        result = operation;
+      }
+    }
+
+    return result;
+  }
+
+  /**
+   * Gets operations.
+   *
+   * @return operations.
+   */
+  @Override
+  public List<ODataOperation> getOperations() {
+    return this.operations;
+  }
+
+  /**
+   * Searches for property with given name.
+   *
+   * @param name property to look for
+   * @return property if found with given name, <tt>null</tt> otherwise
+   */
+  @Override
+  public ODataProperty getProperty(final String name) {
+    ODataProperty result = null;
+
+    if (StringUtils.isNotBlank(name)) {
+      for (ODataProperty property : properties) {
+        if (name.equals(property.getName())) {
+          result = property;
+        }
+      }
+    }
+
+    return result;
+  }
+
+  /**
+   * Returns OData entity properties.
+   *
+   * @return OData entity properties.
+   */
+  @Override
+  public List<ODataProperty> getProperties() {
+    return properties;
+  }
+
+  /**
+   * Puts the given link into one of available lists, based on its type.
+   *
+   * @param link to be added
+   * @return <tt>true</tt> if the given link was added in one of available lists
+   */
+  @Override
+  public boolean addLink(final ODataLink link) {
+    boolean result = false;
+
+    switch (link.getType()) {
+      case ASSOCIATION:
+        result = associationLinks.contains(link) ? false : associationLinks.add(link);
+        break;
+
+      case ENTITY_NAVIGATION:
+      case ENTITY_SET_NAVIGATION:
+        result = navigationLinks.contains(link) ? false : navigationLinks.add(link);
+        break;
+
+      case MEDIA_EDIT:
+        result = editMediaLinks.contains(link) ? false : editMediaLinks.add(link);
+        break;
+
+      default:
+    }
+
+    return result;
+  }
+
+  /**
+   * Removes the given link from any list (association, navigation, edit-media).
+   *
+   * @param link to be removed
+   * @return <tt>true</tt> if the given link was contained in one of available lists
+   */
+  @Override
+  public boolean removeLink(final ODataLink link) {
+    return associationLinks.remove(link) || navigationLinks.remove(link) || editMediaLinks.remove(link);
+  }
+
+  /**
+   * Returns all entity navigation links (including inline entities / feeds).
+   *
+   * @return OData entity links.
+   */
+  @Override
+  public List<ODataLink> getNavigationLinks() {
+    return navigationLinks;
+  }
+
+  /**
+   * Returns all entity association links.
+   *
+   * @return OData entity links.
+   */
+  @Override
+  public List<ODataLink> getAssociationLinks() {
+    return associationLinks;
+  }
+
+  /**
+   * Returns all entity media edit links.
+   *
+   * @return OData entity links.
+   */
+  @Override
+  public List<ODataLink> getEditMediaLinks() {
+    return editMediaLinks;
+  }
+
+  /**
+   * Returns OData entity edit link.
+   *
+   * @return entity edit link.
+   */
+  @Override
+  public URI getEditLink() {
+    return editLink;
+  }
+
+  /**
+   * Sets OData entity edit link.
+   *
+   * @param editLink edit link.
+   */
+  @Override
+  public void setEditLink(final URI editLink) {
+    this.editLink = editLink;
+  }
+
+  @Override
+  public URI getLink() {
+    return super.getLink() == null ? getEditLink() : super.getLink();
+  }
+
+  /**
+   * TRUE if read-only entity.
+   *
+   * @return TRUE if read-only; FALSE otherwise.
+   */
+  @Override
+  public boolean isReadOnly() {
+    return super.getLink() != null;
+  }
+
+  /**
+   * Checks if the current entity is a media entity.
+   *
+   * @return 'TRUE' if media entity; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean isMediaEntity() {
+    return mediaEntity;
+  }
+
+  /**
+   * Sets media entity flag.
+   *
+   * @param isMediaEntity media entity flag value.
+   */
+  @Override
+  public void setMediaEntity(final boolean isMediaEntity) {
+    this.mediaEntity = isMediaEntity;
+  }
+
+  /**
+   * Gets media content type.
+   *
+   * @return media content type.
+   */
+  @Override
+  public String getMediaContentType() {
+    return mediaContentType;
+  }
+
+  /**
+   * Sets media content type.
+   *
+   * @param mediaContentType media content type.
+   */
+  @Override
+  public void setMediaContentType(final String mediaContentType) {
+    this.mediaContentType = mediaContentType;
+  }
+
+  /**
+   * Gets media content source.
+   *
+   * @return media content source.
+   */
+  @Override
+  public String getMediaContentSource() {
+    return mediaContentSource;
+  }
+
+  /**
+   * Sets media content source.
+   *
+   * @param mediaContentSource media content source.
+   */
+  @Override
+  public void setMediaContentSource(final String mediaContentSource) {
+    this.mediaContentSource = mediaContentSource;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntitySetImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntitySetImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntitySetImpl.java
new file mode 100644
index 0000000..b7246d1
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataEntitySetImpl.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.domain;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.olingo.commons.api.domain.AbstractODataPayload;
+import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.ODataEntitySet;
+
+public class ODataEntitySetImpl extends AbstractODataPayload implements ODataEntitySet {
+
+  private static final long serialVersionUID = 9039605899821494024L;
+
+  /**
+   * Link to the next page.
+   */
+  private URI next;
+
+  /**
+   * Number of ODataEntities contained in this feed. If <tt>$inlinecount</tt> was requested, this value comes from
+   * there.
+   */
+  private Integer count;
+
+  /**
+   * OData entities contained in this feed.
+   */
+  private List<ODataEntity> entities = new ArrayList<ODataEntity>();
+
+  /**
+   * Constructor.
+   */
+  public ODataEntitySetImpl() {
+    super(null);
+  }
+
+  /**
+   * Constructor.
+   *
+   * @param next next link.
+   */
+  public ODataEntitySetImpl(final URI next) {
+    super(null);
+    this.next = next;
+  }
+
+  /**
+   * Gets next page link.
+   *
+   * @return next page link; null value if single page or last page reached.
+   */
+  @Override
+  public URI getNext() {
+    return next;
+  }
+
+  /**
+   * Gets contained entities.
+   *
+   * @return feed entries.
+   */
+  @Override
+  public List<ODataEntity> getEntities() {
+    return entities;
+  }
+
+  /**
+   * Gets in-line count.
+   *
+   * @return in-line count value.
+   */
+  @Override
+  public int getCount() {
+    return count == null ? entities.size() : count;
+  }
+
+  /**
+   * Sets in-line count.
+   *
+   * @param count in-line count value.
+   */
+  @Override
+  public void setCount(final int count) {
+    this.count = count;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataObjectFactoryImpl.java
new file mode 100644
index 0000000..63a47ce
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataObjectFactoryImpl.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.domain;
+
+import java.net.URI;
+import org.apache.olingo.commons.api.domain.ODataLinkType;
+import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.ODataInlineEntity;
+import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.ODataObjectFactory;
+import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
+import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+public class ODataObjectFactoryImpl implements ODataObjectFactory {
+
+  private static final long serialVersionUID = -3769695665946919447L;
+
+  protected final ODataServiceVersion version;
+
+  public ODataObjectFactoryImpl(final ODataServiceVersion version) {
+    this.version = version;
+  }
+
+  @Override
+  public ODataEntitySet newEntitySet() {
+    return new ODataEntitySetImpl();
+  }
+
+  @Override
+  public ODataEntitySet newEntitySet(final URI next) {
+    return new ODataEntitySetImpl(next);
+  }
+
+  @Override
+  public ODataEntity newEntity(final String name) {
+    return new ODataEntityImpl(name);
+  }
+
+  @Override
+  public ODataEntity newEntity(final String name, final URI link) {
+    final ODataEntityImpl result = new ODataEntityImpl(name);
+    result.setLink(link);
+    return result;
+  }
+
+  @Override
+  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
+          final ODataEntitySet entitySet) {
+
+    return new ODataInlineEntitySet(version, link, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
+  }
+
+  @Override
+  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI baseURI, final String href,
+          final ODataEntitySet entitySet) {
+
+    return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
+  }
+
+  @Override
+  public ODataInlineEntity newInlineEntity(final String name, final URI link, final ODataEntity entity) {
+    return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  }
+
+  @Override
+  public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
+          final ODataEntity entity) {
+
+    return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  }
+
+  @Override
+  public ODataLink newEntityNavigationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newEntityNavigationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newFeedNavigationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newFeedNavigationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newAssociationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newAssociationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newMediaEditLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newMediaEditLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
+  }
+
+  @Override
+  public ODataPrimitiveValue.Builder newPrimitiveValueBuilder() {
+    return new ODataPrimitiveValueImpl.BuilderImpl(version);
+  }
+
+  @Override
+  public ODataComplexValue newComplexValue(final String typeName) {
+    return new ODataComplexValueImpl(typeName);
+  }
+
+  @Override
+  public ODataCollectionValue newCollectionValue(final String typeName) {
+    return new ODataCollectionValueImpl(typeName);
+  }
+
+  @Override
+  public ODataProperty newPrimitiveProperty(final String name, final ODataPrimitiveValue value) {
+    return new ODataPropertyImpl(name, value);
+  }
+
+  @Override
+  public ODataProperty newComplexProperty(final String name, final ODataComplexValue value) {
+    return new ODataPropertyImpl(name, value);
+  }
+
+  @Override
+  public ODataProperty newCollectionProperty(final String name, final ODataCollectionValue value) {
+    return new ODataPropertyImpl(name, value);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPrimitiveValueImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPrimitiveValueImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPrimitiveValueImpl.java
index ad60494..965d5fc 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPrimitiveValueImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPrimitiveValueImpl.java
@@ -139,6 +139,15 @@ public class ODataPrimitiveValueImpl extends AbstractODataValue implements OData
    */
   private Object value;
 
+  private ODataPrimitiveValueImpl() {
+    super(null);
+  }
+
+  @Override
+  public String getTypeName() {
+    return typeKind.getFullQualifiedName().toString();
+  }
+
   @Override
   public EdmPrimitiveTypeKind getTypeKind() {
     return typeKind;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPropertyImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPropertyImpl.java
new file mode 100644
index 0000000..4c8aea9
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/ODataPropertyImpl.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.domain;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
+import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.ODataValue;
+
+/**
+ * OData entity property.
+ */
+public class ODataPropertyImpl implements ODataProperty {
+
+  private static final long serialVersionUID = 926939448778950450L;
+
+  /**
+   * Property name.
+   */
+  private final String name;
+
+  /**
+   * Property value.
+   */
+  private ODataValue value;
+
+  /**
+   * Constructor.
+   *
+   * @param name property name.
+   * @param value property value.
+   */
+  public ODataPropertyImpl(final String name, final ODataValue value) {
+    this.name = name;
+    this.value = value;
+  }
+
+  /**
+   * Returns property name.
+   *
+   * @return property name.
+   */
+  @Override
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * Returns property value.
+   *
+   * @return property value.
+   */
+  @Override
+  public ODataValue getValue() {
+    return value;
+  }
+
+  /**
+   * Checks if has null value.
+   *
+   * @return 'TRUE' if has null value; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean hasNullValue() {
+    return this.value == null;
+  }
+
+  /**
+   * Checks if has primitive value.
+   *
+   * @return 'TRUE' if has primitive value; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean hasPrimitiveValue() {
+    return !hasNullValue() && this.value.isPrimitive();
+  }
+
+  /**
+   * Gets primitive value.
+   *
+   * @return primitive value if exists; null otherwise.
+   */
+  @Override
+  public ODataPrimitiveValue getPrimitiveValue() {
+    return hasPrimitiveValue() ? this.value.asPrimitive() : null;
+  }
+
+  /**
+   * Checks if has complex value.
+   *
+   * @return 'TRUE' if has complex value; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean hasComplexValue() {
+    return !hasNullValue() && this.value.isComplex();
+  }
+
+  /**
+   * Gets complex value.
+   *
+   * @return complex value if exists; null otherwise.
+   */
+  @Override
+  public ODataComplexValue getComplexValue() {
+    return hasComplexValue() ? this.value.asComplex() : null;
+  }
+
+  /**
+   * Checks if has collection value.
+   *
+   * @return 'TRUE' if has collection value; 'FALSE' otherwise.
+   */
+  @Override
+  public boolean hasCollectionValue() {
+    return !hasNullValue() && this.value.isCollection();
+  }
+
+  /**
+   * Gets collection value.
+   *
+   * @return collection value if exists; null otherwise.
+   */
+  @Override
+  public ODataCollectionValue getCollectionValue() {
+    return hasCollectionValue() ? this.value.asCollection() : null;
+  }
+
+  /**
+   * {@inheritDoc }
+   */
+  @Override
+  public boolean equals(final Object obj) {
+    return EqualsBuilder.reflectionEquals(this, obj);
+  }
+
+  /**
+   * {@inheritDoc }
+   */
+  @Override
+  public int hashCode() {
+    return HashCodeBuilder.reflectionHashCode(this);
+  }
+
+  /**
+   * {@inheritDoc }
+   */
+  @Override
+  public String toString() {
+    return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ceda4740/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
deleted file mode 100644
index ae946e0..0000000
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.commons.core.op;
-
-import java.net.URI;
-import org.apache.olingo.commons.api.domain.ODataLinkType;
-import org.apache.olingo.commons.api.domain.ODataCollectionValue;
-import org.apache.olingo.commons.api.domain.ODataComplexValue;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.ODataInlineEntity;
-import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
-import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataObjectFactory;
-import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
-import org.apache.olingo.commons.api.domain.ODataProperty;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-
-public class ODataObjectFactoryImpl implements ODataObjectFactory {
-
-  private static final long serialVersionUID = -3769695665946919447L;
-
-  protected final ODataServiceVersion version;
-
-  public ODataObjectFactoryImpl(final ODataServiceVersion version) {
-    this.version = version;
-  }
-
-  @Override
-  public ODataEntitySet newEntitySet() {
-    return new ODataEntitySet();
-  }
-
-  @Override
-  public ODataEntitySet newEntitySet(final URI next) {
-    return new ODataEntitySet(next);
-  }
-
-  @Override
-  public ODataEntity newEntity(final String name) {
-    return new ODataEntity(name);
-  }
-
-  @Override
-  public ODataEntity newEntity(final String name, final URI link) {
-    final ODataEntity result = new ODataEntity(name);
-    result.setLink(link);
-    return result;
-  }
-
-  @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
-          final ODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, link, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI baseURI, final String href,
-          final ODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI link, final ODataEntity entity) {
-    return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
-  }
-
-  @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
-          final ODataEntity entity) {
-
-    return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
-  }
-
-  @Override
-  public ODataLink newEntityNavigationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newEntityNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newFeedNavigationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newFeedNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
-  @Override
-  public ODataProperty newPrimitiveProperty(final String name, final ODataPrimitiveValue value) {
-    return new ODataProperty(name, value);
-  }
-
-  @Override
-  public ODataProperty newComplexProperty(final String name, final ODataComplexValue value) {
-    return new ODataProperty(name, value);
-  }
-
-  @Override
-  public ODataProperty newCollectionProperty(final String name, final ODataCollectionValue value) {
-    return new ODataProperty(name, value);
-  }
-
-}