API enhancements: simplified operation import invoke with EdmEnabledODataClient
This commit is contained in:
parent
946356fb0f
commit
4a1d5ab343
|
@ -1269,9 +1269,15 @@ public class V4Services extends AbstractServices {
|
||||||
assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(entity.getType());
|
assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(entity.getType());
|
||||||
assert entity.getProperty("address").getValue().isComplex();
|
assert entity.getProperty("address").getValue().isComplex();
|
||||||
|
|
||||||
|
final ResWrap<AtomPropertyImpl> result = new ResWrap<AtomPropertyImpl>(
|
||||||
|
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX)
|
||||||
|
+ "Microsoft.Test.OData.Services.ODataWCFService.Address"),
|
||||||
|
null,
|
||||||
|
(AtomPropertyImpl) entity.getProperty("address"));
|
||||||
|
|
||||||
return xml.createResponse(
|
return xml.createResponse(
|
||||||
null,
|
null,
|
||||||
xml.writeProperty(acceptType, entity.getProperty("address")),
|
xml.writeProperty(acceptType, result),
|
||||||
null,
|
null,
|
||||||
acceptType);
|
acceptType);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -153,6 +153,67 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
||||||
functionImports(ODataPubFormat.JSON_FULL_METADATA);
|
functionImports(ODataPubFormat.JSON_FULL_METADATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void edmEnabledFunctionImports() throws EdmPrimitiveTypeException {
|
||||||
|
// GetDefaultColor
|
||||||
|
final ODataInvokeRequest<ODataProperty> defaultColorReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getFunctionImportInvokeRequest("GetDefaultColor");
|
||||||
|
final ODataProperty defaultColor = defaultColorReq.execute().getBody();
|
||||||
|
assertNotNull(defaultColor);
|
||||||
|
assertTrue(defaultColor.hasEnumValue());
|
||||||
|
assertEquals("Red", defaultColor.getEnumValue().getValue());
|
||||||
|
assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Color", defaultColor.getEnumValue().getTypeName());
|
||||||
|
|
||||||
|
// GetPerson2
|
||||||
|
final ODataPrimitiveValue city =
|
||||||
|
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("London");
|
||||||
|
final ODataInvokeRequest<ODataEntity> person2Req = edmClient.getInvokeRequestFactory().
|
||||||
|
getFunctionImportInvokeRequest(
|
||||||
|
"GetPerson2", Collections.<String, ODataValue>singletonMap("city", city));
|
||||||
|
final ODataEntity person2 = person2Req.execute().getBody();
|
||||||
|
assertNotNull(person2);
|
||||||
|
assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getTypeName().toString());
|
||||||
|
assertEquals(1, person2.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
|
||||||
|
|
||||||
|
// GetPerson
|
||||||
|
final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
|
||||||
|
newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("Street",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("1 Microsoft Way")));
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("City",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("London")));
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("98052")));
|
||||||
|
|
||||||
|
final ODataInvokeRequest<ODataEntity> personReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getFunctionImportInvokeRequest(
|
||||||
|
"GetPerson", Collections.<String, ODataValue>singletonMap("address", address));
|
||||||
|
final ODataEntity person = personReq.execute().getBody();
|
||||||
|
assertNotNull(person);
|
||||||
|
assertEquals(person2, person);
|
||||||
|
|
||||||
|
// GetAllProducts
|
||||||
|
final ODataInvokeRequest<ODataEntitySet> productsReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getFunctionImportInvokeRequest("GetAllProducts");
|
||||||
|
final ODataEntitySet products = productsReq.execute().getBody();
|
||||||
|
assertNotNull(products);
|
||||||
|
assertEquals(5, products.getCount());
|
||||||
|
|
||||||
|
// GetProductsByAccessLevel
|
||||||
|
final ODataEnumValue accessLevel = getClient().getObjectFactory().
|
||||||
|
newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "None");
|
||||||
|
|
||||||
|
final ODataInvokeRequest<ODataProperty> prodByALReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getFunctionImportInvokeRequest(
|
||||||
|
"GetProductsByAccessLevel",
|
||||||
|
Collections.<String, ODataValue>singletonMap("accessLevel", accessLevel));
|
||||||
|
final ODataProperty prodByAL = prodByALReq.execute().getBody();
|
||||||
|
assertNotNull(prodByAL);
|
||||||
|
assertTrue(prodByAL.hasCollectionValue());
|
||||||
|
assertEquals(5, prodByAL.getCollectionValue().size());
|
||||||
|
assertTrue(prodByAL.getCollectionValue().asJavaCollection().contains("Car"));
|
||||||
|
}
|
||||||
|
|
||||||
private void actionImports(final ODataPubFormat format) {
|
private void actionImports(final ODataPubFormat format) {
|
||||||
final Edm edm = getEdm();
|
final Edm edm = getEdm();
|
||||||
final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
|
final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
|
||||||
|
@ -204,6 +265,34 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
||||||
actionImports(ODataPubFormat.JSON_FULL_METADATA);
|
actionImports(ODataPubFormat.JSON_FULL_METADATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void edmEnabledActionImports() {
|
||||||
|
// Discount
|
||||||
|
final ODataPrimitiveValue percentage = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(22);
|
||||||
|
final ODataInvokeRequest<ODataNoContent> discountReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getActionImportInvokeRequest(
|
||||||
|
"Discount", Collections.<String, ODataValue>singletonMap("percentage", percentage));
|
||||||
|
final ODataNoContent discount = discountReq.execute().getBody();
|
||||||
|
assertNotNull(discount);
|
||||||
|
|
||||||
|
// ResetBossAddress
|
||||||
|
final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
|
||||||
|
newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("Street",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("Via Le Mani Dal Naso, 123")));
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("City",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("Tollo")));
|
||||||
|
address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
|
||||||
|
client.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
|
||||||
|
|
||||||
|
final ODataInvokeRequest<ODataProperty> resetBossAddressReq = edmClient.getInvokeRequestFactory().
|
||||||
|
getActionImportInvokeRequest(
|
||||||
|
"ResetBossAddress", Collections.<String, ODataValue>singletonMap("address", address));
|
||||||
|
final ODataProperty resetBossAddress = resetBossAddressReq.execute().getBody();
|
||||||
|
assertNotNull(resetBossAddress);
|
||||||
|
assertEquals(address.getTypeName(), resetBossAddress.getComplexValue().getTypeName());
|
||||||
|
}
|
||||||
|
|
||||||
private void bossEmails(final ODataPubFormat format) {
|
private void bossEmails(final ODataPubFormat format) {
|
||||||
final Edm edm = getEdm();
|
final Edm edm = getEdm();
|
||||||
final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
|
final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
package org.apache.olingo.client.api;
|
package org.apache.olingo.client.api;
|
||||||
|
|
||||||
import org.apache.olingo.client.api.communication.request.cud.CommonUpdateType;
|
import org.apache.olingo.client.api.communication.request.cud.CommonUpdateType;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
|
import org.apache.olingo.client.api.uri.CommonURIBuilder;
|
||||||
import org.apache.olingo.commons.api.edm.Edm;
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,4 +49,9 @@ public interface CommonEdmEnabledODataClient<UT extends CommonUpdateType> extend
|
||||||
* @return Edm
|
* @return Edm
|
||||||
*/
|
*/
|
||||||
Edm getCachedEdm();
|
Edm getCachedEdm();
|
||||||
|
|
||||||
|
CommonURIBuilder<?> getURIBuilder();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
EdmEnabledInvokeRequestFactory getInvokeRequestFactory();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.olingo.client.api.communication.request.invoke;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||||
|
|
||||||
|
public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an invoke request instance for the first function import with the given name (no overloading supported).
|
||||||
|
*
|
||||||
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
|
* @param functionImportName operation to be invoked
|
||||||
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
|
*/
|
||||||
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
String functionImportName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an invoke request instance for the first function import with the given name (no overloading supported).
|
||||||
|
*
|
||||||
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
|
* @param functionImportName operation to be invoked
|
||||||
|
* @param parameters parameters to pass to operation import invocation
|
||||||
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
|
*/
|
||||||
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
String functionImportName, Map<String, ODataValue> parameters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an invoke request instance for the action import with the given name.
|
||||||
|
*
|
||||||
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
|
* @param actionImportName operation to be invoked
|
||||||
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
|
*/
|
||||||
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
String actionImportName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an invoke request instance for the action import with the given name.
|
||||||
|
*
|
||||||
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
|
* @param actionImportName operation to be invoked
|
||||||
|
* @param parameters parameters to pass to operation import invocation
|
||||||
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
|
*/
|
||||||
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
String actionImportName, Map<String, ODataValue> parameters);
|
||||||
|
}
|
|
@ -36,7 +36,7 @@ public interface InvokeRequestFactory extends Serializable {
|
||||||
* @param <RES> OData domain object result, derived from return type defined in the function import
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
* @param uri URI that identifies the function import
|
* @param uri URI that identifies the function import
|
||||||
* @param operation operation to be invoked
|
* @param operation operation to be invoked
|
||||||
* @return new ODataInvokeRequest instance.
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
*/
|
*/
|
||||||
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(URI uri, EdmOperation operation);
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(URI uri, EdmOperation operation);
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ public interface InvokeRequestFactory extends Serializable {
|
||||||
* @param <RES> OData domain object result, derived from return type defined in the function import
|
* @param <RES> OData domain object result, derived from return type defined in the function import
|
||||||
* @param uri URI that identifies the function import
|
* @param uri URI that identifies the function import
|
||||||
* @param operation operation to be invoked
|
* @param operation operation to be invoked
|
||||||
* @param parameters parameters to pass to function import invocation
|
* @param parameters parameters to pass to operation invocation
|
||||||
* @return new ODataInvokeRequest instance.
|
* @return new {@link ODataInvokeRequest} instance.
|
||||||
*/
|
*/
|
||||||
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
|
<RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
|
||||||
URI uri, EdmOperation operation, Map<String, ODataValue> parameters);
|
URI uri, EdmOperation operation, Map<String, ODataValue> parameters);
|
||||||
|
|
|
@ -20,7 +20,15 @@ package org.apache.olingo.client.api.v3;
|
||||||
|
|
||||||
import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
|
import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
|
import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
|
import org.apache.olingo.client.api.uri.v3.URIBuilder;
|
||||||
|
|
||||||
public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
|
public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
URIBuilder getURIBuilder();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
EdmEnabledInvokeRequestFactory getInvokeRequestFactory();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,14 @@ package org.apache.olingo.client.api.v4;
|
||||||
|
|
||||||
import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
|
import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
|
import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
|
import org.apache.olingo.client.api.uri.v4.URIBuilder;
|
||||||
|
|
||||||
public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
|
public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
URIBuilder getURIBuilder();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
EdmEnabledInvokeRequestFactory getInvokeRequestFactory();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.olingo.client.core.communication.request.invoke.v3;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
|
||||||
|
import org.apache.olingo.client.api.v3.EdmEnabledODataClient;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmActionImport;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmSchema;
|
||||||
|
|
||||||
|
public class EdmEnabledInvokeRequestFactoryImpl
|
||||||
|
extends InvokeRequestFactoryImpl implements EdmEnabledInvokeRequestFactory {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5854571629835831697L;
|
||||||
|
|
||||||
|
private final EdmEnabledODataClient edmClient;
|
||||||
|
|
||||||
|
public EdmEnabledInvokeRequestFactoryImpl(final EdmEnabledODataClient client) {
|
||||||
|
super(client);
|
||||||
|
this.edmClient = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
final String functionImportName) {
|
||||||
|
|
||||||
|
return getFunctionImportInvokeRequest(functionImportName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
final String functionImportName, final Map<String, ODataValue> parameters) {
|
||||||
|
|
||||||
|
EdmFunctionImport efi = null;
|
||||||
|
for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
|
||||||
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
|
if (container != null) {
|
||||||
|
efi = container.getFunctionImport(functionImportName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (efi == null) {
|
||||||
|
throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return getInvokeRequest(
|
||||||
|
edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
|
||||||
|
efi.getUnboundFunctions().get(0),
|
||||||
|
parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
final String actionImportName) {
|
||||||
|
|
||||||
|
return getActionImportInvokeRequest(actionImportName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
final String actionImportName, final Map<String, ODataValue> parameters) {
|
||||||
|
|
||||||
|
EdmActionImport eai = null;
|
||||||
|
for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
|
||||||
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
|
if (container != null) {
|
||||||
|
eai = container.getActionImport(actionImportName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eai == null) {
|
||||||
|
throw new IllegalArgumentException("Could not find ActionImport for name " + actionImportName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return getInvokeRequest(
|
||||||
|
edmClient.getURIBuilder().appendOperationCallSegment(actionImportName).build(),
|
||||||
|
eai.getUnboundAction(),
|
||||||
|
parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.olingo.client.core.communication.request.invoke.v4;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
|
||||||
|
import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmActionImport;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmSchema;
|
||||||
|
|
||||||
|
public class EdmEnabledInvokeRequestFactoryImpl
|
||||||
|
extends InvokeRequestFactoryImpl implements EdmEnabledInvokeRequestFactory {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5854571629835831697L;
|
||||||
|
|
||||||
|
private final EdmEnabledODataClient edmClient;
|
||||||
|
|
||||||
|
public EdmEnabledInvokeRequestFactoryImpl(final EdmEnabledODataClient client) {
|
||||||
|
super(client);
|
||||||
|
this.edmClient = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
final String functionImportName) {
|
||||||
|
|
||||||
|
return getFunctionImportInvokeRequest(functionImportName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
|
||||||
|
final String functionImportName, final Map<String, ODataValue> parameters) {
|
||||||
|
|
||||||
|
EdmFunctionImport efi = null;
|
||||||
|
for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
|
||||||
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
|
if (container != null) {
|
||||||
|
efi = container.getFunctionImport(functionImportName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (efi == null) {
|
||||||
|
throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return getInvokeRequest(
|
||||||
|
edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
|
||||||
|
efi.getUnboundFunctions().get(0),
|
||||||
|
parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
final String actionImportName) {
|
||||||
|
|
||||||
|
return getActionImportInvokeRequest(actionImportName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
|
||||||
|
final String actionImportName, final Map<String, ODataValue> parameters) {
|
||||||
|
|
||||||
|
EdmActionImport eai = null;
|
||||||
|
for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
|
||||||
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
|
if (container != null) {
|
||||||
|
eai = container.getActionImport(actionImportName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eai == null) {
|
||||||
|
throw new IllegalArgumentException("Could not find ActionImport for name " + actionImportName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return getInvokeRequest(
|
||||||
|
edmClient.getURIBuilder().appendOperationCallSegment(actionImportName).build(),
|
||||||
|
eai.getUnboundAction(),
|
||||||
|
parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -86,5 +86,4 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult> extends Abstrac
|
||||||
throw new IllegalArgumentException("While adding GET parameters", e);
|
throw new IllegalArgumentException("While adding GET parameters", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,9 +53,11 @@ import org.apache.olingo.commons.api.domain.ODataServiceDocument;
|
||||||
import org.apache.olingo.commons.api.domain.ODataValue;
|
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||||
import org.apache.olingo.commons.api.edm.Edm;
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
import org.apache.olingo.commons.api.edm.EdmBindingTarget;
|
import org.apache.olingo.commons.api.edm.EdmBindingTarget;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmElement;
|
||||||
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
|
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
|
||||||
import org.apache.olingo.commons.api.edm.EdmEntityType;
|
import org.apache.olingo.commons.api.edm.EdmEntityType;
|
||||||
import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
|
import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
||||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||||
import org.apache.olingo.commons.api.edm.EdmProperty;
|
import org.apache.olingo.commons.api.edm.EdmProperty;
|
||||||
import org.apache.olingo.commons.api.edm.EdmSchema;
|
import org.apache.olingo.commons.api.edm.EdmSchema;
|
||||||
|
@ -285,7 +287,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
return entitySet;
|
return entitySet;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void odataNavigationLinks(final EdmStructuredType edmType,
|
protected void odataNavigationLinks(final EdmType edmType,
|
||||||
final Linked linked, final ODataLinked odataLinked, final String metadataETag, final URI base) {
|
final Linked linked, final ODataLinked odataLinked, final String metadataETag, final URI base) {
|
||||||
|
|
||||||
for (Link link : linked.getNavigationLinks()) {
|
for (Link link : linked.getNavigationLinks()) {
|
||||||
|
@ -294,8 +296,8 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
|
|
||||||
if (inlineEntity == null && inlineEntitySet == null) {
|
if (inlineEntity == null && inlineEntitySet == null) {
|
||||||
ODataLinkType linkType = null;
|
ODataLinkType linkType = null;
|
||||||
if (edmType != null) {
|
if (edmType instanceof EdmStructuredType) {
|
||||||
final EdmNavigationProperty navProp = edmType.getNavigationProperty(link.getTitle());
|
final EdmNavigationProperty navProp = ((EdmStructuredType) edmType).getNavigationProperty(link.getTitle());
|
||||||
if (navProp != null) {
|
if (navProp != null) {
|
||||||
linkType = navProp.isCollection()
|
linkType = navProp.isCollection()
|
||||||
? ODataLinkType.ENTITY_SET_NAVIGATION
|
? ODataLinkType.ENTITY_SET_NAVIGATION
|
||||||
|
@ -338,8 +340,8 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
* @param metadataETag metadata ETag
|
* @param metadataETag metadata ETag
|
||||||
* @return Edm type information
|
* @return Edm type information
|
||||||
*/
|
*/
|
||||||
private EdmEntityType findEntityType(final ContextURL contextURL, final String metadataETag) {
|
private EdmType findType(final ContextURL contextURL, final String metadataETag) {
|
||||||
EdmEntityType entityType = null;
|
EdmType type = null;
|
||||||
|
|
||||||
if (client instanceof EdmEnabledODataClient && contextURL != null) {
|
if (client instanceof EdmEnabledODataClient && contextURL != null) {
|
||||||
final Edm edm = ((EdmEnabledODataClient) client).getEdm(metadataETag);
|
final Edm edm = ((EdmEnabledODataClient) client).getEdm(metadataETag);
|
||||||
|
@ -348,30 +350,33 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
for (EdmSchema schema : edm.getSchemas()) {
|
for (EdmSchema schema : edm.getSchemas()) {
|
||||||
final EdmEntityContainer container = schema.getEntityContainer();
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
|
|
||||||
EdmBindingTarget bindingTarget =
|
EdmBindingTarget bindingTarget = container.getEntitySet(contextURL.getEntitySetOrSingletonOrType());
|
||||||
container.getEntitySet(contextURL.getEntitySetOrSingletonOrType());
|
|
||||||
if (bindingTarget == null) {
|
if (bindingTarget == null) {
|
||||||
bindingTarget = container.getSingleton(contextURL.getEntitySetOrSingletonOrType());
|
bindingTarget = container.getSingleton(contextURL.getEntitySetOrSingletonOrType());
|
||||||
}
|
}
|
||||||
if (bindingTarget != null) {
|
if (bindingTarget != null) {
|
||||||
if (contextURL.getNavOrPropertyPath() == null) {
|
if (contextURL.getNavOrPropertyPath() == null) {
|
||||||
entityType = bindingTarget.getEntityType();
|
type = bindingTarget.getEntityType();
|
||||||
} else {
|
} else {
|
||||||
final EdmNavigationProperty navProp = bindingTarget.getEntityType().
|
final EdmNavigationProperty navProp = bindingTarget.getEntityType().
|
||||||
getNavigationProperty(contextURL.getNavOrPropertyPath());
|
getNavigationProperty(contextURL.getNavOrPropertyPath());
|
||||||
|
|
||||||
entityType = navProp == null
|
type = navProp == null
|
||||||
? bindingTarget.getEntityType()
|
? bindingTarget.getEntityType()
|
||||||
: navProp.getType();
|
: navProp.getType();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (type == null) {
|
||||||
|
type = new EdmTypeInfo.Builder().setEdm(edm).
|
||||||
|
setTypeExpression(contextURL.getEntitySetOrSingletonOrType()).build().getType();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
entityType = edm.getEntityType(new FullQualifiedName(contextURL.getDerivedEntity()));
|
type = edm.getEntityType(new FullQualifiedName(contextURL.getDerivedEntity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return entityType;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -386,7 +391,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
final URI base = resource.getContextURL() == null
|
final URI base = resource.getContextURL() == null
|
||||||
? resource.getPayload().getBaseURI() : resource.getContextURL().getServiceRoot();
|
? resource.getPayload().getBaseURI() : resource.getContextURL().getServiceRoot();
|
||||||
|
|
||||||
final EdmEntityType edmType = findEntityType(resource.getContextURL(), resource.getMetadataETag());
|
final EdmType edmType = findType(resource.getContextURL(), resource.getMetadataETag());
|
||||||
FullQualifiedName typeName = null;
|
FullQualifiedName typeName = null;
|
||||||
if (resource.getPayload().getType() == null) {
|
if (resource.getPayload().getType() == null) {
|
||||||
if (edmType != null) {
|
if (edmType != null) {
|
||||||
|
@ -434,8 +439,14 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Property property : resource.getPayload().getProperties()) {
|
for (Property property : resource.getPayload().getProperties()) {
|
||||||
add(entity, getODataProperty(
|
EdmType propertyType = null;
|
||||||
new ResWrap<Property>(resource.getContextURL(), resource.getMetadataETag(), property)));
|
if (edmType instanceof EdmEntityType) {
|
||||||
|
final EdmElement edmProperty = ((EdmEntityType) edmType).getProperty(property.getName());
|
||||||
|
if (edmProperty != null) {
|
||||||
|
propertyType = edmProperty.getType();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add(entity, getODataProperty(propertyType, property));
|
||||||
}
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
|
@ -445,14 +456,21 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
final String propertyName, final String propertyType) {
|
final String propertyName, final String propertyType) {
|
||||||
|
|
||||||
FullQualifiedName typeName = null;
|
FullQualifiedName typeName = null;
|
||||||
final EdmType entityType = findEntityType(contextURL, metadataETag);
|
final EdmType type = findType(contextURL, metadataETag);
|
||||||
if (entityType instanceof EdmStructuredType) {
|
if (type instanceof EdmStructuredType) {
|
||||||
final EdmProperty edmProperty = ((EdmStructuredType) entityType).getStructuralProperty(propertyName);
|
final EdmProperty edmProperty = ((EdmStructuredType) type).getStructuralProperty(propertyName);
|
||||||
if (edmProperty != null) {
|
if (edmProperty != null) {
|
||||||
typeName = edmProperty.getType().getFullQualifiedName();
|
typeName = edmProperty.getType().getFullQualifiedName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (typeName == null && type != null) {
|
||||||
|
typeName = type.getFullQualifiedName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return buildTypeInfo(typeName, propertyType);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EdmTypeInfo buildTypeInfo(final FullQualifiedName typeName, final String propertyType) {
|
||||||
EdmTypeInfo typeInfo = null;
|
EdmTypeInfo typeInfo = null;
|
||||||
if (typeName == null) {
|
if (typeName == null) {
|
||||||
if (propertyType != null) {
|
if (propertyType != null) {
|
||||||
|
@ -468,6 +486,8 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
return typeInfo;
|
return typeInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract CommonODataProperty getODataProperty(EdmType type, Property resource);
|
||||||
|
|
||||||
protected ODataValue getODataValue(final FullQualifiedName type,
|
protected ODataValue getODataValue(final FullQualifiedName type,
|
||||||
final Valuable valuable, final ContextURL contextURL, final String metadataETag) {
|
final Valuable valuable, final ContextURL contextURL, final String metadataETag) {
|
||||||
|
|
||||||
|
@ -475,7 +495,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
if (valuable.getValue().isPrimitive()) {
|
if (valuable.getValue().isPrimitive()) {
|
||||||
value = client.getObjectFactory().newPrimitiveValueBuilder().
|
value = client.getObjectFactory().newPrimitiveValueBuilder().
|
||||||
setText(valuable.getValue().asPrimitive().get()).
|
setText(valuable.getValue().asPrimitive().get()).
|
||||||
setType(type == null
|
setType(type == null || !EdmPrimitiveType.EDM_NAMESPACE.equals(type.getNamespace())
|
||||||
? null
|
? null
|
||||||
: EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), type.toString())).build();
|
: EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), type.toString())).build();
|
||||||
} else if (valuable.getValue().isGeospatial()) {
|
} else if (valuable.getValue().isGeospatial()) {
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.apache.olingo.commons.api.domain.ODataComplexValue;
|
||||||
import org.apache.olingo.commons.api.domain.v3.ODataEntity;
|
import org.apache.olingo.commons.api.domain.v3.ODataEntity;
|
||||||
import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
|
import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
|
||||||
import org.apache.olingo.commons.api.domain.v3.ODataProperty;
|
import org.apache.olingo.commons.api.domain.v3.ODataProperty;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmType;
|
||||||
import org.apache.olingo.commons.core.domain.v3.ODataPropertyImpl;
|
import org.apache.olingo.commons.core.domain.v3.ODataPropertyImpl;
|
||||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||||
import org.apache.olingo.commons.core.op.ResourceFactory;
|
import org.apache.olingo.commons.core.op.ResourceFactory;
|
||||||
|
@ -98,6 +99,17 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
|
||||||
property.getPayload(), property.getContextURL(), property.getMetadataETag()));
|
property.getPayload(), property.getContextURL(), property.getMetadataETag()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ODataProperty getODataProperty(final EdmType type, final Property resource) {
|
||||||
|
final EdmTypeInfo typeInfo = buildTypeInfo(type == null ? null : type.getFullQualifiedName(), resource.getType());
|
||||||
|
|
||||||
|
return new ODataPropertyImpl(resource.getName(),
|
||||||
|
getODataValue(typeInfo == null
|
||||||
|
? null
|
||||||
|
: typeInfo.getFullQualifiedName(),
|
||||||
|
resource, null, null));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ODataLinkCollection getLinkCollection(final LinkCollection linkCollection) {
|
public ODataLinkCollection getLinkCollection(final LinkCollection linkCollection) {
|
||||||
final ODataLinkCollection collection = new ODataLinkCollection(linkCollection.getNext());
|
final ODataLinkCollection collection = new ODataLinkCollection(linkCollection.getNext());
|
||||||
|
|
|
@ -63,8 +63,8 @@ import org.apache.olingo.commons.api.domain.v4.ODataProperty;
|
||||||
import org.apache.olingo.commons.api.domain.v4.ODataValuable;
|
import org.apache.olingo.commons.api.domain.v4.ODataValuable;
|
||||||
import org.apache.olingo.commons.api.edm.EdmComplexType;
|
import org.apache.olingo.commons.api.edm.EdmComplexType;
|
||||||
import org.apache.olingo.commons.api.edm.EdmEnumType;
|
import org.apache.olingo.commons.api.edm.EdmEnumType;
|
||||||
import org.apache.olingo.commons.api.edm.EdmStructuredType;
|
|
||||||
import org.apache.olingo.commons.api.edm.EdmTerm;
|
import org.apache.olingo.commons.api.edm.EdmTerm;
|
||||||
|
import org.apache.olingo.commons.api.edm.EdmType;
|
||||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||||
import org.apache.olingo.commons.core.data.EnumValueImpl;
|
import org.apache.olingo.commons.core.data.EnumValueImpl;
|
||||||
|
@ -259,7 +259,7 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void odataNavigationLinks(final EdmStructuredType edmType,
|
protected void odataNavigationLinks(final EdmType edmType,
|
||||||
final Linked linked, final ODataLinked odataLinked, final String metadataETag, final URI base) {
|
final Linked linked, final ODataLinked odataLinked, final String metadataETag, final URI base) {
|
||||||
|
|
||||||
super.odataNavigationLinks(edmType, linked, odataLinked, metadataETag, base);
|
super.odataNavigationLinks(edmType, linked, odataLinked, metadataETag, base);
|
||||||
|
@ -286,13 +286,29 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
|
||||||
resource.getPayload().getName(), resource.getPayload().getType());
|
resource.getPayload().getName(), resource.getPayload().getType());
|
||||||
|
|
||||||
final ODataProperty property = new ODataPropertyImpl(resource.getPayload().getName(),
|
final ODataProperty property = new ODataPropertyImpl(resource.getPayload().getName(),
|
||||||
getODataValue(typeInfo == null ? null : typeInfo.getFullQualifiedName(),
|
getODataValue(typeInfo == null
|
||||||
|
? null
|
||||||
|
: typeInfo.getFullQualifiedName(),
|
||||||
resource.getPayload(), resource.getContextURL(), resource.getMetadataETag()));
|
resource.getPayload(), resource.getContextURL(), resource.getMetadataETag()));
|
||||||
odataAnnotations(resource.getPayload(), property);
|
odataAnnotations(resource.getPayload(), property);
|
||||||
|
|
||||||
return property;
|
return property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ODataProperty getODataProperty(final EdmType type, final Property resource) {
|
||||||
|
final EdmTypeInfo typeInfo = buildTypeInfo(type == null ? null : type.getFullQualifiedName(), resource.getType());
|
||||||
|
|
||||||
|
final ODataProperty property = new ODataPropertyImpl(resource.getName(),
|
||||||
|
getODataValue(typeInfo == null
|
||||||
|
? null
|
||||||
|
: typeInfo.getFullQualifiedName(),
|
||||||
|
resource, null, null));
|
||||||
|
odataAnnotations(resource, property);
|
||||||
|
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ODataValue getODataValue(final FullQualifiedName type,
|
protected ODataValue getODataValue(final FullQualifiedName type,
|
||||||
final Valuable valuable, final ContextURL contextURL, final String metadataETag) {
|
final Valuable valuable, final ContextURL contextURL, final String metadataETag) {
|
||||||
|
|
|
@ -18,15 +18,21 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.olingo.client.core.v3;
|
package org.apache.olingo.client.core.v3;
|
||||||
|
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
||||||
|
import org.apache.olingo.client.api.uri.v3.URIBuilder;
|
||||||
import org.apache.olingo.client.api.v3.EdmEnabledODataClient;
|
import org.apache.olingo.client.api.v3.EdmEnabledODataClient;
|
||||||
|
import org.apache.olingo.client.core.communication.request.invoke.v3.EdmEnabledInvokeRequestFactoryImpl;
|
||||||
|
import org.apache.olingo.client.core.uri.v3.URIBuilderImpl;
|
||||||
import org.apache.olingo.commons.api.edm.Edm;
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
|
|
||||||
public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEnabledODataClient {
|
public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEnabledODataClient {
|
||||||
|
|
||||||
private final String serviceRoot;
|
private final String serviceRoot;
|
||||||
|
|
||||||
|
private EdmEnabledInvokeRequestFactory edmEnabledInvokeRequestFactory;
|
||||||
|
|
||||||
private Edm edm;
|
private Edm edm;
|
||||||
|
|
||||||
public EdmEnabledODataClientImpl(final String serviceRoot) {
|
public EdmEnabledODataClientImpl(final String serviceRoot) {
|
||||||
|
@ -57,4 +63,18 @@ public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEna
|
||||||
}
|
}
|
||||||
return this.edm;
|
return this.edm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URIBuilder getURIBuilder() {
|
||||||
|
return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EdmEnabledInvokeRequestFactory getInvokeRequestFactory() {
|
||||||
|
if (edmEnabledInvokeRequestFactory == null) {
|
||||||
|
edmEnabledInvokeRequestFactory = new EdmEnabledInvokeRequestFactoryImpl(this);
|
||||||
|
}
|
||||||
|
return edmEnabledInvokeRequestFactory;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
|
||||||
|
|
||||||
private static final long serialVersionUID = -1655712193243609209L;
|
private static final long serialVersionUID = -1655712193243609209L;
|
||||||
|
|
||||||
private final Configuration configuration = new ConfigurationImpl();
|
protected final Configuration configuration = new ConfigurationImpl();
|
||||||
|
|
||||||
private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
|
private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,13 @@
|
||||||
package org.apache.olingo.client.core.v4;
|
package org.apache.olingo.client.core.v4;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
||||||
|
import org.apache.olingo.client.api.uri.v4.URIBuilder;
|
||||||
import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
|
import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
|
||||||
|
import org.apache.olingo.client.core.communication.request.invoke.v4.EdmEnabledInvokeRequestFactoryImpl;
|
||||||
|
import org.apache.olingo.client.core.uri.v4.URIBuilderImpl;
|
||||||
import org.apache.olingo.commons.api.edm.Edm;
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
|
|
||||||
public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEnabledODataClient {
|
public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEnabledODataClient {
|
||||||
|
@ -32,6 +36,8 @@ public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEna
|
||||||
|
|
||||||
private String metadataETag;
|
private String metadataETag;
|
||||||
|
|
||||||
|
private EdmEnabledInvokeRequestFactory edmEnabledInvokeRequestFactory;
|
||||||
|
|
||||||
public EdmEnabledODataClientImpl(final String serviceRoot) {
|
public EdmEnabledODataClientImpl(final String serviceRoot) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
@ -64,4 +70,17 @@ public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEna
|
||||||
}
|
}
|
||||||
return this.edm;
|
return this.edm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URIBuilder getURIBuilder() {
|
||||||
|
return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EdmEnabledInvokeRequestFactory getInvokeRequestFactory() {
|
||||||
|
if (edmEnabledInvokeRequestFactory == null) {
|
||||||
|
edmEnabledInvokeRequestFactory = new EdmEnabledInvokeRequestFactoryImpl(this);
|
||||||
|
}
|
||||||
|
return edmEnabledInvokeRequestFactory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
|
||||||
|
|
||||||
private static final long serialVersionUID = -6653176125573631964L;
|
private static final long serialVersionUID = -6653176125573631964L;
|
||||||
|
|
||||||
private final Configuration configuration = new ConfigurationImpl();
|
protected final Configuration configuration = new ConfigurationImpl();
|
||||||
|
|
||||||
private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
|
private final FilterFactory filterFactory = new FilterFactoryImpl(getServiceVersion());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue