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/03/07 10:04:43 UTC
[7/7] git commit: [OLINGO-169] Now able to use commons Edm interfaces
with v3
[OLINGO-169] Now able to use commons Edm interfaces with v3
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/31b6c8c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/31b6c8c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/31b6c8c0
Branch: refs/heads/olingo169
Commit: 31b6c8c09a34ea1871c4bf4edd3335f4ae23fc14
Parents: d1b341d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Mar 7 10:04:24 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Mar 7 10:04:24 2014 +0100
----------------------------------------------------------------------
.../client/api/edm/xml/BindingTarget.java | 29 ------
.../odata4/client/api/edm/xml/EntitySet.java | 4 +-
.../client/api/edm/xml/v4/BindingTarget.java | 27 +++++
.../odata4/client/api/edm/xml/v4/EntitySet.java | 2 +-
.../odata4/client/api/edm/xml/v4/Singleton.java | 4 +-
.../client/core/edm/EdmBindingTargetImpl.java | 40 ++++----
.../odata4/client/core/edm/EdmClientImpl.java | 4 +-
.../client/core/edm/EdmEntityContainerImpl.java | 25 +++--
.../client/core/edm/EdmEntitySetImpl.java | 2 +-
.../client/core/edm/v3/EdmEntitySetProxy.java | 101 +++++++++++++++++++
.../core/edm/v4/EdmServiceMetadataImpl.java | 10 +-
.../client/core/edm/xml/v3/EntitySetImpl.java | 8 --
.../core/edm/xml/v4/TermDeserializer.java | 1 -
.../client/core/edm/xml/v4/XMLMetadataImpl.java | 6 ++
.../odata4/client/core/v3/MetadataTest.java | 23 +++++
15 files changed, 209 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/BindingTarget.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/BindingTarget.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/BindingTarget.java
deleted file mode 100644
index c996f71..0000000
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/BindingTarget.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.odata4.client.api.edm.xml;
-
-import java.util.List;
-import org.apache.olingo.odata4.client.api.edm.xml.v4.NavigationPropertyBinding;
-
-public interface BindingTarget extends Named {
-
- String getEntityType();
-
- List<? extends NavigationPropertyBinding> getNavigationPropertyBindings();
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/EntitySet.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/EntitySet.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/EntitySet.java
index 659480b..3807294 100644
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/EntitySet.java
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/EntitySet.java
@@ -18,6 +18,8 @@
*/
package org.apache.olingo.odata4.client.api.edm.xml;
-public interface EntitySet extends BindingTarget {
+public interface EntitySet extends Named {
+
+ String getEntityType();
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/BindingTarget.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/BindingTarget.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/BindingTarget.java
new file mode 100644
index 0000000..10f6007
--- /dev/null
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/BindingTarget.java
@@ -0,0 +1,27 @@
+/*
+ * 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.odata4.client.api.edm.xml.v4;
+
+import java.util.List;
+import org.apache.olingo.odata4.client.api.edm.xml.Named;
+
+public interface BindingTarget extends Named, AnnotatedEdmItem {
+
+ List<? extends NavigationPropertyBinding> getNavigationPropertyBindings();
+}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/EntitySet.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/EntitySet.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/EntitySet.java
index a48b358..b44bee2 100644
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/EntitySet.java
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/EntitySet.java
@@ -18,7 +18,7 @@
*/
package org.apache.olingo.odata4.client.api.edm.xml.v4;
-public interface EntitySet extends org.apache.olingo.odata4.client.api.edm.xml.EntitySet, AnnotatedEdmItem {
+public interface EntitySet extends org.apache.olingo.odata4.client.api.edm.xml.EntitySet, BindingTarget {
boolean isIncludeInServiceDocument();
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/Singleton.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/Singleton.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/Singleton.java
index 589ee9f..1bc6135 100644
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/Singleton.java
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v4/Singleton.java
@@ -18,8 +18,8 @@
*/
package org.apache.olingo.odata4.client.api.edm.xml.v4;
-import org.apache.olingo.odata4.client.api.edm.xml.BindingTarget;
+import org.apache.olingo.odata4.client.api.edm.xml.EntitySet;
-public interface Singleton extends BindingTarget, AnnotatedEdmItem {
+public interface Singleton extends EntitySet, BindingTarget {
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmBindingTargetImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmBindingTargetImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmBindingTargetImpl.java
index d27260b..fd4c66a 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmBindingTargetImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmBindingTargetImpl.java
@@ -20,7 +20,7 @@ package org.apache.olingo.odata4.client.core.edm;
import java.util.Iterator;
import java.util.List;
-import org.apache.olingo.odata4.client.api.edm.xml.BindingTarget;
+import org.apache.olingo.odata4.client.api.edm.xml.v4.BindingTarget;
import org.apache.olingo.odata4.client.api.edm.xml.v4.NavigationPropertyBinding;
import org.apache.olingo.odata4.commons.api.edm.Edm;
import org.apache.olingo.odata4.commons.api.edm.EdmBindingTarget;
@@ -46,30 +46,28 @@ public abstract class EdmBindingTargetImpl extends AbstractEdmBindingTarget {
EdmBindingTarget bindingTarget = null;
final List<? extends NavigationPropertyBinding> navigationPropertyBindings = target.getNavigationPropertyBindings();
- if (navigationPropertyBindings != null) {
- boolean found = false;
- for (final Iterator<? extends NavigationPropertyBinding> itor = navigationPropertyBindings.iterator();
- itor.hasNext() && !found;) {
+ boolean found = false;
+ for (final Iterator<? extends NavigationPropertyBinding> itor = navigationPropertyBindings.iterator();
+ itor.hasNext() && !found;) {
- final NavigationPropertyBinding binding = itor.next();
- if (binding.getPath().equals(path)) {
- final Target edmTarget = new Target.Builder(binding.getTarget(), container).build();
+ final NavigationPropertyBinding binding = itor.next();
+ if (binding.getPath().equals(path)) {
+ final Target edmTarget = new Target.Builder(binding.getTarget(), container).build();
- final EdmEntityContainer entityContainer = edm.getEntityContainer(edmTarget.getEntityContainer());
- if (entityContainer == null) {
- throw new EdmException("Cant find entity container with name: " + edmTarget.getEntityContainer());
- }
- bindingTarget = entityContainer.getEntitySet(edmTarget.getTargetName());
+ final EdmEntityContainer entityContainer = edm.getEntityContainer(edmTarget.getEntityContainer());
+ if (entityContainer == null) {
+ throw new EdmException("Cannot find entity container with name: " + edmTarget.getEntityContainer());
+ }
+ bindingTarget = entityContainer.getEntitySet(edmTarget.getTargetName());
+ if (bindingTarget == null) {
+ bindingTarget = entityContainer.getSingleton(edmTarget.getTargetName());
if (bindingTarget == null) {
- bindingTarget = entityContainer.getSingleton(edmTarget.getTargetName());
- if (bindingTarget == null) {
- throw new EdmException("Cant find target with name: " + edmTarget.getTargetName());
- }
-
- found = true;
- } else {
- found = true;
+ throw new EdmException("Cannot find target with name: " + edmTarget.getTargetName());
}
+
+ found = true;
+ } else {
+ found = true;
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
index a89bf16..905a310 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
@@ -96,9 +96,9 @@ public class EdmClientImpl extends AbstractEdmImpl {
final Schema schema = xmlMetadata.getSchema(containerName.getNamespace());
if (schema != null) {
- final EntityContainer xmlEntityContainer = (EntityContainer) schema.getDefaultEntityContainer();
+ final EntityContainer xmlEntityContainer = schema.getDefaultEntityContainer();
if (xmlEntityContainer != null) {
- result = new EdmEntityContainerImpl(this, containerName, xmlEntityContainer);
+ result = new EdmEntityContainerImpl(this, containerName, xmlEntityContainer, xmlMetadata);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
index 2f9ac88..9cde1b1 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
@@ -25,8 +25,10 @@ import org.apache.olingo.odata4.client.api.edm.xml.v4.Singleton;
import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
import org.apache.olingo.odata4.client.api.UnsupportedInV3Exception;
import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
+import org.apache.olingo.odata4.client.api.edm.xml.XMLMetadata;
import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
import org.apache.olingo.odata4.client.core.edm.v3.EdmActionImportProxy;
+import org.apache.olingo.odata4.client.core.edm.v3.EdmEntitySetProxy;
import org.apache.olingo.odata4.client.core.edm.v3.EdmFunctionImportProxy;
import org.apache.olingo.odata4.commons.api.edm.Edm;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
@@ -41,11 +43,15 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
private final EntityContainer xmlEntityContainer;
+ private final XMLMetadata xmlMetadata;
+
public EdmEntityContainerImpl(final Edm edm, final FullQualifiedName entityContainerName,
- final EntityContainer xmlEntityContainer) {
+ final EntityContainer xmlEntityContainer, final XMLMetadata xmlMetadata) {
super(edm, entityContainerName);
+
this.xmlEntityContainer = xmlEntityContainer;
+ this.xmlMetadata = xmlMetadata;
}
@Override
@@ -70,9 +76,16 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
if (entitySet == null) {
throw new EdmException("EntitySet named '" + entitySetName + "' not found in " + entityContainerName);
}
- return new EdmEntitySetImpl(edm, this, entitySetName,
- new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
- entitySet);
+
+ if (entitySet instanceof org.apache.olingo.odata4.client.api.edm.xml.v4.EntitySet) {
+ return new EdmEntitySetImpl(edm, this, entitySetName,
+ new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
+ (org.apache.olingo.odata4.client.api.edm.xml.v4.EntitySet) entitySet);
+ } else {
+ return new EdmEntitySetProxy(edm, this, entitySetName,
+ new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
+ xmlMetadata);
+ }
}
@Override
@@ -90,7 +103,7 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
if (functionImport == null) {
throw new EdmException("FunctionImport named '" + actionImportName + "' not found in " + entityContainerName);
}
- return new EdmActionImportProxy(edm, this, actionImportName, (FunctionImport) functionImport);
+ return new EdmActionImportProxy(edm, this, actionImportName, functionImport);
}
}
@@ -105,7 +118,7 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
return new EdmFunctionImportImpl(edm, this, functionImportName,
(org.apache.olingo.odata4.client.api.edm.xml.v4.FunctionImport) functionImport);
} else {
- return new EdmFunctionImportProxy(edm, this, functionImportName,
+ return new EdmFunctionImportProxy(edm, this, functionImportName,
(org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport) functionImport);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntitySetImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntitySetImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntitySetImpl.java
index 14e1eb4..669e431 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntitySetImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntitySetImpl.java
@@ -18,7 +18,7 @@
*/
package org.apache.olingo.odata4.client.core.edm;
-import org.apache.olingo.odata4.client.api.edm.xml.EntitySet;
+import org.apache.olingo.odata4.client.api.edm.xml.v4.EntitySet;
import org.apache.olingo.odata4.commons.api.edm.Edm;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmEntitySetProxy.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmEntitySetProxy.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmEntitySetProxy.java
new file mode 100644
index 0000000..518eb6e
--- /dev/null
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmEntitySetProxy.java
@@ -0,0 +1,101 @@
+/*
+ * 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.odata4.client.core.edm.v3;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
+import org.apache.olingo.odata4.client.api.edm.xml.Schema;
+import org.apache.olingo.odata4.client.api.edm.xml.XMLMetadata;
+import org.apache.olingo.odata4.client.api.edm.xml.v3.Association;
+import org.apache.olingo.odata4.client.api.edm.xml.v3.AssociationSet;
+import org.apache.olingo.odata4.client.core.edm.xml.v3.EntityContainerImpl;
+import org.apache.olingo.odata4.client.core.edm.xml.v3.SchemaImpl;
+import org.apache.olingo.odata4.commons.api.edm.Edm;
+import org.apache.olingo.odata4.commons.api.edm.EdmBindingTarget;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.odata4.commons.api.edm.EdmException;
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.odata4.commons.core.edm.AbstractEdmBindingTarget;
+
+public class EdmEntitySetProxy extends AbstractEdmBindingTarget implements EdmEntitySet {
+
+ private final XMLMetadata xmlMetadata;
+
+ public EdmEntitySetProxy(final Edm edm, final EdmEntityContainer container, final String name,
+ final FullQualifiedName type, final XMLMetadata xmlMetadata) {
+
+ super(edm, container, name, type);
+ this.xmlMetadata = xmlMetadata;
+ }
+
+ @Override
+ public EdmBindingTarget getRelatedBindingTarget(final String path) {
+ final List<AssociationSet> candidateAssociationSets = new ArrayList<AssociationSet>();
+ for (Schema schema : xmlMetadata.getSchemas()) {
+ for (EntityContainer _entityContainer : schema.getEntityContainers()) {
+ final EntityContainerImpl entityContainer = (EntityContainerImpl) _entityContainer;
+ for (AssociationSet associationSet : entityContainer.getAssociationSets()) {
+ if (getName().equals(associationSet.getEnds().get(0).getEntitySet())
+ || getName().equals(associationSet.getEnds().get(1).getEntitySet())) {
+
+ candidateAssociationSets.add(associationSet);
+ }
+ }
+ }
+ }
+ if (candidateAssociationSets.isEmpty()) {
+ throw new EdmException("Cannot find any AssociationSet with first End: " + getName());
+ }
+
+ Schema targetSchema = null;
+ String targetEntitySet = null;
+ for (AssociationSet associationSet : candidateAssociationSets) {
+ for (Schema schema : xmlMetadata.getSchemas()) {
+ for (Association association : ((SchemaImpl) schema).getAssociations()) {
+ final FullQualifiedName associationName = new FullQualifiedName(schema.getNamespace(), association.getName());
+ if (associationName.getFullQualifiedNameAsString().equals(associationSet.getAssociation())
+ && (path.equals(association.getEnds().get(0).getRole())
+ || path.equals(association.getEnds().get(1).getRole()))) {
+
+ targetSchema = schema;
+ if (getName().equals(associationSet.getEnds().get(0).getEntitySet())) {
+ targetEntitySet = associationSet.getEnds().get(1).getEntitySet();
+ } else {
+ targetEntitySet = associationSet.getEnds().get(0).getEntitySet();
+ }
+ }
+ }
+ }
+ }
+ if (targetSchema == null || targetEntitySet == null) {
+ throw new EdmException("Cannot find Association for candidate AssociationSets and given Role");
+ }
+
+ final FullQualifiedName relatedFQN = new FullQualifiedName(targetSchema.getNamespace(), targetEntitySet);
+ final EdmEntityContainer entityContainer = edm.getEntityContainer(relatedFQN);
+ if (entityContainer == null) {
+ throw new EdmException("Cannot find EntityContainer with name: " + relatedFQN);
+ }
+
+ return entityContainer.getEntitySet(targetEntitySet);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
index dfcc38b..e077e3a 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v4/EdmServiceMetadataImpl.java
@@ -21,7 +21,7 @@ package org.apache.olingo.odata4.client.core.edm.v4;
import java.util.ArrayList;
import java.util.List;
import org.apache.olingo.odata4.client.api.edm.xml.CommonFunctionImport;
-import org.apache.olingo.odata4.client.api.edm.xml.Schema;
+import org.apache.olingo.odata4.client.api.edm.xml.v4.Schema;
import org.apache.olingo.odata4.client.api.edm.xml.v4.ActionImport;
import org.apache.olingo.odata4.client.api.edm.xml.v4.EntityContainer;
import org.apache.olingo.odata4.client.api.edm.xml.v4.Singleton;
@@ -57,7 +57,7 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
synchronized (this) {
if (singletonInfos == null) {
singletonInfos = new ArrayList<EdmSingletonInfo>();
- for (Schema schema : xmlMetadata.getSchemas()) {
+ for (Schema schema : ((XMLMetadataImpl) xmlMetadata).getSchemas()) {
final EntityContainer entityContainer = (EntityContainer) schema.getDefaultEntityContainer();
for (Singleton singleton : entityContainer.getSingletons()) {
singletonInfos.add(new EdmSingletonInfoImpl(entityContainer.getName(), singleton.getName()));
@@ -73,8 +73,8 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
synchronized (this) {
if (functionImportInfos == null) {
functionImportInfos = new ArrayList<EdmFunctionImportInfo>();
- for (Schema schema : xmlMetadata.getSchemas()) {
- for (org.apache.olingo.odata4.client.api.edm.xml.EntityContainer entityContainer : schema.getEntityContainers()) {
+ for (Schema schema : ((XMLMetadataImpl) xmlMetadata).getSchemas()) {
+ for (EntityContainer entityContainer : schema.getEntityContainers()) {
for (CommonFunctionImport functionImport : entityContainer.getFunctionImports()) {
functionImportInfos.add(
new EdmFunctionImportInfoImpl(entityContainer.getName(), functionImport.getName()));
@@ -91,7 +91,7 @@ public class EdmServiceMetadataImpl extends AbstractEdmServiceMetadataImpl {
synchronized (this) {
if (actionImportInfos == null) {
actionImportInfos = new ArrayList<EdmActionImportInfo>();
- for (Schema schema : xmlMetadata.getSchemas()) {
+ for (Schema schema : ((XMLMetadataImpl) xmlMetadata).getSchemas()) {
final EntityContainer entityContainer = (EntityContainer) schema.getDefaultEntityContainer();
for (ActionImport actionImport : entityContainer.getActionImports()) {
actionImportInfos.add(new EdmActionImportInfoImpl(entityContainer.getName(), actionImport.getName()));
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/EntitySetImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/EntitySetImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/EntitySetImpl.java
index a859d88..bc28cc6 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/EntitySetImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/EntitySetImpl.java
@@ -18,18 +18,10 @@
*/
package org.apache.olingo.odata4.client.core.edm.xml.v3;
-import java.util.List;
-import org.apache.olingo.odata4.client.api.edm.xml.v4.NavigationPropertyBinding;
-import org.apache.olingo.odata4.client.api.UnsupportedInV3Exception;
import org.apache.olingo.odata4.client.core.edm.xml.AbstractEntitySet;
public class EntitySetImpl extends AbstractEntitySet {
private static final long serialVersionUID = 5570833733884884012L;
- @Override
- public List<? extends NavigationPropertyBinding> getNavigationPropertyBindings() {
- throw new UnsupportedInV3Exception();
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
index 9de5318..c8fed65 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import java.io.IOException;
-import java.math.BigInteger;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.odata4.client.api.edm.xml.v4.CSDLElement;
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/XMLMetadataImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/XMLMetadataImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/XMLMetadataImpl.java
index 9aef820..0d74c12 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/XMLMetadataImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/XMLMetadataImpl.java
@@ -33,6 +33,12 @@ public class XMLMetadataImpl extends AbstractXMLMetadata {
}
@Override
+ @SuppressWarnings("unchecked")
+ public List<Schema> getSchemas() {
+ return (List<Schema>) super.getSchemas();
+ }
+
+ @Override
public Schema getSchema(final int index) {
return (Schema) super.getSchema(index);
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/31b6c8c0/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
index 5efb1d3..337eadc 100644
--- a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
+++ b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v3/MetadataTest.java
@@ -40,8 +40,10 @@ import org.apache.olingo.odata4.commons.api.edm.Edm;
import org.apache.olingo.odata4.commons.api.edm.EdmAction;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
import org.apache.olingo.odata4.commons.api.edm.EdmActionImportInfo;
+import org.apache.olingo.odata4.commons.api.edm.EdmBindingTarget;
import org.apache.olingo.odata4.commons.api.edm.EdmComplexType;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
@@ -197,4 +199,25 @@ public class MetadataTest extends AbstractTest {
new FullQualifiedName(container.getNamespace(), "ResetDataSource"), null, Boolean.FALSE);
assertNotNull(resetDataSource2);
}
+
+ @Test
+ public void navigation() {
+ final Edm metadata = getClient().getReader().
+ readMetadata(getClass().getResourceAsStream("metadata.xml"));
+ assertNotNull(metadata);
+
+ final EdmEntityContainer container = metadata.getEntityContainer(
+ new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService", "DefaultContainer"));
+ assertNotNull(container);
+
+ final EdmEntitySet customer = container.getEntitySet("Customer");
+ assertNotNull(customer);
+
+ final EdmBindingTarget order = customer.getRelatedBindingTarget("Orders");
+ assertNotNull(order);
+ assertTrue(order instanceof EdmEntitySet);
+
+ final EdmBindingTarget customerBindingTarget = ((EdmEntitySet) order).getRelatedBindingTarget("Customer");
+ assertEquals(customer.getEntityType().getName(), customerBindingTarget.getEntityType().getName());
+ }
}