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/05/10 10:26:52 UTC
[10/10] git commit: Various small fixes and improvements
Various small fixes and improvements
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ec30775b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ec30775b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ec30775b
Branch: refs/heads/master
Commit: ec30775b8c129436f2084ca9ac89fc75a17a0fcb
Parents: 365ea6f
Author: Francesco Chicchiriccò <--global>
Authored: Sat May 10 10:26:19 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Sat May 10 10:26:19 2014 +0200
----------------------------------------------------------------------
.../commons/AbstractInvocationHandler.java | 7 +-
.../commons/AbstractTypeInvocationHandler.java | 4 +-
.../commons/ComplexTypeInvocationHandler.java | 24 +-
.../olingo/ext/proxy/commons/ContainerImpl.java | 6 +-
.../commons/EntitySetInvocationHandler.java | 2 +-
.../commons/EntityTypeInvocationHandler.java | 18 +-
.../olingo/ext/proxy/utils/CoreUtils.java | 452 +++++++++++++++++++
.../olingo/ext/proxy/utils/EngineUtils.java | 439 ------------------
.../ext/pojogen/AbstractMetadataMojo.java | 1 -
.../olingo/ext/pojogen/AbstractUtility.java | 4 -
.../olingo/ext/pojogen/V3MetadataMojo.java | 245 +++++-----
.../src/main/resources/complexType.vm | 1 -
.../src/main/resources/container.vm | 1 -
.../src/main/resources/entityCollection.vm | 5 +-
.../src/main/resources/entitySet.vm | 1 -
.../src/main/resources/entityType.vm | 3 +-
.../src/main/resources/entityTypeKey.vm | 1 -
.../src/main/resources/singleton.vm | 1 -
.../org/apache/olingo/fit/AbstractServices.java | 40 +-
.../apache/olingo/fit/V3ActionOverloading.java | 2 +-
.../java/org/apache/olingo/fit/V3OpenType.java | 7 +-
.../java/org/apache/olingo/fit/V3Services.java | 7 +-
.../main/java/org/apache/olingo/fit/V4Demo.java | 7 +-
.../java/org/apache/olingo/fit/V4OpenType.java | 9 +-
.../java/org/apache/olingo/fit/V4Services.java | 19 +-
.../org/apache/olingo/fit/V4Vocabularies.java | 8 +-
.../apache/olingo/fit/metadata/EntityType.java | 10 +
.../apache/olingo/fit/metadata/Metadata.java | 7 +-
.../olingo/fit/utils/AbstractUtilities.java | 17 +-
.../org/apache/olingo/fit/utils/Commons.java | 1 +
.../org/apache/olingo/fit/utils/Constants.java | 1 +
.../org/apache/olingo/fit/utils/DataBinder.java | 63 +--
.../org/apache/olingo/fit/utils/FSManager.java | 6 +-
.../apache/olingo/fit/utils/JSONUtilities.java | 5 +-
.../apache/olingo/fit/utils/XMLUtilities.java | 5 +-
fit/src/main/resources/V40/openTypeMetadata.xml | 10 +-
.../olingo/fit/proxy/v3/AbstractTest.java | 9 -
.../proxy/v3/AuthEntityRetrieveTestITCase.java | 2 +-
.../fit/proxy/v3/EntityRetrieveTestITCase.java | 2 +-
.../AllGeoCollectionTypesSet.java | 1 -
.../astoriadefaultservice/AllGeoTypesSet.java | 1 -
.../services/astoriadefaultservice/Car.java | 1 -
.../astoriadefaultservice/Computer.java | 1 -
.../astoriadefaultservice/ComputerDetail.java | 1 -
.../astoriadefaultservice/Customer.java | 1 -
.../astoriadefaultservice/CustomerInfo.java | 1 -
.../astoriadefaultservice/DefaultContainer.java | 1 -
.../services/astoriadefaultservice/Driver.java | 1 -
.../astoriadefaultservice/LastLogin.java | 1 -
.../services/astoriadefaultservice/License.java | 1 -
.../services/astoriadefaultservice/Login.java | 1 -
.../astoriadefaultservice/MappedEntityType.java | 1 -
.../services/astoriadefaultservice/Message.java | 1 -
.../MessageAttachment.java | 1 -
.../services/astoriadefaultservice/Order.java | 1 -
.../astoriadefaultservice/OrderLine.java | 1 -
.../astoriadefaultservice/PageView.java | 1 -
.../services/astoriadefaultservice/Person.java | 1 -
.../astoriadefaultservice/PersonMetadata.java | 1 -
.../services/astoriadefaultservice/Product.java | 1 -
.../astoriadefaultservice/ProductDetail.java | 1 -
.../astoriadefaultservice/ProductPhoto.java | 1 -
.../astoriadefaultservice/ProductReview.java | 1 -
.../astoriadefaultservice/RSAToken.java | 1 -
.../astoriadefaultservice/types/Aliases.java | 3 +-
.../types/AllSpatialCollectionTypes.java | 6 +-
.../AllSpatialCollectionTypesCollection.java | 1 -
.../types/AllSpatialCollectionTypes_Simple.java | 18 +-
...SpatialCollectionTypes_SimpleCollection.java | 1 -
.../types/AllSpatialTypes.java | 38 +-
.../types/AllSpatialTypesCollection.java | 1 -
.../astoriadefaultservice/types/AuditInfo.java | 4 +-
.../types/BackOrderLine.java | 14 +-
.../types/BackOrderLine2.java | 14 +-
.../types/BackOrderLine2Collection.java | 1 -
.../types/BackOrderLineCollection.java | 1 -
.../astoriadefaultservice/types/Car.java | 12 +-
.../types/CarCollection.java | 1 -
.../types/ComplexToCategory.java | 3 +-
.../types/ComplexWithAllPrimitiveTypes.java | 3 +-
.../astoriadefaultservice/types/Computer.java | 13 +-
.../types/ComputerCollection.java | 14 -
.../types/ComputerDetail.java | 24 +-
.../types/ComputerDetailCollection.java | 15 -
.../types/ConcurrencyInfo.java | 3 +-
.../types/ContactDetails.java | 7 +-
.../astoriadefaultservice/types/Contractor.java | 16 +-
.../types/ContractorCollection.java | 1 -
.../astoriadefaultservice/types/Customer.java | 21 +-
.../types/CustomerCollection.java | 1 -
.../types/CustomerInfo.java | 8 +-
.../types/CustomerInfoCollection.java | 1 -
.../astoriadefaultservice/types/Dimensions.java | 3 +-
.../types/DiscontinuedProduct.java | 30 +-
.../types/DiscontinuedProductCollection.java | 1 -
.../astoriadefaultservice/types/Driver.java | 8 +-
.../types/DriverCollection.java | 1 -
.../astoriadefaultservice/types/Employee.java | 19 +-
.../types/EmployeeCollection.java | 11 +-
.../astoriadefaultservice/types/LastLogin.java | 12 +-
.../types/LastLoginCollection.java | 1 -
.../astoriadefaultservice/types/License.java | 14 +-
.../types/LicenseCollection.java | 1 -
.../astoriadefaultservice/types/Login.java | 8 +-
.../types/LoginCollection.java | 1 -
.../types/MappedEntityType.java | 47 +-
.../types/MappedEntityTypeCollection.java | 1 -
.../astoriadefaultservice/types/Message.java | 18 +-
.../types/MessageAttachment.java | 8 +-
.../types/MessageAttachmentCollection.java | 1 -
.../types/MessageCollection.java | 1 -
.../astoriadefaultservice/types/MessageKey.java | 1 -
.../astoriadefaultservice/types/Order.java | 11 +-
.../types/OrderCollection.java | 1 -
.../astoriadefaultservice/types/OrderLine.java | 14 +-
.../types/OrderLineCollection.java | 1 -
.../types/OrderLineKey.java | 1 -
.../astoriadefaultservice/types/PageView.java | 14 +-
.../types/PageViewCollection.java | 1 -
.../astoriadefaultservice/types/Person.java | 8 +-
.../types/PersonCollection.java | 1 -
.../types/PersonMetadata.java | 12 +-
.../types/PersonMetadataCollection.java | 1 -
.../astoriadefaultservice/types/Phone.java | 3 +-
.../astoriadefaultservice/types/Product.java | 26 +-
.../types/ProductCollection.java | 14 -
.../types/ProductDetail.java | 8 +-
.../types/ProductDetailCollection.java | 1 -
.../types/ProductPageView.java | 18 +-
.../types/ProductPageViewCollection.java | 1 -
.../types/ProductPhoto.java | 10 +-
.../types/ProductPhotoCollection.java | 1 -
.../types/ProductPhotoKey.java | 1 -
.../types/ProductReview.java | 12 +-
.../types/ProductReviewCollection.java | 1 -
.../types/ProductReviewKey.java | 1 -
.../astoriadefaultservice/types/RSAToken.java | 8 +-
.../types/RSATokenCollection.java | 1 -
.../types/SpecialEmployee.java | 20 +-
.../types/SpecialEmployeeCollection.java | 1 -
.../proxy/v4/AuthEntityRetrieveTestITCase.java | 2 +-
.../services/odatawcfservice/Accounts.java | 1 -
.../odata/services/odatawcfservice/Boss.java | 1 -
.../odata/services/odatawcfservice/Company.java | 1 -
.../services/odatawcfservice/Customers.java | 1 -
.../odatawcfservice/DefaultStoredPI.java | 1 -
.../services/odatawcfservice/Departments.java | 1 -
.../services/odatawcfservice/Employees.java | 1 -
.../odatawcfservice/InMemoryEntities.java | 1 -
.../services/odatawcfservice/LabourUnion.java | 1 -
.../services/odatawcfservice/OrderDetails.java | 1 -
.../odata/services/odatawcfservice/Orders.java | 1 -
.../odata/services/odatawcfservice/People.java | 1 -
.../odatawcfservice/ProductDetails.java | 1 -
.../odatawcfservice/ProductReviews.java | 1 -
.../services/odatawcfservice/Products.java | 1 -
.../services/odatawcfservice/PublicCompany.java | 1 -
.../services/odatawcfservice/StoredPIs.java | 1 -
.../odatawcfservice/SubscriptionTemplates.java | 1 -
.../services/odatawcfservice/VipCustomer.java | 1 -
.../services/odatawcfservice/types/Account.java | 11 +-
.../types/AccountCollection.java | 28 --
.../odatawcfservice/types/AccountInfo.java | 3 +-
.../services/odatawcfservice/types/Address.java | 3 +-
.../services/odatawcfservice/types/Asset.java | 10 +-
.../odatawcfservice/types/AssetCollection.java | 1 -
.../services/odatawcfservice/types/Club.java | 8 +-
.../odatawcfservice/types/ClubCollection.java | 1 -
.../services/odatawcfservice/types/Company.java | 15 +-
.../odatawcfservice/types/CompanyAddress.java | 3 +-
.../types/CompanyCollection.java | 21 -
.../odatawcfservice/types/CreditCardPI.java | 20 +-
.../types/CreditCardPICollection.java | 1 -
.../odatawcfservice/types/CreditRecord.java | 12 +-
.../types/CreditRecordCollection.java | 1 -
.../odatawcfservice/types/Customer.java | 27 +-
.../types/CustomerCollection.java | 1 -
.../odatawcfservice/types/Department.java | 8 +-
.../types/DepartmentCollection.java | 1 -
.../odatawcfservice/types/Employee.java | 25 +-
.../types/EmployeeCollection.java | 1 -
.../odatawcfservice/types/GiftCard.java | 12 +-
.../types/GiftCardCollection.java | 15 -
.../odatawcfservice/types/HomeAddress.java | 3 +-
.../odatawcfservice/types/LabourUnion.java | 8 +-
.../types/LabourUnionCollection.java | 1 -
.../services/odatawcfservice/types/Order.java | 12 +-
.../odatawcfservice/types/OrderCollection.java | 1 -
.../odatawcfservice/types/OrderDetail.java | 14 +-
.../types/OrderDetailCollection.java | 1 -
.../odatawcfservice/types/OrderDetailKey.java | 1 -
.../types/PaymentInstrument.java | 10 +-
.../types/PaymentInstrumentCollection.java | 1 -
.../services/odatawcfservice/types/Person.java | 21 +-
.../odatawcfservice/types/PersonCollection.java | 22 -
.../services/odatawcfservice/types/Product.java | 22 +-
.../types/ProductCollection.java | 17 +-
.../odatawcfservice/types/ProductDetail.java | 12 +-
.../types/ProductDetailCollection.java | 14 -
.../odatawcfservice/types/ProductDetailKey.java | 1 -
.../odatawcfservice/types/ProductReview.java | 16 +-
.../types/ProductReviewCollection.java | 1 -
.../odatawcfservice/types/ProductReviewKey.java | 1 -
.../odatawcfservice/types/PublicCompany.java | 17 +-
.../types/PublicCompanyCollection.java | 1 -
.../odatawcfservice/types/Statement.java | 12 +-
.../types/StatementCollection.java | 1 -
.../odatawcfservice/types/StoredPI.java | 12 +-
.../types/StoredPICollection.java | 1 -
.../odatawcfservice/types/Subscription.java | 14 +-
.../types/SubscriptionCollection.java | 1 -
.../olingo/fit/v4/AbstractTestITCase.java | 6 +-
.../olingo/fit/v4/EntityCreateTestITCase.java | 2 +-
.../olingo/fit/v4/EntityRetrieveTestITCase.java | 30 +-
.../olingo/fit/v4/KeyAsSegmentTestITCase.java | 9 +-
.../olingo/fit/v4/OpenTypeTestITCase.java | 12 +-
.../olingo/client/core/edm/EdmClientImpl.java | 6 +-
.../olingo/client/core/edm/EdmSchemaImpl.java | 24 +-
.../client/core/edm/v3/EdmOperationProxy.java | 10 +-
.../olingo/client/core/v3/MetadataTest.java | 33 +-
.../client/core/v3/ComputerDetail_-10.json | 29 +-
.../core/v3/Product_-10_Dimensions_Width.json | 5 +-
.../core/data/AbstractJsonDeserializer.java | 9 +-
.../core/data/AbstractJsonSerializer.java | 5 +-
224 files changed, 1378 insertions(+), 1390 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
index 5b031f2..3ffb6be 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
@@ -48,7 +48,7 @@ import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter;
import org.apache.olingo.ext.proxy.utils.ClassUtils;
-import org.apache.olingo.ext.proxy.utils.EngineUtils;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
abstract class AbstractInvocationHandler<C extends CommonEdmEnabledODataClient<?>> implements InvocationHandler {
@@ -171,7 +171,7 @@ abstract class AbstractInvocationHandler<C extends CommonEdmEnabledODataClient<?
final ODataValue paramValue = parameter.getValue() == null
? null
- : EngineUtils.getODataValue(client, type, parameter.getValue());
+ : CoreUtils.getODataValue(client, type, parameter.getValue());
parameterValues.put(parameter.getKey().name(), paramValue);
}
@@ -199,8 +199,7 @@ abstract class AbstractInvocationHandler<C extends CommonEdmEnabledODataClient<?
}
if (edmType.isPrimitiveType() || edmType.isComplexType()) {
- return EngineUtils.getValueFromProperty(
- client.getCachedEdm(), (CommonODataProperty) result, method.getGenericReturnType());
+ return CoreUtils.getValueFromProperty(client, (CommonODataProperty) result, method.getGenericReturnType());
}
if (edmType.isEntityType()) {
if (edmType.isCollection()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java
index 968852f..d1ab039 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java
@@ -67,6 +67,7 @@ public abstract class AbstractTypeInvocationHandler<C extends CommonEdmEnabledOD
final Class<?> typeRef,
final Object internal,
final EntityContainerInvocationHandler<C> containerHandler) {
+
super(client, containerHandler);
this.internal = internal;
this.typeRef = typeRef;
@@ -78,7 +79,8 @@ public abstract class AbstractTypeInvocationHandler<C extends CommonEdmEnabledOD
final Class<?> typeRef,
final Object internal,
final EntityTypeInvocationHandler<C> targetHandler) {
- super(client, targetHandler.containerHandler);
+
+ super(client, targetHandler == null ? null : targetHandler.containerHandler);
this.internal = internal;
this.typeRef = typeRef;
this.targetHandler = targetHandler;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexTypeInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexTypeInvocationHandler.java
index 05aa7ff..76bfe7f 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexTypeInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ComplexTypeInvocationHandler.java
@@ -38,7 +38,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
import org.apache.olingo.ext.proxy.utils.ClassUtils;
-import org.apache.olingo.ext.proxy.utils.EngineUtils;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?>>
extends AbstractTypeInvocationHandler<C> {
@@ -51,15 +51,16 @@ public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<
final Class<?> typeRef,
final EntityTypeInvocationHandler<?> handler) {
- return new ComplexTypeInvocationHandler(complex, typeRef, handler);
+ return new ComplexTypeInvocationHandler(handler.targetHandler.getClient(), complex, typeRef, handler);
}
- private ComplexTypeInvocationHandler(
+ public ComplexTypeInvocationHandler(
+ final C client,
final ODataComplexValue<?> complex,
final Class<?> typeRef,
final EntityTypeInvocationHandler<C> handler) {
- super(handler.containerHandler.getClient(), typeRef, complex, handler);
+ super(client, typeRef, complex, handler);
}
public void setComplex(final ODataComplexValue<?> complex) {
@@ -84,13 +85,12 @@ public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<
final CommonODataProperty property = getComplex().get(name);
if (property.hasComplexValue()) {
-
res = Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {(Class<?>) type},
newComplex(name, (Class<?>) type));
- EngineUtils.populate(
+ CoreUtils.populate(
client.getCachedEdm(),
res,
(Class<?>) type,
@@ -98,8 +98,8 @@ public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<
property.getValue().asComplex().iterator());
} else {
res = type == null
- ? EngineUtils.getValueFromProperty(client.getCachedEdm(), property)
- : EngineUtils.getValueFromProperty(client.getCachedEdm(), property, type);
+ ? CoreUtils.getValueFromProperty(client, property)
+ : CoreUtils.getValueFromProperty(client, property, type);
}
return res;
@@ -139,11 +139,11 @@ public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<
final EdmTypeInfo type = new EdmTypeInfo.Builder().
setEdm(client.getCachedEdm()).setTypeExpression(
- edmProperty.isCollection() ? "Collection(" + property.type() + ")" : property.type()).build();
+ edmProperty.isCollection() ? "Collection(" + property.type() + ")" : property.type()).build();
- client.getBinder().add(getComplex(), EngineUtils.getODataProperty(client, property.name(), type, value));
+ client.getBinder().add(getComplex(), CoreUtils.getODataProperty(client, property.name(), type, value));
- if (!entityContext.isAttached(targetHandler)) {
+ if (targetHandler != null && !entityContext.isAttached(targetHandler)) {
entityContext.attach(targetHandler, AttachedEntityStatus.CHANGED);
}
}
@@ -169,6 +169,6 @@ public class ComplexTypeInvocationHandler<C extends CommonEdmEnabledODataClient<
@Override
public boolean isChanged() {
- return targetHandler.isChanged();
+ return targetHandler == null ? false : targetHandler.isChanged();
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
index c51e889..e89c843 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java
@@ -59,7 +59,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.context.AttachedEntity;
import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
import org.apache.olingo.ext.proxy.context.EntityLinkDesc;
-import org.apache.olingo.ext.proxy.utils.EngineUtils;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -313,7 +313,7 @@ class ContainerImpl implements Container {
if (AttachedEntityStatus.DELETED != currentStatus) {
entity.getProperties().clear();
- EngineUtils.addProperties(client, handler.getPropertyChanges(), entity);
+ CoreUtils.addProperties(client, handler.getPropertyChanges(), entity);
}
for (Map.Entry<NavigationProperty, Object> property : handler.getLinkChanges().entrySet()) {
@@ -409,7 +409,7 @@ class ContainerImpl implements Container {
final URI targetURI = currentStatus == AttachedEntityStatus.NEW
? URI.create("$" + startingPos) : URIUtils.getURI(
factory.getServiceRoot(),
- EngineUtils.getEditMediaLink(streamedChanges.getKey(), entity).toASCIIString());
+ CoreUtils.getEditMediaLink(streamedChanges.getKey(), entity).toASCIIString());
batchUpdateMediaResource(handler, targetURI, streamedChanges.getValue(), changeset);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
index 244db50..9b14fd1 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
@@ -221,7 +221,7 @@ class EntitySetInvocationHandler<C extends CommonEdmEnabledODataClient<?>, T ext
}
@Override
- public T get(KEY key) throws IllegalArgumentException {
+ public T get(final KEY key) throws IllegalArgumentException {
return get(key, typeRef);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
index 7c4ea37..242e853 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
@@ -38,6 +38,7 @@ import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.CommonODataProperty;
import org.apache.olingo.commons.api.domain.ODataLinked;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.format.ODataMediaFormat;
import org.apache.olingo.ext.proxy.api.annotations.EntityType;
@@ -45,7 +46,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
import org.apache.olingo.ext.proxy.context.EntityUUID;
-import org.apache.olingo.ext.proxy.utils.EngineUtils;
+import org.apache.olingo.ext.proxy.utils.CoreUtils;
public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?>>
extends AbstractTypeInvocationHandler<C> {
@@ -106,7 +107,7 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
containerHandler.getEntityContainerName(),
entitySetName,
entity.getTypeName(),
- EngineUtils.getKey(client.getCachedEdm(), typeRef, entity));
+ CoreUtils.getKey(client.getCachedEdm(), typeRef, entity));
this.stream = null;
}
@@ -119,7 +120,7 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
getUUID().getContainerName(),
getUUID().getEntitySetName(),
getUUID().getName(),
- EngineUtils.getKey(client.getCachedEdm(), typeRef, entity));
+ CoreUtils.getKey(client.getCachedEdm(), typeRef, entity));
this.propertyChanges.clear();
this.linkChanges.clear();
@@ -208,17 +209,16 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
new Class<?>[] {(Class<?>) type},
newComplex(name, (Class<?>) type));
- EngineUtils.populate(
+ CoreUtils.populate(
client.getCachedEdm(),
res,
(Class<?>) type,
Property.class,
property.getValue().asComplex().iterator());
} else {
-
res = type == null
- ? EngineUtils.getValueFromProperty(client.getCachedEdm(), property)
- : EngineUtils.getValueFromProperty(client.getCachedEdm(), property, type);
+ ? CoreUtils.getValueFromProperty(client, property)
+ : CoreUtils.getValueFromProperty(client, property, type);
if (res != null) {
addPropertyChanges(name, res, false);
@@ -257,7 +257,7 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
@Override
protected void setPropertyValue(final Property property, final Object value) {
- if (property.type().equalsIgnoreCase("Edm.Stream")) {
+ if (property.type().equalsIgnoreCase(EdmPrimitiveTypeKind.Stream.toString())) {
setStreamedProperty(property, (InputStream) value);
} else {
addPropertyChanges(property.name(), value, false);
@@ -318,7 +318,7 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
if (res == null) {
final URI link = URIUtils.getURI(
containerHandler.getFactory().getServiceRoot(),
- EngineUtils.getEditMediaLink(property.name(), this.entity).toASCIIString());
+ CoreUtils.getEditMediaLink(property.name(), this.entity).toASCIIString());
final ODataMediaRequest req = client.getRetrieveRequestFactory().getMediaRequest(link);
res = req.execute().getBody();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
new file mode 100644
index 0000000..1adeeb3
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java
@@ -0,0 +1,452 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.ext.proxy.utils;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Type;
+import java.net.URI;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.client.api.v3.UnsupportedInV3Exception;
+import org.apache.olingo.client.core.edm.xml.AbstractComplexType;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
+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.Edm;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
+import org.apache.olingo.ext.proxy.api.annotations.CompoundKeyElement;
+import org.apache.olingo.ext.proxy.api.annotations.Key;
+import org.apache.olingo.ext.proxy.api.annotations.Property;
+import org.apache.olingo.ext.proxy.commons.ComplexTypeInvocationHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class CoreUtils {
+
+ /**
+ * Logger.
+ */
+ private static final Logger LOG = LoggerFactory.getLogger(CoreUtils.class);
+
+ private CoreUtils() {
+ // Empty private constructor for static utility classes
+ }
+
+ public static ODataValue getODataValue(
+ final CommonEdmEnabledODataClient<?> client, final EdmTypeInfo type, final Object obj) {
+
+ final ODataValue value;
+
+ if (type.isCollection()) {
+ value = client.getObjectFactory().newCollectionValue(type.getFullQualifiedName().toString());
+
+ final EdmTypeInfo intType = new EdmTypeInfo.Builder().
+ setEdm(client.getCachedEdm()).setTypeExpression(type.getFullQualifiedName().toString()).build();
+
+ for (Object collectionItem : (Collection) obj) {
+ if (intType.isPrimitiveType()) {
+ value.asCollection().add(getODataValue(client, intType, collectionItem).asPrimitive());
+ } else if (intType.isComplexType()) {
+ value.asCollection().add(getODataValue(client, intType, collectionItem).asComplex());
+ } else if (intType.isEnumType()) {
+ if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
+ throw new UnsupportedInV3Exception();
+ } else {
+ value.asCollection().add(((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(
+ client, intType, collectionItem)).asEnum());
+ }
+
+ } else {
+ throw new UnsupportedOperationException("Usupported object type " + intType.getFullQualifiedName());
+ }
+ }
+ } else if (type.isComplexType()) {
+ value = client.getObjectFactory().newComplexValue(type.getFullQualifiedName().toString());
+
+ if (obj instanceof ComplexTypeInvocationHandler<?>) {
+ final Class<?> typeRef = ((ComplexTypeInvocationHandler<?>)obj).getTypeRef();
+ final Object complex = Proxy.newProxyInstance(
+ Thread.currentThread().getContextClassLoader(),
+ new Class<?>[] {typeRef},
+ (ComplexTypeInvocationHandler<?>)obj);
+
+ for (Method method : typeRef.getMethods()) {
+ final Property complexPropertyAnn = method.getAnnotation(Property.class);
+ try {
+ if (complexPropertyAnn != null) {
+ value.asComplex().add(getODataComplexProperty(
+ client, type.getFullQualifiedName(), complexPropertyAnn.name(), method.invoke(complex)));
+ }
+ } catch (Exception ignore) {
+ // ignore value
+ LOG.warn("Error attaching complex field '{}'", complexPropertyAnn.name(), ignore);
+ }
+ }
+ } else {
+ throw new IllegalArgumentException(
+ "Object '" + obj.getClass().getSimpleName() + "' is not a complex value");
+ }
+ } else if (type.isEnumType()) {
+ if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
+ throw new UnsupportedInV3Exception();
+ } else {
+ value = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()).
+ newEnumValue(type.getFullQualifiedName().toString(), ((Enum) obj).name());
+ }
+ } else {
+ value = client.getObjectFactory().newPrimitiveValueBuilder().setType(type.getPrimitiveTypeKind()).setValue(obj).
+ build();
+ }
+
+ return value;
+ }
+
+ private static CommonODataProperty getODataProperty(
+ final CommonEdmEnabledODataClient<?> client,
+ final FullQualifiedName entity,
+ final String property,
+ final Object obj) {
+
+ final EdmType edmType = client.getCachedEdm().getEntityType(entity).getProperty(property).getType();
+ final EdmTypeInfo type = new EdmTypeInfo.Builder().
+ setEdm(client.getCachedEdm()).setTypeExpression(edmType.getFullQualifiedName().toString()).build();
+
+ return getODataProperty(client, property, type, obj);
+ }
+
+ private static CommonODataProperty getODataComplexProperty(
+ final CommonEdmEnabledODataClient<?> client,
+ final FullQualifiedName complex,
+ final String property,
+ final Object obj) {
+
+ final EdmType edmType = client.getCachedEdm().getComplexType(complex).getProperty(property).getType();
+ final EdmTypeInfo type = new EdmTypeInfo.Builder().
+ setEdm(client.getCachedEdm()).setTypeExpression(edmType.getFullQualifiedName().toString()).build();
+
+ return getODataProperty(client, property, type, obj);
+ }
+
+ public static CommonODataProperty getODataProperty(
+ final CommonEdmEnabledODataClient<?> client, final String name, final EdmTypeInfo type, final Object obj) {
+
+ CommonODataProperty oprop;
+
+ try {
+ if (type == null || obj == null) {
+ oprop = client.getObjectFactory().newPrimitiveProperty(name, null);
+ } else if (type.isCollection()) {
+ // create collection property
+ oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, type, obj).asCollection());
+ } else if (type.isPrimitiveType()) {
+ // create a primitive property
+ oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, type, obj).asPrimitive());
+ } else if (type.isComplexType()) {
+ // create a complex property
+ oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, type, obj).asComplex());
+ } else if (type.isEnumType()) {
+ if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
+ throw new UnsupportedInV3Exception();
+ } else {
+ oprop = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()).
+ newEnumProperty(name,
+ ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)).
+ asEnum());
+ }
+ } else {
+ throw new UnsupportedOperationException("Usupported object type " + type.getFullQualifiedName());
+ }
+
+ return oprop;
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public static void addProperties(
+ final CommonEdmEnabledODataClient<?> client,
+ final Map<String, Object> changes,
+ final CommonODataEntity entity) {
+
+ for (Map.Entry<String, Object> property : changes.entrySet()) {
+ // if the getter exists and it is annotated as expected then get value/value and add a new property
+ final CommonODataProperty odataProperty = entity.getProperty(property.getKey());
+ if (odataProperty != null) {
+ entity.getProperties().remove(odataProperty);
+ }
+
+ ((List<CommonODataProperty>) entity.getProperties()).add(
+ getODataProperty(client, entity.getTypeName(), property.getKey(), property.getValue()));
+ }
+ }
+
+ private static Object primitiveValueToObject(final ODataPrimitiveValue value) {
+ Object obj;
+
+ try {
+ obj = value.toValue() instanceof Timestamp
+ ? value.toCastValue(Calendar.class)
+ : value.toValue();
+ } catch (EdmPrimitiveTypeException e) {
+ LOG.warn("Could not read temporal value as Calendar, reverting to Timestamp", e);
+ obj = value.toValue();
+ }
+
+ return obj;
+ }
+
+ private static void setPropertyValue(final Object bean, final Method getter, final Object value)
+ throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+
+ // Assumption: setter is always prefixed by 'set' word
+ final String setterName = getter.getName().replaceFirst("get", "set");
+ bean.getClass().getMethod(setterName, getter.getReturnType()).invoke(bean, value);
+ }
+
+ public static Object getKey(
+ final Edm metadata, final Class<?> entityTypeRef, final CommonODataEntity entity) {
+
+ Object res = null;
+
+ if (!entity.getProperties().isEmpty()) {
+ final Class<?> keyRef = ClassUtils.getCompoundKeyRef(entityTypeRef);
+ if (keyRef == null) {
+ final CommonODataProperty property = entity.getProperty(firstValidEntityKey(entityTypeRef));
+ if (property != null && property.hasPrimitiveValue()) {
+ res = primitiveValueToObject(property.getPrimitiveValue());
+ }
+ } else {
+ try {
+ res = keyRef.newInstance();
+ populate(metadata, res, CompoundKeyElement.class, entity.getProperties().iterator());
+ } catch (Exception e) {
+ LOG.error("Error population compound key {}", keyRef.getSimpleName(), e);
+ throw new IllegalArgumentException("Cannot populate compound key");
+ }
+ }
+ }
+
+ return res;
+ }
+
+ public static void populate(
+ final Edm metadata,
+ final Object bean,
+ final Class<? extends Annotation> getterAnn,
+ final Iterator<? extends CommonODataProperty> propItor) {
+
+ if (bean != null) {
+ populate(metadata, bean, bean.getClass(), getterAnn, propItor);
+ }
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public static void populate(
+ final Edm metadata,
+ final Object bean,
+ final Class<?> reference,
+ final Class<? extends Annotation> getterAnn,
+ final Iterator<? extends CommonODataProperty> propItor) {
+
+ if (bean != null) {
+ while (propItor.hasNext()) {
+ final CommonODataProperty property = propItor.next();
+
+ final Method getter = ClassUtils.findGetterByAnnotatedName(reference, getterAnn, property.getName());
+
+ if (getter == null) {
+ LOG.warn("Could not find any property annotated as {} in {}",
+ property.getName(), bean.getClass().getName());
+ } else {
+ try {
+ if (property.hasNullValue()) {
+ setPropertyValue(bean, getter, null);
+ }
+ if (property.hasPrimitiveValue()) {
+ setPropertyValue(bean, getter, primitiveValueToObject(property.getPrimitiveValue()));
+ }
+ if (property.hasComplexValue()) {
+ final Object complex = getter.getReturnType().newInstance();
+ populate(metadata, complex, Property.class, property.getValue().asComplex().iterator());
+ setPropertyValue(bean, getter, complex);
+ }
+ if (property.hasCollectionValue()) {
+ final ParameterizedType collType = (ParameterizedType) getter.getGenericReturnType();
+ final Class<?> collItemClass = (Class<?>) collType.getActualTypeArguments()[0];
+
+ Collection<Object> collection = (Collection<Object>) getter.invoke(bean);
+ if (collection == null) {
+ collection = new ArrayList<Object>();
+ setPropertyValue(bean, getter, collection);
+ }
+
+ final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
+ while (collPropItor.hasNext()) {
+ final ODataValue value = collPropItor.next();
+ if (value.isPrimitive()) {
+ collection.add(primitiveValueToObject(value.asPrimitive()));
+ }
+ if (value.isComplex()) {
+ final Object collItem = collItemClass.newInstance();
+ populate(metadata, collItem, Property.class, value.asComplex().iterator());
+ collection.add(collItem);
+ }
+ }
+ }
+ } catch (Exception e) {
+ LOG.error("Could not set property {} on {}", getter, bean, e);
+ }
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public static Object getValueFromProperty(
+ final CommonEdmEnabledODataClient<?> client, final CommonODataProperty property)
+ throws InstantiationException, IllegalAccessException {
+
+ final Object value;
+
+ if (property == null || property.hasNullValue()) {
+ value = null;
+ } else if (property.hasCollectionValue()) {
+ value = new ArrayList<Object>();
+
+ final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
+ while (collPropItor.hasNext()) {
+ final ODataValue odataValue = collPropItor.next();
+ if (odataValue.isPrimitive()) {
+ ((Collection) value).add(primitiveValueToObject(odataValue.asPrimitive()));
+ }
+ if (odataValue.isComplex()) {
+ final Object collItem =
+ buildComplexInstance(client.getCachedEdm(), property.getName(), odataValue.asComplex().iterator());
+ ((Collection) value).add(collItem);
+ }
+ }
+ } else if (property.hasPrimitiveValue()) {
+ value = primitiveValueToObject(property.getPrimitiveValue());
+ } else if (property.hasComplexValue()) {
+ value = buildComplexInstance(client.getCachedEdm(), property.getValue().asComplex().getTypeName(),
+ property.getValue().asComplex().iterator());
+ } else {
+ throw new IllegalArgumentException("Invalid property " + property);
+ }
+
+ return value;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <C extends AbstractComplexType> C buildComplexInstance(
+ final Edm metadata, final String name, final Iterator<CommonODataProperty> properties) {
+
+ for (C complex : (Iterable<C>) ServiceLoader.load(AbstractComplexType.class)) {
+ final ComplexType ann = complex.getClass().getAnnotation(ComplexType.class);
+ final String fn = ann == null ? null : ClassUtils.getNamespace(complex.getClass()) + "." + ann.name();
+
+ if (name.equals(fn)) {
+ populate(metadata, complex, Property.class, properties);
+ return complex;
+ }
+ }
+
+ return null;
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ public static Object getValueFromProperty(
+ final CommonEdmEnabledODataClient<?> client, final CommonODataProperty property, final Type type)
+ throws InstantiationException, IllegalAccessException {
+
+ final Object value;
+
+ if (property == null || property.hasNullValue()) {
+ value = null;
+ } else if (property.hasCollectionValue()) {
+ value = new ArrayList();
+
+ final ParameterizedType collType = (ParameterizedType) type;
+ final Class<?> collItemClass = (Class<?>) collType.getActualTypeArguments()[0];
+
+ final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
+ while (collPropItor.hasNext()) {
+ final ODataValue odataValue = collPropItor.next();
+ if (odataValue.isPrimitive()) {
+ ((Collection) value).add(primitiveValueToObject(odataValue.asPrimitive()));
+ }
+ if (odataValue.isComplex()) {
+ final Object collItem = Proxy.newProxyInstance(
+ Thread.currentThread().getContextClassLoader(),
+ new Class<?>[] {collItemClass},
+ new ComplexTypeInvocationHandler(client, odataValue.asComplex(), collItemClass, null));
+ populate(client.getCachedEdm(), collItem, Property.class, odataValue.asComplex().iterator());
+ ((Collection) value).add(collItem);
+ }
+ }
+ } else if (property.hasPrimitiveValue()) {
+ value = primitiveValueToObject(property.getPrimitiveValue());
+ } else {
+ throw new IllegalArgumentException("Invalid property " + property);
+ }
+
+ return value;
+ }
+
+ private static String firstValidEntityKey(final Class<?> entityTypeRef) {
+ for (Method method : entityTypeRef.getDeclaredMethods()) {
+ if (method.getAnnotation(Key.class) != null) {
+ final Annotation ann = method.getAnnotation(Property.class);
+ if (ann != null) {
+ return ((Property) ann).name();
+ }
+ }
+ }
+ return null;
+ }
+
+ public static URI getEditMediaLink(final String name, final CommonODataEntity entity) {
+ for (ODataLink editMediaLink : entity.getMediaEditLinks()) {
+ if (name.equalsIgnoreCase(editMediaLink.getName())) {
+ return editMediaLink.getLink();
+ }
+ }
+
+ throw new IllegalArgumentException("Invalid streamed property " + name);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
deleted file mode 100644
index 35dc7f8..0000000
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.ext.proxy.utils;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.net.URI;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
-import org.apache.olingo.client.api.v3.UnsupportedInV3Exception;
-import org.apache.olingo.client.core.edm.xml.AbstractComplexType;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-import org.apache.olingo.commons.api.domain.CommonODataProperty;
-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.Edm;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.api.edm.EdmType;
-import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
-import org.apache.olingo.ext.proxy.api.annotations.ComplexType;
-import org.apache.olingo.ext.proxy.api.annotations.CompoundKeyElement;
-import org.apache.olingo.ext.proxy.api.annotations.Key;
-import org.apache.olingo.ext.proxy.api.annotations.Property;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class EngineUtils {
-
- /**
- * Logger.
- */
- private static final Logger LOG = LoggerFactory.getLogger(EngineUtils.class);
-
- private EngineUtils() {
- // Empty private constructor for static utility classes
- }
-
- public static ODataValue getODataValue(
- final CommonEdmEnabledODataClient<?> client, final EdmTypeInfo type, final Object obj) {
-
- final ODataValue value;
-
- if (type.isCollection()) {
- value = client.getObjectFactory().newCollectionValue(type.getFullQualifiedName().toString());
-
- final EdmTypeInfo intType = new EdmTypeInfo.Builder().
- setEdm(client.getCachedEdm()).setTypeExpression(type.getFullQualifiedName().toString()).build();
-
- for (Object collectionItem : (Collection) obj) {
- if (intType.isPrimitiveType()) {
- value.asCollection().add(getODataValue(client, intType, collectionItem).asPrimitive());
- } else if (intType.isComplexType()) {
- value.asCollection().add(getODataValue(client, intType, collectionItem).asComplex());
- } else if (intType.isEnumType()) {
- if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
- throw new UnsupportedInV3Exception();
- } else {
- value.asCollection().add(((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(
- client, intType, collectionItem)).asEnum());
- }
-
- } else {
- throw new UnsupportedOperationException("Usupported object type " + intType.getFullQualifiedName());
- }
- }
- } else if (type.isComplexType()) {
- value = client.getObjectFactory().newComplexValue(type.getFullQualifiedName().toString());
-
- if (obj.getClass().isAnnotationPresent(ComplexType.class)) {
- for (Method method : obj.getClass().getMethods()) {
- final Property complexPropertyAnn = method.getAnnotation(Property.class);
- try {
- if (complexPropertyAnn != null) {
- value.asComplex().add(getODataComplexProperty(
- client, type.getFullQualifiedName(), complexPropertyAnn.name(), method.invoke(obj)));
- }
- } catch (Exception ignore) {
- // ignore value
- LOG.warn("Error attaching complex field '{}'", complexPropertyAnn.name(), ignore);
- }
- }
- } else {
- throw new IllegalArgumentException(
- "Object '" + obj.getClass().getSimpleName() + "' is not a complex value");
- }
- } else if (type.isEnumType()) {
- if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
- throw new UnsupportedInV3Exception();
- } else {
- value = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()).
- newEnumValue(type.getFullQualifiedName().toString(), ((Enum) obj).name());
- }
- } else {
- value = client.getObjectFactory().newPrimitiveValueBuilder().setType(type.getPrimitiveTypeKind()).setValue(obj).
- build();
- }
-
- return value;
- }
-
- private static CommonODataProperty getODataProperty(
- final CommonEdmEnabledODataClient<?> client,
- final FullQualifiedName entity,
- final String property,
- final Object obj) {
-
- final EdmType edmType = client.getCachedEdm().getEntityType(entity).getProperty(property).getType();
- final EdmTypeInfo type = new EdmTypeInfo.Builder().
- setEdm(client.getCachedEdm()).setTypeExpression(edmType.getFullQualifiedName().toString()).build();
-
- return getODataProperty(client, property, type, obj);
- }
-
- private static CommonODataProperty getODataComplexProperty(
- final CommonEdmEnabledODataClient<?> client,
- final FullQualifiedName complex,
- final String property,
- final Object obj) {
-
- final EdmType edmType = client.getCachedEdm().getComplexType(complex).getProperty(property).getType();
- final EdmTypeInfo type = new EdmTypeInfo.Builder().
- setEdm(client.getCachedEdm()).setTypeExpression(edmType.getFullQualifiedName().toString()).build();
-
- return getODataProperty(client, property, type, obj);
- }
-
- public static CommonODataProperty getODataProperty(
- final CommonEdmEnabledODataClient<?> client, final String name, final EdmTypeInfo type, final Object obj) {
-
- CommonODataProperty oprop;
-
- try {
- if (type == null || obj == null) {
- oprop = client.getObjectFactory().newPrimitiveProperty(name, null);
- } else if (type.isCollection()) {
- // create collection property
- oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, type, obj).asCollection());
- } else if (type.isPrimitiveType()) {
- // create a primitive property
- oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, type, obj).asPrimitive());
- } else if (type.isComplexType()) {
- // create a complex property
- oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, type, obj).asComplex());
- } else if (type.isEnumType()) {
- if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
- throw new UnsupportedInV3Exception();
- } else {
- oprop = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()).
- newEnumProperty(name,
- ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)).
- asEnum());
- }
- } else {
- throw new UnsupportedOperationException("Usupported object type " + type.getFullQualifiedName());
- }
-
- return oprop;
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static void addProperties(
- final CommonEdmEnabledODataClient<?> client,
- final Map<String, Object> changes,
- final CommonODataEntity entity) {
-
- for (Map.Entry<String, Object> property : changes.entrySet()) {
- // if the getter exists and it is annotated as expected then get value/value and add a new property
- final CommonODataProperty odataProperty = entity.getProperty(property.getKey());
- if (odataProperty != null) {
- entity.getProperties().remove(odataProperty);
- }
-
- ((List<CommonODataProperty>) entity.getProperties()).add(
- getODataProperty(client, entity.getTypeName(), property.getKey(), property.getValue()));
- }
- }
-
- private static Object primitiveValueToObject(final ODataPrimitiveValue value) {
- Object obj;
-
- try {
- obj = value.toValue() instanceof Timestamp
- ? value.toCastValue(Calendar.class)
- : value.toValue();
- } catch (EdmPrimitiveTypeException e) {
- LOG.warn("Could not read temporal value as Calendar, reverting to Timestamp", e);
- obj = value.toValue();
- }
-
- return obj;
- }
-
- private static void setPropertyValue(final Object bean, final Method getter, final Object value)
- throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-
- // Assumption: setter is always prefixed by 'set' word
- final String setterName = getter.getName().replaceFirst("get", "set");
- bean.getClass().getMethod(setterName, getter.getReturnType()).invoke(bean, value);
- }
-
- public static Object getKey(
- final Edm metadata, final Class<?> entityTypeRef, final CommonODataEntity entity) {
-
- Object res = null;
-
- if (!entity.getProperties().isEmpty()) {
- final Class<?> keyRef = ClassUtils.getCompoundKeyRef(entityTypeRef);
- if (keyRef == null) {
- final CommonODataProperty property = entity.getProperty(firstValidEntityKey(entityTypeRef));
- if (property != null && property.hasPrimitiveValue()) {
- res = primitiveValueToObject(property.getPrimitiveValue());
- }
- } else {
- try {
- res = keyRef.newInstance();
- populate(metadata, res, CompoundKeyElement.class, entity.getProperties().iterator());
- } catch (Exception e) {
- LOG.error("Error population compound key {}", keyRef.getSimpleName(), e);
- throw new IllegalArgumentException("Cannot populate compound key");
- }
- }
- }
-
- return res;
- }
-
- public static void populate(
- final Edm metadata,
- final Object bean,
- final Class<? extends Annotation> getterAnn,
- final Iterator<? extends CommonODataProperty> propItor) {
-
- if (bean != null) {
- populate(metadata, bean, bean.getClass(), getterAnn, propItor);
- }
- }
-
- @SuppressWarnings({"unchecked"})
- public static void populate(
- final Edm metadata,
- final Object bean,
- final Class<?> reference,
- final Class<? extends Annotation> getterAnn,
- final Iterator<? extends CommonODataProperty> propItor) {
-
- if (bean != null) {
- while (propItor.hasNext()) {
- final CommonODataProperty property = propItor.next();
-
- final Method getter = ClassUtils.findGetterByAnnotatedName(reference, getterAnn, property.getName());
-
- if (getter == null) {
- LOG.warn("Could not find any property annotated as {} in {}",
- property.getName(), bean.getClass().getName());
- } else {
- try {
- if (property.hasNullValue()) {
- setPropertyValue(bean, getter, null);
- }
- if (property.hasPrimitiveValue()) {
- setPropertyValue(bean, getter, primitiveValueToObject(property.getPrimitiveValue()));
- }
- if (property.hasComplexValue()) {
- final Object complex = getter.getReturnType().newInstance();
- populate(metadata, complex, Property.class, property.getValue().asComplex().iterator());
- setPropertyValue(bean, getter, complex);
- }
- if (property.hasCollectionValue()) {
- final ParameterizedType collType = (ParameterizedType) getter.getGenericReturnType();
- final Class<?> collItemClass = (Class<?>) collType.getActualTypeArguments()[0];
-
- Collection<Object> collection = (Collection<Object>) getter.invoke(bean);
- if (collection == null) {
- collection = new ArrayList<Object>();
- setPropertyValue(bean, getter, collection);
- }
-
- final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
- while (collPropItor.hasNext()) {
- final ODataValue value = collPropItor.next();
- if (value.isPrimitive()) {
- collection.add(primitiveValueToObject(value.asPrimitive()));
- }
- if (value.isComplex()) {
- final Object collItem = collItemClass.newInstance();
- populate(metadata, collItem, Property.class, value.asComplex().iterator());
- collection.add(collItem);
- }
- }
- }
- } catch (Exception e) {
- LOG.error("Could not set property {} on {}", getter, bean, e);
- }
- }
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- public static Object getValueFromProperty(final Edm metadata, final CommonODataProperty property)
- throws InstantiationException, IllegalAccessException {
-
- final Object value;
-
- if (property == null || property.hasNullValue()) {
- value = null;
- } else if (property.hasCollectionValue()) {
- value = new ArrayList<Object>();
-
- final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
- while (collPropItor.hasNext()) {
- final ODataValue odataValue = collPropItor.next();
- if (odataValue.isPrimitive()) {
- ((Collection) value).add(primitiveValueToObject(odataValue.asPrimitive()));
- }
- if (odataValue.isComplex()) {
- final Object collItem =
- buildComplexInstance(metadata, property.getName(), odataValue.asComplex().iterator());
- ((Collection) value).add(collItem);
- }
- }
- } else if (property.hasPrimitiveValue()) {
- value = primitiveValueToObject(property.getPrimitiveValue());
- } else if (property.hasComplexValue()) {
- value = buildComplexInstance(
- metadata, property.getValue().asComplex().getTypeName(), property.getValue().asComplex().iterator());
- } else {
- throw new IllegalArgumentException("Invalid property " + property);
- }
-
- return value;
- }
-
- @SuppressWarnings("unchecked")
- private static <C extends AbstractComplexType> C buildComplexInstance(
- final Edm metadata, final String name, final Iterator<CommonODataProperty> properties) {
-
- for (C complex : (Iterable<C>) ServiceLoader.load(AbstractComplexType.class)) {
- final ComplexType ann = complex.getClass().getAnnotation(ComplexType.class);
- final String fn = ann == null ? null : ClassUtils.getNamespace(complex.getClass()) + "." + ann.name();
-
- if (name.equals(fn)) {
- populate(metadata, complex, Property.class, properties);
- return complex;
- }
- }
-
- return null;
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- public static Object getValueFromProperty(final Edm metadata, final CommonODataProperty property, final Type type)
- throws InstantiationException, IllegalAccessException {
-
- final Object value;
-
- if (property == null || property.hasNullValue()) {
- value = null;
- } else if (property.hasCollectionValue()) {
- value = new ArrayList();
-
- final ParameterizedType collType = (ParameterizedType) type;
- final Class<?> collItemClass = (Class<?>) collType.getActualTypeArguments()[0];
-
- final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator();
- while (collPropItor.hasNext()) {
- final ODataValue odataValue = collPropItor.next();
- if (odataValue.isPrimitive()) {
- ((Collection) value).add(primitiveValueToObject(odataValue.asPrimitive()));
- }
- if (odataValue.isComplex()) {
- final Object collItem = collItemClass.newInstance();
- populate(metadata, collItem, Property.class, odataValue.asComplex().iterator());
- ((Collection) value).add(collItem);
- }
- }
- } else if (property.hasPrimitiveValue()) {
- value = primitiveValueToObject(property.getPrimitiveValue());
- } else {
- throw new IllegalArgumentException("Invalid property " + property);
- }
-
- return value;
- }
-
- private static String firstValidEntityKey(final Class<?> entityTypeRef) {
- for (Method method : entityTypeRef.getDeclaredMethods()) {
- if (method.getAnnotation(Key.class) != null) {
- final Annotation ann = method.getAnnotation(Property.class);
- if (ann != null) {
- return ((Property) ann).name();
- }
- }
- }
- return null;
- }
-
- public static URI getEditMediaLink(final String name, final CommonODataEntity entity) {
- for (ODataLink editMediaLink : entity.getMediaEditLinks()) {
- if (name.equalsIgnoreCase(editMediaLink.getName())) {
- return editMediaLink.getLink();
- }
- }
-
- throw new IllegalArgumentException("Invalid streamed property " + name);
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
index 2347761..065e172 100644
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractMetadataMojo.java
@@ -105,7 +105,6 @@ public abstract class AbstractMetadataMojo extends AbstractMojo {
}
protected VelocityContext newContext() {
-
final VelocityContext ctx = new VelocityContext();
ctx.put("utility", getUtility());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
index 1a0ebf2..052f415 100644
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractUtility.java
@@ -158,7 +158,6 @@ public abstract class AbstractUtility {
}
public EdmFunction getFunctionByName(final FullQualifiedName name) {
-
final EdmSchema targetSchema = metadata.getSchema(name.getNamespace());
if (targetSchema != null) {
@@ -173,7 +172,6 @@ public abstract class AbstractUtility {
}
public EdmAction getActionByName(final FullQualifiedName name) {
-
final EdmSchema targetSchema = metadata.getSchema(name.getNamespace());
if (targetSchema != null) {
@@ -188,7 +186,6 @@ public abstract class AbstractUtility {
}
public List<EdmFunction> getFunctionsBoundTo(final String typeExpression, final boolean collection) {
-
final List<EdmFunction> result = new ArrayList<EdmFunction>();
for (EdmSchema sch : getMetadata().getSchemas()) {
@@ -210,7 +207,6 @@ public abstract class AbstractUtility {
}
public List<EdmAction> getActionsBoundTo(final String typeExpression, final boolean collection) {
-
final List<EdmAction> result = new ArrayList<EdmAction>();
for (EdmSchema sch : getMetadata().getSchemas()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
index 28bcdd0..9ab6f48 100644
--- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
+++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/V3MetadataMojo.java
@@ -47,139 +47,138 @@ import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
@Mojo(name = "pojosV3", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
public class V3MetadataMojo extends AbstractMetadataMojo {
- @Override
- protected V3Utility getUtility() {
- return (V3Utility) utility;
+ @Override
+ protected V3Utility getUtility() {
+ return (V3Utility) utility;
+ }
+
+ @Override
+ protected String getVersion() {
+ return ODataServiceVersion.V30.name().toLowerCase();
+ }
+
+ @Override
+ public void execute() throws MojoExecutionException {
+ if (new File(outputDirectory + File.separator + TOOL_DIR).exists()) {
+ getLog().info("Nothing to do because " + TOOL_DIR + " directory already exists. Clean to update.");
+ return;
}
- @Override
- protected String getVersion() {
- return ODataServiceVersion.V30.name().toLowerCase();
- }
+ try {
+ Velocity.addProperty(Velocity.RESOURCE_LOADER, "class");
+ Velocity.addProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
+
+ final Edm metadata = ODataClientFactory.getV3().getRetrieveRequestFactory().
+ getMetadataRequest(serviceRootURL).execute().getBody();
+
+ if (metadata == null) {
+ throw new IllegalStateException("Metadata not found");
+ }
+
+ for (EdmSchema schema : metadata.getSchemas()) {
+ namespaces.add(schema.getNamespace().toLowerCase());
+ }
+
+ final Set<String> complexTypeNames = new HashSet<String>();
+ final File services = mkdir("META-INF/services");
+
+ for (EdmSchema schema : metadata.getSchemas()) {
+ utility = new V3Utility(metadata, schema, basePackage);
+
+ // write package-info for the base package
+ final String schemaPath = utility.getNamespace().toLowerCase().replace('.', File.separatorChar);
+ final File base = mkPkgDir(schemaPath);
+ final String pkg = basePackage + "." + utility.getNamespace().toLowerCase();
+ parseObj(base, pkg, "package-info", "package-info.java");
+
+ // write package-info for types package
+ final File typesBaseDir = mkPkgDir(schemaPath + "/types");
+ final String typesPkg = pkg + ".types";
+ parseObj(typesBaseDir, typesPkg, "package-info", "package-info.java");
- @Override
- public void execute() throws MojoExecutionException {
- if (new File(outputDirectory + File.separator + TOOL_DIR).exists()) {
- getLog().info("Nothing to do because " + TOOL_DIR + " directory already exists. Clean to update.");
- return;
+ final Map<String, Object> objs = new HashMap<String, Object>();
+
+ // write types into types package
+ for (EdmEnumType enumType : schema.getEnumTypes()) {
+ final String className = utility.capitalize(enumType.getName());
+ objs.clear();
+ objs.put("enumType", enumType);
+ parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
}
- try {
- Velocity.addProperty(Velocity.RESOURCE_LOADER, "class");
- Velocity.addProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
+ for (EdmComplexType complex : schema.getComplexTypes()) {
+ final String className = utility.capitalize(complex.getName());
+ complexTypeNames.add(typesPkg + "." + className);
+ objs.clear();
+ objs.put("complexType", complex);
+ parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs);
+ }
- final Edm metadata =
- ODataClientFactory.getV3().getRetrieveRequestFactory().getMetadataRequest(serviceRootURL).execute().
- getBody();
+ for (EdmEntityType entity : schema.getEntityTypes()) {
+ objs.clear();
+ objs.put("entityType", entity);
- if (metadata == null) {
- throw new IllegalStateException("Metadata not found");
- }
+ final Map<String, String> keys;
- for (EdmSchema schema : metadata.getSchemas()) {
- namespaces.add(schema.getNamespace().toLowerCase());
+ EdmEntityType baseType = null;
+ if (entity.getBaseType() == null) {
+ keys = getUtility().getEntityKeyType(entity);
+ } else {
+ baseType = entity.getBaseType();
+ objs.put("baseType", getUtility().getJavaType(baseType.getFullQualifiedName().toString()));
+ while (baseType.getBaseType() != null) {
+ baseType = baseType.getBaseType();
}
-
- final Set<String> complexTypeNames = new HashSet<String>();
- final File services = mkdir("META-INF/services");
-
- for (EdmSchema schema : metadata.getSchemas()) {
- utility = new V3Utility(metadata, schema, basePackage);
-
- // write package-info for the base package
- final String schemaPath = utility.getNamespace().toLowerCase().replace('.', File.separatorChar);
- final File base = mkPkgDir(schemaPath);
- final String pkg = basePackage + "." + utility.getNamespace().toLowerCase();
- parseObj(base, pkg, "package-info", "package-info.java");
-
- // write package-info for types package
- final File typesBaseDir = mkPkgDir(schemaPath + "/types");
- final String typesPkg = pkg + ".types";
- parseObj(typesBaseDir, typesPkg, "package-info", "package-info.java");
-
- final Map<String, Object> objs = new HashMap<String, Object>();
-
- // write types into types package
- for (EdmEnumType enumType : schema.getEnumTypes()) {
- final String className = utility.capitalize(enumType.getName());
- objs.clear();
- objs.put("enumType", enumType);
- parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
- }
-
- for (EdmComplexType complex : schema.getComplexTypes()) {
- final String className = utility.capitalize(complex.getName());
- complexTypeNames.add(typesPkg + "." + className);
- objs.clear();
- objs.put("complexType", complex);
- parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs);
- }
-
- for (EdmEntityType entity : schema.getEntityTypes()) {
- objs.clear();
- objs.put("entityType", entity);
-
- final Map<String, String> keys;
-
- EdmEntityType baseType = null;
- if (entity.getBaseType() == null) {
- keys = getUtility().getEntityKeyType(entity);
- } else {
- baseType = entity.getBaseType();
- objs.put("baseType", getUtility().getJavaType(baseType.getFullQualifiedName().toString()));
- while (baseType.getBaseType() != null) {
- baseType = baseType.getBaseType();
- }
- keys = getUtility().getEntityKeyType(baseType);
- }
-
- if (keys.size() > 1) {
- // create compound key class
- final String keyClassName = utility.capitalize(baseType == null
- ? entity.getName()
- : baseType.getName()) + "Key";
- objs.put("keyRef", keyClassName);
-
- if (entity.getBaseType() == null) {
- objs.put("keys", keys);
- parseObj(typesBaseDir, typesPkg, "entityTypeKey", keyClassName + ".java", objs);
- }
- }
-
- parseObj(typesBaseDir, typesPkg, "entityType",
- utility.capitalize(entity.getName()) + ".java", objs);
- parseObj(typesBaseDir, typesPkg, "entityCollection",
- utility.capitalize(entity.getName()) + "Collection.java", objs);
- }
-
- // write container and top entity sets into the base package
- for (EdmEntityContainer container : schema.getEntityContainers()) {
- objs.clear();
- objs.put("container", container);
- objs.put("namespace", schema.getNamespace());
- parseObj(base, pkg, "container",
- utility.capitalize(container.getName()) + ".java", objs);
-
- for (EdmEntitySet entitySet : container.getEntitySets()) {
- objs.clear();
- objs.put("entitySet", entitySet);
- parseObj(base, pkg, "entitySet",
- utility.capitalize(entitySet.getName()) + ".java", objs);
- }
- }
-
- parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType",
- Collections.singletonMap("services", (Object) complexTypeNames));
+ keys = getUtility().getEntityKeyType(baseType);
+ }
+
+ if (keys.size() > 1) {
+ // create compound key class
+ final String keyClassName = utility.capitalize(baseType == null
+ ? entity.getName()
+ : baseType.getName()) + "Key";
+ objs.put("keyRef", keyClassName);
+
+ if (entity.getBaseType() == null) {
+ objs.put("keys", keys);
+ parseObj(typesBaseDir, typesPkg, "entityTypeKey", keyClassName + ".java", objs);
}
- } catch (Exception t) {
- final StringWriter stringWriter = new StringWriter();
- final PrintWriter printWriter = new PrintWriter(stringWriter);
- t.printStackTrace(printWriter);
- getLog().error(stringWriter.toString());
-
- throw (t instanceof MojoExecutionException)
- ? (MojoExecutionException) t
- : new MojoExecutionException("While executin mojo", t);
+ }
+
+ parseObj(typesBaseDir, typesPkg, "entityType",
+ utility.capitalize(entity.getName()) + ".java", objs);
+ parseObj(typesBaseDir, typesPkg, "entityCollection",
+ utility.capitalize(entity.getName()) + "Collection.java", objs);
+ }
+
+ // write container and top entity sets into the base package
+ for (EdmEntityContainer container : schema.getEntityContainers()) {
+ objs.clear();
+ objs.put("container", container);
+ objs.put("namespace", schema.getNamespace());
+ parseObj(base, pkg, "container",
+ utility.capitalize(container.getName()) + ".java", objs);
+
+ for (EdmEntitySet entitySet : container.getEntitySets()) {
+ objs.clear();
+ objs.put("entitySet", entitySet);
+ parseObj(base, pkg, "entitySet",
+ utility.capitalize(entitySet.getName()) + ".java", objs);
+ }
}
+
+ parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType",
+ Collections.singletonMap("services", (Object) complexTypeNames));
+ }
+ } catch (Exception t) {
+ final StringWriter stringWriter = new StringWriter();
+ final PrintWriter printWriter = new PrintWriter(stringWriter);
+ t.printStackTrace(printWriter);
+ getLog().error(stringWriter.toString());
+
+ throw (t instanceof MojoExecutionException)
+ ? (MojoExecutionException) t
+ : new MojoExecutionException("While executing mojo", t);
}
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
index 05bc161..ba03282 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/complexType.vm
@@ -27,7 +27,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/container.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/container.vm b/ext/pojogen-maven-plugin/src/main/resources/container.vm
index 40fc44a..0692ad6 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/container.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/container.vm
@@ -31,7 +31,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
index b48e2de..c2d49c8 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityCollection.vm
@@ -28,7 +28,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;
@@ -46,8 +45,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration;
public interface $utility.capitalize($entityType.Name)Collection extends AbstractEntityCollection<$utility.capitalize($entityType.Name)> {
-#set( $functions = $utility.getFunctionsBoundTo($entityType.Name, false) )
-#set( $actions = $utility.getActionsBoundTo($entityType.Name, false) )
+#set( $functions = $utility.getFunctionsBoundTo($entityType.Name, true) )
+#set( $actions = $utility.getActionsBoundTo($entityType.Name, true) )
#if( $functions.size() > 0 || $actions.size() > 0 )
Operations operations();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
index 378eb8f..e98ed97 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entitySet.vm
@@ -27,7 +27,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
index e5873a1..3386d6b 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityType.vm
@@ -37,7 +37,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;
@@ -95,7 +94,7 @@ public interface $utility.capitalize($entityType.Name)
fcKeepInContent = #if($fcprops.containsKey("fcKeepInContent"))$fcprops.get("fcKeepInContent")#{else}false#end)
$utility.getJavaType($property.Type, $property.Collection) get$utility.capitalize($property.Name)();
- void set$utility.capitalize($property.Name)(final $utility.getJavaType($property.Type, $property.Collection) _$utility.uncapitalize($property.Name));
+ void set$utility.capitalize($property.Name)(final $utility.getJavaType($property.Type, $property.Collection) _$utility.uncapitalize($property.Name));
#if($utility.isComplex($property.Type.FullQualifiedName))#*
*#$utility.getJavaType($property.Type) new$utility.capitalize($property.Name)();
#end
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ec30775b/ext/pojogen-maven-plugin/src/main/resources/entityTypeKey.vm
----------------------------------------------------------------------
diff --git a/ext/pojogen-maven-plugin/src/main/resources/entityTypeKey.vm b/ext/pojogen-maven-plugin/src/main/resources/entityTypeKey.vm
index fe6b7f3..143ae5e 100644
--- a/ext/pojogen-maven-plugin/src/main/resources/entityTypeKey.vm
+++ b/ext/pojogen-maven-plugin/src/main/resources/entityTypeKey.vm
@@ -32,7 +32,6 @@ import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
-// EdmSimpleType property imports
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
import org.apache.olingo.commons.api.edm.geo.LineString;