You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2013/12/03 19:01:47 UTC
[1/2] git commit: [OLINGO-52] - Support java.util.Set data type for
JPA Relationship properties
Updated Branches:
refs/heads/master 223c457ba -> 17cbcf57b
[OLINGO-52] - Support java.util.Set data type for JPA Relationship
properties
-> $expand
-> deep insert operations
Signed-off-by: Chandan V A <ch...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/73765535
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/73765535
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/73765535
Branch: refs/heads/master
Commit: 73765535a9080d402fe34d894d343dd2488e2232
Parents: d4df5cc
Author: Chandan V A <ch...@sap.com>
Authored: Tue Dec 3 23:30:45 2013 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Tue Dec 3 23:30:45 2013 +0530
----------------------------------------------------------------------
.../core/jpa/access/data/JPAEntity.java | 85 ++++++++++++--------
.../core/jpa/access/data/JPAEntityParser.java | 6 +-
.../core/jpa/access/data/JPAExpandCallBack.java | 3 +-
.../jpa/access/model/JPAEdmNameBuilder.java | 5 +-
.../core/jpa/mock/data/EdmMockUtilV2.java | 4 +-
.../core/jpa/mock/data/JPATypeMock.java | 3 +-
.../processor/ref/model/SalesOrderHeader.java | 8 +-
7 files changed, 69 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
index 7045cd5..7c2ad29 100644
--- a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
+++ b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
@@ -21,6 +21,7 @@ package org.apache.olingo.odata2.processor.core.jpa.access.data;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -134,25 +135,26 @@ public class JPAEntity {
case NAVIGATION:
case ENTITY:
structuralType = (EdmStructuralType) edmTyped.getType();
+ EdmNavigationProperty navProperty = (EdmNavigationProperty) edmTyped;
accessModifier =
- jpaEntityParser.getAccessModifier(jpaEntity, (EdmNavigationProperty) edmTyped,
+ jpaEntityParser.getAccessModifier(jpaEntity, navProperty,
JPAEntityParser.ACCESS_MODIFIER_SET);
- EdmEntitySet edmRelatedEntitySet = oDataEntitySet.getRelatedEntitySet((EdmNavigationProperty) edmTyped);
+ EdmEntitySet edmRelatedEntitySet = oDataEntitySet.getRelatedEntitySet(navProperty);
List<ODataEntry> relatedEntries = (List<ODataEntry>) oDataEntryProperties.get(propertyName);
- List<Object> relatedJPAEntites = new ArrayList<Object>();
+ Collection<Object> relatedJPAEntites = instantiateRelatedJPAEntities(jpaEntity, navProperty);
JPAEntity relatedEntity = new JPAEntity((EdmEntityType) structuralType, edmRelatedEntitySet);
for (ODataEntry oDataEntry : relatedEntries) {
relatedEntity.create(oDataEntry);
relatedJPAEntites.add(relatedEntity.getJPAEntity());
}
- EdmNavigationProperty navProperty = (EdmNavigationProperty) edmTyped;
+
switch (navProperty.getMultiplicity()) {
case MANY:
accessModifier.invoke(jpaEntity, relatedJPAEntites);
break;
case ONE:
case ZERO_TO_ONE:
- accessModifier.invoke(jpaEntity, relatedJPAEntites.get(0));
+ accessModifier.invoke(jpaEntity, relatedJPAEntites.iterator().next());
break;
}
@@ -172,6 +174,21 @@ public class JPAEntity {
}
}
+ @SuppressWarnings("unchecked")
+ private Collection<Object> instantiateRelatedJPAEntities(final Object jpaEntity,
+ final EdmNavigationProperty navProperty)
+ throws InstantiationException,
+ IllegalAccessException, EdmException, ODataJPARuntimeException, IllegalArgumentException,
+ InvocationTargetException {
+ Method accessModifier =
+ jpaEntityParser.getAccessModifier(jpaEntity, navProperty, JPAEntityParser.ACCESS_MODIFIER_GET);
+ Collection<Object> relatedJPAEntities = (Collection<Object>) accessModifier.invoke(jpaEntity);
+ if (relatedJPAEntities == null) {
+ relatedJPAEntities = new ArrayList<Object>();
+ }
+ return relatedJPAEntities;
+ }
+
public void create(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
if (oDataEntry == null) {
throw ODataJPARuntimeException
@@ -189,29 +206,6 @@ public class JPAEntity {
write(oDataEntryProperties, true);
}
- private void normalizeInlineEntries(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
- List<ODataEntry> entries = null;
- try {
- for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
- Object inline = oDataEntryProperties.get(navigationPropertyName);
- if (inline instanceof ODataFeed) {
- entries = ((ODataFeed) inline).getEntries();
- } else if (inline instanceof ODataEntry) {
- entries = new ArrayList<ODataEntry>();
- entries.add((ODataEntry) inline);
- }
- if (entries != null) {
- oDataEntryProperties.put(navigationPropertyName, entries);
- entries = null;
- }
- }
- } catch (EdmException e) {
- throw ODataJPARuntimeException
- .throwException(ODataJPARuntimeException.GENERAL
- .addContent(e.getMessage()), e);
- }
- }
-
public void update(final ODataEntry oDataEntry) throws ODataJPARuntimeException {
if (oDataEntry == null) {
throw ODataJPARuntimeException
@@ -225,6 +219,14 @@ public class JPAEntity {
write(oDataEntryProperties, false);
}
+ public HashMap<EdmNavigationProperty, EdmEntitySet> getInlineJPAEntities() {
+ return inlinedEntities;
+ }
+
+ public void setJPAEntity(final Object jpaEntity) {
+ this.jpaEntity = jpaEntity;
+ }
+
@SuppressWarnings("unchecked")
protected void setComplexProperty(Method accessModifier, final Object jpaEntity,
final EdmStructuralType edmComplexType, final HashMap<String, Object> propertyValue)
@@ -328,11 +330,26 @@ public class JPAEntity {
return jpaType.newInstance();
}
- public HashMap<EdmNavigationProperty, EdmEntitySet> getInlineJPAEntities() {
- return inlinedEntities;
- }
-
- public void setJPAEntity(final Object jpaEntity) {
- this.jpaEntity = jpaEntity;
+ private void normalizeInlineEntries(final Map<String, Object> oDataEntryProperties) throws ODataJPARuntimeException {
+ List<ODataEntry> entries = null;
+ try {
+ for (String navigationPropertyName : oDataEntityType.getNavigationPropertyNames()) {
+ Object inline = oDataEntryProperties.get(navigationPropertyName);
+ if (inline instanceof ODataFeed) {
+ entries = ((ODataFeed) inline).getEntries();
+ } else if (inline instanceof ODataEntry) {
+ entries = new ArrayList<ODataEntry>();
+ entries.add((ODataEntry) inline);
+ }
+ if (entries != null) {
+ oDataEntryProperties.put(navigationPropertyName, entries);
+ entries = null;
+ }
+ }
+ } catch (EdmException e) {
+ throw ODataJPARuntimeException
+ .throwException(ODataJPARuntimeException.GENERAL
+ .addContent(e.getMessage()), e);
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
index e89bec7..756e1ca 100644
--- a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
+++ b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
@@ -422,15 +422,15 @@ public final class JPAEntityParser {
try {
- String name = getAccessModifierName(navigationProperty.getName(),
- navigationProperty.getMapping(), accessModifier);
+ JPAEdmMapping navPropMapping = (JPAEdmMapping) navigationProperty.getMapping();
+ String name = getAccessModifierName(navigationProperty.getName(), (EdmMapping) navPropMapping, accessModifier);
Class<?>[] params = null;
if (accessModifier.equals(ACCESS_MODIFIER_SET)) {
EdmAssociationEnd end = navigationProperty.getRelationship().getEnd(navigationProperty.getToRole());
switch (end.getMultiplicity()) {
case MANY:
- params = new Class<?>[] { List.class };
+ params = new Class<?>[] { navPropMapping.getJPAType() };
break;
case ONE:
params = new Class<?>[] { ((JPAEdmMapping) end.getEntityType().getMapping()).getJPAType() };
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAExpandCallBack.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAExpandCallBack.java b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAExpandCallBack.java
index 43ec80c..78a9ea5 100644
--- a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAExpandCallBack.java
+++ b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAExpandCallBack.java
@@ -20,6 +20,7 @@ package org.apache.olingo.odata2.processor.core.jpa.access.data;
import java.net.URI;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -104,7 +105,7 @@ public class JPAExpandCallBack implements OnWriteFeedContent, OnWriteEntryConten
EdmNavigationProperty currentNavigationProperty = context.getNavigationProperty();
try {
@SuppressWarnings({ "unchecked" })
- List<Object> listOfItems = (List<Object>) inlinedEntry.get(context.getNavigationProperty().getName());
+ Collection<Object> listOfItems = (Collection<Object>) inlinedEntry.get(context.getNavigationProperty().getName());
if (nextEntitySet == null) {
nextEntitySet = context.getSourceEntitySet().getRelatedEntitySet(currentNavigationProperty);
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPAEdmNameBuilder.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPAEdmNameBuilder.java b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPAEdmNameBuilder.java
index df4b2e6..9cc7022 100644
--- a/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPAEdmNameBuilder.java
+++ b/odata2-processor-jpa/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPAEdmNameBuilder.java
@@ -440,7 +440,10 @@ public class JPAEdmNameBuilder {
.getType();
Attribute<?, ?> jpaAttribute = propertyView.getJPAAttribute();
- navProp.setMapping(new Mapping().setInternalName(jpaAttribute.getName()));
+ JPAEdmMapping mapping = new JPAEdmMappingImpl();
+ ((Mapping) mapping).setInternalName(jpaAttribute.getName());
+ mapping.setJPAType(jpaAttribute.getJavaType());
+ navProp.setMapping((Mapping) mapping);
String jpaEntityTypeName = propertyView.getJPAEdmEntityTypeView()
.getJPAEntityType().getName();
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/EdmMockUtilV2.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/EdmMockUtilV2.java b/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/EdmMockUtilV2.java
index 67de03a..6611fb1 100644
--- a/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/EdmMockUtilV2.java
+++ b/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/EdmMockUtilV2.java
@@ -185,11 +185,11 @@ public class EdmMockUtilV2 {
EasyMock.expect(navigationProperty.getType()).andReturn(edmEntityType).anyTimes();
EasyMock.expect(navigationProperty.getMultiplicity()).andReturn(multiplicity);
EasyMock.expect(navigationProperty.getMapping()).andReturn(
- (EdmMapping) mockEdmMapping(null, null, navigationPropertyName));
+ (EdmMapping) mockEdmMapping(null, null, navigationPropertyName)).anyTimes();
EasyMock.expect(navigationProperty.getToRole()).andReturn("TO");
EasyMock.expect(navigationProperty.getRelationship()).andReturn(mockEdmAssociation(navigationPropertyName));
if (multiplicity.equals(EdmMultiplicity.ONE)) {
- EasyMock.expect(navigationProperty.getName()).andReturn(JPATypeMock.NAVIGATION_PROPERTY_X);
+ EasyMock.expect(navigationProperty.getName()).andReturn(JPATypeMock.NAVIGATION_PROPERTY_X).anyTimes();
}
EasyMock.replay(navigationProperty);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/JPATypeMock.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/JPATypeMock.java b/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/JPATypeMock.java
index 1360b6d..d7bb703 100644
--- a/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/JPATypeMock.java
+++ b/odata2-processor-jpa/jpa-core/src/test/java/org/apache/olingo/odata2/processor/core/jpa/mock/data/JPATypeMock.java
@@ -18,6 +18,7 @@
******************************************************************************/
package org.apache.olingo.odata2.processor.core.jpa.mock.data;
+import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.UUID;
@@ -41,7 +42,7 @@ public class JPATypeMock {
private String mString;
private Calendar mDateTime;
private JPARelatedTypeMock mRelatedEntity;
- private List<JPARelatedTypeMock> mRelatedEntities;
+ private List<JPARelatedTypeMock> mRelatedEntities = new ArrayList<JPATypeMock.JPARelatedTypeMock>();
public String getMString() {
return mString;
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/73765535/odata2-processor-jpa/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
----------------------------------------------------------------------
diff --git a/odata2-processor-jpa/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java b/odata2-processor-jpa/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
index 2aad540..9af23f3 100644
--- a/odata2-processor-jpa/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
+++ b/odata2-processor-jpa/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
@@ -21,7 +21,9 @@ package org.apache.olingo.odata2.jpa.processor.ref.model;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.TimeZone;
import javax.persistence.CascadeType;
@@ -101,7 +103,7 @@ public class SalesOrderHeader {
private double netAmount;
@OneToMany(mappedBy = "salesOrderHeader", cascade = CascadeType.ALL)
- private List<SalesOrderItem> salesOrderItem = new ArrayList<SalesOrderItem>();
+ private Set<SalesOrderItem> salesOrderItem = new HashSet<SalesOrderItem>();
@OneToMany(mappedBy = "salesOrderHeader", cascade = CascadeType.ALL)
private List<Note> notes = new ArrayList<Note>();
@@ -192,11 +194,11 @@ public class SalesOrderHeader {
this.netAmount = netAmount;
}
- public List<SalesOrderItem> getSalesOrderItem() {
+ public Set<SalesOrderItem> getSalesOrderItem() {
return salesOrderItem;
}
- public void setSalesOrderItem(final List<SalesOrderItem> salesOrderItem) {
+ public void setSalesOrderItem(final Set<SalesOrderItem> salesOrderItem) {
this.salesOrderItem = salesOrderItem;
}
[2/2] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2
Posted by ch...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/17cbcf57
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/17cbcf57
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/17cbcf57
Branch: refs/heads/master
Commit: 17cbcf57bc8d2cd671c0ad1f0c151b62cd4221b4
Parents: 7376553 223c457
Author: Chandan V A <ch...@sap.com>
Authored: Tue Dec 3 23:31:13 2013 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Tue Dec 3 23:31:13 2013 +0530
----------------------------------------------------------------------
.../odata2/core/edm/provider/EdmxProvider.java | 2 -
.../consumer/AtomServiceDocumentConsumer.java | 33 +-
.../core/ep/consumer/XmlEntryConsumer.java | 6 +-
.../core/ep/consumer/XmlFeedConsumer.java | 5 +-
.../core/ep/consumer/XmlLinkConsumer.java | 12 +-
.../core/ep/consumer/XmlMetadataConsumer.java | 9 +-
.../ep/consumer/AbstractXmlConsumerTest.java | 45 +
.../AtomServiceDocumentConsumerTest.java | 10 +-
.../consumer/ServiceDocumentConsumerTest.java | 3 +-
.../core/ep/consumer/XmlEntityConsumerTest.java | 15 +-
.../core/ep/consumer/XmlFeedConsumerTest.java | 22 +-
.../core/ep/consumer/XmlLinkConsumerTest.java | 25 +-
.../ep/consumer/XmlMetadataConsumerTest.java | 27 +-
.../ep/consumer/XmlPropertyConsumerTest.java | 6 +-
.../src/test/resources/LargeEmployeeFeed.xml | 12538 +++++++++++++++++
15 files changed, 12675 insertions(+), 83 deletions(-)
----------------------------------------------------------------------