Repository: olingo-odata4 Updated Branches: refs/heads/olingo263 585ddaead -> 6e9cb60e4
[OLINGO-263] Some refinements + client support form edmx:IncludeAnnotations Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/6e9cb60e Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/6e9cb60e Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/6e9cb60e Branch: refs/heads/olingo263 Commit: 6e9cb60e49664884d8c1e944222d25bb04c8fab7 Parents: 585ddae Author: Francesco Chicchiriccò <[email protected]> Authored: Mon May 5 15:17:15 2014 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Mon May 5 15:17:15 2014 +0200 ---------------------------------------------------------------------- .../request/retrieve/XMLMetadataRequest.java | 4 +- .../olingo/client/api/edm/xml/XMLMetadata.java | 2 + .../client/api/edm/xml/v4/Annotations.java | 6 +- .../olingo/client/api/op/CommonODataReader.java | 4 +- .../retrieve/EdmMetadataRequestImpl.java | 4 +- .../retrieve/v3/XMLMetadataRequestImpl.java | 25 +++-- .../retrieve/v4/XMLMetadataRequestImpl.java | 96 +++++++++++++++----- .../edm/AbstractEdmServiceMetadataImpl.java | 3 +- .../olingo/client/core/edm/EdmClientImpl.java | 19 ++-- .../core/edm/v4/EdmServiceMetadataImpl.java | 4 +- .../core/edm/xml/AbstractXMLMetadata.java | 4 + .../client/core/edm/xml/v4/AnnotationsImpl.java | 12 +-- .../client/core/edm/xml/v4/SchemaImpl.java | 26 +++++- .../client/core/op/AbstractODataReader.java | 10 +- 14 files changed, 147 insertions(+), 72 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/XMLMetadataRequest.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/XMLMetadataRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/XMLMetadataRequest.java index fbeff8f..619aa04 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/XMLMetadataRequest.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/XMLMetadataRequest.java @@ -18,12 +18,12 @@ */ package org.apache.olingo.client.api.communication.request.retrieve; -import java.util.List; +import java.util.Map; import org.apache.olingo.client.api.edm.xml.Schema; import org.apache.olingo.commons.api.format.ODataFormat; /** * This class implements an XML metadata request. */ -public interface XMLMetadataRequest extends ODataRetrieveRequest<List<? extends Schema>, ODataFormat> { +public interface XMLMetadataRequest extends ODataRetrieveRequest<Map<String, Schema>, ODataFormat> { } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/XMLMetadata.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/XMLMetadata.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/XMLMetadata.java index bcb5973..bf618f9 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/XMLMetadata.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/XMLMetadata.java @@ -19,6 +19,7 @@ package org.apache.olingo.client.api.edm.xml; import java.util.List; +import java.util.Map; /** * Entry point for access information about EDM metadata. @@ -56,4 +57,5 @@ public interface XMLMetadata { */ List<? extends Schema> getSchemas(); + Map<String, Schema> getSchemaByNsOrAlias(); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotations.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotations.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotations.java index fc481a2..f23bed3 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotations.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/Annotations.java @@ -18,13 +18,9 @@ */ package org.apache.olingo.client.api.edm.xml.v4; -import java.util.List; - import org.apache.olingo.client.api.edm.xml.CommonAnnotations; -public interface Annotations extends CommonAnnotations { - - List<? extends Annotation> getAnnotations(); +public interface Annotations extends CommonAnnotations, Annotatable { Annotation getAnnotation(String term); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java index eea1567..897f8f9 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java @@ -20,7 +20,7 @@ package org.apache.olingo.client.api.op; import java.io.InputStream; import java.io.Serializable; -import java.util.List; +import java.util.Map; import org.apache.olingo.client.api.edm.xml.Schema; import org.apache.olingo.commons.api.data.ResWrap; import org.apache.olingo.commons.api.domain.ODataError; @@ -56,7 +56,7 @@ public interface CommonODataReader extends Serializable { * <tt><edmx:Reference/></tt>) metadata document * @return metadata representation. */ - Edm readMetadata(List<? extends Schema> xmlSchemas); + Edm readMetadata(Map<String, Schema> xmlSchemas); /** * Parses an OData service document. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/EdmMetadataRequestImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/EdmMetadataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/EdmMetadataRequestImpl.java index 37a4220..5a02a19 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/EdmMetadataRequestImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/EdmMetadataRequestImpl.java @@ -19,7 +19,7 @@ package org.apache.olingo.client.core.communication.request.retrieve; import java.net.URI; -import java.util.List; +import java.util.Map; import org.apache.olingo.client.api.CommonODataClient; import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest; import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse; @@ -46,7 +46,7 @@ class EdmMetadataRequestImpl extends AbstractMetadataRequestImpl<Edm> implements @Override public ODataRetrieveResponse<Edm> execute() { - final ODataRetrieveResponse<List<? extends Schema>> xmlMetadataResponse = + final ODataRetrieveResponse<Map<String, Schema>> xmlMetadataResponse = odataClient.getRetrieveRequestFactory().getXMLMetadataRequest(serviceRoot).execute(); return new AbstractODataRetrieveResponse() { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/XMLMetadataRequestImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/XMLMetadataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/XMLMetadataRequestImpl.java index a7ce9e0..8a480ee 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/XMLMetadataRequestImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/XMLMetadataRequestImpl.java @@ -19,7 +19,9 @@ package org.apache.olingo.client.core.communication.request.retrieve.v3; import java.net.URI; -import java.util.List; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.olingo.client.api.communication.request.retrieve.XMLMetadataRequest; @@ -29,7 +31,7 @@ import org.apache.olingo.client.api.edm.xml.XMLMetadata; import org.apache.olingo.client.api.v3.ODataClient; import org.apache.olingo.client.core.communication.request.retrieve.AbstractMetadataRequestImpl; -public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? extends Schema>> +public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<Map<String, Schema>> implements XMLMetadataRequest { XMLMetadataRequestImpl(final ODataClient odataClient, final URI query) { @@ -37,13 +39,13 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e } @Override - public ODataRetrieveResponse<List<? extends Schema>> execute() { + public ODataRetrieveResponse<Map<String, Schema>> execute() { return new XMLMetadataResponseImpl(httpClient, doExecute()); } public class XMLMetadataResponseImpl extends AbstractODataRetrieveResponse { - private XMLMetadata metadata = null; + private Map<String, Schema> schemas; /** * Constructor. @@ -65,15 +67,22 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e } @Override - public List<? extends Schema> getBody() { - if (metadata == null) { + public Map<String, Schema> getBody() { + if (schemas == null) { + schemas = new HashMap<String, Schema>(); try { - metadata = odataClient.getDeserializer().toMetadata(getRawResponse()); + final XMLMetadata metadata = odataClient.getDeserializer().toMetadata(getRawResponse()); + for (Schema schema : metadata.getSchemas()) { + schemas.put(schema.getNamespace(), schema); + if (StringUtils.isNotBlank(schema.getAlias())) { + schemas.put(schema.getAlias(), schema); + } + } } finally { this.close(); } } - return metadata.getSchemas(); + return schemas; } } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java index 91b1516..0a1d48e 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java @@ -19,19 +19,24 @@ package org.apache.olingo.client.core.communication.request.retrieve.v4; import java.net.URI; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.olingo.client.api.communication.request.retrieve.XMLMetadataRequest; import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse; import org.apache.olingo.client.api.edm.xml.Schema; +import org.apache.olingo.client.api.edm.xml.v4.Annotation; +import org.apache.olingo.client.api.edm.xml.v4.Annotations; import org.apache.olingo.client.api.edm.xml.v4.Include; +import org.apache.olingo.client.api.edm.xml.v4.IncludeAnnotations; import org.apache.olingo.client.api.edm.xml.v4.Reference; import org.apache.olingo.client.api.edm.xml.v4.XMLMetadata; import org.apache.olingo.client.api.v4.ODataClient; import org.apache.olingo.client.core.communication.request.retrieve.AbstractMetadataRequestImpl; +import org.apache.olingo.client.core.edm.xml.v4.AnnotationsImpl; +import org.apache.olingo.client.core.edm.xml.v4.SchemaImpl; -public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? extends Schema>> +public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<Map<String, Schema>> implements XMLMetadataRequest { XMLMetadataRequestImpl(final ODataClient odataClient, final URI uri) { @@ -39,28 +44,73 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e } @Override - public ODataRetrieveResponse<List<? extends Schema>> execute() { + public ODataRetrieveResponse<Map<String, Schema>> execute() { final SingleXMLMetadatRequestImpl rootReq = new SingleXMLMetadatRequestImpl((ODataClient) odataClient, uri); final ODataRetrieveResponse<XMLMetadata> rootRes = rootReq.execute(); final XMLMetadataResponseImpl response = new XMLMetadataResponseImpl(); final XMLMetadata rootMetadata = rootRes.getBody(); - response.getSchemas().addAll(rootMetadata.getSchemas()); - - if (!rootMetadata.getReferences().isEmpty()) { - for (Reference reference : rootMetadata.getReferences()) { - final SingleXMLMetadatRequestImpl includeReq = new SingleXMLMetadatRequestImpl((ODataClient) odataClient, - odataClient.getURIBuilder(reference.getUri().toASCIIString()).build()); - final XMLMetadata includeMetadata = includeReq.execute().getBody(); - - for (Include include : reference.getIncludes()) { - Schema includedSchema = includeMetadata.getSchema(include.getNamespace()); - if (includedSchema == null && StringUtils.isNotBlank(include.getAlias())) { - includedSchema = includeMetadata.getSchema(include.getAlias()); + for (Schema schema : rootMetadata.getSchemas()) { + response.getBody().put(schema.getNamespace(), schema); + if (StringUtils.isNotBlank(schema.getAlias())) { + response.getBody().put(schema.getAlias(), schema); + } + } + + // process external references + for (Reference reference : rootMetadata.getReferences()) { + final SingleXMLMetadatRequestImpl includeReq = new SingleXMLMetadatRequestImpl( + (ODataClient) odataClient, odataClient.getURIBuilder(reference.getUri().toASCIIString()).build()); + final XMLMetadata includeMetadata = includeReq.execute().getBody(); + + // edmx:Include + for (Include include : reference.getIncludes()) { + final Schema includedSchema = includeMetadata.getSchema(include.getNamespace()); + if (includedSchema != null) { + response.getBody().put(include.getNamespace(), includedSchema); + if (StringUtils.isNotBlank(include.getAlias())) { + response.getBody().put(include.getAlias(), includedSchema); + } + } + } + + // edmx:IncludeAnnotations + for (IncludeAnnotations include : reference.getIncludeAnnotations()) { + for (Schema schema : includeMetadata.getSchemas()) { + // create empty schema that will be fed with edm:Annotations that match the criteria in IncludeAnnotations + final SchemaImpl forInclusion = new SchemaImpl(); + forInclusion.setNamespace(schema.getNamespace()); + forInclusion.setAlias(schema.getAlias()); + + // process all edm:Annotations in each schema of the included document + for (Annotations annotationGroup : ((SchemaImpl) schema).getAnnotationGroups()) { + // take into account only when (TargetNamespace was either not provided or matches) and + // (Qualifier was either not provided or matches) + if ((StringUtils.isBlank(include.getTargetNamespace()) + || include.getTargetNamespace().equals( + StringUtils.substringBeforeLast(annotationGroup.getTarget(), "."))) + && (StringUtils.isBlank(include.getQualifier()) + || include.getQualifier().equals(annotationGroup.getQualifier()))) { + + final AnnotationsImpl toBeIncluded = new AnnotationsImpl(); + toBeIncluded.setTarget(annotationGroup.getTarget()); + toBeIncluded.setQualifier(annotationGroup.getQualifier()); + // only import annotations with terms matching the given TermNamespace + for (Annotation annotation : annotationGroup.getAnnotations()) { + if (include.getTermNamespace().equals(StringUtils.substringBeforeLast(annotation.getTerm(), "."))) { + toBeIncluded.getAnnotations().add(annotation); + } + } + forInclusion.getAnnotationGroups().add(toBeIncluded); + } } - if (includedSchema != null) { - response.getSchemas().add(includedSchema); + + if (!forInclusion.getAnnotationGroups().isEmpty()) { + response.getBody().put(forInclusion.getNamespace(), forInclusion); + if (StringUtils.isNotBlank(forInclusion.getAlias())) { + response.getBody().put(forInclusion.getAlias(), forInclusion); + } } } } @@ -93,7 +143,7 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e public class XMLMetadataResponseImpl extends AbstractODataRetrieveResponse { - private final List<Schema> schemas = new ArrayList<Schema>(); + private final Map<String, Schema> schemas = new HashMap<String, Schema>(); /** * Constructor. @@ -109,13 +159,9 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<List<? e // just do nothing, this is a placeholder response } - public List<Schema> getSchemas() { - return schemas; - } - @Override - public List<? extends Schema> getBody() { - return getSchemas(); + public Map<String, Schema> getBody() { + return schemas; } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/AbstractEdmServiceMetadataImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/AbstractEdmServiceMetadataImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/AbstractEdmServiceMetadataImpl.java index 020a09a..d598d78 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/AbstractEdmServiceMetadataImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/AbstractEdmServiceMetadataImpl.java @@ -46,8 +46,7 @@ public abstract class AbstractEdmServiceMetadataImpl implements EdmServiceMetada protected List<EdmActionImportInfo> actionImportInfos; - public static EdmServiceMetadata getInstance(final ODataServiceVersion version, - final List<? extends Schema> xmlSchemas) { + public static EdmServiceMetadata getInstance(final ODataServiceVersion version, final List<Schema> xmlSchemas) { return version.compareTo(ODataServiceVersion.V40) < 0 ? new org.apache.olingo.client.core.edm.v3.EdmServiceMetadataImpl(xmlSchemas) http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java index 3c377a0..e7bdfd0 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java @@ -69,23 +69,25 @@ public class EdmClientImpl extends AbstractEdm { private final ODataServiceVersion version; - private final List<? extends Schema> xmlSchemas; + private final List<Schema> xmlSchemas; private final Map<String, Schema> xmlSchemaByNamespace; private final EdmServiceMetadata serviceMetadata; - public EdmClientImpl(final ODataServiceVersion version, final List<? extends Schema> xmlSchemas) { + public EdmClientImpl(final ODataServiceVersion version, final Map<String, Schema> xmlSchemas) { this.version = version; - this.xmlSchemas = xmlSchemas; + this.xmlSchemaByNamespace = xmlSchemas; - this.xmlSchemaByNamespace = new HashMap<String, Schema>(); - for (Schema schema : xmlSchemas) { - xmlSchemaByNamespace.put(schema.getNamespace(), schema); + this.xmlSchemas = new ArrayList<Schema>(); + for (Schema schema : xmlSchemaByNamespace.values()) { + if (!this.xmlSchemas.contains(schema)) { + this.xmlSchemas.add(schema); + } } - this.serviceMetadata = AbstractEdmServiceMetadataImpl.getInstance(version, xmlSchemas); + this.serviceMetadata = AbstractEdmServiceMetadataImpl.getInstance(version, this.xmlSchemas); } @Override @@ -455,11 +457,8 @@ public class EdmClientImpl extends AbstractEdm { protected List<EdmAnnotation> createAnnotations(final FullQualifiedName annotatedName) { List<EdmAnnotation> result = null; - System.out.println("SSSSSSSSS1 " + annotatedName); - final Schema schema = xmlSchemaByNamespace.get(annotatedName.getNamespace()); if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) { - System.out.println("SSSSSSSSS2 " + ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotatables()); final Annotatable annotatable = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotatables().get(annotatedName.getName()); if (annotatable != null && annotatable.getAnnotations() != null) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v4/EdmServiceMetadataImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v4/EdmServiceMetadataImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v4/EdmServiceMetadataImpl.java index d01b991..798716c 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v4/EdmServiceMetadataImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v4/EdmServiceMetadataImpl.java @@ -41,9 +41,7 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl { private List<EdmSingletonInfo> singletonInfos; - private List<EdmActionImportInfo> actionImportInfos; - - public EdmServiceMetadataImpl(final List<? extends Schema> xmlSchemas) { + public EdmServiceMetadataImpl(final List<Schema> xmlSchemas) { super(xmlSchemas); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractXMLMetadata.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractXMLMetadata.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractXMLMetadata.java index e04d5da..729a38d 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractXMLMetadata.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractXMLMetadata.java @@ -93,4 +93,8 @@ public abstract class AbstractXMLMetadata extends AbstractEdmItem implements XML return this.edmx.getDataServices().getSchemas(); } + public Map<String, Schema> getSchemaByNsOrAlias() { + return schemaByNsOrAlias; + } + } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/AnnotationsImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/AnnotationsImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/AnnotationsImpl.java index a579624..110b21f 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/AnnotationsImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/AnnotationsImpl.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import java.util.ArrayList; import java.util.List; - +import org.apache.olingo.client.api.edm.xml.v4.Annotation; import org.apache.olingo.client.api.edm.xml.v4.Annotations; import org.apache.olingo.client.core.edm.xml.AbstractAnnotations; @@ -31,17 +31,17 @@ public class AnnotationsImpl extends AbstractAnnotations implements Annotations private static final long serialVersionUID = 3877353656301805410L; - private final List<AnnotationImpl> annotations = new ArrayList<AnnotationImpl>(); + private final List<Annotation> annotations = new ArrayList<Annotation>(); @Override - public List<AnnotationImpl> getAnnotations() { + public List<Annotation> getAnnotations() { return annotations; } @Override - public AnnotationImpl getAnnotation(final String term) { - AnnotationImpl result = null; - for (AnnotationImpl annotation : getAnnotations()) { + public Annotation getAnnotation(final String term) { + Annotation result = null; + for (Annotation annotation : getAnnotations()) { if (term.equals(annotation.getTerm())) { result = annotation; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/SchemaImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/SchemaImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/SchemaImpl.java index 064e679..0c6c5a8 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/SchemaImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/SchemaImpl.java @@ -26,14 +26,18 @@ import java.util.Map; import org.apache.olingo.client.api.edm.xml.EnumType; import org.apache.olingo.client.api.edm.xml.v4.Action; +import org.apache.olingo.client.api.edm.xml.v4.ActionImport; import org.apache.olingo.client.api.edm.xml.v4.Annotatable; import org.apache.olingo.client.api.edm.xml.v4.Annotation; import org.apache.olingo.client.api.edm.xml.v4.Annotations; import org.apache.olingo.client.api.edm.xml.v4.ComplexType; import org.apache.olingo.client.api.edm.xml.v4.EntityContainer; +import org.apache.olingo.client.api.edm.xml.v4.EntitySet; import org.apache.olingo.client.api.edm.xml.v4.EntityType; import org.apache.olingo.client.api.edm.xml.v4.Function; +import org.apache.olingo.client.api.edm.xml.v4.FunctionImport; import org.apache.olingo.client.api.edm.xml.v4.Schema; +import org.apache.olingo.client.api.edm.xml.v4.Singleton; import org.apache.olingo.client.api.edm.xml.v4.Term; import org.apache.olingo.client.api.edm.xml.v4.TypeDefinition; import org.apache.olingo.client.core.edm.xml.AbstractSchema; @@ -193,12 +197,15 @@ public class SchemaImpl extends AbstractSchema implements Schema { public Map<String, Annotatable> getAnnotatables() { if (annotatables == null) { annotatables = new HashMap<String, Annotatable>(); - for (Action action : getActions()) { - annotatables.put(action.getName(), action); + for (Annotations annotationGroup : getAnnotationGroups()) { + annotatables.put(null, annotationGroup); } for (Annotation annotation : getAnnotations()) { annotatables.put(annotation.getTerm(), annotation); } + for (Action action : getActions()) { + annotatables.put(action.getName(), action); + } for (ComplexType complexType : getComplexTypes()) { annotatables.put(complexType.getName(), complexType); } @@ -219,6 +226,21 @@ public class SchemaImpl extends AbstractSchema implements Schema { } if (entityContainer != null) { annotatables.put(entityContainer.getName(), entityContainer); + for (Annotation annotation : entityContainer.getAnnotations()) { + annotatables.put(annotation.getTerm(), annotation); + } + for (ActionImport actionImport : entityContainer.getActionImports()) { + annotatables.put(actionImport.getName(), actionImport); + } + for (FunctionImport functionImport : entityContainer.getFunctionImports()) { + annotatables.put(functionImport.getName(), functionImport); + } + for (EntitySet entitySet : entityContainer.getEntitySets()) { + annotatables.put(entitySet.getName(), entitySet); + } + for (Singleton singleton : entityContainer.getSingletons()) { + annotatables.put(singleton.getName(), singleton); + } } } return annotatables; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6e9cb60e/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java index 9cc9548..18aa0cf 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java @@ -20,7 +20,7 @@ package org.apache.olingo.client.core.op; import java.io.InputStream; import java.net.URI; -import java.util.List; +import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.olingo.client.api.CommonODataClient; import org.apache.olingo.client.api.data.ServiceDocument; @@ -56,19 +56,19 @@ public abstract class AbstractODataReader implements CommonODataReader { */ protected static final Logger LOG = LoggerFactory.getLogger(AbstractODataReader.class); - protected final CommonODataClient client; + protected final CommonODataClient<?> client; - protected AbstractODataReader(final CommonODataClient client) { + protected AbstractODataReader(final CommonODataClient<?> client) { this.client = client; } @Override public Edm readMetadata(final InputStream input) { - return readMetadata(client.getDeserializer().toMetadata(input).getSchemas()); + return readMetadata(client.getDeserializer().toMetadata(input).getSchemaByNsOrAlias()); } @Override - public Edm readMetadata(final List<? extends Schema> xmlSchemas) { + public Edm readMetadata(final Map<String, Schema> xmlSchemas) { return new EdmClientImpl(client.getServiceVersion(), xmlSchemas); }
