[OLINGO-260] partially provided opentype support on proxy

This commit is contained in:
fmartelli 2014-05-14 19:43:12 +02:00
parent 12a1284651
commit 4bdc91951a
325 changed files with 2715 additions and 97 deletions

View File

@ -60,7 +60,7 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
protected final EntityContext entityContext = EntityContainerFactory.getContext().entityContext();
protected final EntityTypeInvocationHandler targetHandler;
protected EntityTypeInvocationHandler entityHandler;
protected Object internal;
@ -73,19 +73,27 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
super(client, containerHandler);
this.internal = internal;
this.typeRef = typeRef;
this.targetHandler = EntityTypeInvocationHandler.class.cast(this);
this.entityHandler = EntityTypeInvocationHandler.class.cast(this);
}
protected AbstractTypeInvocationHandler(
final CommonEdmEnabledODataClient<?> client,
final Class<?> typeRef,
final Object internal,
final EntityTypeInvocationHandler targetHandler) {
final EntityTypeInvocationHandler entityHandler) {
super(client, targetHandler == null ? null : targetHandler.containerHandler);
super(client, entityHandler == null ? null : entityHandler.containerHandler);
this.internal = internal;
this.typeRef = typeRef;
this.targetHandler = targetHandler;
this.entityHandler = entityHandler;
}
public EntityTypeInvocationHandler getEntityHandler() {
return entityHandler;
}
public void setEntityHandler(EntityTypeInvocationHandler entityHandler) {
this.entityHandler = entityHandler;
}
public abstract FullQualifiedName getName();
@ -104,14 +112,14 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
return Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {returnType},
OperationInvocationHandler.getInstance(targetHandler));
OperationInvocationHandler.getInstance(entityHandler));
} else if ("factory".equals(method.getName()) && ArrayUtils.isEmpty(args)) {
final Class<?> returnType = method.getReturnType();
return Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {returnType},
FactoryInvocationHandler.getInstance(targetHandler, this));
FactoryInvocationHandler.getInstance(entityHandler, this));
} else if (method.getName().startsWith("get")) {
// Assumption: for each getter will always exist a setter and viceversa.
// get method annotation and check if it exists as expected
@ -165,8 +173,8 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
}
protected void attach() {
if (targetHandler != null && !entityContext.isAttached(targetHandler)) {
entityContext.attach(targetHandler, AttachedEntityStatus.ATTACHED);
if (entityHandler != null && !entityContext.isAttached(entityHandler)) {
entityContext.attach(entityHandler, AttachedEntityStatus.ATTACHED);
}
}
@ -175,12 +183,12 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
}
protected void attach(final AttachedEntityStatus status, final boolean override) {
if (entityContext.isAttached(targetHandler)) {
if (entityContext.isAttached(entityHandler)) {
if (override) {
entityContext.setStatus(targetHandler, status);
entityContext.setStatus(entityHandler, status);
}
} else {
entityContext.attach(targetHandler, status);
entityContext.attach(entityHandler, status);
}
}
@ -266,8 +274,8 @@ public abstract class AbstractTypeInvocationHandler extends AbstractInvocationHa
private void setNavigationPropertyValue(final NavigationProperty property, final Object value) {
// 1) attach source entity
if (!entityContext.isAttached(targetHandler)) {
entityContext.attach(targetHandler, AttachedEntityStatus.CHANGED);
if (!entityContext.isAttached(entityHandler)) {
entityContext.attach(entityHandler, AttachedEntityStatus.CHANGED);
}
// 2) attach the target entity handlers

View File

@ -108,7 +108,7 @@ public class ComplexTypeInvocationHandler extends AbstractTypeInvocationHandler
@Override
protected Object getPropertyValue(final String name, final Type type) {
try {
return CoreUtils.getValueFromProperty(client, getComplex().get(name), type, targetHandler);
return CoreUtils.getValueFromProperty(client, getComplex().get(name), type, entityHandler);
} catch (Exception e) {
throw new IllegalArgumentException("Error getting value for property '" + name + "'", e);
}
@ -166,8 +166,8 @@ public class ComplexTypeInvocationHandler extends AbstractTypeInvocationHandler
client.getBinder().add(
getComplex(), CoreUtils.getODataProperty(client, property.name(), type, toBeAdded));
if (targetHandler != null && !entityContext.isAttached(targetHandler)) {
entityContext.attach(targetHandler, AttachedEntityStatus.CHANGED);
if (entityHandler != null && !entityContext.isAttached(entityHandler)) {
entityContext.attach(entityHandler, AttachedEntityStatus.CHANGED);
}
}
@ -192,6 +192,6 @@ public class ComplexTypeInvocationHandler extends AbstractTypeInvocationHandler
@Override
public boolean isChanged() {
return targetHandler == null ? false : targetHandler.isChanged();
return entityHandler == null ? false : entityHandler.isChanged();
}
}

View File

@ -96,6 +96,13 @@ public final class EntityContainerInvocationHandler extends AbstractInvocationHa
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {returnType},
OperationInvocationHandler.getInstance(this));
} else if ("complexFactory".equals(method.getName()) && ArrayUtils.isEmpty(args)) {
final Class<?> returnType = method.getReturnType();
return Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {returnType},
FactoryInvocationHandler.getInstance(getClient(), this, null, null));
} else {
final Class<?> returnType = method.getReturnType();

View File

@ -20,10 +20,13 @@ package org.apache.olingo.ext.proxy.commons;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.net.URI;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@ -225,12 +228,33 @@ public class EntityTypeInvocationHandler extends AbstractTypeInvocationHandler {
}
@Override
@SuppressWarnings("unchecked")
protected void setPropertyValue(final Property property, final Object value) {
if (property.type().equalsIgnoreCase(EdmPrimitiveTypeKind.Stream.toString())) {
setStreamedProperty(property, (InputStream) value);
} else {
addPropertyChanges(property.name(), value);
if (value != null) {
final Collection<?> coll;
if (Collection.class.isAssignableFrom(value.getClass())) {
coll = Collection.class.cast(value);
} else {
coll = Collections.singleton(value);
}
for (Object item : coll) {
if (item instanceof Proxy) {
final InvocationHandler handler = Proxy.getInvocationHandler(item);
if ((handler instanceof ComplexTypeInvocationHandler)
&& ((ComplexTypeInvocationHandler) handler).getEntityHandler() == null) {
((ComplexTypeInvocationHandler) handler).setEntityHandler(this);
}
}
}
}
}
attach(AttachedEntityStatus.CHANGED);
}

View File

@ -20,6 +20,7 @@ package org.apache.olingo.ext.proxy.commons;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
import org.apache.olingo.ext.proxy.api.OperationExecutor;
import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.utils.ClassUtils;
@ -32,18 +33,33 @@ class FactoryInvocationHandler extends AbstractInvocationHandler implements Oper
private final AbstractTypeInvocationHandler invokerHandler;
@SuppressWarnings({"rawtypes", "unchecked"})
static FactoryInvocationHandler getInstance(
final CommonEdmEnabledODataClient<?> client,
final EntityContainerInvocationHandler containerHandler,
final EntityTypeInvocationHandler entityHandler,
final AbstractTypeInvocationHandler targetHandler) {
return new FactoryInvocationHandler(client, containerHandler, entityHandler, targetHandler);
}
@SuppressWarnings({"rawtypes", "unchecked"})
static FactoryInvocationHandler getInstance(
final EntityTypeInvocationHandler entityHandler,
final AbstractTypeInvocationHandler targetHandler) {
return new FactoryInvocationHandler(entityHandler, targetHandler);
return new FactoryInvocationHandler(
entityHandler == null ? null : entityHandler.containerHandler.client,
targetHandler == null
? entityHandler == null ? null : entityHandler.containerHandler : targetHandler.containerHandler,
entityHandler,
targetHandler);
}
private FactoryInvocationHandler(
final CommonEdmEnabledODataClient<?> client,
final EntityContainerInvocationHandler containerHandler,
final EntityTypeInvocationHandler entityHandler,
final AbstractTypeInvocationHandler targetHandler) {
super(targetHandler.containerHandler.getClient(), targetHandler.containerHandler);
super(client, containerHandler);
this.invokerHandler = targetHandler;
this.entityHandler = entityHandler;
}
@ -53,8 +69,7 @@ class FactoryInvocationHandler extends AbstractInvocationHandler implements Oper
if (isSelfMethod(method, args)) {
return invokeSelfMethod(method, args);
} else if (method.getName().startsWith("new")) {
final String getterName = method.getName().replaceFirst("new", "get");
final Method getter = invokerHandler.getTypeRef().getMethod(getterName);
final Method getter = proxy.getClass().getInterfaces()[0].getMethod(method.getName());
final Property property = ClassUtils.getAnnotation(Property.class, getter);
if (property == null) {
throw new UnsupportedOperationException("Unsupported method " + method.getName());

View File

@ -45,10 +45,13 @@ import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
import org.apache.olingo.commons.api.domain.v4.ODataProperty;
import org.apache.olingo.commons.api.edm.EdmElement;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
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.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
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.EnumType;
import org.apache.olingo.ext.proxy.api.annotations.Key;
@ -174,12 +177,18 @@ public final class CoreUtils {
final String property,
final Object obj) {
final EdmTypeInfo type;
if (edmProperty == null) {
// maybe opentype ...
type = null;
} else {
final EdmType edmType = edmProperty.getType();
final EdmTypeInfo type = new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).setTypeExpression(
type = new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).setTypeExpression(
edmProperty.isCollection()
? "Collection(" + edmType.getFullQualifiedName().toString() + ")"
: edmType.getFullQualifiedName().toString()).build();
}
return getODataProperty(client, property, type, obj);
}
@ -190,28 +199,40 @@ public final class CoreUtils {
CommonODataProperty oprop;
try {
if (type == null || obj == null) {
if (obj == null) {
oprop = client.getObjectFactory().newPrimitiveProperty(name, null);
} else if (type.isCollection()) {
} else {
final EdmTypeInfo valueType;
if (type == null) {
valueType = guessTypeFromObject(client, obj);
} else {
valueType = type;
}
if (valueType.isCollection()) {
// create collection property
oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, type, obj).asCollection());
} else if (type.isPrimitiveType()) {
oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, valueType, obj).
asCollection());
} else if (valueType.isPrimitiveType()) {
// create a primitive property
oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, type, obj).asPrimitive());
} else if (type.isComplexType()) {
oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, valueType, obj).
asPrimitive());
} else if (valueType.isComplexType()) {
// create a complex property
oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, type, obj).asComplex());
} else if (type.isEnumType()) {
oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, valueType, obj).
asComplex());
} else if (valueType.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)).
((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, valueType, obj)).
asEnum());
}
} else {
throw new UnsupportedOperationException("Usupported object type " + type.getFullQualifiedName());
throw new UnsupportedOperationException("Usupported object type " + valueType.getFullQualifiedName());
}
}
return oprop;
@ -220,6 +241,48 @@ public final class CoreUtils {
}
}
private static EdmTypeInfo guessTypeFromObject(
final CommonEdmEnabledODataClient<?> client, final Object obj) {
final EdmTypeInfo.Builder edmTypeInfo = new EdmTypeInfo.Builder().setEdm(client.getCachedEdm());
if (Collection.class.isAssignableFrom(obj.getClass())) {
final EdmTypeInfo type = guessPrimitiveType(client, ClassUtils.extractTypeArg(obj.getClass()));
return edmTypeInfo.setTypeExpression(
"Collection(" + type.getFullQualifiedName() + ")").build();
} else if (obj instanceof Proxy) {
final Class<?> typeRef = obj.getClass().getInterfaces()[0];
final String ns = typeRef.getAnnotation(Namespace.class).value();
final String name = typeRef.getAnnotation(ComplexType.class).name();
return edmTypeInfo.setTypeExpression(new FullQualifiedName(ns, name).toString()).build();
} else {
return guessPrimitiveType(client, obj.getClass());
}
}
private static EdmTypeInfo guessPrimitiveType(
final CommonEdmEnabledODataClient<?> client, final Class<?> clazz) {
EdmPrimitiveTypeKind bckCandidate = null;
for (EdmPrimitiveTypeKind kind : EdmPrimitiveTypeKind.values()) {
if (kind.getSupportedVersions().contains(client.getServiceVersion())) {
final Class<?> target = EdmPrimitiveTypeFactory.getInstance(kind).getDefaultType();
if (clazz.equals(target)) {
return new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).setTypeExpression(kind.toString()).build();
} else if (target.isAssignableFrom(clazz)) {
bckCandidate = kind;
}
}
}
if (bckCandidate == null) {
throw new IllegalArgumentException(clazz.getSimpleName() + " is not a simple type");
} else {
return new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).setTypeExpression(bckCandidate.toString()).build();
}
}
@SuppressWarnings("unchecked")
public static void addProperties(
final CommonEdmEnabledODataClient<?> client,
@ -429,6 +492,7 @@ public final class CoreUtils {
if (property == null || property.hasNullValue()) {
res = null;
} else if (property.hasComplexValue()) {
res = Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class<?>[] {internalRef},

View File

@ -23,9 +23,11 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.io.IOUtils;
@ -248,7 +250,10 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs);
}
final List<EdmComplexType> complexes = new ArrayList<EdmComplexType>();
for (EdmComplexType complex : schema.getComplexTypes()) {
complexes.add(complex);
final String className = utility.capitalize(complex.getName());
objs.clear();
objs.put("complexType", complex);
@ -297,6 +302,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
objs.clear();
objs.put("container", container);
objs.put("namespace", schema.getNamespace());
objs.put("complexes", complexes);
parseObj(base, pkg, "container",
utility.capitalize(container.getName()) + ".java", objs);

View File

@ -24,6 +24,7 @@ import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.EntityContainer;
import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter;
import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.Container;
import org.apache.olingo.ext.proxy.api.OperationType;
#foreach($ns in $namespaces)
@ -104,4 +105,18 @@ public interface $utility.capitalize($container.Name) extends Container {
#end
#end
}
#if( $complexes.size() > 0 )
ComplexFactory complexFactory();
interface ComplexFactory {
#foreach($complex in $complexes)
#set( $type = "${namespace}.${complex.Name}" )
@Property(name = "$complex.Name",
type = "$type")
$utility.getJavaType($type) new$utility.capitalize($complex.Name)();
#end
}
#end
}

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>pojogen-maven-plugin-v3test</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
<name>${project.artifactId}</name>
<description>A simple IT verifying the basic use case of pojogen-man-plugin.</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<artifactId>pojogen-maven-plugin</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
<scope>runtime</scope>
</dependency>
<dependency>
<artifactId>olingo-client-proxy</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>pojogen-maven-plugin</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<configuration>
<outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
<serviceRootURL>http://localhost:9080/stub/StaticService/V30/OpenType.svc</serviceRootURL>
<basePackage>org.apache.olingo.fit.proxy.v3.opentype</basePackage>
</configuration>
<id>v3pojoGen</id>
<phase>generate-sources</phase>
<goals>
<goal>v3pojoGen</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,20 @@
/**
* 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.
*/
File basepkg = new File( basedir, "target/generated-sources/ojc-plugin/org/apache/olingo/fit/proxy/v3" );
assert basepkg.isDirectory() && basepkg.listFiles().length>0;

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>pojogen-maven-plugin-v4test</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
<name>${project.artifactId}</name>
<description>A simple IT verifying the basic use case of pojogen-man-plugin.</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<artifactId>pojogen-maven-plugin</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
<scope>runtime</scope>
</dependency>
<dependency>
<artifactId>olingo-client-proxy</artifactId>
<groupId>org.apache.olingo</groupId>
<version>@project.version@</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>pojogen-maven-plugin</artifactId>
<version>@project.version@</version>
<executions>
<execution>
<configuration>
<outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
<serviceRootURL>http://localhost:9080/stub/StaticService/V40/OpenType.svc</serviceRootURL>
<basePackage>org.apache.olingo.fit.proxy.v4.opentype</basePackage>
</configuration>
<id>v4pojoGen</id>
<phase>generate-sources</phase>
<goals>
<goal>v4pojoGen</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,20 @@
/**
* 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.
*/
File basepkg = new File( basedir, "target/generated-sources/ojc-plugin/org/apache/olingo/fit/proxy/v4" );
assert basepkg.isDirectory() && basepkg.listFiles().length>0;

View File

@ -49,19 +49,14 @@ import org.springframework.stereotype.Service;
@Service
@Path("/V30/OpenType.svc")
public class V3OpenType {
public class V3OpenType extends V3Services {
private static final Pattern GUID = Pattern.compile("guid'(.*)'");
private final V3Services services;
private final Metadata openMetadata;
public V3OpenType() throws Exception {
this.openMetadata = new Metadata(FSManager.instance(ODataServiceVersion.V30).
super(new Metadata(FSManager.instance(ODataServiceVersion.V30).
readFile("openType" + StringUtils.capitalize(Constants.get(ODataServiceVersion.V30, ConstantKey.METADATA)),
Accept.XML), ODataServiceVersion.V30);
this.services = new V3Services(this.openMetadata);
Accept.XML), ODataServiceVersion.V30));
}
private Response replaceServiceName(final Response response) {
@ -98,13 +93,15 @@ public class V3OpenType {
@GET
@Path("/$metadata")
@Produces(MediaType.APPLICATION_XML)
@Override
public Response getMetadata() {
return services.getMetadata("openType" + StringUtils.capitalize(
return super.getMetadata("openType" + StringUtils.capitalize(
Constants.get(ODataServiceVersion.V30, ConstantKey.METADATA)));
}
@GET
@Path("/{entitySetName}({entityId})")
@Override
public Response getEntity(
@Context UriInfo uriInfo,
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@ -115,7 +112,7 @@ public class V3OpenType {
@QueryParam("$select") @DefaultValue(StringUtils.EMPTY) String select) {
final Matcher matcher = GUID.matcher(entityId);
return replaceServiceName(services.getEntityInternal(
return replaceServiceName(super.getEntityInternal(
uriInfo.getRequestUri().toASCIIString(), accept, entitySetName,
matcher.matches() ? matcher.group(1) : entityId, format, expand, select, false));
}
@ -124,6 +121,7 @@ public class V3OpenType {
@Path("/{entitySetName}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM})
@Override
public Response postNewEntity(
@Context UriInfo uriInfo,
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@ -132,17 +130,18 @@ public class V3OpenType {
@PathParam("entitySetName") final String entitySetName,
final String entity) {
return replaceServiceName(services.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, entity));
return replaceServiceName(super.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, entity));
}
@DELETE
@Path("/{entitySetName}({entityId})")
@Override
public Response removeEntity(
@PathParam("entitySetName") String entitySetName,
@PathParam("entityId") String entityId) {
final Matcher matcher = GUID.matcher(entityId);
return replaceServiceName(services.removeEntity(entitySetName,
return replaceServiceName(super.removeEntity(entitySetName,
matcher.matches() ? matcher.group(1) : entityId));
}
}

View File

@ -47,17 +47,12 @@ import org.springframework.stereotype.Service;
@Service
@Path("/V40/OpenType.svc")
public class V4OpenType {
private final V4Services services;
private final Metadata openMetadata;
public class V4OpenType extends V4Services {
public V4OpenType() throws Exception {
this.openMetadata = new Metadata(FSManager.instance(ODataServiceVersion.V40).
super(new Metadata(FSManager.instance(ODataServiceVersion.V40).
readFile("openType" + StringUtils.capitalize(Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA)),
Accept.XML), ODataServiceVersion.V40);
this.services = new V4Services(openMetadata);
Accept.XML), ODataServiceVersion.V40));
}
private Response replaceServiceName(final Response response) {
@ -94,13 +89,15 @@ public class V4OpenType {
@GET
@Path("/$metadata")
@Produces(MediaType.APPLICATION_XML)
@Override
public Response getMetadata() {
return services.getMetadata("openType" + StringUtils.capitalize(
return super.getMetadata("openType" + StringUtils.capitalize(
Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA)));
}
@GET
@Path("/{entitySetName}({entityId})")
@Override
public Response getEntity(
@Context UriInfo uriInfo,
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@ -110,7 +107,7 @@ public class V4OpenType {
@QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) String expand,
@QueryParam("$select") @DefaultValue(StringUtils.EMPTY) String select) {
return replaceServiceName(services.getEntityInternal(
return replaceServiceName(super.getEntityInternal(
uriInfo.getRequestUri().toASCIIString(), accept, entitySetName, entityId, format, expand, select, false));
}
@ -118,6 +115,7 @@ public class V4OpenType {
@Path("/{entitySetName}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM})
@Override
public Response postNewEntity(
@Context UriInfo uriInfo,
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@ -126,15 +124,16 @@ public class V4OpenType {
@PathParam("entitySetName") final String entitySetName,
final String entity) {
return replaceServiceName(services.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, entity));
return replaceServiceName(super.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, entity));
}
@DELETE
@Path("/{entitySetName}({entityId})")
@Override
public Response removeEntity(
@PathParam("entitySetName") String entitySetName,
@PathParam("entityId") String entityId) {
return replaceServiceName(services.removeEntity(entitySetName, entityId));
return replaceServiceName(super.removeEntity(entitySetName, entityId));
}
}

View File

@ -87,6 +87,7 @@ public abstract class AbstractTestITCase {
containerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM);
container = containerFactory.getEntityContainer(DefaultContainer.class);
assertNotNull(container);
EntityContainerFactory.getContext().detachAll();
}
protected Customer getSampleCustomerProfile(

View File

@ -0,0 +1,134 @@
/*
* 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.fit.proxy.v3;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.UUID;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.ext.proxy.EntityContainerFactory;
import org.apache.olingo.ext.proxy.api.annotations.EntityType;
import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservice.DefaultContainer;
import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservice.types.ContactDetails;
import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservice.types.Row;
import org.apache.olingo.fit.proxy.v3.opentype.microsoft.test.odata.services.opentypesservice.types.RowIndex;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* This is the unit test class to check actions overloading.
*/
public class OpenTypeTestITCase extends AbstractTestITCase {
private static DefaultContainer otcontainer;
@BeforeClass
public static void initContainer() {
final EntityContainerFactory otcontainerFactory = EntityContainerFactory.getV3(testOpenTypeServiceRootURL);
otcontainerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM);
otcontainer = otcontainerFactory.getEntityContainer(DefaultContainer.class);
assertNotNull(otcontainer);
}
@Test
public void checkOpenTypeEntityTypesExist() {
assertTrue(otcontainer.getRow().newRow().getClass().getInterfaces()[0].
getAnnotation(EntityType.class).openType());
assertTrue(otcontainer.getRowIndex().newRowIndex().getClass().getInterfaces()[0].
getAnnotation(EntityType.class).openType());
assertTrue(otcontainer.getRow().newIndexedRow().getClass().getInterfaces()[0].
getAnnotation(EntityType.class).openType());
entityContext.detachAll();
}
@Test
public void read() {
Row row = otcontainer.getRow().get(UUID.fromString("71f7d0dc-ede4-45eb-b421-555a2aa1e58f"));
assertEquals(Double.class, row.getAdditionalProperty("Double").getClass());
assertEquals("71f7d0dc-ede4-45eb-b421-555a2aa1e58f", row.getId().toString());
row = otcontainer.getRow().get(UUID.fromString("672b8250-1e6e-4785-80cf-b94b572e42b3"));
assertEquals(BigDecimal.class, row.getAdditionalProperty("Decimal").getClass());
}
@Test
public void cud() throws ParseException {
final Integer id = 1426;
RowIndex rowIndex = otcontainer.getRowIndex().newRowIndex();
rowIndex.setId(id);
rowIndex.addAdditionalProperty("aString", "string");
rowIndex.addAdditionalProperty("aBoolean", true);
rowIndex.addAdditionalProperty("aDouble", 1.5D);
rowIndex.addAdditionalProperty("aByte", Byte.MAX_VALUE);
rowIndex.addAdditionalProperty("aDate", Calendar.getInstance());
final ContactDetails contact = otcontainer.complexFactory().newContactDetails();
contact.setFirstContacted("text".getBytes());
Calendar cal = Calendar.getInstance();
cal.clear();
cal.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").parse("2001-04-05T05:05:05.001+00:01"));
contact.setLastContacted(cal);
cal = Calendar.getInstance();
cal.clear();
cal.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2001-04-05T05:05:04.001"));
contact.setContacted(cal);
contact.setGUID(UUID.randomUUID());
contact.setPreferedContactTime(BigDecimal.ONE);
contact.setByte(Short.valueOf("24"));
contact.setSignedByte(Byte.MAX_VALUE);
contact.setDouble(Double.valueOf(Double.MAX_VALUE));
contact.setSingle(Float.MAX_VALUE);
contact.setShort(Short.MAX_VALUE);
contact.setInt(Integer.MAX_VALUE);
rowIndex.addAdditionalProperty("aContact", contact);
otcontainer.flush();
rowIndex = otcontainer.getRowIndex().get(id);
assertEquals(String.class, rowIndex.getAdditionalProperty("aString").getClass());
assertEquals(Boolean.class, rowIndex.getAdditionalProperty("aBoolean").getClass());
assertEquals(Double.class, rowIndex.getAdditionalProperty("aDouble").getClass());
// assertEquals(Short.class, rowIndex.getAdditionalProperty("aByte").getClass()); // trova integer
// assertEquals(Byte.MAX_VALUE, rowIndex.getAdditionalProperty("aByte"));
// assertEquals(Calendar.class, rowIndex.getAdditionalProperty("aDate").getClass()); // trova stringa
// assertEquals(ContactDetails.class, rowIndex.getAdditionalProperty("aContact").getClass().getInterfaces()[0]);
entityContext.detachAll();
otcontainer.getRowIndex().delete(id);
otcontainer.flush();
assertNull(otcontainer.getRowIndex().get(id));
}
}

View File

@ -45,9 +45,9 @@ public class PrimitiveKeysTestITCase extends AbstractTestITCase {
@Test
public void readPrimitiveKeys() {
containerFactory = EntityContainerFactory.getV3(testPrimitiveKeysServiceRootURL);
containerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM);
final TestContext testContainer = containerFactory.getEntityContainer(TestContext.class);
final EntityContainerFactory testContainerFactory = EntityContainerFactory.getV3(testPrimitiveKeysServiceRootURL);
testContainerFactory.getConfiguration().setDefaultBatchAcceptFormat(ContentType.APPLICATION_OCTET_STREAM);
final TestContext testContainer = testContainerFactory.getEntityContainer(TestContext.class);
assertNotNull(testContainer);
final EdmBoolean edmBooleanSet = testContainer.getEdmBooleanSet().get(Boolean.TRUE);

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.client.api.http.HttpMethod;
@ -23,6 +24,7 @@ import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.EntityContainer;
import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter;
import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.Container;
import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.*;
@ -118,4 +120,37 @@ public interface DefaultContainer extends Container {
);
}
}
ComplexFactory complexFactory();
interface ComplexFactory {
@Property(name = "ContactDetails",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ContactDetails newContactDetails();
@Property(name = "Aliases",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Aliases newAliases();
@Property(name = "Phone",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Phone newPhone();
@Property(name = "AuditInfo",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.AuditInfo")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.AuditInfo newAuditInfo();
@Property(name = "ConcurrencyInfo",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ConcurrencyInfo newConcurrencyInfo();
@Property(name = "Dimensions",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.Dimensions")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.Dimensions newDimensions();
@Property(name = "ComplexToCategory",
type = "Microsoft.Test.OData.Services.AstoriaDefaultService.ComplexToCategory")
org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types.ComplexToCategory newComplexToCategory();
}
}

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet;

View File

@ -16,5 +16,6 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;
@ -148,9 +149,9 @@ public interface LastLogin
fcNSPrefix = "",
fcNSURI = "",
fcKeepInContent = false)
Duration getDuration();
BigDecimal getDuration();
void setDuration(final Duration _duration);
void setDuration(final BigDecimal _duration);

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.EntityType;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.ext.proxy.api.annotations.EntityType;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;
@ -148,9 +149,9 @@ public interface PageView
fcNSPrefix = "",
fcNSURI = "",
fcKeepInContent = false)
Duration getTimeSpentOnPage();
BigDecimal getTimeSpentOnPage();
void setTimeSpentOnPage(final Duration _timeSpentOnPage);
void setTimeSpentOnPage(final BigDecimal _timeSpentOnPage);
@Property(name = "PageUrl",

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.fit.proxy.v3.actionoverloading.microsoft.test.odata.services.astoriadefaultservice.types;
import org.apache.olingo.client.api.http.HttpMethod;

Some files were not shown because too many files have changed in this diff Show More