You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/05/05 17:17:25 UTC
[14/15] git commit: [OLINGO-263] Some refinements + client support
form edmx:IncludeAnnotations
[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/master
Commit: 6e9cb60e49664884d8c1e944222d25bb04c8fab7
Parents: 585ddae
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon May 5 15:17:15 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
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);
}