[OLINGO-200] More V4 Enum tests
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/117cf6f0 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/117cf6f0 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/117cf6f0 Branch: refs/heads/olingo-206-validator Commit: 117cf6f0d0099ef5d553e2a46b359d0e38222996 Parents: cd7ede0 Author: Francesco Chicchiriccò <[email protected]> Authored: Sun Mar 30 16:12:17 2014 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Sun Mar 30 16:12:17 2014 +0200 ---------------------------------------------------------------------- .../retrieve/CommonRetrieveRequestFactory.java | 12 +- .../retrieve/v3/RetrieveRequestFactory.java | 2 +- .../AbstractRetrieveRequestFactory.java | 8 +- .../retrieve/v3/RetrieveRequestFactoryImpl.java | 19 ++- .../retrieve/v4/RetrieveRequestFactoryImpl.java | 19 ++- .../client/core/op/AbstractODataBinder.java | 35 +++-- .../client/core/op/impl/v4/ODataBinderImpl.java | 45 +++++++ .../core/it/v3/EntityCreateTestITCase.java | 4 +- .../it/v3/NavigationLinkCreateTestITCase.java | 2 +- .../olingo/client/core/v3/EntityTest.java | 5 +- .../apache/olingo/client/core/v3/JSONTest.java | 4 +- .../olingo/client/core/v4/EntityTest.java | 133 +++++++++++++++++++ .../api/domain/CommonODataObjectFactory.java | 4 +- .../api/domain/v4/ODataObjectFactory.java | 2 + .../core/domain/AbstractODataObjectFactory.java | 4 +- .../core/domain/v4/ODataEnumValueImpl.java | 50 +++++++ .../core/domain/v4/ODataObjectFactoryImpl.java | 5 + 17 files changed, 298 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java index f8d48b3..69e53e7 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java @@ -60,7 +60,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { ODataServiceDocumentRequest getServiceDocumentRequest(String serviceRoot); /** - * Gets a query request returning a set of one or more OData entities. + * Gets a uri request returning a set of one or more OData entities. * * @param <T> concrete ODataEntitySet implementation. * @param uri request URI. @@ -69,7 +69,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { <T extends CommonODataEntitySet> ODataEntitySetRequest<T> getEntitySetRequest(URI uri); /** - * Gets a query request returning a set of one or more OData entities. + * Gets a uri request returning a set of one or more OData entities. * <br/> * Returned request gives the possibility to consume entities iterating on them without parsing and loading in memory * the entire entity set. @@ -83,7 +83,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { ODataEntitySetIteratorRequest<ES, E> getEntitySetIteratorRequest(URI uri); /** - * Gets a query request returning a single OData entity. + * Gets a uri request returning a single OData entity. * * @param <T> concrete ODataEntity implementation. * @param uri request URI. @@ -92,7 +92,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { <T extends CommonODataEntity> ODataEntityRequest<T> getEntityRequest(URI uri); /** - * Gets a query request returning a single OData entity property. + * Gets a uri request returning a single OData entity property. * * @param <T> concrete ODataProperty implementation. * @param uri request URI. @@ -101,7 +101,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { <T extends CommonODataProperty> ODataPropertyRequest<T> getPropertyRequest(URI uri); /** - * Gets a query request returning a single OData entity property value. + * Gets a uri request returning a single OData entity property value. * * @param uri request URI. * @return new {@link ODataValueRequest} instance. @@ -109,7 +109,7 @@ public interface CommonRetrieveRequestFactory extends Serializable { ODataValueRequest getValueRequest(URI uri); /** - * Gets a query request returning a media stream. + * Gets a uri request returning a media stream. * * @param uri request URI. * @return new {@link ODataMediaRequest} instance. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java index 00568bd..0d133cb 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java @@ -47,7 +47,7 @@ public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory { ODataPropertyRequest<ODataProperty> getPropertyRequest(URI uri); /** - * Gets a query request returning a single OData link. + * Gets a uri request returning a single OData link. * * @param targetURI target URI. * @param linkName link name. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java index a801953..d5e0319 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java @@ -39,13 +39,13 @@ public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRe } @Override - public ODataValueRequest getValueRequest(final URI query) { - return new ODataValueRequestImpl(client, query); + public ODataValueRequest getValueRequest(final URI uri) { + return new ODataValueRequestImpl(client, uri); } @Override - public ODataMediaRequest getMediaRequest(final URI query) { - return new ODataMediaRequestImpl(client, query); + public ODataMediaRequest getMediaRequest(final URI uri) { + return new ODataMediaRequestImpl(client, uri); } @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java index 3943747..0e8db34 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java @@ -36,6 +36,7 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntity; import org.apache.olingo.commons.api.domain.v3.ODataEntitySet; import org.apache.olingo.commons.api.domain.v3.ODataProperty; +@SuppressWarnings("unchecked") public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory implements RetrieveRequestFactory { @@ -56,27 +57,23 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory return new ODataLinkCollectionRequestImpl((ODataClient) client, targetURI, linkName); } - @SuppressWarnings("unchecked") @Override - public ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(final URI query) { - return new ODataEntitySetRequestImpl<ODataEntitySet>(client, query); + public ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(final URI uri) { + return new ODataEntitySetRequestImpl<ODataEntitySet>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri) { + public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(final URI uri) { return new ODataEntitySetIteratorRequestImpl<ODataEntitySet, ODataEntity>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataEntityRequest<ODataEntity> getEntityRequest(final URI query) { - return new ODataEntityRequestImpl<ODataEntity>(client, query); + public ODataEntityRequest<ODataEntity> getEntityRequest(final URI uri) { + return new ODataEntityRequestImpl<ODataEntity>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataPropertyRequest<ODataProperty> getPropertyRequest(final URI query) { - return new ODataPropertyRequestImpl<ODataProperty>(client, query); + public ODataPropertyRequest<ODataProperty> getPropertyRequest(final URI uri) { + return new ODataPropertyRequestImpl<ODataProperty>(client, uri); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java index 96419c2..879417b 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java @@ -35,6 +35,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataEntity; import org.apache.olingo.commons.api.domain.v4.ODataEntitySet; import org.apache.olingo.commons.api.domain.v4.ODataProperty; +@SuppressWarnings("unchecked") public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory implements RetrieveRequestFactory { @@ -50,27 +51,23 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory client.getURIBuilder(serviceRoot).appendMetadataSegment().build()); } - @SuppressWarnings("unchecked") @Override - public ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(final URI query) { - return new ODataEntitySetRequestImpl<ODataEntitySet>(client, query); + public ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(final URI uri) { + return new ODataEntitySetRequestImpl<ODataEntitySet>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri) { + public ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(final URI uri) { return new ODataEntitySetIteratorRequestImpl<ODataEntitySet, ODataEntity>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataEntityRequest<ODataEntity> getEntityRequest(final URI query) { - return new ODataEntityRequestImpl<ODataEntity>(client, query); + public ODataEntityRequest<ODataEntity> getEntityRequest(final URI uri) { + return new ODataEntityRequestImpl<ODataEntity>(client, uri); } - @SuppressWarnings("unchecked") @Override - public ODataPropertyRequest<ODataProperty> getPropertyRequest(final URI query) { - return new ODataPropertyRequestImpl<ODataProperty>(client, query); + public ODataPropertyRequest<ODataProperty> getPropertyRequest(final URI uri) { + return new ODataPropertyRequestImpl<ODataProperty>(client, uri); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java index 4c86604..13a49fb 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java @@ -42,6 +42,7 @@ import org.apache.olingo.commons.api.domain.ODataInlineEntitySet; import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.ODataOperation; import org.apache.olingo.commons.api.domain.CommonODataProperty; +import org.apache.olingo.commons.api.domain.ODataLinkType; import org.apache.olingo.commons.api.domain.ODataServiceDocument; import org.apache.olingo.commons.api.domain.ODataValue; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; @@ -54,6 +55,7 @@ import org.apache.olingo.commons.core.data.JSONPropertyImpl; import org.apache.olingo.commons.core.data.LinkImpl; import org.apache.olingo.commons.core.data.NullValueImpl; import org.apache.olingo.commons.core.data.PrimitiveValueImpl; +import org.apache.olingo.commons.core.edm.EdmTypeInfo; import org.apache.olingo.commons.core.op.ResourceFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -228,7 +230,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder { return propertyResource; } - private Value getValue(final ODataValue value, final Class<? extends Entry> reference, final boolean setType) { + protected Value getValue(final ODataValue value, final Class<? extends Entry> reference, final boolean setType) { Value valueResource = null; if (value == null) { @@ -329,8 +331,12 @@ public abstract class AbstractODataBinder implements CommonODataBinder { final Feed inlineFeed = link.getInlineFeed(); if (inlineEntry == null && inlineFeed == null) { - entity.addLink( - client.getObjectFactory().newEntityNavigationLink(link.getTitle(), base, link.getHref())); + final ODataLinkType linkType = link.getType() == null + ? ODataLinkType.ENTITY_NAVIGATION + : ODataLinkType.fromString(client.getServiceVersion(), link.getRel(), link.getType()); + entity.addLink(linkType == ODataLinkType.ENTITY_NAVIGATION + ? client.getObjectFactory().newEntityNavigationLink(link.getTitle(), base, link.getHref()) + : client.getObjectFactory().newEntitySetNavigationLink(link.getTitle(), base, link.getHref())); } else if (inlineEntry != null) { entity.addLink(client.getObjectFactory().newInlineEntity( link.getTitle(), base, link.getHref(), @@ -369,28 +375,35 @@ public abstract class AbstractODataBinder implements CommonODataBinder { protected ODataValue getODataValue(final Property resource) { ODataValue value = null; + final EdmTypeInfo typeInfo = resource.getType() == null + ? null + : new EdmTypeInfo.Builder().setTypeExpression(resource.getType()).build(); if (resource.getValue().isPrimitive()) { value = client.getObjectFactory().newPrimitiveValueBuilder(). setText(resource.getValue().asPrimitive().get()). - setType(resource.getType() == null + setType(typeInfo == null ? null - : EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), resource.getType())).build(); + : EdmPrimitiveTypeKind.valueOfFQN( + client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build(); } else if (resource.getValue().isGeospatial()) { value = client.getObjectFactory().newPrimitiveValueBuilder(). setValue(resource.getValue().asGeospatial().get()). - setType(resource.getType() == null - || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().toString().equals(resource.getType()) - || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().toString().equals(resource.getType()) + setType(typeInfo == null + || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(typeInfo.getFullQualifiedName()) + || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(typeInfo.getFullQualifiedName()) ? resource.getValue().asGeospatial().get().getEdmPrimitiveTypeKind() - : EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), resource.getType())).build(); + : EdmPrimitiveTypeKind.valueOfFQN( + client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build(); } else if (resource.getValue().isComplex()) { - value = client.getObjectFactory().newComplexValue(resource.getType()); + value = client.getObjectFactory().newComplexValue(typeInfo == null + ? null : typeInfo.getFullQualifiedName().toString()); for (Property property : resource.getValue().asComplex().get()) { value.asComplex().add(getODataProperty(property)); } } else if (resource.getValue().isCollection()) { - value = client.getObjectFactory().newCollectionValue(resource.getType()); + value = client.getObjectFactory().newCollectionValue(typeInfo == null + ? null : "Collection(" + typeInfo.getFullQualifiedName().toString() + ")"); for (Value _value : resource.getValue().asCollection().get()) { final JSONPropertyImpl fake = new JSONPropertyImpl(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java index 0acc7d1..e85b34e 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java @@ -29,13 +29,17 @@ import org.apache.olingo.client.core.op.AbstractODataBinder; import org.apache.olingo.commons.api.data.Entry; import org.apache.olingo.commons.api.data.Feed; import org.apache.olingo.commons.api.data.Property; +import org.apache.olingo.commons.api.data.Value; import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntitySet; import org.apache.olingo.commons.api.domain.CommonODataProperty; +import org.apache.olingo.commons.api.domain.ODataValue; import org.apache.olingo.commons.api.domain.v4.ODataEntity; import org.apache.olingo.commons.api.domain.v4.ODataEntitySet; import org.apache.olingo.commons.api.domain.v4.ODataProperty; +import org.apache.olingo.commons.core.data.EnumValueImpl; import org.apache.olingo.commons.core.domain.v4.ODataPropertyImpl; +import org.apache.olingo.commons.core.edm.EdmTypeInfo; public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder { @@ -86,6 +90,31 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder } @Override + public Property getProperty(final CommonODataProperty property, final Class<? extends Entry> reference, + final boolean setType) { + + final Property propertyResource = super.getProperty(property, reference, setType); + if (property instanceof ODataProperty && ((ODataProperty) property).hasEnumValue() && setType) { + propertyResource.setType(((ODataProperty) property).getEnumValue().getTypeName()); + } + return propertyResource; + } + + @Override + protected Value getValue(final ODataValue value, final Class<? extends Entry> reference, final boolean setType) { + Value valueResource; + if (value instanceof org.apache.olingo.commons.api.domain.v4.ODataValue + && ((org.apache.olingo.commons.api.domain.v4.ODataValue) value).isEnum()) { + + valueResource = new EnumValueImpl( + ((org.apache.olingo.commons.api.domain.v4.ODataValue) value).asEnum().getValue()); + } else { + valueResource = super.getValue(value, reference, setType); + } + return valueResource; + } + + @Override public ODataEntitySet getODataEntitySet(final Feed resource) { return (ODataEntitySet) super.getODataEntitySet(resource); } @@ -112,4 +141,20 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder return new ODataPropertyImpl(property.getName(), getODataValue(property)); } + @Override + protected ODataValue getODataValue(final Property resource) { + ODataValue value; + if (resource.getValue().isEnum()) { + final EdmTypeInfo typeInfo = resource.getType() == null + ? null + : new EdmTypeInfo.Builder().setTypeExpression(resource.getType()).build(); + value = ((ODataClient) client).getObjectFactory().newEnumValue( + typeInfo == null ? null : typeInfo.getFullQualifiedName().toString(), + resource.getValue().asEnum().get()); + } else { + value = super.getODataValue(resource); + } + + return value; + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java index bd1419f..2a4efee 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java @@ -305,7 +305,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase { client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order); createReq.setFormat(format); - original.addLink(client.getObjectFactory().newFeedNavigationLink( + original.addLink(client.getObjectFactory().newEntitySetNavigationLink( "Orders", createReq.execute().getBody().getEditLink())); } @@ -409,7 +409,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase { ODataEntity changes = client.getObjectFactory().newEntity( "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"); changes.setEditLink(customer.getEditLink()); - changes.addLink(client.getObjectFactory().newFeedNavigationLink( + changes.addLink(client.getObjectFactory().newEntitySetNavigationLink( "Orders", URIUtils.getURI(getServiceRoot(), order.getEditLink().toASCIIString()))); update(UpdateType.PATCH, changes, format, null); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/NavigationLinkCreateTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/NavigationLinkCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/NavigationLinkCreateTestITCase.java index fcbbe80..3b518d9 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/NavigationLinkCreateTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/NavigationLinkCreateTestITCase.java @@ -223,7 +223,7 @@ public class NavigationLinkCreateTestITCase extends AbstractTestITCase { orderEntity); createReq.setFormat(format); createReq.setContentType(contentType); - original.addLink(client.getObjectFactory().newFeedNavigationLink( + original.addLink(client.getObjectFactory().newEntitySetNavigationLink( "Orders", createReq.execute().getBody().getEditLink())); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java index fe5b148..41da651 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java @@ -29,6 +29,7 @@ import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.CommonODataProperty; import org.apache.olingo.commons.api.format.ODataPubFormat; import org.apache.olingo.client.core.AbstractTest; +import org.apache.olingo.commons.api.domain.v3.ODataEntity; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.core.op.ResourceFactory; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; @@ -45,7 +46,7 @@ public class EntityTest extends AbstractTest { private void readAndWrite(final ODataPubFormat format) { final InputStream input = getClass().getResourceAsStream("Customer_-10." + getSuffix(format)); - final CommonODataEntity entity = getClient().getBinder().getODataEntity( + final ODataEntity entity = getClient().getBinder().getODataEntity( getClient().getDeserializer().toEntry(input, format).getObject()); assertNotNull(entity); @@ -64,7 +65,7 @@ public class EntityTest extends AbstractTest { assertTrue(check); - final CommonODataEntity written = getClient().getBinder().getODataEntity(getClient().getBinder(). + final ODataEntity written = getClient().getBinder().getODataEntity(getClient().getBinder(). getEntry(entity, ResourceFactory.entryClassForFormat(format == ODataPubFormat.ATOM))); assertEquals(entity, written); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/JSONTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/JSONTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/JSONTest.java index bae0bdd..522e686 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/JSONTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/JSONTest.java @@ -1,5 +1,3 @@ -package org.apache.olingo.client.core.v3; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -18,6 +16,8 @@ package org.apache.olingo.client.core.v3; * specific language governing permissions and limitations * under the License. */ +package org.apache.olingo.client.core.v3; + import static org.junit.Assert.assertEquals; import com.fasterxml.jackson.databind.JsonNode; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java new file mode 100644 index 0000000..f9c57c2 --- /dev/null +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.client.core.v4; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.InputStream; +import java.util.Iterator; +import org.apache.olingo.client.api.v4.ODataClient; +import org.apache.olingo.client.core.AbstractTest; +import org.apache.olingo.commons.api.domain.ODataLink; +import org.apache.olingo.commons.api.domain.ODataLinkType; +import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.commons.api.domain.v4.ODataEntity; +import org.apache.olingo.commons.api.domain.v4.ODataProperty; +import org.apache.olingo.commons.api.format.ODataPubFormat; +import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset; +import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration; +import org.apache.olingo.commons.core.op.ResourceFactory; +import org.junit.Test; + +public class EntityTest extends AbstractTest { + + @Override + protected ODataClient getClient() { + return v4Client; + } + + private void singleton(final ODataPubFormat format) { + final InputStream input = getClass().getResourceAsStream("VipCustomer." + getSuffix(format)); + final ODataEntity entity = getClient().getBinder().getODataEntity( + getClient().getDeserializer().toEntry(input, format).getObject()); + assertNotNull(entity); + + assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getName()); + + final ODataProperty birthday = entity.getProperty("Birthday"); + assertTrue(birthday.hasPrimitiveValue()); + assertEquals(EdmDateTimeOffset.getInstance(), birthday.getPrimitiveValue().getType()); + + final ODataProperty timeBetweenLastTwoOrders = entity.getProperty("TimeBetweenLastTwoOrders"); + assertTrue(timeBetweenLastTwoOrders.hasPrimitiveValue()); + assertEquals(EdmDuration.getInstance(), timeBetweenLastTwoOrders.getPrimitiveValue().getType()); + + int checked = 0; + for (ODataLink link : entity.getNavigationLinks()) { + if ("Parent".equals(link.getName())) { + checked++; + assertEquals(ODataLinkType.ENTITY_NAVIGATION, link.getType()); + } + if ("Orders".equals(link.getName())) { + checked++; + if (format == ODataPubFormat.ATOM) { + assertEquals(ODataLinkType.ENTITY_SET_NAVIGATION, link.getType()); + } + } + if ("Company".equals(link.getName())) { + checked++; + assertEquals(ODataLinkType.ENTITY_NAVIGATION, link.getType()); + } + } + assertEquals(3, checked); + + // operations won't get serialized + entity.getOperations().clear(); + final ODataEntity written = getClient().getBinder().getODataEntity(getClient().getBinder(). + getEntry(entity, ResourceFactory.entryClassForFormat(format == ODataPubFormat.ATOM))); + assertEquals(entity, written); + } + + @Test + public void atomSingleton() { + singleton(ODataPubFormat.ATOM); + } + + @Test + public void jsonSingleton() { + singleton(ODataPubFormat.JSON_FULL_METADATA); + } + + private void withEnums(final ODataPubFormat format) { + final InputStream input = getClass().getResourceAsStream("Products_5." + getSuffix(format)); + final ODataEntity entity = getClient().getBinder().getODataEntity( + getClient().getDeserializer().toEntry(input, format).getObject()); + assertNotNull(entity); + + final ODataProperty skinColor = entity.getProperty("SkinColor"); + assertTrue(skinColor.hasEnumValue()); + assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Color", skinColor.getEnumValue().getTypeName()); + assertEquals("Red", skinColor.getEnumValue().getValue()); + +// final ODataProperty coverColors = entity.getProperty("CoverColors"); +// assertTrue(coverColors.hasCollectionValue()); +// for (final Iterator<ODataValue> itor = coverColors.getCollectionValue().iterator(); itor.hasNext();) { +// final ODataValue item = itor.next(); +// assertTrue(item.isEnum()); +// } + + // operations won't get serialized + entity.getOperations().clear(); + final ODataEntity written = getClient().getBinder().getODataEntity(getClient().getBinder(). + getEntry(entity, ResourceFactory.entryClassForFormat(format == ODataPubFormat.ATOM))); + assertEquals(entity, written); + } + + @Test + public void atomWithEnums() { + withEnums(ODataPubFormat.ATOM); + } + + @Test + public void jsonWithEnums() { + withEnums(ODataPubFormat.JSON_FULL_METADATA); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java index 525dc9d..40ffda9 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java @@ -125,7 +125,7 @@ public interface CommonODataObjectFactory { * @param link link. * @return entity set navigation link. */ - ODataLink newFeedNavigationLink(String name, URI link); + ODataLink newEntitySetNavigationLink(String name, URI link); /** * Instantiates a new entity set navigation link. @@ -135,7 +135,7 @@ public interface CommonODataObjectFactory { * @param href href. * @return entity set navigation link. */ - ODataLink newFeedNavigationLink(String name, URI baseURI, String href); + ODataLink newEntitySetNavigationLink(String name, URI baseURI, String href); /** * Instantiates a new association link. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java index 8b43bc1..d12f0dc 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java @@ -38,6 +38,8 @@ public interface ODataObjectFactory extends CommonODataObjectFactory { @Override ODataEntity newEntity(String name, URI link); + ODataEnumValue newEnumValue(String typeName, String value); + @Override ODataProperty newPrimitiveProperty(String name, ODataPrimitiveValue value); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java index ea73910..a3133cd 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java @@ -80,13 +80,13 @@ public abstract class AbstractODataObjectFactory implements CommonODataObjectFac } @Override - public ODataLink newFeedNavigationLink(final String name, final URI link) { + public ODataLink newEntitySetNavigationLink(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) { + public ODataLink newEntitySetNavigationLink(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(); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEnumValueImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEnumValueImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEnumValueImpl.java new file mode 100644 index 0000000..ee21018 --- /dev/null +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEnumValueImpl.java @@ -0,0 +1,50 @@ +/* + * 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.v4; + +import org.apache.olingo.commons.api.domain.AbstractODataValue; +import org.apache.olingo.commons.api.domain.v4.ODataEnumValue; + +public class ODataEnumValueImpl extends AbstractODataValue implements ODataEnumValue { + + private static final long serialVersionUID = 5830261159033325828L; + + private final String value; + + public ODataEnumValueImpl(final String typeName, final String value) { + super(typeName); + this.value = value; + } + + @Override + public String getValue() { + return value; + } + + @Override + public boolean isEnum() { + return true; + } + + @Override + public ODataEnumValue asEnum() { + return this; + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/117cf6f0/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java index 1b6428f..0a84407 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java @@ -59,6 +59,11 @@ public class ODataObjectFactoryImpl extends AbstractODataObjectFactory implement } @Override + public ODataEnumValue newEnumValue(final String typeName, final String value) { + return new ODataEnumValueImpl(typeName, value); + } + + @Override public ODataProperty newPrimitiveProperty(final String name, final ODataPrimitiveValue value) { return new ODataPropertyImpl(name, value); }
