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/17 14:56:34 UTC
[1/5] git commit: Enhancing ODataPrimitiveValue test for
DateTimeOffset
Repository: olingo-odata4
Updated Branches:
refs/heads/master 7276a707e -> 3bb39defd
Enhancing ODataPrimitiveValue test for DateTimeOffset
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/7ee1e39f
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/7ee1e39f
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/7ee1e39f
Branch: refs/heads/master
Commit: 7ee1e39f1ec2e5fb79fd7e87f4ff3f0e2a6da245
Parents: 47f1ec1
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 16 09:31:17 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 16 09:31:17 2014 +0200
----------------------------------------------------------------------
.../client/core/v3/PrimitiveValueTest.java | 64 +++++++++++---------
.../client/core/v4/PrimitiveValueTest.java | 8 +--
2 files changed, 38 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ee1e39f/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
index 64301df..24c13da 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
@@ -31,6 +31,7 @@ import java.util.TimeZone;
import java.util.UUID;
import javax.xml.datatype.Duration;
import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.RandomStringUtils;
import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.client.api.v3.ODataClient;
import org.apache.olingo.client.core.AbstractTest;
@@ -44,7 +45,6 @@ import org.apache.olingo.commons.api.edm.geo.MultiPoint;
import org.apache.olingo.commons.api.edm.geo.MultiPolygon;
import org.apache.olingo.commons.api.edm.geo.Point;
import org.apache.olingo.commons.api.edm.geo.Polygon;
-
import org.junit.Test;
public class PrimitiveValueTest extends AbstractTest {
@@ -55,7 +55,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageInt32() throws EdmPrimitiveTypeException {
+ public void int32() throws EdmPrimitiveTypeException {
final int primitive = -10;
ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Int32).
setValue(primitive).build();
@@ -68,20 +68,19 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageString() throws EdmPrimitiveTypeException {
- final String primitive = UUID.randomUUID().toString();
- ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.String).
- setText(primitive).build();
+ public void string() throws EdmPrimitiveTypeException {
+ final String primitive = RandomStringUtils.random(17);
+ ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(primitive);
assertEquals(EdmPrimitiveTypeKind.String, value.asPrimitive().getTypeKind());
assertEquals(primitive, value.toString());
value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.String).
setText("1126a28b-a4af-4bbd-bf0a-2b2c22635565").build();
- assertEquals("1126a28b-a4af-4bbd-bf0a-2b2c22635565", value.asPrimitive().toCastValue(String.class).toString());
+ assertEquals("1126a28b-a4af-4bbd-bf0a-2b2c22635565", value.asPrimitive().toCastValue(String.class));
}
@Test
- public void manageDecimal() throws EdmPrimitiveTypeException {
+ public void decimal() throws EdmPrimitiveTypeException {
final BigDecimal primitive = new BigDecimal("-79228162514264337593543950335");
ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Decimal).
setValue(primitive).build();
@@ -94,7 +93,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageDateTime() throws EdmPrimitiveTypeException {
+ public void dateTime() throws EdmPrimitiveTypeException {
final Calendar expected = Calendar.getInstance();
expected.clear();
expected.set(2013, 0, 10, 2, 0, 0);
@@ -121,7 +120,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageTime() throws EdmPrimitiveTypeException {
+ public void time() throws EdmPrimitiveTypeException {
final String primitive = "-P9DT51M10.5063807S";
final ODataValue value =
getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Time).
@@ -132,29 +131,34 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageDateTimeOffset() throws EdmPrimitiveTypeException {
+ public void dateTimeOffset() throws EdmPrimitiveTypeException {
final Calendar expected = Calendar.getInstance();
expected.clear();
expected.setTimeZone(TimeZone.getTimeZone("GMT"));
expected.set(2013, 0, 10, 2, 0, 0);
+ expected.set(Calendar.MILLISECOND, 22);
final ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().
setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(expected).build();
assertEquals(EdmPrimitiveTypeKind.DateTimeOffset, value.asPrimitive().getTypeKind());
- final Calendar actual = value.asPrimitive().toCastValue(Calendar.class);
- assertEquals(expected.get(Calendar.YEAR), actual.get(Calendar.YEAR));
- assertEquals(expected.get(Calendar.MONTH), actual.get(Calendar.MONTH));
- assertEquals(expected.get(Calendar.DATE), actual.get(Calendar.DATE));
- assertEquals(expected.get(Calendar.HOUR), actual.get(Calendar.HOUR));
- assertEquals(expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE));
- assertEquals(expected.get(Calendar.SECOND), actual.get(Calendar.SECOND));
-
- assertEquals("2013-01-10T02:00:00Z", value.asPrimitive().toString());
+ final Calendar asCalendar = value.asPrimitive().toCastValue(Calendar.class);
+ assertEquals(expected.get(Calendar.YEAR), asCalendar.get(Calendar.YEAR));
+ assertEquals(expected.get(Calendar.MONTH), asCalendar.get(Calendar.MONTH));
+ assertEquals(expected.get(Calendar.DATE), asCalendar.get(Calendar.DATE));
+ assertEquals(expected.get(Calendar.HOUR), asCalendar.get(Calendar.HOUR));
+ assertEquals(expected.get(Calendar.MINUTE), asCalendar.get(Calendar.MINUTE));
+ assertEquals(expected.get(Calendar.SECOND), asCalendar.get(Calendar.SECOND));
+ assertEquals(expected.get(Calendar.MILLISECOND), asCalendar.get(Calendar.MILLISECOND));
+
+ final Timestamp asTimestamp = value.asPrimitive().toCastValue(Timestamp.class);
+ assertEquals(expected.get(Calendar.MILLISECOND), asTimestamp.getNanos());
+
+ assertEquals("2013-01-10T02:00:00.022Z", value.asPrimitive().toString());
}
@Test
- public void manageGuid() throws EdmPrimitiveTypeException {
+ public void guid() throws EdmPrimitiveTypeException {
final UUID primitive = UUID.fromString("1126a28b-a4af-4bbd-bf0a-2b2c22635565");
ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Guid).
setValue(primitive).build();
@@ -167,7 +171,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageBinary() throws EdmPrimitiveTypeException {
+ public void binary() throws EdmPrimitiveTypeException {
final byte[] primitive = UUID.randomUUID().toString().getBytes();
ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Binary).
setValue(primitive).build();
@@ -183,7 +187,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void managePoint() throws EdmPrimitiveTypeException {
+ public void point() throws EdmPrimitiveTypeException {
final Point primitive = new Point(Geospatial.Dimension.GEOGRAPHY, null);
primitive.setX(52.8606);
primitive.setY(173.334);
@@ -200,7 +204,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageLineString() throws EdmPrimitiveTypeException {
+ public void lineString() throws EdmPrimitiveTypeException {
final List<Point> points = new ArrayList<Point>();
Point point = new Point(Geospatial.Dimension.GEOGRAPHY, null);
point.setX(40.5);
@@ -241,7 +245,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageMultiPoint() throws EdmPrimitiveTypeException {
+ public void multiPoint() throws EdmPrimitiveTypeException {
final List<Point> points = new ArrayList<Point>();
Point point = new Point(Geospatial.Dimension.GEOMETRY, null);
point.setX(0);
@@ -263,7 +267,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageMultiLine() throws EdmPrimitiveTypeException {
+ public void multiLine() throws EdmPrimitiveTypeException {
final List<LineString> lines = new ArrayList<LineString>();
// line one ...
@@ -332,7 +336,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void managePolygon() throws EdmPrimitiveTypeException {
+ public void polygon() throws EdmPrimitiveTypeException {
final List<Point> interior = new ArrayList<Point>();
final List<Point> exterior = new ArrayList<Point>();
@@ -382,7 +386,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageMultiPolygon() throws EdmPrimitiveTypeException {
+ public void multiPolygon() throws EdmPrimitiveTypeException {
final List<Polygon> polygons = new ArrayList<Polygon>();
List<Point> interior = new ArrayList<Point>();
@@ -499,7 +503,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageGeomCollection() throws EdmPrimitiveTypeException {
+ public void geomCollection() throws EdmPrimitiveTypeException {
final List<Geospatial> collection = new ArrayList<Geospatial>();
Point point = new Point(Geospatial.Dimension.GEOMETRY, null);
@@ -531,7 +535,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageGeogCollection() throws EdmPrimitiveTypeException {
+ public void geogCollection() throws EdmPrimitiveTypeException {
final List<Geospatial> collection = new ArrayList<Geospatial>();
Point point = new Point(Geospatial.Dimension.GEOGRAPHY, null);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ee1e39f/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
index e61a9df..33dd920 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
@@ -18,9 +18,9 @@
*/
package org.apache.olingo.client.core.v4;
-import java.util.Calendar;
import static org.junit.Assert.assertEquals;
+import java.util.Calendar;
import org.apache.olingo.client.api.v4.ODataClient;
import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.client.core.AbstractTest;
@@ -36,7 +36,7 @@ public class PrimitiveValueTest extends AbstractTest {
}
@Test
- public void manageTimeOfDay() throws EdmPrimitiveTypeException {
+ public void timeOfDay() throws EdmPrimitiveTypeException {
final Calendar expected = Calendar.getInstance();
expected.clear();
expected.set(2013, 0, 10, 21, 45, 17);
@@ -49,12 +49,12 @@ public class PrimitiveValueTest extends AbstractTest {
assertEquals(expected.get(Calendar.HOUR), actual.get(Calendar.HOUR));
assertEquals(expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE));
assertEquals(expected.get(Calendar.SECOND), actual.get(Calendar.SECOND));
-
+
assertEquals("21:45:17", value.asPrimitive().toString());
}
@Test
- public void manageDate() throws EdmPrimitiveTypeException {
+ public void Date() throws EdmPrimitiveTypeException {
final Calendar expected = Calendar.getInstance();
expected.clear();
expected.set(2013, 0, 10);
[5/5] git commit: [OLINGO-175] More V4 CRUD tests for containment,
deep insert and bind operation
Posted by il...@apache.org.
[OLINGO-175] More V4 CRUD tests for containment, deep insert and bind operation
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/3bb39def
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/3bb39def
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/3bb39def
Branch: refs/heads/master
Commit: 3bb39defd4cdaef20354e9043520260e2d8ffffa
Parents: ef8c3a0
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 17 14:56:22 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 17 14:56:22 2014 +0200
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 110 +++---
.../apache/olingo/fit/metadata/Metadata.java | 2 +-
.../olingo/fit/utils/AbstractJSONUtilities.java | 27 +-
.../olingo/fit/utils/AbstractUtilities.java | 351 +++++++++----------
.../olingo/fit/utils/AbstractXMLUtilities.java | 9 +-
.../org/apache/olingo/fit/utils/Accept.java | 2 +-
.../org/apache/olingo/fit/utils/Commons.java | 92 ++---
.../org/apache/olingo/fit/utils/Constants.java | 3 +-
.../org/apache/olingo/fit/utils/DataBinder.java | 12 +-
.../org/apache/olingo/fit/utils/FSManager.java | 2 +-
.../resources/V40/People/1/entity.full.json | 51 +++
fit/src/main/resources/V40/People/1/entity.xml | 72 ++++
fit/src/main/resources/V40/People/5/entity.xml | 8 +-
.../streamed/CommonStreamedRequestFactory.java | 9 +-
.../MediaEntityCreateStreamManager.java | 6 +-
.../MediaEntityUpdateStreamManager.java | 6 +-
.../streamed/ODataMediaEntityCreateRequest.java | 7 +-
.../streamed/ODataMediaEntityUpdateRequest.java | 7 +-
.../ODataMediaEntityCreateResponse.java | 8 +-
.../ODataMediaEntityUpdateResponse.java | 6 +-
lib/client-core/pom.xml | 2 +-
.../request/cud/AbstractCUDRequestFactory.java | 4 +-
.../AbstractODataStreamedEntityRequest.java | 5 +-
.../AbstractStreamedRequestFactory.java | 17 +-
.../ODataMediaEntityCreateRequestImpl.java | 37 +-
.../ODataMediaEntityUpdateRequestImpl.java | 41 +--
.../streamed/ODataStreamUpdateRequestImpl.java | 2 +-
.../data/JSONServiceDocumentDeserializer.java | 3 +-
.../client/core/op/AbstractODataBinder.java | 42 ++-
.../client/core/it/v3/AbstractTestITCase.java | 3 +-
.../client/core/it/v3/AsyncTestITCase.java | 6 +-
.../core/it/v3/EntityCreateTestITCase.java | 36 +-
.../client/core/it/v3/LinkTestITCase.java | 13 +-
.../core/it/v3/MediaEntityTestITCase.java | 42 +--
.../client/core/it/v4/BatchTestITCase.java | 31 +-
.../core/it/v4/EntityCreateTestITCase.java | 82 +++++
.../core/it/v4/EntityUpdateTestITCase.java | 45 ++-
.../api/domain/CommonODataObjectFactory.java | 96 +----
.../api/domain/v3/ODataObjectFactory.java | 9 +
.../core/data/AbstractJsonSerializer.java | 14 +-
.../commons/core/data/AtomSerializer.java | 8 +
.../core/data/JSONEntryDeserializer.java | 23 +-
.../commons/core/data/JSONEntrySerializer.java | 11 +-
.../commons/core/data/JSONFeedDeserializer.java | 23 +-
.../core/domain/AbstractODataObjectFactory.java | 61 +---
.../core/domain/v3/ODataObjectFactoryImpl.java | 7 +
46 files changed, 798 insertions(+), 655 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
index e8c8524..9f992e9 100644
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@ -27,6 +27,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
+import java.net.URI;
import java.util.AbstractMap;
import java.util.Arrays;
import java.util.Collections;
@@ -468,29 +469,29 @@ public abstract class AbstractServices {
} else {
final Container<JSONEntryImpl> jcont =
mapper.readValue(IOUtils.toInputStream(changes), new TypeReference<JSONEntryImpl>() {
- });
+ });
entryChanges = (new DataBinder(version)).getAtomEntry(jcont.getObject());
}
- final Container<AtomEntryImpl> entry = atomDeserializer.read(entityInfo.getValue(), AtomEntryImpl.class);
+ final Container<AtomEntryImpl> container = atomDeserializer.read(entityInfo.getValue(), AtomEntryImpl.class);
for (Property property : entryChanges.getProperties()) {
- entry.getObject().getProperty(property.getName()).setValue(property.getValue());
+ container.getObject().getProperty(property.getName()).setValue(property.getValue());
}
for (Link link : entryChanges.getNavigationLinks()) {
- entry.getObject().getNavigationLinks().add(link);
+ container.getObject().getNavigationLinks().add(link);
}
final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
- atomSerializer.write(writer, entry);
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
+ atomSerializer.write(writer, container);
writer.flush();
writer.close();
- final InputStream res =
- xml.addOrReplaceEntity(entityId, entitySetName, new ByteArrayInputStream(content.toByteArray()));
+ final InputStream res = xml.addOrReplaceEntity(
+ entityId, entitySetName, new ByteArrayInputStream(content.toByteArray()), container.getObject());
final Container<AtomEntryImpl> cres = atomDeserializer.read(res, AtomEntryImpl.class);
@@ -546,9 +547,11 @@ public abstract class AbstractServices {
InputStream res;
if (acceptType == Accept.ATOM) {
- res = xml.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity));
+ res = xml.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity),
+ getUtilities(acceptType).readEntry(acceptType, IOUtils.toInputStream(entity)));
} else {
- res = json.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity));
+ res = json.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity),
+ getUtilities(acceptType).readEntry(acceptType, IOUtils.toInputStream(entity)));
}
final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
@@ -631,14 +634,14 @@ public abstract class AbstractServices {
final String entityKey;
if (utils.isMediaContent(entitySetName)) {
- entityKey = xml.getDefaultEntryKey(entitySetName, null);
-
- utils.addMediaEntityValue(entitySetName, entityKey, IOUtils.toInputStream(entity));
-
entry = new AtomEntryImpl();
entry.setMediaContentType(ContentType.WILDCARD);
entry.setType(entitySet.getType());
+ entityKey = xml.getDefaultEntryKey(entitySetName, entry);
+
+ utils.addMediaEntityValue(entitySetName, entityKey, IOUtils.toInputStream(entity));
+
final String id = Commons.getMediaContent().get(entitySetName);
if (StringUtils.isNotBlank(id)) {
final AtomPropertyImpl prop = new AtomPropertyImpl();
@@ -659,42 +662,44 @@ public abstract class AbstractServices {
container = new Container<AtomEntryImpl>(null, null, entry);
} else {
final Accept contentTypeValue = Accept.parse(contentType, version);
- entityKey = getUtilities(contentTypeValue).getDefaultEntryKey(entitySetName, IOUtils.toInputStream(entity));
-
if (Accept.ATOM == contentTypeValue) {
container = atomDeserializer.read(IOUtils.toInputStream(entity), AtomEntryImpl.class);
entry = container.getObject();
} else {
final Container<JSONEntryImpl> jcontainer =
mapper.readValue(IOUtils.toInputStream(entity), new TypeReference<JSONEntryImpl>() {
- });
+ });
- entry = (new DataBinder(version)).
- getAtomEntry(jcontainer.getObject());
+ entry = new DataBinder(version).getAtomEntry(jcontainer.getObject());
container = new Container<AtomEntryImpl>(
jcontainer.getContextURL(),
jcontainer.getMetadataETag(),
entry);
}
+
+ entityKey = getUtilities(contentTypeValue).getDefaultEntryKey(entitySetName, entry);
}
normalizeAtomEntry(entry, entitySetName, entityKey);
final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
atomSerializer.write(writer, container);
writer.flush();
writer.close();
final InputStream serialization =
- xml.addOrReplaceEntity(entitySetName, new ByteArrayInputStream(content.toByteArray()));
+ xml.addOrReplaceEntity(null, entitySetName, new ByteArrayInputStream(content.toByteArray()), entry);
- final Container<AtomEntryImpl> cres = atomDeserializer.read(serialization, AtomEntryImpl.class);
+ Container<AtomEntryImpl> result = atomDeserializer.read(serialization, AtomEntryImpl.class);
+ result = new Container<AtomEntryImpl>(
+ URI.create(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
+ + "$metadata#" + entitySetName + "/$entity"), null, result.getObject());
final String path = Commons.getEntityBasePath(entitySetName, entityKey);
FSManager.instance(version).putInMemory(
- cres, path + File.separatorChar + Constants.get(version, ConstantKey.ENTITY));
+ result, path + File.separatorChar + Constants.get(version, ConstantKey.ENTITY));
final String location = uriInfo.getRequestUri().toASCIIString() + "(" + entityKey + ")";
@@ -709,7 +714,7 @@ public abstract class AbstractServices {
} else {
response = utils.createResponse(
location,
- utils.readEntity(entitySetName, entityKey, acceptType).getValue(),
+ utils.writeEntry(acceptType, result),
null,
acceptType,
Response.Status.CREATED);
@@ -721,6 +726,7 @@ public abstract class AbstractServices {
return response;
} catch (Exception e) {
+ LOG.error("While creating new entity", e);
return utils.createFaultResponse(accept, e);
}
}
@@ -751,13 +757,13 @@ public abstract class AbstractServices {
replaceAll("\"Salary\":[0-9]*,", "\"Salary\":0,").
replaceAll("\"Title\":\".*\"", "\"Title\":\"[Sacked]\"").
replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>.*\\</d:Salary\\>",
- "<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
+ "<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
replaceAll("\\<d:Title\\>.*\\</d:Title\\>", "<d:Title>[Sacked]</d:Title>");
final FSManager fsManager = FSManager.instance(version);
fsManager.putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
fsManager.getAbsolutePath(Commons.getEntityBasePath("Person", entityId) + Constants.get(version,
- ConstantKey.ENTITY), utils.getKey()));
+ ConstantKey.ENTITY), utils.getKey()));
return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
} catch (Exception e) {
@@ -809,9 +815,9 @@ public abstract class AbstractServices {
final Long newSalary = Long.valueOf(salaryMatcher.group(1)) + n;
newContent = newContent.
replaceAll("\"Salary\":" + salaryMatcher.group(1) + ",",
- "\"Salary\":" + newSalary + ",").
+ "\"Salary\":" + newSalary + ",").
replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>" + salaryMatcher.group(1) + "</d:Salary\\>",
- "<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
+ "<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
}
FSManager.instance(version).putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
@@ -934,7 +940,7 @@ public abstract class AbstractServices {
setInlineCount(container.getObject(), count);
final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
if (acceptType == Accept.ATOM) {
atomSerializer.write(writer, container);
@@ -945,7 +951,7 @@ public abstract class AbstractServices {
mapper.writeValue(
writer, new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(), container.getMetadataETag(),
- new DataBinder(version).getJsonFeed(container.getObject())));
+ new DataBinder(version).getJsonFeed(container.getObject())));
}
return xml.createResponse(
@@ -1055,7 +1061,12 @@ public abstract class AbstractServices {
final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
final AtomSerializer atomSerializer = Commons.getAtomSerializer(version);
- final Container<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(entity, AtomEntryImpl.class);
+ Container<AtomEntryImpl> container = atomDeserializer.read(entity, AtomEntryImpl.class);
+ if (container.getContextURL() == null) {
+ container = new Container<AtomEntryImpl>(URI.create(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
+ + "$metadata#" + entitySetName + "/$entity"),
+ container.getMetadataETag(), container.getObject());
+ }
final Entry entry = container.getObject();
if (keyAsSegment) {
@@ -1103,13 +1114,13 @@ public abstract class AbstractServices {
rep.setRel(link.getRel());
rep.setTitle(link.getTitle());
rep.setType(link.getType());
- if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_ENTRY))) {
+ if (link.getType().equals(Constants.get(version, ConstantKey.ATOM_LINK_ENTRY))) {
// inline entry
final Entry inline = atomDeserializer.<Entry, AtomEntryImpl>read(
xml.expandEntity(entitySetName, entityId, link.getTitle()),
AtomEntryImpl.class).getObject();
rep.setInlineEntry(inline);
- } else if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_FEED))) {
+ } else if (link.getType().equals(Constants.get(version, ConstantKey.ATOM_LINK_FEED))) {
// inline feed
final Feed inline = atomDeserializer.<Feed, AtomFeedImpl>read(
xml.expandEntity(entitySetName, entityId, link.getTitle()),
@@ -1126,23 +1137,9 @@ public abstract class AbstractServices {
}
}
- final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
-
- if (utils.getKey() == Accept.ATOM) {
- atomSerializer.write(writer, container);
- writer.flush();
- writer.close();
- } else {
- final ObjectMapper mapper = Commons.getJsonMapper(version);
- mapper.writeValue(
- writer, new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(), container.getMetadataETag(),
- (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
- }
-
return xml.createResponse(
location,
- new ByteArrayInputStream(content.toByteArray()),
+ xml.writeEntry(utils.getKey(), container),
Commons.getETag(entityInfo.getKey(), version),
utils.getKey());
@@ -1560,7 +1557,7 @@ public abstract class AbstractServices {
final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
if (linkInfo.isFeed()) {
final Container<Feed> container = atomDeserializer.<Feed, AtomFeedImpl>read(stream, AtomFeedImpl.class);
@@ -1575,8 +1572,8 @@ public abstract class AbstractServices {
mapper.writeValue(
writer,
new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(),
- container.getMetadataETag(),
- (new DataBinder(version)).getJsonFeed((AtomFeedImpl) container.getObject())));
+ container.getMetadataETag(),
+ (new DataBinder(version)).getJsonFeed((AtomFeedImpl) container.getObject())));
}
} else {
final Container<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(stream, AtomEntryImpl.class);
@@ -1590,8 +1587,8 @@ public abstract class AbstractServices {
mapper.writeValue(
writer,
new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(),
- container.getMetadataETag(),
- (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
+ container.getMetadataETag(),
+ (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
}
}
@@ -1649,7 +1646,7 @@ public abstract class AbstractServices {
stream = utils.getPropertyValue(stream, pathElements);
} else {
- String edmType = xml.getEdmTypeFromAtom(entitySetName, entityId, pathElements);
+ final String edmType = xml.getEdmTypeFromAtom(entitySetName, entityId, pathElements);
stream = utils.getProperty(entitySetName, entityId, pathElements, edmType);
}
@@ -1737,8 +1734,9 @@ public abstract class AbstractServices {
final LinkImpl link = new LinkImpl();
link.setTitle(property.getKey());
link.setType(property.getValue().isFeed()
- ? Constants.get(ConstantKey.ATOM_LINK_FEED) : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
- link.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getKey());
+ ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
+ : Constants.get(version, ConstantKey.ATOM_LINK_ENTRY));
+ link.setRel(Constants.get(version, ConstantKey.ATOM_LINK_REL) + property.getKey());
link.setHref(entitySetName + "(" + entityKey + ")/" + property.getKey());
entry.getNavigationLinks().add(link);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java b/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
index 1b764dc..ebd599b 100644
--- a/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
+++ b/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
@@ -50,7 +50,7 @@ public class Metadata extends AbstractMetadataElement {
try {
final XMLInputFactory ifactory = XMLInputFactory.newInstance();
ifactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
- final XMLEventReader reader = ifactory.createXMLEventReader(is, "utf-8");
+ final XMLEventReader reader = ifactory.createXMLEventReader(is, "UTF-8");
try {
while (reader.hasNext()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
index 48ec6f8..3a22c64 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
@@ -66,7 +66,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
new TextNode(Commons.getLinksURI(version, entitySetName, entitykey, link)));
}
- return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
}
@Override
@@ -97,13 +97,10 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
return links;
}
- /**
- * {@inheritDoc }
- */
@Override
- protected NavigationLinks retrieveNavigationInfo(
- final String entitySetName, final InputStream is)
+ protected NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
throws Exception {
+
final ObjectMapper mapper = new ObjectMapper();
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
IOUtils.closeQuietly(is);
@@ -132,7 +129,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
links.addLinks(title, hrefs);
} else if (navigationProperties.containsKey(field.getKey())) {
- links.addInlines(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTf-8"));
+ links.addInlines(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTF-8"));
}
}
@@ -176,9 +173,9 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
srcNode.set(
Constants.get(version, ConstantKey.JSON_EDITLINK_NAME), new TextNode(
- Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")"));
+ Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")"));
- return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
}
@Override
@@ -186,7 +183,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
throws Exception {
final ObjectMapper mapper = new ObjectMapper();
final JsonNode srcNode = mapper.readTree(src);
- JsonNode node = getProperty(srcNode, path);
+ final JsonNode node = getProperty(srcNode, path);
return IOUtils.toInputStream(node.asText());
}
@@ -310,7 +307,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
srcNode.retain(retain);
- return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
}
@Override
@@ -382,7 +379,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
toBeChangedNode.set(linkName + Constants.get(version, ConstantKey.JSON_NEXTLINK_SUFFIX), next);
}
- return IOUtils.toInputStream(toBeChangedNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(toBeChangedNode.toString(), "UTF-8");
}
@Override
@@ -395,7 +392,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final Iterator<Map.Entry<String, JsonNode>> fields = srcObject.fields();
while (fields.hasNext()) {
final Map.Entry<String, JsonNode> field = fields.next();
- res.put(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTf-8"));
+ res.put(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTF-8"));
}
return res;
@@ -489,7 +486,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
((ObjectNode) node).set(path.get(path.size() - 1), replacementNode);
- return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
}
@Override
@@ -508,6 +505,6 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
((ObjectNode) node).set(path.get(path.size() - 1), null);
- return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+ return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
index 1df1282..22a7f5b 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
@@ -18,32 +18,41 @@
*/
package org.apache.olingo.fit.utils;
-import static org.apache.olingo.fit.utils.Commons.sequence;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.ConcurrentModificationException;
import java.util.HashSet;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.Response;
+import javax.xml.stream.XMLStreamException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.vfs2.FileObject;
+import org.apache.olingo.commons.api.data.Container;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Link;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.data.AtomEntryImpl;
+import org.apache.olingo.commons.core.data.JSONEntryImpl;
import org.apache.olingo.fit.UnsupportedMediaTypeException;
import org.apache.olingo.fit.metadata.Metadata;
import org.apache.olingo.fit.metadata.NavigationProperty;
+import org.apache.olingo.fit.serializer.JsonEntryContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,7 +67,7 @@ public abstract class AbstractUtilities {
protected final FSManager fsManager;
- protected final static Pattern entityUriPattern = Pattern.compile(".*\\/.*\\(.*\\)");
+ protected static final Pattern ENTITY_URI_PATTERN = Pattern.compile(".*\\/.*\\(.*\\)");
/**
* Batch/Changeset content type.
@@ -81,7 +90,7 @@ public abstract class AbstractUtilities {
}
public boolean isMediaContent(final String entityName) {
- return Commons.mediaContent.containsKey(entityName);
+ return Commons.MEDIA_CONTENT.containsKey(entityName);
}
/**
@@ -171,16 +180,18 @@ public abstract class AbstractUtilities {
return fo.getContent().getInputStream();
}
- public InputStream addOrReplaceEntity(
- final String entitySetName, final InputStream is) throws Exception {
+ private InputStream toInputStream(final AtomEntryImpl entry) throws XMLStreamException {
+ final StringWriter writer = new StringWriter();
+ Commons.getAtomSerializer(version).write(writer, entry);
- return addOrReplaceEntity(null, entitySetName, is);
+ return IOUtils.toInputStream(writer.toString(), Constants.ENCODING);
}
public InputStream addOrReplaceEntity(
final String key,
final String entitySetName,
- final InputStream is) throws Exception {
+ final InputStream is,
+ final AtomEntryImpl entry) throws Exception {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(is, bos);
@@ -190,33 +201,32 @@ public abstract class AbstractUtilities {
Commons.getMetadata(version).getNavigationProperties(entitySetName);
// -----------------------------------------
- // 0. Retrieve navigation links to be mantained
+ // 0. Retrieve navigation links to be kept
// -----------------------------------------
- Set<String> linksToBeMantained;
+ Set<String> linksToBeKept;
try {
- linksToBeMantained = new HashSet<String>(navigationProperties.keySet());
+ linksToBeKept = new HashSet<String>(navigationProperties.keySet());
} catch (Exception e) {
- linksToBeMantained = Collections.<String>emptySet();
+ linksToBeKept = Collections.<String>emptySet();
}
- for (String availableLink : new HashSet<String>(linksToBeMantained)) {
+ for (String availableLink : new HashSet<String>(linksToBeKept)) {
try {
fsManager.resolve(Commons.getLinksPath(version, entitySetName, key, availableLink, Accept.JSON_FULLMETA));
} catch (Exception e) {
- linksToBeMantained.remove(availableLink);
+ linksToBeKept.remove(availableLink);
}
}
for (String linkName : retrieveAllLinkNames(new ByteArrayInputStream(bos.toByteArray()))) {
- linksToBeMantained.remove(linkName);
+ linksToBeKept.remove(linkName);
}
// -----------------------------------------
// -----------------------------------------
// 1. Get default entry key and path (N.B. operation will consume/close the stream; use a copy instead)
// -----------------------------------------
- final String entityKey = key == null ? getDefaultEntryKey(
- entitySetName, new ByteArrayInputStream(bos.toByteArray())) : key;
+ final String entityKey = key == null ? getDefaultEntryKey(entitySetName, entry) : key;
final String path = Commons.getEntityBasePath(entitySetName, entityKey);
// -----------------------------------------
@@ -224,8 +234,7 @@ public abstract class AbstractUtilities {
// -----------------------------------------
// 2. Retrieve navigation info
// -----------------------------------------
- final NavigationLinks links =
- retrieveNavigationInfo(entitySetName, new ByteArrayInputStream(bos.toByteArray()));
+ final NavigationLinks links = retrieveNavigationInfo(entitySetName, new ByteArrayInputStream(bos.toByteArray()));
// -----------------------------------------
// -----------------------------------------
@@ -239,10 +248,10 @@ public abstract class AbstractUtilities {
IOUtils.copy(createdEntity, bos);
// -----------------------------------------
- // 4. Add navigation links to be mantained
+ // 4. Add navigation links to be kept
// -----------------------------------------
final InputStream normalizedEntity =
- addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeMantained);
+ addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeKept);
// -----------------------------------------
IOUtils.closeQuietly(bos);
@@ -262,28 +271,42 @@ public abstract class AbstractUtilities {
putLinksInMemory(path, entitySetName, entityKey, link.getKey(), link.getValue());
}
- for (Map.Entry<String, List<InputStream>> inlineEntry : links.getInlines()) {
- final String inlineEntitySetName = navigationProperties.get(inlineEntry.getKey()).getTarget();
-
- final List<String> hrefs = new ArrayList<String>();
-
- for (InputStream stream : inlineEntry.getValue()) {
- final ByteArrayOutputStream inlineBos = new ByteArrayOutputStream();
- IOUtils.copy(stream, inlineBos);
- IOUtils.closeQuietly(stream);
-
- final String inlineEntryKey = getDefaultEntryKey(
- inlineEntitySetName, new ByteArrayInputStream(inlineBos.toByteArray()));
-
- addOrReplaceEntity(
- inlineEntryKey,
- inlineEntitySetName,
- new ByteArrayInputStream(inlineBos.toByteArray()));
+ final List<String> hrefs = new ArrayList<String>();
+
+ for (final Link link : entry.getNavigationLinks()) {
+ final NavigationProperty navProp = navigationProperties == null? null: navigationProperties.get(link.getTitle());
+ if (navProp != null) {
+ final String inlineEntitySetName = navProp.getTarget();
+ if (link.getInlineEntry() != null) {
+ final String inlineEntryKey = getDefaultEntryKey(
+ inlineEntitySetName, (AtomEntryImpl) link.getInlineEntry());
+
+ addOrReplaceEntity(
+ inlineEntryKey,
+ inlineEntitySetName,
+ toInputStream((AtomEntryImpl) link.getInlineEntry()),
+ (AtomEntryImpl) link.getInlineEntry());
+
+ hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+ } else if (link.getInlineFeed() != null) {
+ for (Entry subentry : link.getInlineFeed().getEntries()) {
+ final String inlineEntryKey = getDefaultEntryKey(
+ inlineEntitySetName, (AtomEntryImpl) subentry);
+
+ addOrReplaceEntity(
+ inlineEntryKey,
+ inlineEntitySetName,
+ toInputStream((AtomEntryImpl) subentry),
+ (AtomEntryImpl) subentry);
+
+ hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+ }
+ }
- hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+ if (!hrefs.isEmpty()) {
+ putLinksInMemory(path, entitySetName, entityKey, link.getTitle(), hrefs);
+ }
}
-
- putLinksInMemory(path, entitySetName, entityKey, inlineEntry.getKey(), hrefs);
}
// -----------------------------------------
@@ -338,7 +361,7 @@ public abstract class AbstractUtilities {
+ "<link rel=\"edit-media\" title=\"Car\" href=\"" + entityURI + "/$value\" />"
+ "<content type=\"*/*\" src=\"" + entityURI + "/$value\" />"
+ "<m:properties>"
- + "<d:" + Commons.mediaContent.get(entitySetName) + " m:type=\"Edm.Int32\">" + entityKey + "</d:VIN>"
+ + "<d:" + Commons.MEDIA_CONTENT.get(entitySetName) + " m:type=\"Edm.Int32\">" + entityKey + "</d:VIN>"
+ "<d:Description m:null=\"true\" />"
+ "</m:properties>"
+ "</entry>";
@@ -360,12 +383,12 @@ public abstract class AbstractUtilities {
+ "\"odata.mediaEditLink\": \"" + entityURI + "/$value\","
+ "\"odata.mediaReadLink\": \"" + entityURI + "/$value\","
+ "\"odata.mediaContentType\": \"*/*\","
- + "\"" + Commons.mediaContent.get(entitySetName) + "\": " + entityKey + ","
+ + "\"" + Commons.MEDIA_CONTENT.get(entitySetName) + "\": " + entityKey + ","
+ "\"Description\": null" + "}";
fsManager.putInMemory(
IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY),
- Accept.JSON_FULLMETA));
+ Accept.JSON_FULLMETA));
// -----------------------------------------
return readEntity(entitySetName, entityKey, getDefaultFormat()).getValue();
@@ -401,11 +424,11 @@ public abstract class AbstractUtilities {
throws IOException {
fsManager.putInMemory(
- Commons.getLinksAsJSON(entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
+ Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
Commons.getLinksPath(version, basePath, linkName, Accept.JSON_FULLMETA));
fsManager.putInMemory(
- Commons.getLinksAsATOM(new SimpleEntry<String, Collection<String>>(linkName, uris)),
+ Commons.getLinksAsATOM(version, new SimpleEntry<String, Collection<String>>(linkName, uris)),
Commons.getLinksPath(version, basePath, linkName, Accept.XML));
}
@@ -533,154 +556,122 @@ public abstract class AbstractUtilities {
return builder.build();
}
- public String getDefaultEntryKey(
- final String entitySetName, final InputStream entity) throws IOException {
- try {
- String res;
+ public AtomEntryImpl readEntry(final Accept contentTypeValue, final InputStream entity)
+ throws XMLStreamException, IOException {
- if ("Message".equals(entitySetName)) {
- try {
- final List<String> propertyNames = new ArrayList<String>();
- propertyNames.add("MessageId");
- propertyNames.add("FromUsername");
+ final AtomEntryImpl entry;
+
+ if (Accept.ATOM == contentTypeValue) {
+ final Container<AtomEntryImpl> container = Commons.getAtomDeserializer(version).
+ read(entity, AtomEntryImpl.class);
+ entry = container.getObject();
+ } else {
+ final Container<JSONEntryImpl> jcontainer =
+ Commons.getJsonMapper(version).readValue(entity, new TypeReference<JSONEntryImpl>() {
+ });
+ entry = new DataBinder(version).getAtomEntry(jcontainer.getObject());
+ }
- final StringBuilder keyBuilder = new StringBuilder();
- for (Map.Entry<String, InputStream> value : getPropertyValues(entity, propertyNames).entrySet()) {
+ return entry;
+ }
- if (keyBuilder.length() > 0) {
- keyBuilder.append(",");
- }
+ public InputStream writeEntry(final Accept accept, final Container<AtomEntryImpl> container)
+ throws XMLStreamException, IOException {
- keyBuilder.append(value.getKey()).append("=").append(IOUtils.toString(value.getValue()));
- }
- res = keyBuilder.toString();
- } catch (Exception e) {
- final int messageId;
- if (sequence.containsKey(entitySetName)) {
- messageId = sequence.get(entitySetName) + 1;
+ final ByteArrayOutputStream content = new ByteArrayOutputStream();
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
+
+ if (accept == Accept.ATOM) {
+ Commons.getAtomSerializer(version).write(writer, container);
+ writer.flush();
+ writer.close();
+ } else {
+ final ObjectMapper mapper = Commons.getJsonMapper(version);
+ mapper.writeValue(
+ writer, new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(), container.getMetadataETag(),
+ (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
+ }
+
+ return new ByteArrayInputStream(content.toByteArray());
+ }
+
+ private String getDefaultEntryKey(final String entitySetName, final AtomEntryImpl entry, final String propertyName)
+ throws Exception {
+
+ String res;
+ if (entry.getProperty(propertyName) == null) {
+ if (Commons.SEQUENCE.containsKey(entitySetName)) {
+ res = String.valueOf(Commons.SEQUENCE.get(entitySetName) + 1);
+ } else {
+ throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
+ }
+ } else {
+ res = entry.getProperty(propertyName).getValue().asPrimitive().get();
+ }
+ Commons.SEQUENCE.put(entitySetName, Integer.valueOf(res));
+
+ return res;
+ }
+
+ public String getDefaultEntryKey(final String entitySetName, final AtomEntryImpl entry) throws IOException {
+ try {
+ String res;
+
+ if ("Message".equals(entitySetName)) {
+ int messageId;
+ if (entry.getProperty("MessageId") == null || entry.getProperty("FromUsername") == null) {
+ if (Commons.SEQUENCE.containsKey(entitySetName)) {
+ messageId = Commons.SEQUENCE.get(entitySetName) + 1;
res = "MessageId=" + String.valueOf(messageId) + ",FromUsername=1";
} else {
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
}
- sequence.put(entitySetName, Integer.valueOf(messageId));
+ } else {
+ messageId = Integer.valueOf(entry.getProperty("MessageId").getValue().asPrimitive().get());
+ res = "MessageId=" + entry.getProperty("MessageId").getValue().asPrimitive().get()
+ + ",FromUsername=" + entry.getProperty("FromUsername").getValue().asPrimitive().get();
}
+ Commons.SEQUENCE.put(entitySetName, messageId);
} else if ("Order".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("OrderId"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "OrderId");
} else if ("Orders".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("OrderID"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "OrderID");
} else if ("Customer".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("CustomerId"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "CustomerId");
} else if ("Person".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("PersonId"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "PersonId");
} else if ("ComputerDetail".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("ComputerDetailId"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "ComputerDetailId");
} else if ("AllGeoTypesSet".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("Id"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "Id");
} else if ("CustomerInfo".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("CustomerInfoId"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "CustomerInfoId");
} else if ("Car".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("VIN"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
- } else {
- throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
- }
- }
- sequence.put(entitySetName, Integer.valueOf(res));
+ res = getDefaultEntryKey(entitySetName, entry, "VIN");
} else if ("RowIndex".equals(entitySetName)) {
- try {
- final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("Id"));
- res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
- } catch (Exception e) {
- if (sequence.containsKey(entitySetName)) {
- res = String.valueOf(sequence.get(entitySetName) + 1);
+ res = getDefaultEntryKey(entitySetName, entry, "Id");
+ } else if ("Products".equals(entitySetName)) {
+ res = getDefaultEntryKey(entitySetName, entry, "ProductID");
+ } else if ("ProductDetails".equals(entitySetName)) {
+ int productId;
+ int productDetailId;
+ if (entry.getProperty("ProductID") == null || entry.getProperty("ProductDetailID") == null) {
+ if (Commons.SEQUENCE.containsKey(entitySetName) && Commons.SEQUENCE.containsKey("Products")) {
+ productId = Commons.SEQUENCE.get("Products") + 1;
+ productDetailId = Commons.SEQUENCE.get(entitySetName) + 1;
+ res = "ProductID=" + String.valueOf(productId) + ",ProductDetailID=" + String.valueOf(productDetailId);
} else {
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
}
+ Commons.SEQUENCE.put(entitySetName, productDetailId);
+ } else {
+ productId = Integer.valueOf(entry.getProperty("ProductID").getValue().asPrimitive().get());
+ productDetailId = Integer.valueOf(entry.getProperty("ProductDetailID").getValue().asPrimitive().get());
+ res = "ProductID=" + entry.getProperty("ProductID").getValue().asPrimitive().get()
+ + ",ProductDetailID=" + entry.getProperty("ProductDetailID").getValue().asPrimitive().get();
}
- sequence.put(entitySetName, Integer.valueOf(res));
+ Commons.SEQUENCE.put(entitySetName, productDetailId);
+ Commons.SEQUENCE.put("Products", productId);
} else {
throw new Exception(String.format("EntitySet '%s' not found", entitySetName));
}
@@ -688,24 +679,9 @@ public abstract class AbstractUtilities {
return res;
} catch (Exception e) {
throw new NotFoundException(e);
- } finally {
- IOUtils.closeQuietly(entity);
}
}
- private Map<String, InputStream> getPropertyValues(final InputStream is, final List<String> propertyNames)
- throws Exception {
- final Map<String, InputStream> res = new LinkedHashMap<String, InputStream>();
-
- for (String propertyName : propertyNames) {
- res.put(propertyName, getPropertyValue(is, Collections.<String>singletonList(propertyName)));
- }
-
- IOUtils.closeQuietly(is);
-
- return res;
- }
-
public String getLinksBasePath(final String entitySetName, final String entityId) {
return entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar
+ Constants.get(version, ConstantKey.LINKS_FILE_PATH) + File.separatorChar;
@@ -819,6 +795,7 @@ public abstract class AbstractUtilities {
final List<String> path,
final Accept accept,
final boolean justValue) throws Exception {
+
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
final Accept acceptType = accept == null || Accept.TEXT == accept
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
index 237ab0c..2e6ba7a 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
@@ -76,7 +76,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
ifactory = XMLInputFactory.newInstance();
}
ifactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
- return ifactory.createXMLEventReader(is, "utf-8");
+ return ifactory.createXMLEventReader(is, "UTF-8");
}
protected static XMLEventWriter getEventWriter(final OutputStream os) throws XMLStreamException {
@@ -84,7 +84,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
ofactory = XMLOutputFactory.newInstance();
}
- return ofactory.createXMLEventWriter(os, "utf-8");
+ return ofactory.createXMLEventWriter(os, "UTF-8");
}
private void writeEvent(final XMLEvent event, final XMLEventWriter writer) {
@@ -265,7 +265,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
inlineReader.close();
} catch (Exception ignore) {
// inline element not found (inlines are not mondatory).
- if (StringUtils.isNotBlank(href) && entityUriPattern.matcher(href).matches()) {
+ if (StringUtils.isNotBlank(href) && ENTITY_URI_PATTERN.matcher(href).matches()) {
links.addLinks(title, href.substring(href.lastIndexOf('/') + 1));
}
}
@@ -1054,6 +1054,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
public Map.Entry<String, List<String>> extractLinkURIs(
final String entitySetName, final String entityId, final String linkName)
throws Exception {
+
final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.XML);
return extractLinkURIs(links.getLinks());
}
@@ -1117,7 +1118,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final XMLEventWriter writer = getEventWriter(bos);
final XMLEventFactory eventFactory = XMLEventFactory.newInstance();
- writer.add(eventFactory.createStartDocument("utf-8", "1.0"));
+ writer.add(eventFactory.createStartDocument("UTF-8", "1.0"));
writer.add(property.getStart());
if (property.getStart().getAttributeByName(new QName(
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java b/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
index 053a52d..ab3b680 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
@@ -93,7 +93,7 @@ public enum Accept {
} else if (contentType.startsWith(TEXT.toString(version))) {
return TEXT;
} else {
- throw new UnsupportedMediaTypeException("Unsupported media type");
+ throw new UnsupportedMediaTypeException(contentType);
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
index aaa2093..2844676 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
@@ -57,59 +57,61 @@ public abstract class Commons {
*/
protected static final Logger LOG = LoggerFactory.getLogger(Commons.class);
- private static Map<ODataServiceVersion, FITAtomDeserializer> atomDeserializer =
+ private static final Map<ODataServiceVersion, FITAtomDeserializer> ATOM_DESERIALIZER =
new EnumMap<ODataServiceVersion, FITAtomDeserializer>(ODataServiceVersion.class);
- private static Map<ODataServiceVersion, AtomSerializer> atomSerializer =
+ private static final Map<ODataServiceVersion, AtomSerializer> ATOM_SERIALIZER =
new EnumMap<ODataServiceVersion, AtomSerializer>(ODataServiceVersion.class);
- private static Map<ODataServiceVersion, ObjectMapper> jsonmapper =
+ private static final Map<ODataServiceVersion, ObjectMapper> JSON_MAPPER =
new EnumMap<ODataServiceVersion, ObjectMapper>(ODataServiceVersion.class);
- private static EnumMap<ODataServiceVersion, Metadata> metadata =
+ private static final EnumMap<ODataServiceVersion, Metadata> METADATA =
new EnumMap<ODataServiceVersion, Metadata>(ODataServiceVersion.class);
- protected static Pattern multiKeyPattern = Pattern.compile("(.*=.*,?)+");
+ protected static final Pattern MULTIKEY_PATTERN = Pattern.compile("(.*=.*,?)+");
- protected final static Map<String, Integer> sequence = new HashMap<String, Integer>();
+ protected static final Map<String, Integer> SEQUENCE = new HashMap<String, Integer>();
- protected final static Map<String, String> mediaContent = new HashMap<String, String>();
+ protected static final Map<String, String> MEDIA_CONTENT = new HashMap<String, String>();
static {
- sequence.put("Customer", 1000);
- sequence.put("CustomerInfo", 1000);
- sequence.put("Car", 1000);
- sequence.put("Message", 1000);
- sequence.put("Order", 1000);
- sequence.put("ComputerDetail", 1000);
- sequence.put("AllGeoTypesSet", 1000);
- sequence.put("Orders", 1000);
- sequence.put("Customers", 1000);
- sequence.put("Person", 1000);
- sequence.put("RowIndex", 1000);
-
- mediaContent.put("CustomerInfo", "CustomerinfoId");
- mediaContent.put("Car", "VIN");
- mediaContent.put("Car/Photo", null);
+ SEQUENCE.put("Customer", 1000);
+ SEQUENCE.put("CustomerInfo", 1000);
+ SEQUENCE.put("Car", 1000);
+ SEQUENCE.put("Message", 1000);
+ SEQUENCE.put("Order", 1000);
+ SEQUENCE.put("ComputerDetail", 1000);
+ SEQUENCE.put("AllGeoTypesSet", 1000);
+ SEQUENCE.put("Orders", 1000);
+ SEQUENCE.put("Customers", 1000);
+ SEQUENCE.put("Person", 1000);
+ SEQUENCE.put("RowIndex", 1000);
+ SEQUENCE.put("Products", 1000);
+ SEQUENCE.put("ProductDetails", 1000);
+
+ MEDIA_CONTENT.put("CustomerInfo", "CustomerinfoId");
+ MEDIA_CONTENT.put("Car", "VIN");
+ MEDIA_CONTENT.put("Car/Photo", null);
}
public static FITAtomDeserializer getAtomDeserializer(final ODataServiceVersion version) {
- if (!atomDeserializer.containsKey(version)) {
- atomDeserializer.put(version, new FITAtomDeserializer(version));
+ if (!ATOM_DESERIALIZER.containsKey(version)) {
+ ATOM_DESERIALIZER.put(version, new FITAtomDeserializer(version));
}
- return atomDeserializer.get(version);
+ return ATOM_DESERIALIZER.get(version);
}
public static AtomSerializer getAtomSerializer(final ODataServiceVersion version) {
- if (!atomSerializer.containsKey(version)) {
- atomSerializer.put(version, new AtomSerializer(version, true));
+ if (!ATOM_SERIALIZER.containsKey(version)) {
+ ATOM_SERIALIZER.put(version, new AtomSerializer(version, true));
}
- return atomSerializer.get(version);
+ return ATOM_SERIALIZER.get(version);
}
public static ObjectMapper getJsonMapper(final ODataServiceVersion version) {
- if (!jsonmapper.containsKey(version)) {
+ if (!JSON_MAPPER.containsKey(version)) {
final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setInjectableValues(new InjectableValues.Std()
@@ -122,24 +124,24 @@ public abstract class Commons {
.withAttribute(Boolean.class, Boolean.TRUE),
mapper.getSerializerFactory()));
- jsonmapper.put(version, mapper);
+ JSON_MAPPER.put(version, mapper);
}
- return jsonmapper.get(version);
+ return JSON_MAPPER.get(version);
}
public static Metadata getMetadata(final ODataServiceVersion version) {
- if (!metadata.containsKey(version)) {
+ if (!METADATA.containsKey(version)) {
final InputStream is = Commons.class.getResourceAsStream("/" + version.name() + "/metadata.xml");
- metadata.put(version, new Metadata(is));
+ METADATA.put(version, new Metadata(is));
}
- return metadata.get(version);
+ return METADATA.get(version);
}
public static Map<String, String> getMediaContent() {
- return mediaContent;
+ return MEDIA_CONTENT;
}
public static String getEntityURI(final String entitySetName, final String entityKey) {
@@ -184,7 +186,7 @@ public abstract class Commons {
}
public static String getEntityKey(final String entityId) {
- if (multiKeyPattern.matcher(entityId).matches()) {
+ if (MULTIKEY_PATTERN.matcher(entityId).matches()) {
// assume correct multi-key
final String[] keys = entityId.split(",");
final StringBuilder keyBuilder = new StringBuilder();
@@ -200,19 +202,19 @@ public abstract class Commons {
}
}
- public static InputStream getLinksAsATOM(final Map.Entry<String, Collection<String>> link)
- throws IOException {
+ public static InputStream getLinksAsATOM(final ODataServiceVersion version,
+ final Map.Entry<String, Collection<String>> link) throws IOException {
final StringBuilder builder = new StringBuilder();
builder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- builder.append("<links xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">");
+ builder.append("<links xmlns=\"" + Constants.get(version, ConstantKey.DATASERVICES_NS) + "\">");
for (String uri : link.getValue()) {
builder.append("<uri>");
if (URI.create(uri).isAbsolute()) {
builder.append(uri);
} else {
- builder.append(Constants.get(ConstantKey.DEFAULT_SERVICE_URL)).append(uri);
+ builder.append(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)).append(uri);
}
builder.append("</uri>");
}
@@ -222,14 +224,14 @@ public abstract class Commons {
return IOUtils.toInputStream(builder.toString());
}
- public static InputStream getLinksAsJSON(
+ public static InputStream getLinksAsJSON(final ODataServiceVersion version,
final String entitySetName, final Map.Entry<String, Collection<String>> link)
throws IOException {
final ObjectNode links = new ObjectNode(JsonNodeFactory.instance);
links.put(
- Constants.get(ConstantKey.JSON_ODATAMETADATA_NAME),
- Constants.get(ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "/$links/" + link.getKey());
+ Constants.get(version, ConstantKey.JSON_ODATAMETADATA_NAME),
+ Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "/$links/" + link.getKey());
final ArrayNode uris = new ArrayNode(JsonNodeFactory.instance);
@@ -238,7 +240,7 @@ public abstract class Commons {
if (URI.create(uri).isAbsolute()) {
absoluteURI = uri;
} else {
- absoluteURI = Constants.get(ConstantKey.DEFAULT_SERVICE_URL) + uri;
+ absoluteURI = Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + uri;
}
uris.add(new ObjectNode(JsonNodeFactory.instance).put("url", absoluteURI));
}
@@ -249,7 +251,7 @@ public abstract class Commons {
links.set("value", uris);
}
- return IOUtils.toInputStream(links.toString(), "UTf-8");
+ return IOUtils.toInputStream(links.toString(), "UTF-8");
}
public static InputStream changeFormat(final InputStream is, final ODataServiceVersion version, final Accept target) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
index 0b5cf66..355e929 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
@@ -34,7 +34,7 @@ public class Constants {
*/
public static final byte[] CRLF = {13, 10};
- public static Charset encoding = Charset.forName("UTF-8");
+ public static final Charset ENCODING = Charset.forName("UTF-8");
static {
@@ -46,6 +46,7 @@ public class Constants {
v4constants.put(ConstantKey.JSON_NAVIGATION_SUFFIX, "@odata.navigationLink");
v4constants.put(ConstantKey.DATASERVICES_NS, "http://docs.oasis-open.org/odata/ns/dataservices");
v4constants.put(ConstantKey.METADATA_NS, "http://docs.oasis-open.org/odata/ns/metadata");
+ v4constants.put(ConstantKey.ATOM_LINK_REL, "http://docs.oasis-open.org/odata/ns/related/");
v4constants.put(ConstantKey.ODATA_SERVICE_VERSION, "OData-Version");
v4constants.put(ConstantKey.DEFAULT_SERVICE_URL, "http://localhost:9080/StaticService/V40/Static.svc/");
v4constants.put(ConstantKey.ODATA_METADATA_PREFIX, "http://localhost:9080/StaticService/V40/Static.svc/$metadata#");
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
index 9102e86..986c997 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
@@ -141,12 +141,12 @@ public class DataBinder {
alink.setRel(link.getRel());
if (link.getInlineEntry() instanceof JSONEntryImpl) {
- Entry inlineEntry = link.getInlineEntry();
+ final Entry inlineEntry = link.getInlineEntry();
if (inlineEntry instanceof JSONEntryImpl) {
alink.setInlineEntry(getAtomEntry((JSONEntryImpl) link.getInlineEntry()));
}
} else if (link.getInlineFeed() instanceof JSONFeedImpl) {
- Feed inlineFeed = link.getInlineFeed();
+ final Feed inlineFeed = link.getInlineFeed();
if (inlineFeed instanceof JSONFeedImpl) {
alink.setInlineFeed(getAtomFeed((JSONFeedImpl) link.getInlineFeed()));
}
@@ -168,10 +168,10 @@ public class DataBinder {
alink.setTitle(property.getName());
alink.setType(navProperties.get(property.getName()).isFeed()
- ? Constants.get(ConstantKey.ATOM_LINK_FEED)
- : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
+ ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
+ : Constants.get(version, ConstantKey.ATOM_LINK_ENTRY));
- alink.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getName());
+ alink.setRel(Constants.get(version, ConstantKey.ATOM_LINK_REL) + property.getName());
if (property.getValue().isComplex()) {
final Entry inline = new AtomEntryImpl();
@@ -187,7 +187,7 @@ public class DataBinder {
final Entry inlineEntry = new AtomEntryImpl();
inlineEntry.setType(navProperties.get(property.getName()).getType());
for (Property prop : entry.asComplex().get()) {
- inlineEntry.getProperties().add(prop);
+ inlineEntry.getProperties().add(getAtomProperty((JSONPropertyImpl) prop, inlineEntry.getType()));
}
inline.getEntries().add(inlineEntry);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
index d1543d5..46654fe 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
@@ -108,7 +108,7 @@ public class FSManager {
final AtomSerializer atomSerializer = Commons.getAtomSerializer(serviceVersion);
final ByteArrayOutputStream content = new ByteArrayOutputStream();
- final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+ final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
atomSerializer.write(writer, container);
writer.flush();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/1/entity.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/1/entity.full.json b/fit/src/main/resources/V40/People/1/entity.full.json
new file mode 100644
index 0000000..b2fc162
--- /dev/null
+++ b/fit/src/main/resources/V40/People/1/entity.full.json
@@ -0,0 +1,51 @@
+{
+ "@odata.context": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//$metadata#People/$entity",
+ "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Customer",
+ "@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)",
+ "@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer",
+ "PersonID": 1,
+ "FirstName": "Bob",
+ "LastName": "Cat",
+ "MiddleName": null,
+ "HomeAddress": {
+ "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.HomeAddress",
+ "Street": "1 Microsoft Way",
+ "City": "London",
+ "PostalCode": "98052",
+ "FamilyName": "Cats"
+ },
+ "Home@odata.type": "#GeographyPoint",
+ "Home": {
+ "type": "Point",
+ "coordinates": [23.1, 32.1],
+ "crs": {
+ "type": "name",
+ "properties": {
+ "name": "EPSG:4326"
+ }
+ }
+ },
+ "Numbers@odata.type": "#Collection(String)",
+ "Numbers": ["111-111-1111", "012", "310", "bca", "ayz"],
+ "Emails@odata.type": "#Collection(String)",
+ "Emails": ["abc@abc.com"],
+ "City": "London",
+ "Birthday@odata.type": "#DateTimeOffset",
+ "Birthday": "1957-04-03T00:00:00Z",
+ "TimeBetweenLastTwoOrders@odata.type": "#Duration",
+ "TimeBetweenLastTwoOrders": "PT0.0000001S",
+ "Parent@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent/$ref",
+ "Parent@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent",
+ "Orders@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders/$ref",
+ "Orders@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders",
+ "Company@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company/$ref",
+ "Company@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company",
+ "#Microsoft.Test.OData.Services.ODataWCFService.ResetAddress": {
+ "title": "Microsoft.Test.OData.Services.ODataWCFService.ResetAddress",
+ "target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Microsoft.Test.OData.Services.ODataWCFService.ResetAddress"
+ },
+ "#Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress": {
+ "title": "Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress",
+ "target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress"
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/1/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/1/entity.xml b/fit/src/main/resources/V40/People/1/entity.xml
new file mode 100644
index 0000000..14b5cdc
--- /dev/null
+++ b/fit/src/main/resources/V40/People/1/entity.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//"
+ xmlns="http://www.w3.org/2005/Atom"
+ xmlns:d="http://docs.oasis-open.org/odata/ns/data"
+ xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"
+ xmlns:georss="http://www.georss.org/georss"
+ xmlns:gml="http://www.opengis.net/gml"
+ m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
+ <id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(1)</id>
+ <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+ <link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(1)"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/Parent" type="application/atom+xml;type=entry" title="Parent" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/Orders" type="application/atom+xml;type=feed" title="Orders" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/Company" type="application/atom+xml;type=entry" title="Company" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company"/>
+ <title/>
+ <updated>2014-04-17T12:35:59Z</updated>
+ <author>
+ <name/>
+ </author>
+ <content type="application/xml">
+ <m:properties>
+ <d:PersonID m:type="Int32">1</d:PersonID>
+ <d:FirstName>Bob</d:FirstName>
+ <d:LastName>Cat</d:LastName>
+ <d:MiddleName m:null="true"/>
+ <d:HomeAddress m:type="#Microsoft.Test.OData.Services.ODataWCFService.HomeAddress">
+ <d:Street>1 Microsoft Way</d:Street>
+ <d:City>London</d:City>
+ <d:PostalCode>98052</d:PostalCode>
+ <d:FamilyName>Cats</d:FamilyName>
+ </d:HomeAddress>
+ <d:Home m:type="GeographyPoint">
+ <gml:Point gml:srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
+ <gml:pos>32.1 23.1</gml:pos>
+ </gml:Point>
+ </d:Home>
+ <d:Numbers m:type="#Collection(String)">
+ <m:element>111-111-1111</m:element>
+ <m:element>012</m:element>
+ <m:element>310</m:element>
+ <m:element>bca</m:element>
+ <m:element>ayz</m:element>
+ </d:Numbers>
+ <d:Emails m:type="#Collection(String)">
+ <m:element>abc@abc.com</m:element>
+ </d:Emails>
+ <d:City>London</d:City>
+ <d:Birthday m:type="DateTimeOffset">1957-04-03T00:00:00Z</d:Birthday>
+ <d:TimeBetweenLastTwoOrders m:type="Duration">PT0.0000001S</d:TimeBetweenLastTwoOrders>
+ </m:properties>
+ </content>
+</entry>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/5/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/5/entity.xml b/fit/src/main/resources/V40/People/5/entity.xml
index daebef8..adb0d4e 100644
--- a/fit/src/main/resources/V40/People/5/entity.xml
+++ b/fit/src/main/resources/V40/People/5/entity.xml
@@ -19,7 +19,13 @@
under the License.
-->
-<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
+<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/"
+ xmlns="http://www.w3.org/2005/Atom"
+ xmlns:d="http://docs.oasis-open.org/odata/ns/data"
+ xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"
+ xmlns:georss="http://www.georss.org/georss"
+ xmlns:gml="http://www.opengis.net/gml"
+ m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(5)</id>
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Person" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(5)" />
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
index 1518fe8..ec91b9b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
@@ -21,6 +21,7 @@ package org.apache.olingo.client.api.communication.request.streamed;
import java.io.InputStream;
import java.io.Serializable;
import java.net.URI;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* OData request factory class.
@@ -32,11 +33,13 @@ public interface CommonStreamedRequestFactory extends Serializable {
* <br/>
* Use this kind of request to create a new media entity.
*
+ * @param <E> concrete ODataEntity implementation
* @param targetURI entity set URI.
* @param media entity blob to be created.
* @return new ODataMediaEntityCreateRequest instance.
*/
- ODataMediaEntityCreateRequest getMediaEntityCreateRequest(URI targetURI, InputStream media);
+ <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
+ URI targetURI, InputStream media);
/**
* Gets a stream update request object instance.
@@ -54,9 +57,11 @@ public interface CommonStreamedRequestFactory extends Serializable {
* <br/>
* Use this kind of request to update a media entity.
*
+ * @param <E> concrete ODataEntity implementation
* @param editURI media entity edit link URI.
* @param media entity blob to be updated.
* @return new ODataMediaEntityUpdateRequest instance.
*/
- ODataMediaEntityUpdateRequest getMediaEntityUpdateRequest(URI editURI, InputStream media);
+ <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
+ URI editURI, InputStream media);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
index 21c9c89..7b24fb4 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
@@ -20,9 +20,13 @@ package org.apache.olingo.client.api.communication.request.streamed;
import org.apache.olingo.client.api.communication.request.ODataStreamManager;
import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* Media entity payload object.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public interface MediaEntityCreateStreamManager extends ODataStreamManager<ODataMediaEntityCreateResponse> {
+public interface MediaEntityCreateStreamManager<E extends CommonODataEntity>
+ extends ODataStreamManager<ODataMediaEntityCreateResponse<E>> {
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
index d545e3a..230fab1 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
@@ -20,9 +20,13 @@ package org.apache.olingo.client.api.communication.request.streamed;
import org.apache.olingo.client.api.communication.request.ODataStreamManager;
import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* Media entity payload object.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public interface MediaEntityUpdateStreamManager extends ODataStreamManager<ODataMediaEntityUpdateResponse> {
+public interface MediaEntityUpdateStreamManager<E extends CommonODataEntity>
+ extends ODataStreamManager<ODataMediaEntityUpdateResponse<E>> {
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
index 76a7a8c..f3cb4ca 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
@@ -19,10 +19,13 @@
package org.apache.olingo.client.api.communication.request.streamed;
import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public interface ODataMediaEntityCreateRequest
- extends ODataStreamedEntityRequest<ODataMediaEntityCreateResponse, MediaEntityCreateStreamManager> {
+public interface ODataMediaEntityCreateRequest<E extends CommonODataEntity>
+ extends ODataStreamedEntityRequest<ODataMediaEntityCreateResponse<E>, MediaEntityCreateStreamManager<E>> {
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
index 913ce36..2f711b4 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
@@ -19,10 +19,13 @@
package org.apache.olingo.client.api.communication.request.streamed;
import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public interface ODataMediaEntityUpdateRequest
- extends ODataStreamedEntityRequest<ODataMediaEntityUpdateResponse, MediaEntityUpdateStreamManager> {
+public interface ODataMediaEntityUpdateRequest<E extends CommonODataEntity>
+ extends ODataStreamedEntityRequest<ODataMediaEntityUpdateResponse<E>, MediaEntityUpdateStreamManager<E>> {
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
index c29193b..4a757c1 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
@@ -21,16 +21,16 @@ package org.apache.olingo.client.api.communication.response;
import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
- * This class implements the response to an Odata media entity create request.
+ * This class implements the response to an OData media entity create request.
*
- * @see org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityCreateRequest
+ * @param <E> concrete ODataEntity implementation
*/
-public interface ODataMediaEntityCreateResponse extends ODataResponse {
+public interface ODataMediaEntityCreateResponse<E extends CommonODataEntity> extends ODataResponse {
/**
* Gets created object.
*
* @return created object.
*/
- CommonODataEntity getBody();
+ E getBody();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
index 97aab03..e5b7f7b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
@@ -23,14 +23,14 @@ import org.apache.olingo.commons.api.domain.CommonODataEntity;
/**
* This class implements the response to an Odata media entity update request.
*
- * @see org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityUpdateRequest
+ * @param <E> concrete ODataEntity implementation
*/
-public interface ODataMediaEntityUpdateResponse extends ODataResponse {
+public interface ODataMediaEntityUpdateResponse<E extends CommonODataEntity> extends ODataResponse {
/**
* Gets updated object.
*
* @return updated object.
*/
- CommonODataEntity getBody();
+ E getBody();
}
[4/5] [OLINGO-175] More V4 CRUD tests for containment,
deep insert and bind operation
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/pom.xml
----------------------------------------------------------------------
diff --git a/lib/client-core/pom.xml b/lib/client-core/pom.xml
index e8c20b5..58025ee 100644
--- a/lib/client-core/pom.xml
+++ b/lib/client-core/pom.xml
@@ -81,7 +81,7 @@
<configuration>
<systemPropertyVariables>
<propertyName>org.slf4j.simpleLogger.defaultLogLevel</propertyName>
- <org.slf4j.simpleLogger.defaultLogLevel>ERROR</org.slf4j.simpleLogger.defaultLogLevel>
+ <org.slf4j.simpleLogger.defaultLogLevel>DEBUG</org.slf4j.simpleLogger.defaultLogLevel>
</systemPropertyVariables>
</configuration>
</plugin>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
index 73d39f9..a45afc7 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
@@ -36,9 +36,9 @@ public abstract class AbstractCUDRequestFactory<UT extends CommonUpdateType> imp
private static final long serialVersionUID = -2723641791198745990L;
- protected final CommonODataClient client;
+ protected final CommonODataClient<?> client;
- protected AbstractCUDRequestFactory(final CommonODataClient client) {
+ protected AbstractCUDRequestFactory(final CommonODataClient<?> client) {
this.client = client;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
index ace08d3..ec5f773 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
@@ -45,8 +45,9 @@ public abstract class AbstractODataStreamedEntityRequest<V extends ODataResponse
* @param method HTTP request method.
* @param uri request URI.
*/
- public AbstractODataStreamedEntityRequest(final CommonODataClient odataClient, final HttpMethod method,
- URI uri) {
+ public AbstractODataStreamedEntityRequest(final CommonODataClient<?> odataClient, final HttpMethod method,
+ final URI uri) {
+
super(odataClient, method, uri);
setAccept(getFormat().toString(odataClient.getServiceVersion()));
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
index 014e1bc..cf15fcb 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
@@ -26,22 +26,23 @@ import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEnt
import org.apache.olingo.client.api.communication.request.streamed.ODataStreamUpdateRequest;
import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
public abstract class AbstractStreamedRequestFactory implements CommonStreamedRequestFactory {
private static final long serialVersionUID = -2438839640443961168L;
- protected final CommonODataClient client;
+ protected final CommonODataClient<?> client;
- protected AbstractStreamedRequestFactory(final CommonODataClient client) {
+ protected AbstractStreamedRequestFactory(final CommonODataClient<?> client) {
this.client = client;
}
@Override
- public ODataMediaEntityCreateRequest getMediaEntityCreateRequest(
+ public <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
final URI targetURI, final InputStream media) {
- return new ODataMediaEntityCreateRequestImpl(client, targetURI, media);
+ return new ODataMediaEntityCreateRequestImpl<E>(client, targetURI, media);
}
@Override
@@ -59,16 +60,16 @@ public abstract class AbstractStreamedRequestFactory implements CommonStreamedRe
}
@Override
- public ODataMediaEntityUpdateRequest getMediaEntityUpdateRequest(
+ public <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
final URI editURI, final InputStream media) {
- final ODataMediaEntityUpdateRequest req;
+ final ODataMediaEntityUpdateRequest<E> req;
if (client.getConfiguration().isUseXHTTPMethod()) {
- req = new ODataMediaEntityUpdateRequestImpl(client, HttpMethod.POST, editURI, media);
+ req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, editURI, media);
req.setXHTTPMethod(HttpMethod.PUT.name());
} else {
- req = new ODataMediaEntityUpdateRequestImpl(client, HttpMethod.PUT, editURI, media);
+ req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, editURI, media);
}
return req;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
index 2c1dd22..cbd292d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
@@ -37,10 +37,12 @@ import org.apache.olingo.commons.api.data.Entry;
/**
* This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public class ODataMediaEntityCreateRequestImpl
- extends AbstractODataStreamedEntityRequest<ODataMediaEntityCreateResponse, MediaEntityCreateStreamManager>
- implements ODataMediaEntityCreateRequest, ODataBatchableRequest {
+public class ODataMediaEntityCreateRequestImpl<E extends CommonODataEntity>
+ extends AbstractODataStreamedEntityRequest<ODataMediaEntityCreateResponse<E>, MediaEntityCreateStreamManager<E>>
+ implements ODataMediaEntityCreateRequest<E>, ODataBatchableRequest {
private final InputStream media;
@@ -51,27 +53,26 @@ public class ODataMediaEntityCreateRequestImpl
* @param targetURI target entity set.
* @param media media entity blob to be created.
*/
- ODataMediaEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI, final InputStream media) {
+ ODataMediaEntityCreateRequestImpl(final CommonODataClient<?> odataClient, final URI targetURI,
+ final InputStream media) {
+
super(odataClient, HttpMethod.POST, targetURI);
this.media = media;
}
- /**
- * {@inheritDoc }
- */
@Override
- protected MediaEntityCreateStreamManager getStreamManager() {
+ protected MediaEntityCreateStreamManager<E> getStreamManager() {
if (streamManager == null) {
streamManager = new MediaEntityCreateStreamManagerImpl(media);
}
- return (MediaEntityCreateStreamManager) streamManager;
+ return (MediaEntityCreateStreamManager<E>) streamManager;
}
/**
* Media entity payload object.
*/
- public class MediaEntityCreateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityCreateResponse>
- implements MediaEntityCreateStreamManager {
+ public class MediaEntityCreateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityCreateResponse<E>>
+ implements MediaEntityCreateStreamManager<E> {
/**
* Private constructor.
@@ -82,11 +83,8 @@ public class ODataMediaEntityCreateRequestImpl
super(ODataMediaEntityCreateRequestImpl.this.futureWrapper, input);
}
- /**
- * {@inheritDoc }
- */
@Override
- protected ODataMediaEntityCreateResponse getResponse(final long timeout, final TimeUnit unit) {
+ protected ODataMediaEntityCreateResponse<E> getResponse(final long timeout, final TimeUnit unit) {
finalizeBody();
return new ODataMediaEntityCreateResponseImpl(httpClient, getHttpResponse(timeout, unit));
}
@@ -96,9 +94,9 @@ public class ODataMediaEntityCreateRequestImpl
* Response class about an ODataMediaEntityCreateRequest.
*/
private class ODataMediaEntityCreateResponseImpl extends AbstractODataResponse
- implements ODataMediaEntityCreateResponse {
+ implements ODataMediaEntityCreateResponse<E> {
- private CommonODataEntity entity = null;
+ private E entity = null;
/**
* Constructor.
@@ -122,11 +120,12 @@ public class ODataMediaEntityCreateRequestImpl
* {@inheritDoc }
*/
@Override
- public CommonODataEntity getBody() {
+ @SuppressWarnings("unchecked")
+ public E getBody() {
if (entity == null) {
try {
final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());
- entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+ entity = (E) odataClient.getBinder().getODataEntity(extractFromContainer(container));
} finally {
this.close();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
index 614baa1..5967906 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
@@ -37,10 +37,12 @@ import org.apache.olingo.commons.api.data.Entry;
/**
* This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
*/
-public class ODataMediaEntityUpdateRequestImpl
- extends AbstractODataStreamedEntityRequest<ODataMediaEntityUpdateResponse, MediaEntityUpdateStreamManager>
- implements ODataMediaEntityUpdateRequest, ODataBatchableRequest {
+public class ODataMediaEntityUpdateRequestImpl<E extends CommonODataEntity>
+ extends AbstractODataStreamedEntityRequest<ODataMediaEntityUpdateResponse<E>, MediaEntityUpdateStreamManager<E>>
+ implements ODataMediaEntityUpdateRequest<E>, ODataBatchableRequest {
private final InputStream media;
@@ -52,29 +54,26 @@ public class ODataMediaEntityUpdateRequestImpl
* @param editURI edit URI of the entity to be updated.
* @param media media entity blob to be created.
*/
- ODataMediaEntityUpdateRequestImpl(final CommonODataClient odataClient,
+ ODataMediaEntityUpdateRequestImpl(final CommonODataClient<?> odataClient,
final HttpMethod method, final URI editURI, final InputStream media) {
super(odataClient, method, editURI);
this.media = media;
}
- /**
- * {@inheritDoc }
- */
@Override
- protected MediaEntityUpdateStreamManager getStreamManager() {
+ protected MediaEntityUpdateStreamManager<E> getStreamManager() {
if (streamManager == null) {
streamManager = new MediaEntityUpdateStreamManagerImpl(media);
}
- return (MediaEntityUpdateStreamManager) streamManager;
+ return (MediaEntityUpdateStreamManager<E>) streamManager;
}
/**
* Media entity payload object.
*/
- public class MediaEntityUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityUpdateResponse>
- implements MediaEntityUpdateStreamManager {
+ public class MediaEntityUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityUpdateResponse<E>>
+ implements MediaEntityUpdateStreamManager<E> {
/**
* Private constructor.
@@ -85,11 +84,8 @@ public class ODataMediaEntityUpdateRequestImpl
super(ODataMediaEntityUpdateRequestImpl.this.futureWrapper, input);
}
- /**
- * {@inheritDoc }
- */
@Override
- protected ODataMediaEntityUpdateResponse getResponse(final long timeout, final TimeUnit unit) {
+ protected ODataMediaEntityUpdateResponse<E> getResponse(final long timeout, final TimeUnit unit) {
finalizeBody();
return new ODataMediaEntityUpdateResponseImpl(httpClient, getHttpResponse(timeout, unit));
}
@@ -99,16 +95,17 @@ public class ODataMediaEntityUpdateRequestImpl
* Response class about an ODataMediaEntityUpdateRequest.
*/
private class ODataMediaEntityUpdateResponseImpl extends AbstractODataResponse
- implements ODataMediaEntityUpdateResponse {
+ implements ODataMediaEntityUpdateResponse<E> {
- private CommonODataEntity entity = null;
+ private E entity = null;
/**
* Constructor.
- * <p>
+ * <br/>
* Just to create response templates to be initialized from batch.
*/
private ODataMediaEntityUpdateResponseImpl() {
+ super();
}
/**
@@ -121,15 +118,13 @@ public class ODataMediaEntityUpdateRequestImpl
super(client, res);
}
- /**
- * {@inheritDoc }
- */
@Override
- public CommonODataEntity getBody() {
+ @SuppressWarnings("unchecked")
+ public E getBody() {
if (entity == null) {
try {
final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());
- entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+ entity = (E) odataClient.getBinder().getODataEntity(extractFromContainer(container));
} finally {
this.close();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
index aa27b2e..cf8eaa3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
@@ -49,7 +49,7 @@ public class ODataStreamUpdateRequestImpl
* @param targetURI target URI.
* @param stream stream to be updated.
*/
- ODataStreamUpdateRequestImpl(final CommonODataClient odataClient,
+ ODataStreamUpdateRequestImpl(final CommonODataClient<?> odataClient,
final HttpMethod method, final URI targetURI, final InputStream stream) {
super(odataClient, method, targetURI);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
index f949e16..7cff539 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
@@ -48,8 +48,6 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Co
: new org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl();
final String metadataETag;
- final URI contextURL;
-
if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
tree.remove(Constants.JSON_METADATA_ETAG);
@@ -57,6 +55,7 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Co
metadataETag = null;
}
+ final URI contextURL;
if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
tree.remove(Constants.JSON_CONTEXT);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/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 ad58ab4..5b74502 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
@@ -291,18 +291,20 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
? ODataLinkType.ENTITY_NAVIGATION
: ODataLinkType.fromString(client.getServiceVersion(), link.getRel(), link.getType());
odataLinked.addLink(linkType == ODataLinkType.ENTITY_NAVIGATION
- ? client.getObjectFactory().newEntityNavigationLink(link.getTitle(), base, link.getHref())
- : client.getObjectFactory().newEntitySetNavigationLink(link.getTitle(), base, link.getHref()));
+ ? client.getObjectFactory().
+ newEntityNavigationLink(link.getTitle(), URIUtils.getURI(base, link.getHref()))
+ : client.getObjectFactory().
+ newEntitySetNavigationLink(link.getTitle(), URIUtils.getURI(base, link.getHref())));
} else if (inlineEntry != null) {
- odataLinked.addLink(client.getObjectFactory().newInlineEntity(
- link.getTitle(), base, link.getHref(),
+ odataLinked.addLink(new ODataInlineEntity(client.getServiceVersion(),
+ URIUtils.getURI(base, link.getHref()), ODataLinkType.ENTITY_NAVIGATION, link.getTitle(),
getODataEntity(inlineEntry,
- inlineEntry.getBaseURI() == null ? base : inlineEntry.getBaseURI())));
+ inlineEntry.getBaseURI() == null ? base : inlineEntry.getBaseURI())));
} else {
- odataLinked.addLink(client.getObjectFactory().newInlineEntitySet(
- link.getTitle(), base, link.getHref(),
+ odataLinked.addLink(new ODataInlineEntitySet(client.getServiceVersion(),
+ URIUtils.getURI(base, link.getHref()), ODataLinkType.ENTITY_SET_NAVIGATION, link.getTitle(),
getODataEntitySet(inlineFeed,
- inlineFeed.getBaseURI() == null ? base : inlineFeed.getBaseURI())));
+ inlineFeed.getBaseURI() == null ? base : inlineFeed.getBaseURI())));
}
}
}
@@ -337,13 +339,17 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
}
for (Link link : resource.getAssociationLinks()) {
- entity.addLink(client.getObjectFactory().newAssociationLink(link.getTitle(), base, link.getHref()));
+ entity.addLink(new ODataLink.Builder().setVersion(client.getServiceVersion()).
+ setURI(URIUtils.getURI(base, link.getHref())).
+ setType(ODataLinkType.ASSOCIATION).setTitle(link.getTitle()).build());
}
odataLinks(resource, entity, base);
for (Link link : resource.getMediaEditLinks()) {
- entity.addLink(client.getObjectFactory().newMediaEditLink(link.getTitle(), base, link.getHref()));
+ entity.addLink(new ODataLink.Builder().setVersion(client.getServiceVersion()).
+ setURI(URIUtils.getURI(base, link.getHref())).
+ setType(ODataLinkType.MEDIA_EDIT).setTitle(link.getTitle()).build());
}
for (ODataOperation operation : resource.getOperations()) {
@@ -373,18 +379,18 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
value = client.getObjectFactory().newPrimitiveValueBuilder().
setText(resource.getValue().asPrimitive().get()).
setType(typeInfo == null
- ? null
- : EdmPrimitiveTypeKind.valueOfFQN(
- client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
+ ? null
+ : EdmPrimitiveTypeKind.valueOfFQN(
+ client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
} else if (resource.getValue().isGeospatial()) {
value = client.getObjectFactory().newPrimitiveValueBuilder().
setValue(resource.getValue().asGeospatial().get()).
setType(typeInfo == null
- || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
- || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
- ? resource.getValue().asGeospatial().get().getEdmPrimitiveTypeKind()
- : EdmPrimitiveTypeKind.valueOfFQN(
- client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
+ || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
+ || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
+ ? resource.getValue().asGeospatial().get().getEdmPrimitiveTypeKind()
+ : EdmPrimitiveTypeKind.valueOfFQN(
+ client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
} else if (resource.getValue().isComplex()) {
value = client.getObjectFactory().newComplexValue(typeInfo == null
? null : typeInfo.getFullQualifiedName().toString());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
index f9405ec..36f45b9 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
@@ -283,9 +283,8 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
contactAliasValue.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", aliasAltNamesValue));
if (withInlineInfo) {
- final ODataInlineEntity inlineInfo = getClient().getObjectFactory().newInlineEntity(
+ final ODataInlineEntity inlineInfo = getClient().getObjectFactory().newDeepInsertEntity(
"Info",
- URI.create("Customer(" + id + ")/Info"),
getSampleCustomerInfo(id, sampleName + "_Info"));
inlineInfo.getEntity().setMediaEntity(true);
entity.addLink(inlineInfo);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
index 18dd57e..a5a60b9 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
@@ -102,11 +102,11 @@ public class AsyncTestITCase extends AbstractTestITCase {
final String TO_BE_UPDATED = "async buffered stream sample";
final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
- final ODataMediaEntityCreateRequest createReq =
+ final ODataMediaEntityCreateRequest<ODataEntity> createReq =
client.getStreamedRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
- final MediaEntityCreateStreamManager streamManager = createReq.execute();
- final Future<ODataMediaEntityCreateResponse> futureCreateRes = streamManager.getAsyncResponse();
+ final MediaEntityCreateStreamManager<ODataEntity> streamManager = createReq.execute();
+ final Future<ODataMediaEntityCreateResponse<ODataEntity>> futureCreateRes = streamManager.getAsyncResponse();
while (!futureCreateRes.isDone()) {
Thread.sleep(1000L);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/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 2329aae..f57b443 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
@@ -118,8 +118,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
final int id = 5;
final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
- original.addLink(client.getObjectFactory().newInlineEntity(
- "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
+ original.addLink(client.getObjectFactory().newDeepInsertEntity(
+ "Info", getSampleCustomerInfo(id, "Sample Customer_Info")));
createEntity(getServiceRoot(), format, original, "Customer");
final ODataEntity actual =
@@ -145,8 +145,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
final int id = 6;
final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
- original.addLink(client.getObjectFactory().newInlineEntity(
- "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
+ original.addLink(client.getObjectFactory().newDeepInsertEntity(
+ "Info", getSampleCustomerInfo(id, "Sample Customer_Info")));
createEntity(getServiceRoot(), format, original, "Customer");
final ODataEntity actual =
@@ -224,7 +224,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
@Test
public void createReturnNoContent() {
final int id = 1;
- final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, "Sample customer", false);
+ final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").build(), original);
@@ -251,7 +251,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
@Test
public void issue135() {
final int id = 2;
- final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, "Sample customer for issue 135", false);
+ final ODataEntity original = getSampleCustomerProfile(id, "Sample customer for issue 135", false);
final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer");
final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -278,7 +278,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
throws EdmPrimitiveTypeException {
final String sampleName = "Sample customer";
- final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
+ final ODataEntity original = getSampleCustomerProfile(id, sampleName, false);
final Set<Integer> keys = new HashSet<Integer>();
keys.add(-100);
@@ -288,12 +288,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
final ODataEntity order = client.getObjectFactory().
newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
- getClient().getBinder().add(order,
- client.getObjectFactory().newPrimitiveProperty("OrderId",
- client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(key)));
- getClient().getBinder().add(order,
- client.getObjectFactory().newPrimitiveProperty("CustomerId",
- client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
+ order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("OrderId",
+ client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(key)));
+ order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("CustomerId",
+ client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
@@ -304,9 +302,9 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
createReq.execute().getBody().getEditLink()));
}
- final ODataEntity created = (ODataEntity) createEntity(getServiceRoot(), format, original, "Customer");
+ final ODataEntity created = createEntity(getServiceRoot(), format, original, "Customer");
// now, compare the created one with the actual one and go deeply into the associated customer info.....
- final ODataEntity actual = (ODataEntity) compareEntities(getServiceRoot(), format, created, id, null);
+ final ODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Orders");
@@ -381,8 +379,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
final String sampleName = "Sample customer";
- ODataEntity customer = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
- customer = (ODataEntity) createEntity(getServiceRoot(), format, customer, "Customer");
+ ODataEntity customer = getSampleCustomerProfile(id, sampleName, false);
+ customer = createEntity(getServiceRoot(), format, customer, "Customer");
ODataEntity order = client.getObjectFactory().newEntity(new FullQualifiedName(
"Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
@@ -396,9 +394,9 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
order.addLink(client.getObjectFactory().newEntityNavigationLink(
"Customer", URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString())));
- order = (ODataEntity) createEntity(getServiceRoot(), format, order, "Order");
+ order = createEntity(getServiceRoot(), format, order, "Order");
- ODataEntity changes = client.getObjectFactory().newEntity(new FullQualifiedName(
+ final ODataEntity changes = client.getObjectFactory().newEntity(new FullQualifiedName(
"Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"));
changes.setEditLink(customer.getEditLink());
changes.addLink(client.getObjectFactory().newEntitySetNavigationLink(
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
index 17e66a2..a1476a5 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
@@ -36,7 +36,6 @@ import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse
import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.client.api.domain.v3.ODataLinkCollection;
import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
import org.apache.olingo.client.api.uri.v3.URIBuilder;
import org.junit.Test;
@@ -50,7 +49,7 @@ public class LinkTestITCase extends AbstractTestITCase {
}
private ODataLinkCollection doRetrieveLinkURIs(final ODataFormat format, final String linkname) throws IOException {
- final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+ final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
appendEntitySetSegment("Customer").appendKeySegment(-10);
final ODataLinkCollectionRequest req =
@@ -94,9 +93,9 @@ public class LinkTestITCase extends AbstractTestITCase {
// 2. create new link
final ODataLink newLink = client.getObjectFactory().
- newAssociationLink(null, URI.create(getServiceRoot() + "/Login('3')"));
+ newAssociationLink(URI.create(getServiceRoot() + "/Login('3')"));
- final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+ final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Logins");
final ODataLinkCreateRequest req =
@@ -133,8 +132,8 @@ public class LinkTestITCase extends AbstractTestITCase {
final URI before = doRetrieveLinkURIs(format, "Info").getLinks().get(0);
// 2. update the link
- ODataLink newLink =
- client.getObjectFactory().newAssociationLink(null, URI.create(getServiceRoot() + "/CustomerInfo(12)"));
+ ODataLink newLink = client.getObjectFactory().
+ newAssociationLink(URI.create(getServiceRoot() + "/CustomerInfo(12)"));
final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Info");
@@ -151,7 +150,7 @@ public class LinkTestITCase extends AbstractTestITCase {
assertEquals(newLink.getLink(), after);
// 3. reset back the link value
- newLink = client.getObjectFactory().newAssociationLink(null, before);
+ newLink = client.getObjectFactory().newAssociationLink(before);
req = client.getCUDRequestFactory().getLinkUpdateRequest(uriBuilder.build(), updateType, newLink);
req.setFormat(format);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
index 03bdf00..133e950 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
@@ -18,9 +18,6 @@
*/
package org.apache.olingo.client.core.it.v3;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
@@ -36,18 +33,23 @@ import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreat
import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
import org.apache.olingo.client.api.communication.response.ODataStreamUpdateResponse;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.client.api.uri.v3.URIBuilder;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
import org.apache.olingo.commons.api.format.ODataMediaFormat;
import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotNull;
+
import org.junit.Test;
public class MediaEntityTestITCase extends AbstractTestITCase {
@Test
public void read() throws Exception {
- final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -62,7 +64,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
@Test(expected = ODataClientErrorException.class)
public void readWithXmlError() throws Exception {
- final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -73,7 +75,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
@Test(expected = ODataClientErrorException.class)
public void readWithJsonError() throws Exception {
- final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -109,7 +111,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
@Test
public void updateNamedStream() throws Exception {
- CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo");
final String TO_BE_UPDATED = "buffered stream sample";
@@ -131,18 +133,18 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
}
private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
- CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment();
final String TO_BE_UPDATED = "new buffered stream sample";
final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
- final ODataMediaEntityUpdateRequest updateReq =
+ final ODataMediaEntityUpdateRequest<ODataEntity> updateReq =
client.getStreamedRequestFactory().getMediaEntityUpdateRequest(builder.build(), input);
updateReq.setFormat(format);
- final MediaEntityUpdateStreamManager streamManager = updateReq.execute();
- final ODataMediaEntityUpdateResponse updateRes = streamManager.getResponse();
+ final MediaEntityUpdateStreamManager<ODataEntity> streamManager = updateReq.execute();
+ final ODataMediaEntityUpdateResponse<ODataEntity> updateRes = streamManager.getResponse();
assertEquals(204, updateRes.getStatusCode());
final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -153,23 +155,23 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
}
private void createMediaEntity(final ODataPubFormat format, final InputStream input) throws Exception {
- final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car");
- final ODataMediaEntityCreateRequest createReq =
+ final ODataMediaEntityCreateRequest<ODataEntity> createReq =
client.getStreamedRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
createReq.setFormat(format);
- final MediaEntityCreateStreamManager streamManager = createReq.execute();
- final ODataMediaEntityCreateResponse createRes = streamManager.getResponse();
+ final MediaEntityCreateStreamManager<ODataEntity> streamManager = createReq.execute();
+ final ODataMediaEntityCreateResponse<ODataEntity> createRes = streamManager.getResponse();
assertEquals(201, createRes.getStatusCode());
- final CommonODataEntity created = createRes.getBody();
+ final ODataEntity created = createRes.getBody();
assertNotNull(created);
assertEquals(2, created.getProperties().size());
Integer id = null;
- for (CommonODataProperty prop : created.getProperties()) {
+ for (ODataProperty prop : created.getProperties()) {
if ("VIN".equals(prop.getName())) {
id = prop.getPrimitiveValue().toCastValue(Integer.class);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
index d9465a5..b1d2194 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
@@ -159,7 +159,7 @@ public class BatchTestITCase extends AbstractTestITCase {
final ODataChangeset changeset = streamManager.addChangeset();
ODataEntity order = newOrder(20);
- URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+ final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
// add create request
final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -176,13 +176,13 @@ public class BatchTestITCase extends AbstractTestITCase {
"OrderDetails",
client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("OrderDetails").
appendKeySegment(new HashMap<String, Object>() {
- private static final long serialVersionUID = 3109256773218160485L;
+ private static final long serialVersionUID = 3109256773218160485L;
- {
- put("OrderID", 7);
- put("ProductID", 5);
- }
- }).build()));
+ {
+ put("OrderID", 7);
+ put("ProductID", 5);
+ }
+ }).build()));
final ODataEntityUpdateRequest<ODataEntity> updateReq = client.getCUDRequestFactory().getEntityUpdateRequest(
URI.create("$" + createRequestRef), UpdateType.PATCH, customerChanges);
@@ -206,7 +206,7 @@ public class BatchTestITCase extends AbstractTestITCase {
assertTrue(res instanceof ODataEntityCreateResponse);
order = ((ODataEntityCreateResponse<ODataEntity>) res).getBody();
- ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
+ final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
URIUtils.getURI(testStaticServiceRootURL, order.getEditLink().toASCIIString() + "/OrderDetails"));
assertEquals(Integer.valueOf(7),
@@ -274,7 +274,7 @@ public class BatchTestITCase extends AbstractTestITCase {
"LastName",
client.getObjectFactory().newPrimitiveValueBuilder().buildString("new last name")));
- final ODataEntityUpdateRequest changeReq =
+ final ODataEntityUpdateRequest<ODataEntity> changeReq =
client.getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, patch);
changeReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
@@ -295,8 +295,7 @@ public class BatchTestITCase extends AbstractTestITCase {
retrieve = streamManager.addRetrieve();
// prepare URI
- targetURI = client.getURIBuilder(testStaticServiceRootURL).
- appendEntitySetSegment("Customers").appendKeySegment(1);
+ targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
// create new request
queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());
@@ -309,7 +308,7 @@ public class BatchTestITCase extends AbstractTestITCase {
assertEquals("OK", response.getStatusMessage());
final Iterator<ODataBatchResponseItem> iter = response.getBody();
- // retrive the first item (ODataRetrieve)
+ // retrieve the first item (ODataRetrieve)
ODataBatchResponseItem item = iter.next();
assertTrue(item instanceof ODataRetrieveResponseItem);
@@ -368,13 +367,13 @@ public class BatchTestITCase extends AbstractTestITCase {
super(new Wrapper<Future<HttpResponse>>());
}
- public ODataStreamManager<ODataBatchResponse> addObject(byte[] src) {
+ public ODataStreamManager<ODataBatchResponse> addObject(final byte[] src) {
stream(src);
return this;
}
@Override
- protected ODataBatchResponse getResponse(long timeout, TimeUnit unit) {
+ protected ODataBatchResponse getResponse(final long timeout, final TimeUnit unit) {
throw new UnsupportedOperationException("Not supported yet.");
}
};
@@ -387,6 +386,7 @@ public class BatchTestITCase extends AbstractTestITCase {
private final TestStreamManager streaming;
public StreamingThread(final TestStreamManager streaming) {
+ super();
this.streaming = streaming;
}
@@ -422,6 +422,7 @@ public class BatchTestITCase extends AbstractTestITCase {
private final BatchStreamManager streaming;
public BatchStreamingThread(final BatchStreamManager streaming) {
+ super();
this.streaming = streaming;
}
@@ -430,7 +431,7 @@ public class BatchTestITCase extends AbstractTestITCase {
try {
final StringBuilder builder = new StringBuilder();
- byte[] buff = new byte[1024];
+ final byte[] buff = new byte[1024];
int len;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
index 9385daa..6a736c6 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
@@ -32,10 +32,13 @@ import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateR
import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
+import org.apache.olingo.commons.api.domain.ODataLink;
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.api.domain.v4.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.format.ODataPubFormat;
@@ -167,4 +170,83 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
public void jsonOnContained() {
onContained(ODataPubFormat.JSON);
}
+
+ private void deepInsert(final ODataPubFormat format) throws EdmPrimitiveTypeException {
+ final int productId = RandomUtils.nextInt(10, 20);
+ final ODataEntity product = getClient().getObjectFactory().
+ newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Product"));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductID",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productId)));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Name",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("Latte")));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("QuantityPerUnit",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("100g Bag")));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("UnitPrice",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildSingle(3.24f)));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("QuantityInStock",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(100)));
+ product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Discontinued",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildBoolean(false)));
+ product.getProperties().add(getClient().getObjectFactory().newEnumProperty("UserAccess",
+ getClient().getObjectFactory().
+ newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "Execute")));
+ product.getProperties().add(getClient().getObjectFactory().newEnumProperty("SkinColor",
+ getClient().getObjectFactory().
+ newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Blue")));
+ product.getProperties().add(getClient().getObjectFactory().newCollectionProperty("CoverColors",
+ getClient().getObjectFactory().
+ newCollectionValue("Collection(Microsoft.Test.OData.Services.ODataWCFService.ProductDetail)")));
+ product.getProperty("CoverColors").getCollectionValue().add(getClient().getObjectFactory().
+ newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Green"));
+ product.getProperty("CoverColors").getCollectionValue().add(getClient().getObjectFactory().
+ newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Red"));
+
+ final int productDetailId = RandomUtils.nextInt(10, 20);
+ final ODataEntity detail = getClient().getObjectFactory().
+ newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.ProductDetail"));
+ detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductID",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productId)));
+ detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductDetailID",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productDetailId)));
+ detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductName",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("LatteHQ")));
+ detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Description",
+ getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("High-Quality Milk")));
+
+ final ODataEntitySet details = getClient().getObjectFactory().newEntitySet();
+ details.getEntities().add(detail);
+
+ final ODataInlineEntitySet inlineDetails = getClient().getObjectFactory().
+ newDeepInsertEntitySet("Details", details);
+ product.addLink(inlineDetails);
+
+ final ODataEntityCreateRequest<ODataEntity> req = getClient().getCUDRequestFactory().getEntityCreateRequest(
+ getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Products").build(), product);
+ req.setFormat(format);
+ final ODataEntityCreateResponse<ODataEntity> res = req.execute();
+ assertEquals(201, res.getStatusCode());
+
+ final ODataEntity createdProduct = res.getBody();
+ assertEquals(productId,
+ createdProduct.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+ final ODataLink createdLink = createdProduct.getNavigationLink("Details");
+ assertNotNull(createdLink);
+
+ final ODataEntitySet createdProductDetails =
+ getClient().getRetrieveRequestFactory().getEntitySetRequest(createdLink.getLink()).execute().getBody();
+ assertNotNull(createdProductDetails);
+ assertEquals(productDetailId, createdProductDetails.getEntities().iterator().next().
+ getProperty("ProductDetailID").getPrimitiveValue().toCastValue(Integer.class), 0);
+ }
+
+ @Test
+ public void atomDeepInsert() throws EdmPrimitiveTypeException {
+ deepInsert(ODataPubFormat.ATOM);
+ }
+
+ @Test
+ public void jsonDeepInsert() throws EdmPrimitiveTypeException {
+ deepInsert(ODataPubFormat.JSON_FULL_METADATA);
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
index e1e6331..36a9e65 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
@@ -18,19 +18,21 @@
*/
package org.apache.olingo.client.core.it.v4;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
import java.net.URI;
import java.util.Calendar;
import java.util.UUID;
import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.format.ODataPubFormat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
import org.junit.Test;
public class EntityUpdateTestITCase extends AbstractTestITCase {
@@ -112,4 +114,41 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
onContained(ODataPubFormat.JSON);
}
+ private void bindOperation(final ODataPubFormat format) throws EdmPrimitiveTypeException {
+ final ODataEntity changes = getClient().getObjectFactory().newEntity(
+ new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Customer"));
+ final ODataLink parent = getClient().getObjectFactory().newEntityNavigationLink("Parent",
+ getClient().getURIBuilder(testStaticServiceRootURL).
+ appendEntitySetSegment("People").appendKeySegment(1).build());
+ changes.getNavigationLinks().add(parent);
+
+ final URI uri = getClient().getURIBuilder(testStaticServiceRootURL).
+ appendEntitySetSegment("People").appendKeySegment(5).build();
+ final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
+ getEntityUpdateRequest(uri, UpdateType.PATCH, changes);
+ req.setFormat(format);
+
+ final ODataEntityUpdateResponse<ODataEntity> res = req.execute();
+ assertEquals(204, res.getStatusCode());
+
+ final ODataEntity updated = getClient().getRetrieveRequestFactory().getEntityRequest(uri).execute().getBody();
+ assertNotNull(updated);
+ final ODataLink updatedLink = updated.getNavigationLink("Parent");
+ assertNotNull(updatedLink);
+
+ final ODataEntity updatedEntity = getClient().getRetrieveRequestFactory().getEntityRequest(updatedLink.getLink()).
+ execute().getBody();
+ assertNotNull(updatedEntity);
+ assertEquals(1, updatedEntity.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
+ }
+
+ @Test
+ public void atomBindOperation() throws EdmPrimitiveTypeException {
+ bindOperation(ODataPubFormat.ATOM);
+ }
+
+ @Test
+ public void jsonBindOperation() throws EdmPrimitiveTypeException {
+ bindOperation(ODataPubFormat.JSON);
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/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 b3945bf..eead623 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
@@ -59,65 +59,22 @@ public interface CommonODataObjectFactory {
CommonODataEntity newEntity(FullQualifiedName typeName, URI link);
/**
- * Instantiates a new in-line entity set.
+ * Instantiates a new entity set (for deep insert).
*
* @param name name.
- * @param link edit link.
* @param entitySet entity set.
* @return in-line entity set.
*/
- ODataInlineEntitySet newInlineEntitySet(String name, URI link, CommonODataEntitySet entitySet);
+ ODataInlineEntitySet newDeepInsertEntitySet(String name, CommonODataEntitySet entitySet);
/**
- * Instantiates a new in-line entity set.
+ * Instantiates a new entity (for deep insert).
*
* @param name name.
- * @param baseURI base URI.
- * @param href href.
- * @param entitySet entity set.
- * @return in-line entity set.
- */
- ODataInlineEntitySet newInlineEntitySet(String name, URI baseURI, String href, CommonODataEntitySet entitySet);
-
- /**
- * Instantiates a new in-line entity.
- *
- * @param name name.
- * @param link edit link.
- * @param entity entity.
- * @return in-line entity.
- */
- ODataInlineEntity newInlineEntity(String name, URI link, CommonODataEntity entity);
-
- /**
- * Instantiates a new in-line entity.
- *
- * @param name name.
- * @param baseURI base URI.
- * @param href href.
* @param entity entity.
* @return in-line entity.
*/
- ODataInlineEntity newInlineEntity(String name, URI baseURI, String href, CommonODataEntity entity);
-
- /**
- * Instantiates a new entity navigation link.
- *
- * @param name name.
- * @param link link.
- * @return entity navigation link.
- */
- ODataLink newEntityNavigationLink(String name, URI link);
-
- /**
- * Instantiates a new entity navigation link.
- *
- * @param name name.
- * @param baseURI base URI.
- * @param href href.
- * @return entity navigation link.
- */
- ODataLink newEntityNavigationLink(String name, URI baseURI, String href);
+ ODataInlineEntity newDeepInsertEntity(String name, CommonODataEntity entity);
/**
* Instantiates a new entity set navigation link.
@@ -129,52 +86,13 @@ public interface CommonODataObjectFactory {
ODataLink newEntitySetNavigationLink(String name, URI link);
/**
- * Instantiates a new entity set navigation link.
- *
- * @param name name.
- * @param baseURI base URI.
- * @param href href.
- * @return entity set navigation link.
- */
- ODataLink newEntitySetNavigationLink(String name, URI baseURI, String href);
-
- /**
- * Instantiates a new association link.
- *
- * @param name name.
- * @param link link.
- * @return association link.
- */
- ODataLink newAssociationLink(String name, URI link);
-
- /**
- * Instantiates a new association link.
- *
- * @param name name.
- * @param baseURI base URI.
- * @param href href.
- * @return association link.
- */
- ODataLink newAssociationLink(String name, URI baseURI, String href);
-
- /**
- * Instantiates a new media-edit link.
+ * Instantiates a new entity navigation link.
*
* @param name name.
* @param link link.
- * @return media-edit link.
- */
- ODataLink newMediaEditLink(String name, URI link);
-
- /**
- * Instantiates a new media-edit link.
- *
- * @param name name.
- * @param baseURI base URI.
- * @param href href.
- * @return media-edit link.
+ * @return entity navigation link.
*/
- ODataLink newMediaEditLink(String name, URI baseURI, String href);
+ ODataLink newEntityNavigationLink(String name, URI link);
ODataPrimitiveValue.Builder newPrimitiveValueBuilder();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
index 28b4c9e..096e8e9 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
@@ -23,6 +23,7 @@ import org.apache.olingo.commons.api.domain.CommonODataObjectFactory;
import org.apache.olingo.commons.api.domain.CommonODataProperty;
import org.apache.olingo.commons.api.domain.ODataCollectionValue;
import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -41,6 +42,14 @@ public interface ODataObjectFactory extends CommonODataObjectFactory {
@Override
ODataEntity newEntity(FullQualifiedName typeName, URI link);
+ /**
+ * Instantiates a new association link.
+ *
+ * @param link link.
+ * @return association link.
+ */
+ ODataLink newAssociationLink(URI link);
+
@Override
ODataComplexValue<ODataProperty> newComplexValue(String typeName);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
index 2fa89d4..362552f 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
@@ -77,7 +77,9 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
uris = new ArrayList<String>();
entitySetLinks.put(link.getTitle(), uris);
}
- uris.add(link.getHref());
+ if (StringUtils.isNotBlank(link.getHref())) {
+ uris.add(link.getHref());
+ }
} else {
if (StringUtils.isNotBlank(link.getHref())) {
jgen.writeStringField(link.getTitle() + Constants.JSON_BIND_LINK_SUFFIX, link.getHref());
@@ -95,11 +97,13 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
}
}
for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) {
- jgen.writeArrayFieldStart(entitySetLink.getKey() + Constants.JSON_BIND_LINK_SUFFIX);
- for (String uri : entitySetLink.getValue()) {
- jgen.writeString(uri);
+ if (!entitySetLink.getValue().isEmpty()) {
+ jgen.writeArrayFieldStart(entitySetLink.getKey() + Constants.JSON_BIND_LINK_SUFFIX);
+ for (String uri : entitySetLink.getValue()) {
+ jgen.writeString(uri);
+ }
+ jgen.writeEndArray();
}
- jgen.writeEndArray();
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
index e953948..65cb6b2 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
@@ -445,6 +445,14 @@ public class AtomSerializer extends AbstractAtomDealer {
final XMLStreamWriter writer, final Container<T> container) throws XMLStreamException {
if (container.getContextURL() != null) {
+ final String base = StringUtils.substringBefore(container.getContextURL().toASCIIString(), Constants.METADATA);
+ if (container.getObject() instanceof AtomFeedImpl) {
+ ((AtomFeedImpl) container.getObject()).setBaseURI(base);
+ }
+ if (container.getObject() instanceof AtomEntryImpl) {
+ ((AtomEntryImpl) container.getObject()).setBaseURI(base);
+ }
+
writer.writeAttribute(
version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA),
Constants.CONTEXT,
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
index 5730ee9..3493648 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
@@ -30,6 +30,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.data.Container;
import org.apache.olingo.commons.api.data.Link;
@@ -55,17 +56,9 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
throw new JsonParseException("Expected OData Entity, found EntitySet", parser.getCurrentLocation());
}
- final String metadataETag;
- final URI contextURL;
final JSONEntryImpl entry = new JSONEntryImpl();
- if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
- metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
- tree.remove(Constants.JSON_METADATA_ETAG);
- } else {
- metadataETag = null;
- }
-
+ final URI contextURL;
if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
tree.remove(Constants.JSON_CONTEXT);
@@ -75,10 +68,16 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
} else {
contextURL = null;
}
-
if (contextURL != null) {
- String url = contextURL.toASCIIString();
- entry.setBaseURI(url.substring(0, url.indexOf(Constants.METADATA)));
+ entry.setBaseURI(StringUtils.substringBefore(contextURL.toASCIIString(), Constants.METADATA));
+ }
+
+ final String metadataETag;
+ if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
+ metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
+ tree.remove(Constants.JSON_METADATA_ETAG);
+ } else {
+ metadataETag = null;
}
if (tree.hasNonNull(jsonETag)) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
index bdfa439..d12bdad 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
@@ -58,8 +58,15 @@ public class JSONEntrySerializer extends AbstractJsonSerializer<JSONEntryImpl> {
}
if (serverMode) {
- if (version.compareTo(ODataServiceVersion.V40) >= 0 && StringUtils.isNotBlank(container.getMetadataETag())) {
- jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
+ if (container.getContextURL() != null) {
+ jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
+ ? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
+ container.getContextURL().toASCIIString());
+ }
+ if (version.compareTo(ODataServiceVersion.V40) >= 0) {
+ if (StringUtils.isNotBlank(container.getMetadataETag())) {
+ jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
+ }
}
if (StringUtils.isNotBlank(entry.getETag())) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
index 3c180b9..238e56b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
@@ -47,17 +47,9 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
return null;
}
- final String metadataETag;
- final URI contextURL;
final JSONFeedImpl feed = new JSONFeedImpl();
- if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
- metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
- tree.remove(Constants.JSON_METADATA_ETAG);
- } else {
- metadataETag = null;
- }
-
+ final URI contextURL;
if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
tree.remove(Constants.JSON_CONTEXT);
@@ -67,9 +59,16 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
} else {
contextURL = null;
}
-
feed.setMetadataContextURL(contextURL);
+ final String metadataETag;
+ if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
+ metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
+ tree.remove(Constants.JSON_METADATA_ETAG);
+ } else {
+ metadataETag = null;
+ }
+
if (tree.hasNonNull(Constants.JSON_COUNT)) {
feed.setCount(tree.get(Constants.JSON_COUNT).asInt());
}
@@ -81,8 +80,8 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
for (final Iterator<JsonNode> itor = tree.get(Constants.VALUE).iterator(); itor.hasNext();) {
feed.getEntries().add(
itor.next().traverse(parser.getCodec()).<Container<JSONEntryImpl>>readValueAs(
- new TypeReference<JSONEntryImpl>() {
- }).getObject());
+ new TypeReference<JSONEntryImpl>() {
+ }).getObject());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/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 43853fa..0e438c5 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
@@ -39,29 +39,13 @@ public abstract class AbstractODataObjectFactory implements CommonODataObjectFac
}
@Override
- public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
- final CommonODataEntitySet 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 CommonODataEntitySet entitySet) {
-
- return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
- }
-
- @Override
- public ODataInlineEntity newInlineEntity(final String name, final URI link, final CommonODataEntity entity) {
- return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+ public ODataInlineEntitySet newDeepInsertEntitySet(final String name, final CommonODataEntitySet entitySet) {
+ return new ODataInlineEntitySet(version, null, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
}
@Override
- public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
- final CommonODataEntity entity) {
-
- return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+ public ODataInlineEntity newDeepInsertEntity(final String name, final CommonODataEntity entity) {
+ return new ODataInlineEntity(version, null, ODataLinkType.ENTITY_NAVIGATION, name, entity);
}
@Override
@@ -71,45 +55,8 @@ public abstract class AbstractODataObjectFactory implements CommonODataObjectFac
}
@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 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 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();
- }
-
- @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();
- }
-
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
index 1f41c59..f488ed9 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
@@ -22,6 +22,8 @@ import java.net.URI;
import org.apache.olingo.commons.api.domain.CommonODataProperty;
import org.apache.olingo.commons.api.domain.ODataCollectionValue;
import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.ODataLinkType;
import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
@@ -61,6 +63,11 @@ public class ODataObjectFactoryImpl extends AbstractODataObjectFactory implement
}
@Override
+ public ODataLink newAssociationLink(final URI link) {
+ return new ODataLink.Builder().setVersion(version).setURI(link).setType(ODataLinkType.ASSOCIATION).build();
+ }
+
+ @Override
public ODataPrimitiveValue.Builder newPrimitiveValueBuilder() {
return new ODataPrimitiveValueImpl.BuilderImpl(version);
}
[2/5] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/olingo-odata4
Posted by il...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/03e5462c
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/03e5462c
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/03e5462c
Branch: refs/heads/master
Commit: 03e5462c07261f773899e7ae3cd3c6a27957b228
Parents: 7ee1e39 c953fca
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 16 13:13:18 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 16 13:13:18 2014 +0200
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 172 +++++++++++++------
.../org/apache/olingo/fit/V3KeyAsSegment.java | 17 +-
.../java/org/apache/olingo/fit/V3OpenType.java | 9 +-
.../java/org/apache/olingo/fit/V3Services.java | 1 -
.../java/org/apache/olingo/fit/V4OpenType.java | 12 +-
.../java/org/apache/olingo/fit/V4Services.java | 22 ++-
.../olingo/fit/utils/AbstractUtilities.java | 27 ++-
.../V30/CustomerInfo/17/entity.full.json | 11 ++
.../resources/V30/CustomerInfo/17/entity.xml | 37 ++++
.../client/core/it/v3/BatchTestITCase.java | 7 +-
10 files changed, 238 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
[3/5] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/olingo-odata4
Posted by il...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ef8c3a05
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ef8c3a05
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ef8c3a05
Branch: refs/heads/master
Commit: ef8c3a0531f5d57fea56e3da951c3746c2f00754
Parents: 03e5462 7276a70
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 17 10:42:29 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 17 10:42:29 2014 +0200
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 163 ++++---
.../olingo/fit/utils/AbstractJSONUtilities.java | 15 -
.../olingo/fit/utils/AbstractUtilities.java | 29 +-
.../olingo/fit/utils/AbstractXMLUtilities.java | 133 ------
.../org/apache/olingo/fit/utils/Commons.java | 1 +
.../org/apache/olingo/fit/utils/DataBinder.java | 8 +-
.../resources/V40/Accounts/101/entity.full.json | 28 +-
.../main/resources/V40/Accounts/101/entity.xml | 14 +-
.../MyPaymentInstruments(101901).full.json | 14 +-
.../101/links/MyPaymentInstruments(101901).xml | 8 +-
.../101/links/MyPaymentInstruments.full.json | 46 +-
.../Accounts/101/links/MyPaymentInstruments.xml | 26 +-
.../V40/OrderDetails/7 5/entity.full.json | 17 +
.../resources/V40/OrderDetails/7 5/entity.xml | 42 ++
.../client/core/it/v3/BatchTestITCase.java | 1 -
.../client/core/it/v4/BatchTestITCase.java | 466 +++++++++++++++++++
.../core/it/v4/EntityRetrieveTestITCase.java | 2 +-
17 files changed, 706 insertions(+), 307 deletions(-)
----------------------------------------------------------------------