[OLINGO-260] Instance annotations test

This commit is contained in:
Francesco Chicchiriccò 2014-05-19 17:47:46 +02:00
parent 4a1d5ab343
commit f59a8fb30c
66 changed files with 706 additions and 139 deletions

View File

@ -63,10 +63,10 @@ public final class EntityContainerFactory<C extends CommonEdmEnabledODataClient<
final C client, final String serviceRoot) { final C client, final String serviceRoot) {
if (!FACTORY_PER_SERVICEROOT.containsKey(serviceRoot)) { if (!FACTORY_PER_SERVICEROOT.containsKey(serviceRoot)) {
client.getConfiguration().setDefaultPubFormat(ODataPubFormat.JSON_FULL_METADATA);
final EntityContainerFactory<C> instance = new EntityContainerFactory<C>(client, serviceRoot); final EntityContainerFactory<C> instance = new EntityContainerFactory<C>(client, serviceRoot);
FACTORY_PER_SERVICEROOT.put(serviceRoot, instance); FACTORY_PER_SERVICEROOT.put(serviceRoot, instance);
} }
client.getConfiguration().setDefaultPubFormat(ODataPubFormat.JSON_FULL_METADATA);
return (EntityContainerFactory<C>) FACTORY_PER_SERVICEROOT.get(serviceRoot); return (EntityContainerFactory<C>) FACTORY_PER_SERVICEROOT.get(serviceRoot);
} }

View File

@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.ext.proxy.api;
import java.io.Serializable;
import java.util.Collection;
public interface AbstractAnnotatable extends Serializable {
void addAnnotation(Class<? extends AbstractTerm> term, Object value);
void removeAnnotation(Class<? extends AbstractTerm> term);
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
}

View File

@ -25,6 +25,8 @@ public interface AbstractOpenType extends Serializable {
void addAdditionalProperty(String name, Object value); void addAdditionalProperty(String name, Object value);
void removeAdditionalProperty(String name);
Object getAdditionalProperty(String name); Object getAdditionalProperty(String name);
Collection<String> getAdditionalPropertyNames(); Collection<String> getAdditionalPropertyNames();

View File

@ -1,4 +1,4 @@
#* /*
* Licensed to the Apache Software Foundation (ASF) under one * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information * distributed with this work for additional information
@ -15,7 +15,10 @@
* KIND, either express or implied. See the License for the * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*# */
#foreach ($service in $services) package org.apache.olingo.ext.proxy.api;
$service
#end import java.io.Serializable;
public interface AbstractTerm extends Serializable {
}

View File

@ -0,0 +1,40 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.ext.proxy.api.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Mark POJO as term.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface Term {
String name();
String type();
String baseTerm() default "";
}

View File

@ -224,7 +224,10 @@ abstract class AbstractInvocationHandler implements InvocationHandler {
false); false);
} }
} else { } else {
return CoreUtils.getValueFromProperty(client, (CommonODataProperty) result, method.getGenericReturnType(), null); final CommonODataProperty property = (CommonODataProperty) result;
return property == null || property.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(client, property.getValue(), method.getGenericReturnType(), null);
} }
} }

View File

@ -28,6 +28,7 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.olingo.client.api.CommonEdmEnabledODataClient; import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse; import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
import org.apache.olingo.client.core.uri.URIUtils; import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntity;
@ -35,6 +36,7 @@ import org.apache.olingo.commons.api.domain.ODataInlineEntity;
import org.apache.olingo.commons.api.domain.ODataInlineEntitySet; import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.commons.api.domain.ODataLinked; import org.apache.olingo.commons.api.domain.ODataLinked;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.EntityContainerFactory;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractEntitySet; import org.apache.olingo.ext.proxy.api.AbstractEntitySet;
@ -141,7 +143,7 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
} }
} else { } else {
// if the getter refers to a property .... get property from wrapped entity // if the getter refers to a property .... get property from wrapped entity
res = getPropertyValue(property, getter.getGenericReturnType()); res = getPropertyValue(property.name(), getter.getGenericReturnType());
} }
// attach the current handler // attach the current handler
@ -246,8 +248,12 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
} else if (AbstractEntitySet.class.isAssignableFrom(type)) { } else if (AbstractEntitySet.class.isAssignableFrom(type)) {
navPropValue = getEntitySetProxy(type, uri); navPropValue = getEntitySetProxy(type, uri);
} else { } else {
final ODataRetrieveResponse<CommonODataEntity> res = final ODataEntityRequest<CommonODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uri);
client.getRetrieveRequestFactory().getEntityRequest(uri).execute(); if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
req.setPrefer(client.newPreferences().includeAnnotations("*"));
}
final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
navPropValue = getEntityProxy( navPropValue = getEntityProxy(
uri, uri,
@ -265,15 +271,16 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
protected abstract Object getPropertyValue(final String name, final Type type); protected abstract Object getPropertyValue(final String name, final Type type);
private Object getPropertyValue(final Property property, final Type type) {
return getPropertyValue(property.name(), type);
}
public void addAdditionalProperty(final String name, final Object value) { public void addAdditionalProperty(final String name, final Object value) {
addPropertyChanges(name, value); addPropertyChanges(name, value);
attach(AttachedEntityStatus.CHANGED); attach(AttachedEntityStatus.CHANGED);
} }
public void removeAdditionalProperty(final String name) {
removePropertyChanges(name);
attach(AttachedEntityStatus.CHANGED);
}
public Object getAdditionalProperty(final String name) { public Object getAdditionalProperty(final String name) {
return getPropertyValue(name, null); return getPropertyValue(name, null);
} }
@ -313,6 +320,8 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
protected abstract void addPropertyChanges(final String name, final Object value); protected abstract void addPropertyChanges(final String name, final Object value);
protected abstract void removePropertyChanges(final String name);
protected abstract void addLinkChanges(final NavigationProperty navProp, final Object value); protected abstract void addLinkChanges(final NavigationProperty navProp, final Object value);
public abstract boolean isChanged(); public abstract boolean isChanged();

View File

@ -99,7 +99,10 @@ public class ComplexInvocationHandler extends AbstractStructuredInvocationHandle
@Override @Override
protected Object getPropertyValue(final String name, final Type type) { protected Object getPropertyValue(final String name, final Type type) {
try { try {
return CoreUtils.getValueFromProperty(client, getComplex().get(name), type, getEntityHandler()); final CommonODataProperty property = getComplex().get(name);
return property == null || property.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(client, property.getValue(), type, getEntityHandler());
} catch (Exception e) { } catch (Exception e) {
throw new IllegalArgumentException("Error getting value for property '" + name + "'", e); throw new IllegalArgumentException("Error getting value for property '" + name + "'", e);
} }
@ -174,6 +177,11 @@ public class ComplexInvocationHandler extends AbstractStructuredInvocationHandle
// do nothing .... // do nothing ....
} }
@Override
protected void removePropertyChanges(final String name) {
// do nothing ....
}
@Override @Override
protected void addLinkChanges(final NavigationProperty navProp, final Object value) { protected void addLinkChanges(final NavigationProperty navProp, final Object value) {
// do nothing .... // do nothing ....

View File

@ -51,6 +51,7 @@ import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.commons.api.domain.ODataLinkType; import org.apache.olingo.commons.api.domain.ODataLinkType;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.api.format.ODataMediaFormat; import org.apache.olingo.commons.api.format.ODataMediaFormat;
import org.apache.olingo.ext.proxy.EntityContainerFactory; import org.apache.olingo.ext.proxy.EntityContainerFactory;
@ -240,10 +241,10 @@ class ContainerImpl implements Container {
client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0 client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0
? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory(). ? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory().
getEntityUpdateRequest(handler.getEntityURI(), getEntityUpdateRequest(handler.getEntityURI(),
org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes) org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
: ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory(). : ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory().
getEntityUpdateRequest(handler.getEntityURI(), getEntityUpdateRequest(handler.getEntityURI(),
org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes); org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent()); req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent());
@ -266,10 +267,10 @@ class ContainerImpl implements Container {
client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0 client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0
? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory(). ? ((org.apache.olingo.client.api.v3.EdmEnabledODataClient) client).getCUDRequestFactory().
getEntityUpdateRequest(uri, getEntityUpdateRequest(uri,
org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes) org.apache.olingo.client.api.communication.request.cud.v3.UpdateType.PATCH, changes)
: ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory(). : ((org.apache.olingo.client.api.v4.EdmEnabledODataClient) client).getCUDRequestFactory().
getEntityUpdateRequest(uri, getEntityUpdateRequest(uri,
org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes); org.apache.olingo.client.api.communication.request.cud.v4.UpdateType.PATCH, changes);
req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent()); req.setPrefer(new ODataPreferences(client.getServiceVersion()).returnContent());
@ -316,6 +317,11 @@ class ContainerImpl implements Container {
if (AttachedEntityStatus.DELETED != currentStatus) { if (AttachedEntityStatus.DELETED != currentStatus) {
entity.getProperties().clear(); entity.getProperties().clear();
CoreUtils.addProperties(client, handler.getPropertyChanges(), entity); CoreUtils.addProperties(client, handler.getPropertyChanges(), entity);
if (entity instanceof ODataEntity) {
((ODataEntity) entity).getAnnotations().clear();
CoreUtils.addAnnotations(client, handler.getAnnotations(), (ODataEntity) entity);
}
} }
for (Map.Entry<NavigationProperty, Object> property : handler.getLinkChanges().entrySet()) { for (Map.Entry<NavigationProperty, Object> property : handler.getLinkChanges().entrySet()) {
@ -395,7 +401,7 @@ class ContainerImpl implements Container {
final URI targetURI = currentStatus == AttachedEntityStatus.NEW final URI targetURI = currentStatus == AttachedEntityStatus.NEW
? URI.create("$" + startingPos + "/$value") ? URI.create("$" + startingPos + "/$value")
: URIUtils.getURI( : URIUtils.getURI(
factory.getServiceRoot(), handler.getEntity().getEditLink().toASCIIString() + "/$value"); factory.getServiceRoot(), handler.getEntity().getEditLink().toASCIIString() + "/$value");
batchUpdateMediaEntity(handler, targetURI, handler.getStreamChanges(), changeset); batchUpdateMediaEntity(handler, targetURI, handler.getStreamChanges(), changeset);
@ -408,8 +414,8 @@ class ContainerImpl implements Container {
for (Map.Entry<String, InputStream> streamedChanges : handler.getStreamedPropertyChanges().entrySet()) { for (Map.Entry<String, InputStream> streamedChanges : handler.getStreamedPropertyChanges().entrySet()) {
final URI targetURI = currentStatus == AttachedEntityStatus.NEW final URI targetURI = currentStatus == AttachedEntityStatus.NEW
? URI.create("$" + startingPos) : URIUtils.getURI( ? URI.create("$" + startingPos) : URIUtils.getURI(
factory.getServiceRoot(), factory.getServiceRoot(),
CoreUtils.getMediaEditLink(streamedChanges.getKey(), entity).toASCIIString()); CoreUtils.getMediaEditLink(streamedChanges.getKey(), entity).toASCIIString());
batchUpdateMediaResource(handler, targetURI, streamedChanges.getValue(), changeset); batchUpdateMediaResource(handler, targetURI, streamedChanges.getValue(), changeset);

View File

@ -22,10 +22,19 @@ import java.io.Serializable;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.net.URI; import java.net.URI;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.Term;
import org.apache.olingo.ext.proxy.utils.CoreUtils;
public class EntityCollectionInvocationHandler<T extends Serializable> public class EntityCollectionInvocationHandler<T extends Serializable>
extends AbstractInvocationHandler implements AbstractEntityCollection<T> { extends AbstractInvocationHandler implements AbstractEntityCollection<T> {
@ -38,6 +47,11 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
private final URI uri; private final URI uri;
private final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
private final Map<Class<? extends AbstractTerm>, Object> annotationsByTerm =
new HashMap<Class<? extends AbstractTerm>, Object>();
public EntityCollectionInvocationHandler(final EntityContainerInvocationHandler containerHandler, public EntityCollectionInvocationHandler(final EntityContainerInvocationHandler containerHandler,
final Collection<T> items, final Class<?> itemRef) { final Collection<T> items, final Class<?> itemRef) {
@ -54,6 +68,12 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
this.uri = uri; this.uri = uri;
} }
public void setAnnotations(final List<ODataAnnotation> annotations) {
this.annotations.clear();
this.annotationsByTerm.clear();
this.annotations.addAll(annotations);
}
public Class<?> getEntityReference() { public Class<?> getEntityReference() {
return itemRef; return itemRef;
} }
@ -142,4 +162,37 @@ public class EntityCollectionInvocationHandler<T extends Serializable>
public void clear() { public void clear() {
items.clear(); items.clear();
} }
public Object getAnnotation(final Class<? extends AbstractTerm> term) {
Object res = null;
if (annotationsByTerm.containsKey(term)) {
res = annotationsByTerm.get(term);
} else {
try {
final Term termAnn = term.getAnnotation(Term.class);
final Namespace namespaceAnn = term.getAnnotation(Namespace.class);
ODataAnnotation annotation = null;
for (ODataAnnotation _annotation : annotations) {
if ((namespaceAnn.value() + "." + termAnn.name()).equals(_annotation.getTerm())) {
annotation = _annotation;
}
}
res = annotation == null || annotation.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(client, annotation.getValue(), null, null);
if (res != null) {
annotationsByTerm.put(term, res);
}
} catch (Exception e) {
throw new IllegalArgumentException("Error getting annotation for term '" + term.getName() + "'", e);
}
}
return res;
}
public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
return CoreUtils.getAnnotationTerms(annotations);
}
} }

View File

@ -39,11 +39,16 @@ import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.CommonODataProperty; import org.apache.olingo.commons.api.domain.CommonODataProperty;
import org.apache.olingo.commons.api.domain.ODataLinked; import org.apache.olingo.commons.api.domain.ODataLinked;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.format.ODataMediaFormat; import org.apache.olingo.commons.api.format.ODataMediaFormat;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.annotations.EntityType; import org.apache.olingo.ext.proxy.api.annotations.EntityType;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty; import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Term;
import org.apache.olingo.ext.proxy.context.AttachedEntityStatus; import org.apache.olingo.ext.proxy.context.AttachedEntityStatus;
import org.apache.olingo.ext.proxy.context.EntityUUID; import org.apache.olingo.ext.proxy.context.EntityUUID;
import org.apache.olingo.ext.proxy.utils.CoreUtils; import org.apache.olingo.ext.proxy.utils.CoreUtils;
@ -54,15 +59,18 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
private final URI entityURI; private final URI entityURI;
protected Map<String, Object> propertyChanges = new HashMap<String, Object>(); protected final Map<String, Object> propertyChanges = new HashMap<String, Object>();
protected Map<NavigationProperty, Object> linkChanges = new HashMap<NavigationProperty, Object>(); protected final Map<NavigationProperty, Object> linkChanges = new HashMap<NavigationProperty, Object>();
protected int propertiesTag = 0; protected int propertiesTag = 0;
protected int linksTag = 0; protected int linksTag = 0;
private Map<String, InputStream> streamedPropertyChanges = new HashMap<String, InputStream>(); private final Map<String, InputStream> streamedPropertyChanges = new HashMap<String, InputStream>();
private final Map<Class<? extends AbstractTerm>, Object> annotations =
new HashMap<Class<? extends AbstractTerm>, Object>();
private InputStream stream; private InputStream stream;
@ -127,6 +135,7 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
this.linkChanges.clear(); this.linkChanges.clear();
this.propertiesTag = 0; this.propertiesTag = 0;
this.linksTag = 0; this.linksTag = 0;
this.annotations.clear();
} }
public EntityUUID getUUID() { public EntityUUID getUUID() {
@ -175,6 +184,10 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
return linkChanges; return linkChanges;
} }
public Map<Class<? extends AbstractTerm>, Object> getAnnotations() {
return annotations;
}
private void updatePropertiesTag(final int checkpoint) { private void updatePropertiesTag(final int checkpoint) {
if (checkpoint == propertiesTag) { if (checkpoint == propertiesTag) {
propertiesTag = propertyChanges.hashCode(); propertiesTag = propertyChanges.hashCode();
@ -199,10 +212,12 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
if (propertyChanges.containsKey(name)) { if (propertyChanges.containsKey(name)) {
res = propertyChanges.get(name); res = propertyChanges.get(name);
} else { } else {
res = CoreUtils.getValueFromProperty(client, property, type, this); res = property == null || property.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(client, property.getValue(), type, this);
if (res != null) { if (res != null) {
chacheProperty(name, res); cacheProperty(name, res);
} }
} }
@ -238,15 +253,14 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
} }
@Override @Override
@SuppressWarnings("unchecked")
protected void setPropertyValue(final Property property, final Object value) { protected void setPropertyValue(final Property property, final Object value) {
if (property.type().equalsIgnoreCase("Edm." + EdmPrimitiveTypeKind.Stream.toString())) { if (EdmPrimitiveTypeKind.Stream.getFullQualifiedName().toString().equalsIgnoreCase(property.type())) {
setStreamedProperty(property, (InputStream) value); setStreamedProperty(property, (InputStream) value);
} else { } else {
addPropertyChanges(property.name(), value); addPropertyChanges(property.name(), value);
if (value != null) { if (value != null) {
final Collection<?> coll; Collection<?> coll;
if (Collection.class.isAssignableFrom(value.getClass())) { if (Collection.class.isAssignableFrom(value.getClass())) {
coll = Collection.class.cast(value); coll = Collection.class.cast(value);
} else { } else {
@ -364,7 +378,12 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
propertyChanges.put(name, value); propertyChanges.put(name, value);
} }
protected void chacheProperty(final String name, final Object value) { @Override
protected void removePropertyChanges(final String name) {
propertyChanges.remove(name);
}
protected void cacheProperty(final String name, final Object value) {
final int checkpoint = propertyChanges.hashCode(); final int checkpoint = propertyChanges.hashCode();
propertyChanges.put(name, value); propertyChanges.put(name, value);
updatePropertiesTag(checkpoint); updatePropertiesTag(checkpoint);
@ -381,6 +400,70 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
updateLinksTag(checkpoint); updateLinksTag(checkpoint);
} }
public void addAnnotation(final Class<? extends AbstractTerm> term, final Object value) {
this.annotations.put(term, value);
if (value != null) {
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 ComplexInvocationHandler)
&& ((ComplexInvocationHandler) handler).getEntityHandler() == null) {
((ComplexInvocationHandler) handler).setEntityHandler(this);
}
}
}
}
attach(AttachedEntityStatus.CHANGED);
}
public void removeAnnotation(final Class<? extends AbstractTerm> term) {
this.annotations.remove(term);
}
public Object getAnnotation(final Class<? extends AbstractTerm> term) {
Object res = null;
if (annotations.containsKey(term)) {
res = annotations.get(term);
} else if (getEntity() instanceof ODataEntity) {
try {
final Term termAnn = term.getAnnotation(Term.class);
final Namespace namespaceAnn = term.getAnnotation(Namespace.class);
ODataAnnotation annotation = null;
for (ODataAnnotation _annotation : ((ODataEntity) getEntity()).getAnnotations()) {
if ((namespaceAnn.value() + "." + termAnn.name()).equals(_annotation.getTerm())) {
annotation = _annotation;
}
}
res = annotation == null || annotation.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(client, annotation.getValue(), null, this);
if (res != null) {
annotations.put(term, res);
}
} catch (Exception e) {
throw new IllegalArgumentException("Error getting annotation for term '" + term.getName() + "'", e);
}
}
return res;
}
public Collection<Class<? extends AbstractTerm>> getAnnotationTerms() {
return getEntity() instanceof ODataEntity
? CoreUtils.getAnnotationTerms(((ODataEntity) getEntity()).getAnnotations())
: Collections.<Class<? extends AbstractTerm>>emptyList();
}
@Override @Override
public String toString() { public String toString() {
return uuid.toString(); return uuid.toString();

View File

@ -25,7 +25,6 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.URI; import java.net.URI;
import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@ -33,6 +32,10 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest; import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest;
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.CommonURIBuilder; import org.apache.olingo.client.api.uri.CommonURIBuilder;
@ -41,6 +44,8 @@ import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
import org.apache.olingo.client.api.v4.ODataClient; import org.apache.olingo.client.api.v4.ODataClient;
import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.CommonODataEntity;
import org.apache.olingo.commons.api.domain.CommonODataEntitySet; import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
import org.apache.olingo.commons.api.edm.FullQualifiedName; import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.api.format.ODataValueFormat; import org.apache.olingo.commons.api.format.ODataValueFormat;
@ -254,8 +259,13 @@ class EntitySetInvocationHandler<
LOG.debug("GET {}", uriBuilder.toString()); LOG.debug("GET {}", uriBuilder.toString());
final ODataRetrieveResponse<CommonODataEntity> res = final ODataEntityRequest<CommonODataEntity> req =
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build()).execute(); client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
req.setPrefer(client.newPreferences().includeAnnotations("*"));
}
final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
final String etag = res.getETag(); final String etag = res.getETag();
final CommonODataEntity entity = res.getBody(); final CommonODataEntity entity = res.getBody();
@ -282,9 +292,12 @@ class EntitySetInvocationHandler<
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <S extends T> Map.Entry<List<S>, URI> fetchPartialEntitySet(final URI uri, final Class<S> typeRef) { public <S extends T> Triple<List<S>, URI, List<ODataAnnotation>>
fetchPartialEntitySet(final URI uri, final Class<S> typeRef) {
final List<CommonODataEntity> entities = new ArrayList<CommonODataEntity>(); final List<CommonODataEntity> entities = new ArrayList<CommonODataEntity>();
final URI next; final URI next;
final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
if (isSingleton) { if (isSingleton) {
final ODataRetrieveResponse<org.apache.olingo.commons.api.domain.v4.Singleton> res = final ODataRetrieveResponse<org.apache.olingo.commons.api.domain.v4.Singleton> res =
@ -293,12 +306,20 @@ class EntitySetInvocationHandler<
entities.add(res.getBody()); entities.add(res.getBody());
next = null; next = null;
} else { } else {
final ODataRetrieveResponse<CommonODataEntitySet> res = final ODataEntitySetRequest<CommonODataEntitySet> req =
client.getRetrieveRequestFactory().getEntitySetRequest(uri).execute(); client.getRetrieveRequestFactory().getEntitySetRequest(uri);
if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) > 0) {
req.setPrefer(client.newPreferences().includeAnnotations("*"));
}
final ODataRetrieveResponse<CommonODataEntitySet> res = req.execute();
final CommonODataEntitySet entitySet = res.getBody(); final CommonODataEntitySet entitySet = res.getBody();
entities.addAll(entitySet.getEntities()); entities.addAll(entitySet.getEntities());
next = entitySet.getNext(); next = entitySet.getNext();
if (entitySet instanceof ODataEntitySet) {
annotations.addAll(((ODataEntitySet) entitySet).getAnnotations());
}
} }
final List<S> items = new ArrayList<S>(entities.size()); final List<S> items = new ArrayList<S>(entities.size());
@ -316,7 +337,7 @@ class EntitySetInvocationHandler<
handlerInTheContext == null ? handler : handlerInTheContext)); handlerInTheContext == null ? handler : handlerInTheContext));
} }
return new AbstractMap.SimpleEntry<List<S>, URI>(items, next); return new ImmutableTriple<List<S>, URI, List<ODataAnnotation>>(items, next, annotations);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -324,18 +345,24 @@ class EntitySetInvocationHandler<
final URI entitySetURI, final Class<S> typeRef, final Class<SEC> collTypeRef) { final URI entitySetURI, final Class<S> typeRef, final Class<SEC> collTypeRef) {
final List<S> items = new ArrayList<S>(); final List<S> items = new ArrayList<S>();
final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
URI nextURI = entitySetURI; URI nextURI = entitySetURI;
while (nextURI != null) { while (nextURI != null) {
final Map.Entry<List<S>, URI> entitySet = fetchPartialEntitySet(nextURI, typeRef); final Triple<List<S>, URI, List<ODataAnnotation>> entitySet = fetchPartialEntitySet(nextURI, typeRef);
nextURI = entitySet.getValue(); items.addAll(entitySet.getLeft());
items.addAll(entitySet.getKey()); nextURI = entitySet.getMiddle();
annotations.addAll(entitySet.getRight());
} }
final EntityCollectionInvocationHandler<S> entityCollectionHandler =
new EntityCollectionInvocationHandler<S>(containerHandler, items, typeRef, entitySetURI);
entityCollectionHandler.setAnnotations(annotations);
return (SEC) Proxy.newProxyInstance( return (SEC) Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
new Class<?>[] {collTypeRef}, new Class<?>[] {collTypeRef},
new EntityCollectionInvocationHandler<S>(containerHandler, items, typeRef, entitySetURI)); entityCollectionHandler);
} }
@Override @Override

View File

@ -23,8 +23,9 @@ import java.net.URI;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC extends AbstractEntityCollection<T>> class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC extends AbstractEntityCollection<T>>
@ -50,7 +51,7 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
} else if (this.next == null) { } else if (this.next == null) {
res = false; res = false;
} else { } else {
goon(); goOn();
res = current.hasNext(); res = current.hasNext();
} }
return res; return res;
@ -65,7 +66,7 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
if (this.next == null) { if (this.next == null) {
throw e; throw e;
} }
goon(); goOn();
res = next(); res = next();
} }
@ -77,9 +78,10 @@ class EntitySetIterator<T extends Serializable, KEY extends Serializable, EC ext
this.current.remove(); this.current.remove();
} }
private void goon() { private void goOn() {
final Map.Entry<List<T>, URI> entitySet = esi.fetchPartialEntitySet(this.next, this.esi.getTypeRef()); final Triple<List<T>, URI, List<ODataAnnotation>> entitySet =
this.next = entitySet.getValue(); esi.fetchPartialEntitySet(this.next, this.esi.getTypeRef());
this.current = entitySet.getKey().iterator(); this.current = entitySet.getLeft().iterator();
this.next = entitySet.getMiddle();
} }
} }

View File

@ -43,23 +43,28 @@ import org.apache.olingo.commons.api.domain.CommonODataProperty;
import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.ODataLink;
import org.apache.olingo.commons.api.domain.ODataPrimitiveValue; import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
import org.apache.olingo.commons.api.domain.ODataValue; import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
import org.apache.olingo.commons.api.domain.v4.ODataEnumValue; import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory; import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory;
import org.apache.olingo.commons.api.domain.v4.ODataProperty;
import org.apache.olingo.commons.api.edm.EdmElement; import org.apache.olingo.commons.api.edm.EdmElement;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.EdmTerm;
import org.apache.olingo.commons.api.edm.EdmType; 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.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.core.domain.v4.ODataAnnotationImpl;
import org.apache.olingo.commons.core.edm.EdmTypeInfo; import org.apache.olingo.commons.core.edm.EdmTypeInfo;
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory; import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.annotations.ComplexType; 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.CompoundKeyElement;
import org.apache.olingo.ext.proxy.api.annotations.EnumType; import org.apache.olingo.ext.proxy.api.annotations.EnumType;
import org.apache.olingo.ext.proxy.api.annotations.Key; import org.apache.olingo.ext.proxy.api.annotations.Key;
import org.apache.olingo.ext.proxy.api.annotations.Namespace; import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Term;
import org.apache.olingo.ext.proxy.commons.AbstractStructuredInvocationHandler; import org.apache.olingo.ext.proxy.commons.AbstractStructuredInvocationHandler;
import org.apache.olingo.ext.proxy.commons.ComplexInvocationHandler; import org.apache.olingo.ext.proxy.commons.ComplexInvocationHandler;
import org.apache.olingo.ext.proxy.commons.EntityInvocationHandler; import org.apache.olingo.ext.proxy.commons.EntityInvocationHandler;
@ -189,48 +194,59 @@ public final class CoreUtils {
return getODataProperty(client, property, type, obj); return getODataProperty(client, property, type, obj);
} }
public static ODataAnnotation getODataAnnotation(
final CommonEdmEnabledODataClient<?> client, final String term, final EdmType type, final Object obj) {
ODataAnnotation annotation;
if (obj == null) {
annotation = new ODataAnnotationImpl(term, null);
} else {
final EdmTypeInfo valueType = type == null
? guessTypeFromObject(client, obj)
: new EdmTypeInfo.Builder().setEdm(client.getCachedEdm()).
setTypeExpression(type.getFullQualifiedName().toString()).build();
annotation = new ODataAnnotationImpl(term,
(org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, valueType, obj));
}
return annotation;
}
public static CommonODataProperty getODataProperty( public static CommonODataProperty getODataProperty(
final CommonEdmEnabledODataClient<?> client, final String name, final EdmTypeInfo type, final Object obj) { final CommonEdmEnabledODataClient<?> client, final String name, final EdmTypeInfo type, final Object obj) {
CommonODataProperty oprop; CommonODataProperty property;
try { try {
if (obj == null) { if (obj == null) {
oprop = client.getObjectFactory().newPrimitiveProperty(name, null); property = client.getObjectFactory().newPrimitiveProperty(name, null);
} else { } else {
final EdmTypeInfo valueType; final EdmTypeInfo valueType = type == null
if (type == null) { ? guessTypeFromObject(client, obj)
valueType = guessTypeFromObject(client, obj); : type;
} else { final ODataValue value = getODataValue(client, valueType, obj);
valueType = type;
}
if (valueType.isCollection()) { if (valueType.isCollection()) {
// create collection property property = client.getObjectFactory().newCollectionProperty(name, value.asCollection());
oprop = client.getObjectFactory().newCollectionProperty(name, getODataValue(client, valueType, obj).
asCollection());
} else if (valueType.isPrimitiveType()) { } else if (valueType.isPrimitiveType()) {
// create a primitive property property = client.getObjectFactory().newPrimitiveProperty(name, value.asPrimitive());
oprop = client.getObjectFactory().newPrimitiveProperty(name, getODataValue(client, valueType, obj).
asPrimitive());
} else if (valueType.isComplexType()) { } else if (valueType.isComplexType()) {
// create a complex property property = client.getObjectFactory().newComplexProperty(name, value.asComplex());
oprop = client.getObjectFactory().newComplexProperty(name, getODataValue(client, valueType, obj).
asComplex());
} else if (valueType.isEnumType()) { } else if (valueType.isEnumType()) {
if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) { if (client.getServiceVersion().compareTo(ODataServiceVersion.V30) <= 0) {
throw new UnsupportedInV3Exception(); throw new UnsupportedInV3Exception();
} else { } else {
oprop = ((ODataObjectFactory) client.getObjectFactory()).newEnumProperty(name, property = ((ODataObjectFactory) client.getObjectFactory()).newEnumProperty(name,
((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, valueType, obj)). ((org.apache.olingo.commons.api.domain.v4.ODataValue) value).asEnum());
asEnum());
} }
} else { } else {
throw new UnsupportedOperationException("Usupported object type " + valueType.getFullQualifiedName()); throw new UnsupportedOperationException("Usupported object type " + valueType.getFullQualifiedName());
} }
} }
return oprop; return property;
} catch (Exception e) { } catch (Exception e) {
throw new IllegalStateException(e); throw new IllegalStateException(e);
} }
@ -287,15 +303,28 @@ public final class CoreUtils {
final Map<String, Object> changes, final Map<String, Object> changes,
final CommonODataEntity entity) { final CommonODataEntity entity) {
for (Map.Entry<String, Object> property : changes.entrySet()) { for (Map.Entry<String, Object> entry : changes.entrySet()) {
// if the getter exists and it is annotated as expected then get value/value and add a new property
final CommonODataProperty odataProperty = entity.getProperty(property.getKey());
if (odataProperty != null) {
entity.getProperties().remove(odataProperty);
}
((List<CommonODataProperty>) entity.getProperties()).add( ((List<CommonODataProperty>) entity.getProperties()).add(
getODataEntityProperty(client, entity.getTypeName(), property.getKey(), property.getValue())); getODataEntityProperty(client, entity.getTypeName(), entry.getKey(), entry.getValue()));
}
}
public static void addAnnotations(
final CommonEdmEnabledODataClient<?> client,
final Map<Class<? extends AbstractTerm>, Object> annotations,
final ODataEntity entity) {
for (Map.Entry<Class<? extends AbstractTerm>, Object> entry : annotations.entrySet()) {
final Namespace nsAnn = entry.getKey().getAnnotation(Namespace.class);
final Term termAnn = entry.getKey().getAnnotation(Term.class);
final FullQualifiedName termName = new FullQualifiedName(nsAnn.value(), termAnn.name());
final EdmTerm term = client.getCachedEdm().getTerm(termName);
if (term == null) {
LOG.error("Could not find term for class {}", entry.getKey().getName());
} else {
entity.getAnnotations().add(getODataAnnotation(
client, term.getFullQualifiedName().toString(), term.getType(), entry.getValue()));
}
} }
} }
@ -426,7 +455,7 @@ public final class CoreUtils {
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
new Class<?>[] {getter.getReturnType()}, new Class<?>[] {getter.getReturnType()},
ComplexInvocationHandler.getInstance( ComplexInvocationHandler.getInstance(
client, property.getName(), getter.getReturnType(), null)); client, property.getName(), getter.getReturnType(), null));
populate(client, complex, Property.class, property.getValue().asComplex().iterator()); populate(client, complex, Property.class, property.getValue().asComplex().iterator());
setPropertyValue(bean, getter, complex); setPropertyValue(bean, getter, complex);
@ -451,7 +480,7 @@ public final class CoreUtils {
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
new Class<?>[] {collItemClass}, new Class<?>[] {collItemClass},
ComplexInvocationHandler.getInstance( ComplexInvocationHandler.getInstance(
client, property.getName(), collItemClass, null)); client, property.getName(), collItemClass, null));
populate(client, collItem, Property.class, value.asComplex().iterator()); populate(client, collItem, Property.class, value.asComplex().iterator());
collection.add(collItem); collection.add(collItem);
@ -467,9 +496,9 @@ public final class CoreUtils {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static Object getValueFromProperty( public static Object getObjectFromODataValue(
final CommonEdmEnabledODataClient<?> client, final CommonEdmEnabledODataClient<?> client,
final CommonODataProperty property, final ODataValue value,
final Type typeRef, final Type typeRef,
final EntityInvocationHandler entityHandler) final EntityInvocationHandler entityHandler)
throws InstantiationException, IllegalAccessException { throws InstantiationException, IllegalAccessException {
@ -487,59 +516,93 @@ public final class CoreUtils {
final Object res; final Object res;
if (property == null || property.hasNullValue()) { if (value == null) {
res = null; res = null;
} else if (property.hasComplexValue()) { } else if (value.isComplex()) {
// complex types supports inheritance in V4, best to re-read actual type // complex types supports inheritance in V4, best to re-read actual type
internalRef = getComplexTypeRef(property); internalRef = getComplexTypeRef(value);
res = Proxy.newProxyInstance( res = Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
new Class<?>[] {internalRef}, new Class<?>[] {internalRef},
ComplexInvocationHandler.getInstance( ComplexInvocationHandler.getInstance(
client, property.getValue().asComplex(), internalRef, entityHandler)); client, value.asComplex(), internalRef, entityHandler));
} else if (property.hasCollectionValue()) { } else if (value.isCollection()) {
final ArrayList<Object> collection = new ArrayList<Object>(); final ArrayList<Object> collection = new ArrayList<Object>();
final Iterator<ODataValue> collPropItor = property.getValue().asCollection().iterator(); final Iterator<ODataValue> collPropItor = value.asCollection().iterator();
while (collPropItor.hasNext()) { while (collPropItor.hasNext()) {
final ODataValue value = collPropItor.next(); final ODataValue itemValue = collPropItor.next();
if (value.isPrimitive()) { if (itemValue.isPrimitive()) {
collection.add(CoreUtils.primitiveValueToObject(value.asPrimitive(), internalRef)); collection.add(CoreUtils.primitiveValueToObject(itemValue.asPrimitive(), internalRef));
} else if (value.isComplex()) { } else if (itemValue.isComplex()) {
internalRef = getComplexTypeRef(property); internalRef = getComplexTypeRef(value);
final Object collItem = Proxy.newProxyInstance( final Object collItem = Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(), Thread.currentThread().getContextClassLoader(),
new Class<?>[] {internalRef}, new Class<?>[] {internalRef},
ComplexInvocationHandler.getInstance( ComplexInvocationHandler.getInstance(
client, value.asComplex(), internalRef, entityHandler)); client, itemValue.asComplex(), internalRef, entityHandler));
collection.add(collItem); collection.add(collItem);
} }
} }
res = collection; res = collection;
} else if (property instanceof ODataProperty && ((ODataProperty) property).hasEnumValue()) { } else if (value instanceof ODataEnumValue) {
if (internalRef == null) { if (internalRef == null) {
internalRef = getEnumTypeRef(property); internalRef = getEnumTypeRef(value);
} }
res = enumValueToObject(((ODataProperty) property).getEnumValue(), internalRef); res = enumValueToObject((ODataEnumValue) value, internalRef);
} else { } else {
res = primitiveValueToObject(property.getPrimitiveValue(), internalRef); res = primitiveValueToObject(value.asPrimitive(), internalRef);
} }
return res; return res;
} }
private static Class<?> getEnumTypeRef(final CommonODataProperty property) { @SuppressWarnings("unchecked")
return getTypeRef(property, "META-INF/" + Constants.PROXY_ENUM_CLASS_LIST, EnumType.class); public static Collection<Class<? extends AbstractTerm>> getAnnotationTerms(final List<ODataAnnotation> annotations) {
final List<Class<? extends AbstractTerm>> res = new ArrayList<Class<? extends AbstractTerm>>();
for (ODataAnnotation annotation : annotations) {
res.add((Class<? extends AbstractTerm>) getTermTypeRef(annotation));
}
return res;
} }
private static Class<?> getComplexTypeRef(final CommonODataProperty property) { private static Class<?> getTermTypeRef(final ODataAnnotation annotation) {
return getTypeRef(property, "META-INF/" + Constants.PROXY_COMPLEX_CLASS_LIST, ComplexType.class); try {
final List<String> pkgs = IOUtils.readLines(Thread.currentThread().getContextClassLoader().
getResourceAsStream("META-INF/" + Constants.PROXY_TERM_CLASS_LIST),
Constants.UTF8);
for (String pkg : pkgs) {
final Class<?> clazz = Class.forName(pkg);
final Term term = clazz.getAnnotation(Term.class);
final Namespace ns = clazz.getAnnotation(Namespace.class);
if (ns != null && term != null
&& annotation.getTerm().equals(new FullQualifiedName(ns.value(), term.name()).toString())) {
return clazz;
}
}
} catch (Exception e) {
LOG.warn("Error retrieving class list for {}", Term.class.getName(), e);
}
throw new IllegalArgumentException("Could not find Term class for " + annotation.getTerm());
}
private static Class<?> getEnumTypeRef(final ODataValue value) {
return getTypeRef(value, "META-INF/" + Constants.PROXY_ENUM_CLASS_LIST, EnumType.class);
}
private static Class<?> getComplexTypeRef(final ODataValue value) {
return getTypeRef(value, "META-INF/" + Constants.PROXY_COMPLEX_CLASS_LIST, ComplexType.class);
} }
private static Class<?> getTypeRef( private static Class<?> getTypeRef(
final CommonODataProperty property, final ODataValue value,
final String proxyClassListFile, final String proxyClassListFile,
final Class<? extends Annotation> annType) { final Class<? extends Annotation> annType) {
@ -549,7 +612,7 @@ public final class CoreUtils {
try { try {
final List<String> pkgs = IOUtils.readLines( final List<String> pkgs = IOUtils.readLines(
CoreUtils.class.getClassLoader().getResourceAsStream(proxyClassListFile), Thread.currentThread().getContextClassLoader().getResourceAsStream(proxyClassListFile),
Constants.UTF8); Constants.UTF8);
for (String pkg : pkgs) { for (String pkg : pkgs) {
@ -557,20 +620,19 @@ public final class CoreUtils {
final Annotation ann = clazz.getAnnotation(annType); final Annotation ann = clazz.getAnnotation(annType);
final Namespace ns = clazz.getAnnotation(Namespace.class); final Namespace ns = clazz.getAnnotation(Namespace.class);
if (ns != null && ann != null) { if (ns != null && ann != null
if (property.getValue().getTypeName().replaceAll("^Collection\\(", "").replaceAll("\\)$", "").equals( && value.getTypeName().replaceAll("^Collection\\(", "").replaceAll("\\)$", "").
new FullQualifiedName(ns.value(), annType.isAssignableFrom(EnumType.class) equals(new FullQualifiedName(ns.value(), annType.isAssignableFrom(EnumType.class)
? EnumType.class.cast(ann).name() ? EnumType.class.cast(ann).name()
: ComplexType.class.cast(ann).name()).toString())) { : ComplexType.class.cast(ann).name()).toString())) {
return clazz; return clazz;
}
} }
} }
} catch (Exception e) { } catch (Exception e) {
LOG.warn("Error retrieving proxy complex class list", e); LOG.warn("Error retrieving class list for {}", annType.getName(), e);
} }
throw new IllegalArgumentException("Provided property '" + property + "' is not complex"); throw new IllegalArgumentException("Provided value '" + value + "' is not annotated as " + annType.getName());
} }
private static String firstValidEntityKey(final Class<?> entityTypeRef) { private static String firstValidEntityKey(final Class<?> entityTypeRef) {

View File

@ -47,6 +47,7 @@ import org.apache.olingo.commons.api.edm.EdmEnumType;
import org.apache.olingo.commons.api.edm.EdmNavigationProperty; import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
import org.apache.olingo.commons.api.edm.EdmSchema; import org.apache.olingo.commons.api.edm.EdmSchema;
import org.apache.olingo.commons.api.edm.EdmSingleton; import org.apache.olingo.commons.api.edm.EdmSingleton;
import org.apache.olingo.commons.api.edm.EdmTerm;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.velocity.Template; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext; import org.apache.velocity.VelocityContext;
@ -231,6 +232,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
namespaces.add(schema.getNamespace().toLowerCase()); namespaces.add(schema.getNamespace().toLowerCase());
} }
final StringBuilder termNames = new StringBuilder();
final StringBuilder complexTypeNames = new StringBuilder(); final StringBuilder complexTypeNames = new StringBuilder();
final StringBuilder enumTypeNames = new StringBuilder(); final StringBuilder enumTypeNames = new StringBuilder();
@ -250,7 +252,14 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
final Map<String, Object> objs = new HashMap<String, Object>(); final Map<String, Object> objs = new HashMap<String, Object>();
// write types into types package for (EdmTerm term : schema.getTerms()) {
final String className = utility.capitalize(term.getName());
termNames.append(typesPkg).append('.').append(className).append('\n');
objs.clear();
objs.put("term", term);
parseObj(typesBaseDir, typesPkg, "term", className + ".java", objs);
}
for (EdmEnumType enumType : schema.getEnumTypes()) { for (EdmEnumType enumType : schema.getEnumTypes()) {
final String className = utility.capitalize(enumType.getName()); final String className = utility.capitalize(enumType.getName());
enumTypeNames.append(typesPkg).append('.').append(className).append('\n'); enumTypeNames.append(typesPkg).append('.').append(className).append('\n');
@ -364,6 +373,8 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo {
} }
final File metaInf = mkdir("META-INF"); final File metaInf = mkdir("META-INF");
FileUtils.fileWrite(
metaInf.getPath() + File.separator + Constants.PROXY_TERM_CLASS_LIST, termNames.toString());
FileUtils.fileWrite( FileUtils.fileWrite(
metaInf.getPath() + File.separator + Constants.PROXY_ENUM_CLASS_LIST, enumTypeNames.toString()); metaInf.getPath() + File.separator + Constants.PROXY_ENUM_CLASS_LIST, enumTypeNames.toString());
FileUtils.fileWrite( FileUtils.fileWrite(

View File

@ -20,6 +20,7 @@ package ${package};
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -92,4 +93,8 @@ public interface $utility.capitalize($entityType.Name)Collection extends Abstrac
#end #end
} }
#end #end
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -28,6 +28,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -62,7 +63,7 @@ import javax.xml.datatype.Duration;
isAbstract = $entityType.Abstract#if($entityType.getBaseType()), isAbstract = $entityType.Abstract#if($entityType.getBaseType()),
baseType = "$entityType.getBaseType().getFullQualifiedName().toString()"#end) baseType = "$entityType.getBaseType().getFullQualifiedName().toString()"#end)
public interface $utility.capitalize($entityType.Name) public interface $utility.capitalize($entityType.Name)
extends #if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end { extends AbstractAnnotatable,#if( $entityType.getBaseType() )$utility.getJavaType($entityType.getBaseType())#{elseif}( $entityType.isOpenType() )AbstractOpenType#{else}Serializable#end {
#set( $keys = [] ) #set( $keys = [] )
#foreach($key in $entityType.KeyPropertyRefs) #foreach($key in $entityType.KeyPropertyRefs)

View File

@ -0,0 +1,34 @@
#*
* 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 ${package};
import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.Term;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
#foreach($ns in $namespaces)
import ${basePackage}.${ns}.*;
import ${basePackage}.${ns}.types.*;
#end
@Namespace("$namespace")
@Term(name = "$term.Name",
type="$term.Type"#if($term.getBaseTerm()),
baseTerm = "$term.getBaseTerm().getFullQualifiedName().toString()"#end)
public interface $utility.capitalize($term.Name) extends AbstractTerm {
}

View File

@ -20,8 +20,12 @@ package org.apache.olingo.fit.proxy.v4;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.CompanyCategory; import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.CompanyCategory;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.IsBoss;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person;
import org.junit.Test; import org.junit.Test;
public class SingletonTestITCase extends AbstractTestITCase { public class SingletonTestITCase extends AbstractTestITCase {
@ -42,4 +46,18 @@ public class SingletonTestITCase extends AbstractTestITCase {
assertEquals(132520L, container.getCompany().get().getRevenue(), 0); assertEquals(132520L, container.getCompany().get().getRevenue(), 0);
} }
@Test
public void readWithAnnotations() {
final Company company = container.getCompany().get();
assertTrue(company.getAnnotationTerms().isEmpty());
final Person boss = container.getBoss().get();
assertEquals(2, boss.getPersonID(), 0);
assertEquals(1, boss.getAnnotationTerms().size());
final Object isBoss = boss.getAnnotation(IsBoss.class);
assertTrue(isBoss instanceof Boolean);
assertTrue((Boolean) isBoss);
}
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Account public interface Account
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface AccountCollection extends AbstractEntityCollection<Account> { public interface AccountCollection extends AbstractEntityCollection<Account> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Asset public interface Asset
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface AssetCollection extends AbstractEntityCollection<Asset> { public interface AssetCollection extends AbstractEntityCollection<Asset> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Club public interface Club
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface ClubCollection extends AbstractEntityCollection<Club> { public interface ClubCollection extends AbstractEntityCollection<Club> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Company public interface Company
extends AbstractOpenType { extends AbstractAnnotatable,AbstractOpenType {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface CompanyCollection extends AbstractEntityCollection<Company> { public interface CompanyCollection extends AbstractEntityCollection<Company> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
isAbstract = false, isAbstract = false,
baseType = "Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument") baseType = "Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument")
public interface CreditCardPI public interface CreditCardPI
extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument { extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface CreditCardPICollection extends AbstractEntityCollection<CreditCardPI> { public interface CreditCardPICollection extends AbstractEntityCollection<CreditCardPI> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface CreditRecord public interface CreditRecord
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface CreditRecordCollection extends AbstractEntityCollection<CreditRecord> { public interface CreditRecordCollection extends AbstractEntityCollection<CreditRecord> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
isAbstract = false, isAbstract = false,
baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person") baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
public interface Customer public interface Customer
extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person { extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface CustomerCollection extends AbstractEntityCollection<Customer> { public interface CustomerCollection extends AbstractEntityCollection<Customer> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Department public interface Department
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface DepartmentCollection extends AbstractEntityCollection<Department> { public interface DepartmentCollection extends AbstractEntityCollection<Department> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
isAbstract = false, isAbstract = false,
baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person") baseType = "Microsoft.Test.OData.Services.ODataWCFService.Person")
public interface Employee public interface Employee
extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person { extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface EmployeeCollection extends AbstractEntityCollection<Employee> { public interface EmployeeCollection extends AbstractEntityCollection<Employee> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface GiftCard public interface GiftCard
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface GiftCardCollection extends AbstractEntityCollection<GiftCard> { public interface GiftCardCollection extends AbstractEntityCollection<GiftCard> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -0,0 +1,31 @@
/*
* 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.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types;
import org.apache.olingo.ext.proxy.api.annotations.Namespace;
import org.apache.olingo.ext.proxy.api.annotations.Term;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.*;
import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.*;
@Namespace("Microsoft.Test.OData.Services.ODataWCFService")
@Term(name = "IsBoss",
type="Edm.Boolean")
public interface IsBoss extends AbstractTerm {
}

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface LabourUnion public interface LabourUnion
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface LabourUnionCollection extends AbstractEntityCollection<LabourUnion> { public interface LabourUnionCollection extends AbstractEntityCollection<LabourUnion> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Order public interface Order
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface OrderCollection extends AbstractEntityCollection<Order> { public interface OrderCollection extends AbstractEntityCollection<Order> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface OrderDetail public interface OrderDetail
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface OrderDetailCollection extends AbstractEntityCollection<OrderDetail> { public interface OrderDetailCollection extends AbstractEntityCollection<OrderDetail> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface PaymentInstrument public interface PaymentInstrument
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface PaymentInstrumentCollection extends AbstractEntityCollection<PaymentInstrument> { public interface PaymentInstrumentCollection extends AbstractEntityCollection<PaymentInstrument> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Person public interface Person
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface PersonCollection extends AbstractEntityCollection<Person> { public interface PersonCollection extends AbstractEntityCollection<Person> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Product public interface Product
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -56,4 +57,8 @@ public interface ProductCollection extends AbstractEntityCollection<Product> {
); );
} }
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface ProductDetail public interface ProductDetail
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface ProductDetailCollection extends AbstractEntityCollection<ProductDetail> { public interface ProductDetailCollection extends AbstractEntityCollection<ProductDetail> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface ProductReview public interface ProductReview
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface ProductReviewCollection extends AbstractEntityCollection<ProductReview> { public interface ProductReviewCollection extends AbstractEntityCollection<ProductReview> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -58,7 +59,7 @@ import javax.xml.datatype.Duration;
isAbstract = false, isAbstract = false,
baseType = "Microsoft.Test.OData.Services.ODataWCFService.Company") baseType = "Microsoft.Test.OData.Services.ODataWCFService.Company")
public interface PublicCompany public interface PublicCompany
extends org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company { extends AbstractAnnotatable,org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Company {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface PublicCompanyCollection extends AbstractEntityCollection<PublicCompany> { public interface PublicCompanyCollection extends AbstractEntityCollection<PublicCompany> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Statement public interface Statement
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface StatementCollection extends AbstractEntityCollection<Statement> { public interface StatementCollection extends AbstractEntityCollection<Statement> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface StoredPI public interface StoredPI
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface StoredPICollection extends AbstractEntityCollection<StoredPI> { public interface StoredPICollection extends AbstractEntityCollection<StoredPI> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -27,6 +27,7 @@ import org.apache.olingo.ext.proxy.api.annotations.NavigationProperty;
import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.api.annotations.Property;
import org.apache.olingo.ext.proxy.api.annotations.Operation; 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.Parameter;
import org.apache.olingo.ext.proxy.api.AbstractAnnotatable;
import org.apache.olingo.ext.proxy.api.AbstractOpenType; import org.apache.olingo.ext.proxy.api.AbstractOpenType;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.commons.api.edm.constants.EdmContentKind; import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
@ -57,7 +58,7 @@ import javax.xml.datatype.Duration;
hasStream = false, hasStream = false,
isAbstract = false) isAbstract = false)
public interface Subscription public interface Subscription
extends Serializable { extends AbstractAnnotatable,Serializable {
@Key @Key

View File

@ -20,6 +20,7 @@ package org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.servic
import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.ext.proxy.api.AbstractEntityCollection; import org.apache.olingo.ext.proxy.api.AbstractEntityCollection;
import org.apache.olingo.ext.proxy.api.AbstractTerm;
import org.apache.olingo.ext.proxy.api.OperationType; import org.apache.olingo.ext.proxy.api.OperationType;
import org.apache.olingo.ext.proxy.api.annotations.Operation; import org.apache.olingo.ext.proxy.api.annotations.Operation;
import org.apache.olingo.ext.proxy.api.annotations.Parameter; import org.apache.olingo.ext.proxy.api.annotations.Parameter;
@ -43,4 +44,8 @@ import java.util.Calendar;
import javax.xml.datatype.Duration; import javax.xml.datatype.Duration;
public interface SubscriptionCollection extends AbstractEntityCollection<Subscription> { public interface SubscriptionCollection extends AbstractEntityCollection<Subscription> {
Object getAnnotation(Class<? extends AbstractTerm> term);
Collection<Class<? extends AbstractTerm>> getAnnotationTerms();
} }

View File

@ -0,0 +1 @@
org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.IsBoss

View File

@ -35,6 +35,8 @@ public interface Constants {
public final static Integer DEFAULT_SCALE = 25; public final static Integer DEFAULT_SCALE = 25;
public final static String PROXY_TERM_CLASS_LIST = "org.apache.olingo.ext.proxy.term";
public final static String PROXY_ENUM_CLASS_LIST = "org.apache.olingo.ext.proxy.enum"; public final static String PROXY_ENUM_CLASS_LIST = "org.apache.olingo.ext.proxy.enum";
public final static String PROXY_COMPLEX_CLASS_LIST = "org.apache.olingo.ext.proxy.complex"; public final static String PROXY_COMPLEX_CLASS_LIST = "org.apache.olingo.ext.proxy.complex";