merge
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/639941c0 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/639941c0 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/639941c0 Branch: refs/heads/master Commit: 639941c00eca9742a28e9297329cf909bd34f91c Parents: f79db0b e8ac1c7 Author: fmartelli <[email protected]> Authored: Tue Apr 29 10:27:30 2014 +0200 Committer: fmartelli <[email protected]> Committed: Tue Apr 29 10:27:30 2014 +0200 ---------------------------------------------------------------------- .../org/apache/olingo/fit/AbstractServices.java | 113 +++++----- .../apache/olingo/fit/V3ActionOverloading.java | 4 +- .../java/org/apache/olingo/fit/V3Services.java | 6 +- .../java/org/apache/olingo/fit/V4Services.java | 126 +++++++---- .../apache/olingo/fit/metadata/Metadata.java | 2 +- .../olingo/fit/metadata/NavigationProperty.java | 10 +- .../fit/serializer/JSONEntryContainer.java | 14 +- .../fit/serializer/JSONFeedContainer.java | 14 +- .../olingo/fit/utils/AbstractUtilities.java | 64 +++--- .../org/apache/olingo/fit/utils/DataBinder.java | 153 +++++++------ .../org/apache/olingo/fit/utils/FSManager.java | 6 +- .../apache/olingo/fit/utils/XMLUtilities.java | 2 +- fit/src/main/resources/V40/delta.full.json | 39 ++++ fit/src/main/resources/V40/delta.xml | 87 ++++++++ .../client/api/CommonEdmEnabledODataClient.java | 1 - .../request/retrieve/ODataEntityRequest.java | 2 +- .../request/retrieve/v4/ODataDeltaRequest.java | 29 +++ .../retrieve/v4/RetrieveRequestFactory.java | 2 + .../request/v4/AsyncRequestFactory.java | 1 - .../api/domain/ODataEntitySetIterator.java | 77 +++---- .../olingo/client/api/op/CommonODataBinder.java | 32 +-- .../olingo/client/api/op/CommonODataReader.java | 6 +- .../olingo/client/api/op/v3/ODataBinder.java | 8 +- .../olingo/client/api/op/v4/ODataBinder.java | 12 +- .../client/api/op/v4/ODataDeserializer.java | 11 + .../cud/ODataEntityCreateRequestImpl.java | 6 +- .../cud/ODataEntityUpdateRequestImpl.java | 6 +- .../retrieve/ODataEntityRequestImpl.java | 6 +- .../ODataEntitySetIteratorRequestImpl.java | 10 +- .../retrieve/ODataEntitySetRequestImpl.java | 6 +- .../retrieve/ODataPropertyRequestImpl.java | 8 +- .../retrieve/v4/ODataDeltaRequestImpl.java | 81 +++++++ .../retrieve/v4/RetrieveRequestFactoryImpl.java | 6 + .../ODataMediaEntityCreateRequestImpl.java | 4 +- .../ODataMediaEntityUpdateRequestImpl.java | 4 +- .../request/v4/AsyncRequestFactoryImpl.java | 3 +- .../client/core/op/AbstractODataBinder.java | 132 +++++------ .../client/core/op/AbstractODataReader.java | 9 +- .../olingo/client/core/op/ODataWriterImpl.java | 6 +- .../client/core/op/impl/v3/ODataBinderImpl.java | 10 +- .../client/core/op/impl/v3/ODataReaderImpl.java | 4 +- .../client/core/op/impl/v4/ODataBinderImpl.java | 79 ++++++- .../core/op/impl/v4/ODataDeserializerImpl.java | 12 + .../client/core/op/impl/v4/ODataReaderImpl.java | 4 +- .../client/core/it/AbstractBaseTestITCase.java | 20 +- .../core/it/v3/EntityRetrieveTestITCase.java | 6 +- .../client/core/it/v3/EntitySetTestITCase.java | 2 +- .../core/it/v3/QueryOptionsTestITCase.java | 10 +- .../client/core/it/v4/DeltaTestITCase.java | 78 +++++++ .../apache/olingo/client/core/v3/AtomTest.java | 30 +-- .../olingo/client/core/v3/EntitySetTest.java | 10 +- .../olingo/client/core/v3/EntityTest.java | 32 +-- .../apache/olingo/client/core/v4/AtomTest.java | 2 +- .../olingo/client/core/v4/EntitySetTest.java | 18 +- .../olingo/client/core/v4/EntityTest.java | 51 +++-- .../apache/olingo/client/core/v4/JSONTest.java | 97 ++++++--- .../apache/olingo/client/core/v4/Customers.json | 2 +- .../org/apache/olingo/client/core/v4/delta.json | 39 ++++ .../org/apache/olingo/client/core/v4/delta.xml | 87 ++++++++ .../apache/olingo/commons/api/Constants.java | 22 +- .../olingo/commons/api/data/ContextURL.java | 52 ++++- .../olingo/commons/api/data/DeletedEntity.java | 36 +++ .../apache/olingo/commons/api/data/Delta.java | 45 ++++ .../olingo/commons/api/data/DeltaLink.java | 36 +++ .../apache/olingo/commons/api/data/Entity.java | 174 +++++++++++++++ .../olingo/commons/api/data/EntitySet.java | 74 +++++++ .../apache/olingo/commons/api/data/Entry.java | 174 --------------- .../apache/olingo/commons/api/data/Feed.java | 74 ------- .../apache/olingo/commons/api/data/Link.java | 24 +- .../api/domain/CommonODataEntitySet.java | 2 +- .../olingo/commons/api/domain/ODataLinked.java | 2 +- .../commons/api/domain/v4/ODataDelta.java | 48 ++++ .../api/domain/v4/ODataObjectFactory.java | 4 + .../api/edm/constants/ODataServiceVersion.java | 12 + .../commons/api/op/CommonODataDeserializer.java | 18 +- .../olingo/commons/api/op/ODataSerializer.java | 20 +- .../olingo/commons/api/data/ContextURLTest.java | 33 +++ .../commons/core/data/AbstractAtomDealer.java | 20 +- .../olingo/commons/core/data/AbstractDelta.java | 65 ++++++ .../commons/core/data/AbstractEntity.java | 171 +++++++++++++++ .../commons/core/data/AbstractEntitySet.java | 61 ++++++ .../olingo/commons/core/data/AbstractEntry.java | 171 --------------- .../core/data/AbstractJsonDeserializer.java | 20 +- .../core/data/AbstractJsonSerializer.java | 18 +- .../olingo/commons/core/data/AtomDeltaImpl.java | 25 +++ .../commons/core/data/AtomDeserializer.java | 218 ++++++++++++++----- .../commons/core/data/AtomEntityImpl.java | 25 +++ .../commons/core/data/AtomEntitySetImpl.java | 28 +++ .../olingo/commons/core/data/AtomEntryImpl.java | 25 --- .../olingo/commons/core/data/AtomFeedImpl.java | 66 ------ .../commons/core/data/AtomSerializer.java | 154 ++++++------- .../commons/core/data/DeletedEntityImpl.java | 50 +++++ .../olingo/commons/core/data/DeltaLinkImpl.java | 64 ++++++ .../core/data/JSONDeltaDeserializer.java | 93 ++++++++ .../olingo/commons/core/data/JSONDeltaImpl.java | 28 +++ .../core/data/JSONEntityDeserializer.java | 200 +++++++++++++++++ .../commons/core/data/JSONEntityImpl.java | 33 +++ .../commons/core/data/JSONEntitySerializer.java | 123 +++++++++++ .../core/data/JSONEntitySetDeserializer.java | 93 ++++++++ .../commons/core/data/JSONEntitySetImpl.java | 35 +++ .../core/data/JSONEntitySetSerializer.java | 82 +++++++ .../core/data/JSONEntryDeserializer.java | 200 ----------------- .../olingo/commons/core/data/JSONEntryImpl.java | 33 --- .../commons/core/data/JSONEntrySerializer.java | 123 ----------- .../commons/core/data/JSONFeedDeserializer.java | 90 -------- .../olingo/commons/core/data/JSONFeedImpl.java | 99 --------- .../commons/core/data/JSONFeedSerializer.java | 82 ------- .../olingo/commons/core/data/LinkImpl.java | 24 +- .../core/data/ODataJacksonDeserializer.java | 9 + .../core/data/v3/JSONLinkCollectionImpl.java | 2 +- .../core/domain/AbstractODataEntity.java | 2 +- .../core/domain/AbstractODataEntitySet.java | 5 +- .../core/domain/v4/ODataComplexValueImpl.java | 2 +- .../commons/core/domain/v4/ODataDeltaImpl.java | 73 +++++++ .../core/domain/v4/ODataObjectFactoryImpl.java | 11 + .../core/edm/AbstractEdmNavigationProperty.java | 1 - .../core/op/AbstractODataDeserializer.java | 24 +- .../core/op/AbstractODataSerializer.java | 36 +-- .../olingo/commons/core/op/ResourceFactory.java | 84 +++---- 119 files changed, 3343 insertions(+), 1976 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/639941c0/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java ---------------------------------------------------------------------- diff --cc fit/src/main/java/org/apache/olingo/fit/AbstractServices.java index 021de16,202d118..5ce5790 --- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java +++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java @@@ -67,12 -67,11 +67,12 @@@ import org.apache.cxf.jaxrs.client.WebC import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.Multipart; import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; +import org.apache.olingo.commons.api.data.ComplexValue; import org.apache.olingo.commons.api.data.ResWrap; - import org.apache.olingo.commons.api.data.Entry; + import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; import org.apache.olingo.commons.api.format.ContentType; - import org.apache.olingo.commons.api.data.Feed; + import org.apache.olingo.commons.api.data.EntitySet; import org.apache.olingo.commons.api.data.Link; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; @@@ -407,17 -405,17 +406,17 @@@ public abstract class AbstractServices if (contentTypeValue == Accept.XML || contentTypeValue == Accept.TEXT) { throw new UnsupportedMediaTypeException("Unsupported media type"); } else if (contentTypeValue == Accept.ATOM) { - entryChanges = atomDeserializer.<AtomEntryImpl, AtomEntryImpl>read( - IOUtils.toInputStream(changes, Constants.ENCODING), AtomEntryImpl.class).getPayload(); + entryChanges = atomDeserializer.<AtomEntityImpl, AtomEntityImpl>read( + IOUtils.toInputStream(changes, Constants.ENCODING), AtomEntityImpl.class).getPayload(); } else { - final ResWrap<JSONEntryImpl> jcont = mapper.readValue(IOUtils.toInputStream(changes, Constants.ENCODING), - new TypeReference<JSONEntryImpl>() { + final ResWrap<JSONEntityImpl> jcont = mapper.readValue(IOUtils.toInputStream(changes, Constants.ENCODING), + new TypeReference<JSONEntityImpl>() { - }); + }); - entryChanges = dataBinder.toAtomEntry(jcont.getPayload()); + entryChanges = dataBinder.toAtomEntity(jcont.getPayload()); } - final ResWrap<AtomEntryImpl> container = atomDeserializer.read(entityInfo.getValue(), AtomEntryImpl.class); + final ResWrap<AtomEntityImpl> container = atomDeserializer.read(entityInfo.getValue(), AtomEntityImpl.class); for (Property property : entryChanges.getProperties()) { container.getPayload().getProperty(property.getName()).setValue(property.getValue()); @@@ -589,17 -587,17 +588,17 @@@ } else { final Accept contentTypeValue = Accept.parse(contentType, version); if (Accept.ATOM == contentTypeValue) { - container = atomDeserializer.read(IOUtils.toInputStream(entity, Constants.ENCODING), AtomEntryImpl.class); + container = atomDeserializer.read(IOUtils.toInputStream(entity, Constants.ENCODING), AtomEntityImpl.class); entry = container.getPayload(); } else { - final ResWrap<JSONEntryImpl> jcontainer = + final ResWrap<JSONEntityImpl> jcontainer = mapper.readValue(IOUtils.toInputStream(entity, Constants.ENCODING), - new TypeReference<JSONEntryImpl>() { - new TypeReference<JSONEntityImpl>() { - }); ++ new TypeReference<JSONEntityImpl>() { + }); - entry = dataBinder.toAtomEntry(jcontainer.getPayload()); + entry = dataBinder.toAtomEntity(jcontainer.getPayload()); - container = new ResWrap<AtomEntryImpl>( + container = new ResWrap<AtomEntityImpl>( jcontainer.getContextURL(), jcontainer.getMetadataETag(), entry); @@@ -619,10 -617,10 +618,10 @@@ final InputStream serialization = xml.addOrReplaceEntity(null, entitySetName, new ByteArrayInputStream(content.toByteArray()), entry); - ResWrap<AtomEntryImpl> result = atomDeserializer.read(serialization, AtomEntryImpl.class); - result = new ResWrap<AtomEntryImpl>( + ResWrap<AtomEntityImpl> result = atomDeserializer.read(serialization, AtomEntityImpl.class); + result = new ResWrap<AtomEntityImpl>( URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) - + entitySetName + Constants.get(version, ConstantKey.ODATA_METADATA_ENTITY_SUFFIX)), + + entitySetName + Constants.get(version, ConstantKey.ODATA_METADATA_ENTITY_SUFFIX)), null, result.getPayload()); final String path = Commons.getEntityBasePath(entitySetName, entityKey); @@@ -894,7 -892,7 +893,7 @@@ } else { mapper.writeValue( writer, new JSONFeedContainer(container.getContextURL(), container.getMetadataETag(), - dataBinder.toJSONFeed(container.getPayload()))); - dataBinder.toJSONEntitySet(container.getPayload()))); ++ dataBinder.toJSONEntitySet(container.getPayload()))); } return xml.createResponse( @@@ -1145,50 -1142,26 +1144,50 @@@ final String changes, final boolean justValue) { + // if the given path is not about any link then search for property + LOG.info("Retrieve property {}", path); + try { - Accept acceptType = null; - if (StringUtils.isNotBlank(format)) { - acceptType = Accept.valueOf(format.toUpperCase()); - } else if (StringUtils.isNotBlank(accept)) { - acceptType = Accept.parse(accept, version, null); + final FSManager fsManager = FSManager.instance(version); + + final String basePath = Commons.getEntityBasePath(entitySetName, entityId); - final ResWrap<AtomEntryImpl> container = xml.readContainerEntry(Accept.ATOM, ++ final ResWrap<AtomEntityImpl> container = xml.readContainerEntry(Accept.ATOM, + fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), Accept.ATOM)); + - final AtomEntryImpl entry = container.getPayload(); ++ final AtomEntityImpl entry = container.getPayload(); + + Property toBeReplaced = null; + for (String element : path.split("/")) { + if (toBeReplaced == null) { + toBeReplaced = entry.getProperty(element.trim()); + } else { + ComplexValue value = toBeReplaced.getValue().asComplex(); + for (Property field : value.get()) { + if (field.getName().equalsIgnoreCase(element)) { + toBeReplaced = field; + } + } + } } - // if the given path is not about any link then search for property - LOG.info("Retrieve property {}", path); + if (toBeReplaced == null) { + throw new NotFoundException(); + } - final AbstractUtilities utils = getUtilities(acceptType); + if (justValue) { + // just for primitive values + toBeReplaced.setValue(new PrimitiveValueImpl(changes)); + } else { + final AtomPropertyImpl pchanges = xml.readProperty( + Accept.parse(contentType, version), + IOUtils.toInputStream(changes, Constants.ENCODING), + entry.getType()); - utils.replaceProperty( - entitySetName, - entityId, - IOUtils.toInputStream(changes, Constants.ENCODING), - Arrays.asList(path.split("/")), - acceptType, - justValue); + toBeReplaced.setValue(pchanges.getValue()); + } + + fsManager.putInMemory(xml.writeEntry(Accept.ATOM, container), + fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.ENTITY), Accept.ATOM)); final Response response; if ("return-content".equalsIgnoreCase(prefer)) { @@@ -1545,7 -1507,8 +1544,8 @@@ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING); if (linkInfo.isFeed()) { - final ResWrap<Feed> container = atomDeserializer.<Feed, AtomFeedImpl>read(stream, AtomFeedImpl.class); - final ResWrap<EntitySet> container = ++ final ResWrap<EntitySet> container = + atomDeserializer.<EntitySet, AtomEntitySetImpl>read(stream, AtomEntitySetImpl.class); if (acceptType == Accept.ATOM) { atomSerializer.write(writer, container); @@@ -1555,11 -1518,12 +1555,12 @@@ mapper.writeValue( writer, new JSONFeedContainer(container.getContextURL(), - container.getMetadataETag(), - dataBinder.toJSONEntitySet((AtomEntitySetImpl) container.getPayload()))); + container.getMetadataETag(), - dataBinder.toJSONFeed((AtomFeedImpl) container.getPayload()))); ++ dataBinder.toJSONEntitySet((AtomEntitySetImpl) container.getPayload()))); } } else { - final ResWrap<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(stream, AtomEntryImpl.class); - final ResWrap<Entity> container = ++ final ResWrap<Entity> container = + atomDeserializer.<Entity, AtomEntityImpl>read(stream, AtomEntityImpl.class); if (acceptType == Accept.ATOM) { atomSerializer.write(writer, container); writer.flush(); @@@ -1568,8 -1532,8 +1569,8 @@@ mapper.writeValue( writer, new JSONEntryContainer(container.getContextURL(), - container.getMetadataETag(), - dataBinder.toJSONEntityType((AtomEntityImpl) container.getPayload()))); + container.getMetadataETag(), - dataBinder.toJSONEntry((AtomEntryImpl) container.getPayload()))); ++ dataBinder.toJSONEntityType((AtomEntityImpl) container.getPayload()))); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/639941c0/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/639941c0/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java ---------------------------------------------------------------------- diff --cc fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java index bf1e4e3,57e2049..2882784 --- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java @@@ -550,38 -551,31 +550,38 @@@ public abstract class AbstractUtilitie } else { mapper.writeValue( writer, new JSONFeedContainer(container.getContextURL(), - container.getMetadataETag(), dataBinder.toJSONFeed(container.getPayload()))); - container.getMetadataETag(), dataBinder.toJSONEntitySet(container.getPayload()))); ++ container.getMetadataETag(), dataBinder.toJSONEntitySet(container.getPayload()))); } return IOUtils.toInputStream(writer.toString(), Constants.ENCODING); } - public ResWrap<AtomEntryImpl> readContainerEntry(final Accept accept, final InputStream entity) - public AtomEntityImpl readEntry(final Accept accept, final InputStream entity) ++ public ResWrap<AtomEntityImpl> readContainerEntry(final Accept accept, final InputStream entity) throws XMLStreamException, IOException { - final ResWrap<AtomEntryImpl> container; - - final AtomEntityImpl entry; ++ final ResWrap<AtomEntityImpl> container; if (accept == Accept.ATOM || accept == Accept.XML) { - container = atomDeserializer.read(entity, AtomEntryImpl.class); - final ResWrap<AtomEntityImpl> container = atomDeserializer.read(entity, AtomEntityImpl.class); - entry = container.getPayload(); ++ container = atomDeserializer.read(entity, AtomEntityImpl.class); } else { - final ResWrap<JSONEntryImpl> jcontainer = - mapper.readValue(entity, new TypeReference<JSONEntryImpl>() { - final ResWrap<JSONEntityImpl> container = ++ final ResWrap<JSONEntityImpl> jcontainer = + mapper.readValue(entity, new TypeReference<JSONEntityImpl>() { - }); - entry = dataBinder.toAtomEntity(container.getPayload()); + }); - container = new ResWrap<AtomEntryImpl>( ++ container = new ResWrap<AtomEntityImpl>( + jcontainer.getContextURL(), + jcontainer.getMetadataETag(), - dataBinder.toAtomEntry(jcontainer.getPayload())); ++ dataBinder.toAtomEntity(jcontainer.getPayload())); } - return entry; + return container; + } + - public AtomEntryImpl readEntry(final Accept accept, final InputStream entity) ++ public AtomEntityImpl readEntry(final Accept accept, final InputStream entity) + throws XMLStreamException, IOException { + return readContainerEntry(accept, entity).getPayload(); + } - public InputStream writeEntry(final Accept accept, final ResWrap<AtomEntryImpl> container) + public InputStream writeEntry(final Accept accept, final ResWrap<AtomEntityImpl> container) throws XMLStreamException, IOException { final StringWriter writer = new StringWriter(); @@@ -590,7 -584,7 +590,7 @@@ } else { mapper.writeValue( writer, new JSONEntryContainer(container.getContextURL(), container.getMetadataETag(), - dataBinder.toJSONEntry(container.getPayload()))); - dataBinder.toJSONEntityType(container.getPayload()))); ++ dataBinder.toJSONEntityType(container.getPayload()))); } return IOUtils.toInputStream(writer.toString(), Constants.ENCODING); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/639941c0/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java ----------------------------------------------------------------------
