You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/03/18 14:04:48 UTC
[4/6] olingo-odata4 git commit: [OLINGO-575] Merge EdmImpl classes
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmIsOfImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmIsOfImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmIsOfImpl.java
deleted file mode 100644
index b732d34..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmIsOfImpl.java
+++ /dev/null
@@ -1,80 +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.client.core.edm.annotation;
-
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmType;
-import org.apache.olingo.commons.api.edm.annotation.EdmDynamicAnnotationExpression;
-import org.apache.olingo.commons.api.edm.annotation.EdmIsOf;
-import org.apache.olingo.commons.api.edm.geo.SRID;
-import org.apache.olingo.commons.api.edm.provider.annotation.IsOf;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
-import org.apache.olingo.commons.core.edm.annotation.AbstractEdmAnnotatableDynamicAnnotationExpression;
-
-public class EdmIsOfImpl extends AbstractEdmAnnotatableDynamicAnnotationExpression implements EdmIsOf {
-
- private final Edm edm;
-
- private final IsOf isOf;
-
- private final EdmDynamicAnnotationExpression value;
-
- private EdmType type;
-
- public EdmIsOfImpl(final Edm edm, final IsOf isOf, final EdmDynamicAnnotationExpression value) {
- this.edm = edm;
- this.isOf = isOf;
- this.value = value;
- }
-
- @Override
- public Integer getMaxLength() {
- return isOf.getMaxLength();
- }
-
- @Override
- public Integer getPrecision() {
- return isOf.getPrecision();
- }
-
- @Override
- public Integer getScale() {
- return isOf.getScale();
- }
-
- @Override
- public SRID getSrid() {
- return isOf.getSrid();
- }
-
- @Override
- public EdmType getType() {
- if (type == null) {
- final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(isOf.getType()).build();
- type = typeInfo.getType();
- }
- return type;
- }
-
- @Override
- public EdmDynamicAnnotationExpression getValue() {
- return value;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmRecordImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmRecordImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmRecordImpl.java
deleted file mode 100644
index c5ea7e0..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/annotation/EdmRecordImpl.java
+++ /dev/null
@@ -1,55 +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.client.core.edm.annotation;
-
-import java.util.List;
-
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmStructuredType;
-import org.apache.olingo.commons.api.edm.annotation.EdmPropertyValue;
-import org.apache.olingo.commons.api.edm.annotation.EdmRecord;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
-import org.apache.olingo.commons.core.edm.annotation.AbstractEdmAnnotatableDynamicAnnotationExpression;
-
-public class EdmRecordImpl extends AbstractEdmAnnotatableDynamicAnnotationExpression implements EdmRecord {
-
- private final List<EdmPropertyValue> propertyValues;
-
- private EdmStructuredType type;
-
- public EdmRecordImpl(final Edm edm, final String type, final List<EdmPropertyValue> propertyValues) {
- this.propertyValues = propertyValues;
-
- if (type != null) {
- final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(type).build();
- this.type = typeInfo.getEntityType() == null ? typeInfo.getComplexType() : typeInfo.getEntityType();
- }
- }
-
- @Override
- public List<EdmPropertyValue> getPropertyValues() {
- return propertyValues;
- }
-
- @Override
- public EdmStructuredType getType() {
- return type;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/NavigationPropertyDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/NavigationPropertyDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/NavigationPropertyDeserializer.java
index a422c53..40a5ffb 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/NavigationPropertyDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/NavigationPropertyDeserializer.java
@@ -1,18 +1,18 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
+ * 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
- *
+ * 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
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -31,7 +31,7 @@ public class NavigationPropertyDeserializer extends AbstractEdmDeserializer<Navi
@Override
protected NavigationPropertyImpl doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
- throws IOException, JsonProcessingException {
+ throws IOException, JsonProcessingException {
final NavigationPropertyImpl property = new NavigationPropertyImpl();
@@ -41,7 +41,15 @@ public class NavigationPropertyDeserializer extends AbstractEdmDeserializer<Navi
if ("Name".equals(jp.getCurrentName())) {
property.setName(jp.nextTextValue());
} else if ("Type".equals(jp.getCurrentName())) {
- property.setType(jp.nextTextValue());
+ String metadataTypeName = jp.nextTextValue();
+ if (metadataTypeName.startsWith("Collection(")) {
+ property.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1,
+ metadataTypeName.length() - 1));
+ property.setCollection(true);
+ } else {
+ property.setType(metadataTypeName);
+ property.setCollection(false);
+ }
} else if ("Nullable".equals(jp.getCurrentName())) {
property.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
} else if ("Partner".equals(jp.getCurrentName())) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
index d0430d9..7ca059e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
@@ -42,7 +42,15 @@ public class ParameterDeserializer extends AbstractEdmDeserializer<ParameterImpl
if ("Name".equals(jp.getCurrentName())) {
parameter.setName(jp.nextTextValue());
} else if ("Type".equals(jp.getCurrentName())) {
- parameter.setType(jp.nextTextValue());
+ String metadataTypeName = jp.nextTextValue();
+ if (metadataTypeName.startsWith("Collection(")) {
+ parameter.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1,
+ metadataTypeName.length() - 1));
+ parameter.setCollection(true);
+ } else {
+ parameter.setType(metadataTypeName);
+ parameter.setCollection(false);
+ }
} else if ("Nullable".equals(jp.getCurrentName())) {
parameter.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
} else if ("MaxLength".equals(jp.getCurrentName())) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
index 283b35c..09bada5 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
@@ -42,7 +42,15 @@ public class PropertyDeserializer extends AbstractEdmDeserializer<PropertyImpl>
if ("Name".equals(jp.getCurrentName())) {
property.setName(jp.nextTextValue());
} else if ("Type".equals(jp.getCurrentName())) {
- property.setType(jp.nextTextValue());
+ String metadataTypeName = jp.nextTextValue();
+ if (metadataTypeName.startsWith("Collection(")) {
+ property.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1,
+ metadataTypeName.length() - 1));
+ property.setCollection(true);
+ } else {
+ property.setType(metadataTypeName);
+ property.setCollection(false);
+ }
} else if ("Nullable".equals(jp.getCurrentName())) {
property.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
} else if ("DefaultValue".equals(jp.getCurrentName())) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyImpl.java
index 697fd9c..c7312cd 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyImpl.java
@@ -18,10 +18,12 @@
*/
package org.apache.olingo.client.core.edm.xml;
+import org.apache.olingo.commons.api.edm.provider.Property;
+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = PropertyDeserializer.class)
-public class PropertyImpl extends org.apache.olingo.commons.api.edm.provider.Property {
+public class PropertyImpl extends Property {
private static final long serialVersionUID = -4521766603286651372L;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ReturnTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ReturnTypeDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ReturnTypeDeserializer.java
index 1a8cd94..314b7b1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ReturnTypeDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ReturnTypeDeserializer.java
@@ -40,7 +40,15 @@ public class ReturnTypeDeserializer extends AbstractEdmDeserializer<ReturnTypeIm
final JsonToken token = jp.getCurrentToken();
if (token == JsonToken.FIELD_NAME) {
if ("Type".equals(jp.getCurrentName())) {
- returnType.setType(jp.nextTextValue());
+ String metadataTypeName = jp.nextTextValue();
+ if (metadataTypeName.startsWith("Collection(")) {
+ returnType.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1,
+ metadataTypeName.length() - 1));
+ returnType.setCollection(true);
+ } else {
+ returnType.setType(metadataTypeName);
+ returnType.setCollection(false);
+ }
} else if ("Nullable".equals(jp.getCurrentName())) {
returnType.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
} else if ("MaxLength".equals(jp.getCurrentName())) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataReaderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataReaderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataReaderImpl.java
index 98d817b..253df78 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataReaderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataReaderImpl.java
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.data.ServiceDocument;
import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
import org.apache.olingo.client.api.edm.xml.XMLMetadata;
import org.apache.olingo.client.api.serialization.ODataReader;
-import org.apache.olingo.client.core.edm.EdmClientImpl;
+import org.apache.olingo.client.core.edm.ClientEdmProvider;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
import org.apache.olingo.commons.api.data.Property;
@@ -44,6 +44,7 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.provider.Schema;
import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
+import org.apache.olingo.commons.core.edm.provider.EdmProviderImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,7 +68,8 @@ public class ODataReaderImpl implements ODataReader {
@Override
public Edm readMetadata(final Map<String, Schema> xmlSchemas) {
- return new EdmClientImpl(xmlSchemas);
+ ClientEdmProvider prov = new ClientEdmProvider(xmlSchemas);
+ return new EdmProviderImpl(prov);
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIEscapeTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIEscapeTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIEscapeTest.java
index f10e236..6dd7de5 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIEscapeTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/URIEscapeTest.java
@@ -27,13 +27,13 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.TimeZone;
-import org.apache.olingo.client.core.edm.EdmEnumTypeImpl;
import org.apache.olingo.client.core.edm.xml.EnumTypeImpl;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.edm.EdmEnumType;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.edm.geo.Point;
+import org.apache.olingo.commons.core.edm.provider.EdmEnumTypeImpl;
import org.junit.Test;
public class URIEscapeTest {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/FilterFactoryTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/FilterFactoryTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/FilterFactoryTest.java
index a643d23..a9fc341 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/FilterFactoryTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/FilterFactoryTest.java
@@ -30,11 +30,11 @@ import org.apache.olingo.client.api.uri.FilterArgFactory;
import org.apache.olingo.client.api.uri.FilterFactory;
import org.apache.olingo.client.api.uri.URIFilter;
import org.apache.olingo.client.core.AbstractTest;
-import org.apache.olingo.client.core.edm.EdmEnumTypeImpl;
import org.apache.olingo.client.core.edm.xml.EnumTypeImpl;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.edm.EdmEnumType;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.provider.EdmEnumTypeImpl;
import org.junit.Test;
public class FilterFactoryTest extends AbstractTest {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
index 2bea290..c9deca2 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
@@ -1,18 +1,18 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
+ * 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
- *
+ * 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
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -83,7 +83,7 @@ public class MetadataTest extends AbstractTest {
// 1. Enum
final EdmEnumType responseEnumType = edm.getEnumType(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseType"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseType"));
assertNotNull(responseEnumType);
assertEquals(6, responseEnumType.getMemberNames().size());
assertEquals("3", responseEnumType.getMember("Accepted").getValue());
@@ -91,56 +91,56 @@ public class MetadataTest extends AbstractTest {
// 2. Complex
final EdmComplexType responseStatus = edm.getComplexType(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseStatus"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseStatus"));
assertNotNull(responseStatus);
assertTrue(responseStatus.getNavigationPropertyNames().isEmpty());
assertEquals("Recipient", responseStatus.getBaseType().getName());
assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.DateTimeOffset),
- responseStatus.getProperty("Time").getType());
+ responseStatus.getProperty("Time").getType());
// 3. Entity
final EdmEntityType user = edm.getEntityType(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "User"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "User"));
assertNotNull(user);
assertFalse(user.getPropertyNames().isEmpty());
assertFalse(user.getNavigationPropertyNames().isEmpty());
final EdmEntityType entity = edm.getEntityType(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Entity"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Entity"));
assertEquals(entity, user.getBaseType());
assertFalse(entity.getPropertyNames().isEmpty());
assertTrue(entity.getNavigationPropertyNames().isEmpty());
final EdmEntityType folder = edm.getEntityType(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"));
assertEquals(folder, user.getNavigationProperty("Inbox").getType());
// 4. Action
final EdmAction move = edm.getBoundAction(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Move"),
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"),
- false);
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Move"),
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"),
+ false);
assertNotNull(move);
assertTrue(move.isBound());
assertEquals(2, move.getParameterNames().size());
assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String),
- move.getParameter("DestinationId").getType());
+ move.getParameter("DestinationId").getType());
// 5. EntityContainer
final EdmEntityContainer container = edm.getEntityContainer(
- new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "EntityContainer"));
+ new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "EntityContainer"));
assertNotNull(container);
final EdmEntitySet users = container.getEntitySet("Users");
assertNotNull(users);
assertEquals(edm.getEntityType(new FullQualifiedName(container.getNamespace(), "User")),
- users.getEntityType());
+ users.getEntityType());
assertEquals(container.getEntitySet("Folders"), users.getRelatedBindingTarget("Folders"));
}
@Test
public void demo() {
final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.XML).
- toMetadata(getClass().getResourceAsStream("demo-metadata.xml"));
+ toMetadata(getClass().getResourceAsStream("demo-metadata.xml"));
assertNotNull(metadata);
assertFalse(metadata.getSchema(0).getAnnotationGroups().isEmpty());
@@ -148,13 +148,13 @@ public class MetadataTest extends AbstractTest {
assertNotNull(annots);
assertFalse(annots.getAnnotations().isEmpty());
assertEquals(ConstantAnnotationExpression.Type.String,
- annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getExpression().asConstant().getType());
+ annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getExpression().asConstant().getType());
assertEquals("http://www.odata.org/",
- annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getExpression().asConstant().getValue());
+ annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getExpression().asConstant().getValue());
// Now let's test some edm:Annotations
final Edm edm = getClient().getReader().
- readMetadata(getClass().getResourceAsStream("demo-metadata.xml"));
+ readMetadata(getClass().getResourceAsStream("demo-metadata.xml"));
assertNotNull(edm);
final EdmSchema schema = edm.getSchema("ODataDemo");
@@ -181,7 +181,7 @@ public class MetadataTest extends AbstractTest {
@Test
public void multipleSchemas() {
final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.XML).
- toMetadata(getClass().getResourceAsStream("northwind-metadata.xml"));
+ toMetadata(getClass().getResourceAsStream("northwind-metadata.xml"));
assertNotNull(metadata);
final Schema first = metadata.getSchema("NorthwindModel");
@@ -201,7 +201,7 @@ public class MetadataTest extends AbstractTest {
@Test
public void fromdoc1() {
final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.XML).
- toMetadata(getClass().getResourceAsStream("fromdoc1-metadata.xml"));
+ toMetadata(getClass().getResourceAsStream("fromdoc1-metadata.xml"));
assertNotNull(metadata);
assertFalse(metadata.getReferences().isEmpty());
@@ -218,12 +218,14 @@ public class MetadataTest extends AbstractTest {
final ComplexType address = metadata.getSchema(0).getComplexType("Address");
assertFalse(address.getNavigationProperty("Country").getReferentialConstraints().isEmpty());
assertEquals("Name",
- address.getNavigationProperty("Country").getReferentialConstraints().get(0).getReferencedProperty());
+ address.getNavigationProperty("Country").getReferentialConstraints().get(0).getReferencedProperty());
final Function productsByRating = metadata.getSchema(0).getFunctions("ProductsByRating").get(0);
assertNotNull(productsByRating.getParameter("Rating"));
assertEquals("Edm.Int32", productsByRating.getParameter("Rating").getType());
- assertEquals("Collection(ODataDemo.Product)", productsByRating.getReturnType().getType());
+// assertEquals("Collection(ODataDemo.Product)", productsByRating.getReturnType().getType());
+ assertEquals("ODataDemo.Product", productsByRating.getReturnType().getType());
+ assertTrue(productsByRating.getReturnType().isCollection());
final Singleton contoso = metadata.getSchema(0).getEntityContainer().getSingleton("Contoso");
assertNotNull(contoso);
@@ -231,10 +233,10 @@ public class MetadataTest extends AbstractTest {
assertEquals("Products", contoso.getNavigationPropertyBindings().get(0).getPath());
final FunctionImport functionImport = metadata.getSchema(0).getEntityContainer().
- getFunctionImport("ProductsByRating");
+ getFunctionImport("ProductsByRating");
assertNotNull(functionImport);
assertEquals(metadata.getSchema(0).getNamespace() + "." + productsByRating.getName(),
- functionImport.getFunction());
+ functionImport.getFunction());
// Now let's go high-level
final Edm edm = getClient().getReader().readMetadata(getClass().getResourceAsStream("fromdoc1-metadata.xml"));
@@ -252,16 +254,19 @@ public class MetadataTest extends AbstractTest {
assertNotNull(fi);
assertEquals(demoService.getEntitySet("Products"), fi.getReturnedEntitySet());
- final EdmFunction edmFunction = edm.getUnboundFunction(
- new FullQualifiedName(metadata.getSchema(0).getNamespace(), "ProductsByRating"), null);
+ final EdmFunction edmFunction =
+ edm.getUnboundFunction(
+ new FullQualifiedName(metadata.getSchema(0).getNamespace(), "ProductsByRating"), function
+ .getParameterNames());
assertNotNull(edmFunction);
- assertEquals(edmFunction.getName(), fi.getUnboundFunction(null).getName());
- assertEquals(edmFunction.getNamespace(), fi.getUnboundFunction(null).getNamespace());
- assertEquals(edmFunction.getParameterNames(), fi.getUnboundFunction(null).getParameterNames());
+ assertEquals(edmFunction.getName(), fi.getUnboundFunction(function.getParameterNames()).getName());
+ assertEquals(edmFunction.getNamespace(), fi.getUnboundFunction(function.getParameterNames()).getNamespace());
+ assertEquals(edmFunction.getParameterNames(), fi.getUnboundFunction(function.getParameterNames())
+ .getParameterNames());
assertEquals(edmFunction.getReturnType().getType().getName(),
- fi.getUnboundFunction(null).getReturnType().getType().getName());
+ fi.getUnboundFunction(function.getParameterNames()).getReturnType().getType().getName());
assertEquals(edmFunction.getReturnType().getType().getNamespace(),
- fi.getUnboundFunction(null).getReturnType().getType().getNamespace());
+ fi.getUnboundFunction(function.getParameterNames()).getReturnType().getType().getNamespace());
}
final EdmTypeDefinition weight = edm.getTypeDefinition(new FullQualifiedName("ODataDemo", "Weight"));
@@ -277,12 +282,12 @@ public class MetadataTest extends AbstractTest {
@Test
public void fromdoc2() {
final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.XML)
- .toMetadata(getClass().getResourceAsStream("fromdoc2-metadata.xml"));
+ .toMetadata(getClass().getResourceAsStream("fromdoc2-metadata.xml"));
assertNotNull(metadata);
// Check displayName
final Annotation displayName = metadata.getSchema(0).getAnnotationGroup("ODataDemo.Supplier").
- getAnnotation("Vocabulary1.DisplayName");
+ getAnnotation("Vocabulary1.DisplayName");
assertNotNull(displayName);
assertTrue(displayName.getExpression().isDynamic());
@@ -306,7 +311,7 @@ public class MetadataTest extends AbstractTest {
// Check Tags
final Annotation tags = metadata.getSchema(0).getAnnotationGroup("ODataDemo.Product").
- getAnnotation("Vocabulary1.Tags");
+ getAnnotation("Vocabulary1.Tags");
assertNotNull(tags);
assertTrue(tags.getExpression().isDynamic());
@@ -341,7 +346,7 @@ public class MetadataTest extends AbstractTest {
@Test
public void fromdoc4() {
final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.XML).
- toMetadata(getClass().getResourceAsStream("fromdoc4-metadata.xml"));
+ toMetadata(getClass().getResourceAsStream("fromdoc4-metadata.xml"));
assertNotNull(metadata);
final Annotations group = metadata.getSchema(0).getAnnotationGroups().get(0);
@@ -356,7 +361,7 @@ public class MetadataTest extends AbstractTest {
assertTrue(annotation.getExpression().isDynamic());
assertTrue(annotation.getExpression().asDynamic().isTwoParamsOp());
assertEquals(TwoParamsOpDynamicAnnotationExpression.Type.And,
- annotation.getExpression().asDynamic().asTwoParamsOp().getType());
+ annotation.getExpression().asDynamic().asTwoParamsOp().getType());
assertTrue(annotation.getExpression().asDynamic().asTwoParamsOp().getLeftExpression().isPath());
annotation = group.getAnnotation("Vocab.Supplier");
@@ -367,7 +372,7 @@ public class MetadataTest extends AbstractTest {
assertTrue(urlRef.getValue().isDynamic());
assertTrue(urlRef.getValue().asDynamic().isApply());
- // Now let's go high-level
+ // Now let's go high-level
final Edm edm = getClient().getReader().readMetadata(getClass().getResourceAsStream("fromdoc4-metadata.xml"));
assertNotNull(edm);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
index 53ab80e..07e330f 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
@@ -39,15 +39,6 @@ public interface EdmEntityContainer extends EdmNamed, EdmAnnotationsTarget, EdmA
FullQualifiedName getFullQualifiedName();
/**
- * Returns whether this container is the default container in the current schema.
- * <br/>
- * According to CSDL specifications, this method will always return <tt>true</tt> for OData 4.0.
- *
- * @return whether this container is the default container in the current schema, always <tt>true</tt> for OData 4.0
- */
- boolean isDefault();
-
- /**
* Get contained Singleton by name.
*
* @param name
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/EdmProvider.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/EdmProvider.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/EdmProvider.java
index d221ca1..38a03d7 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/EdmProvider.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/EdmProvider.java
@@ -18,11 +18,11 @@
*/
package org.apache.olingo.commons.api.edm.provider;
+import java.util.List;
+
import org.apache.olingo.commons.api.ODataException;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import java.util.List;
-
public abstract class EdmProvider {
/**
@@ -192,4 +192,20 @@ public abstract class EdmProvider {
public EntityContainer getEntityContainer() throws ODataException {
return null;
}
+
+ /**
+ * @param targetName
+ * @return {@link Annotations} group for the given Target
+ */
+ public Annotations getAnnotationsGroup(FullQualifiedName targetName) throws ODataException {
+ return null;
+ }
+
+ /**
+ * @param annotatedName
+ * @return Annotatble element by target name
+ */
+ public Annotatable getAnnoatatable(FullQualifiedName annotatedName) throws ODataException {
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/TypeDefinition.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/TypeDefinition.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/TypeDefinition.java
index 7ef8b36..b886b1e 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/TypeDefinition.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/provider/TypeDefinition.java
@@ -55,7 +55,10 @@ public class TypeDefinition extends AbstractEdmItem implements Named, Annotatabl
}
public String getUnderlyingType() {
- return underlyingType.getFullQualifiedNameAsString();
+ if(underlyingType != null){
+ return underlyingType.getFullQualifiedNameAsString();
+ }
+ return null;
}
public TypeDefinition setUnderlyingType(final String underlyingType) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
index ea8f725..c1dd630 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
@@ -61,11 +61,6 @@ public abstract class AbstractEdmEntityContainer extends EdmNamedImpl implements
}
@Override
- public boolean isDefault() {
- return true;
- }
-
- @Override
public String getNamespace() {
return entityContainerName.getNamespace();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEnumType.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEnumType.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEnumType.java
index 0172607..549980f 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEnumType.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEnumType.java
@@ -53,7 +53,7 @@ public abstract class AbstractEdmEnumType extends EdmTypeImpl implements EdmEnum
uriSuffix = "'";
}
- protected abstract Collection<? extends EdmMember> getMembers();
+ protected abstract Collection<EdmMember> getMembers();
@Override
public EdmMember getMember(final String name) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmCastImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmCastImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmCastImpl.java
new file mode 100644
index 0000000..419adea
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmCastImpl.java
@@ -0,0 +1,79 @@
+/*
+ * 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.commons.core.edm.annotation;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.annotation.EdmCast;
+import org.apache.olingo.commons.api.edm.annotation.EdmDynamicAnnotationExpression;
+import org.apache.olingo.commons.api.edm.geo.SRID;
+import org.apache.olingo.commons.api.edm.provider.annotation.Cast;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+
+public class EdmCastImpl extends AbstractEdmAnnotatableDynamicAnnotationExpression implements EdmCast {
+
+ private final Edm edm;
+
+ private final Cast cast;
+
+ private final EdmDynamicAnnotationExpression value;
+
+ private EdmType type;
+
+ public EdmCastImpl(final Edm edm, final Cast cast, final EdmDynamicAnnotationExpression value) {
+ this.edm = edm;
+ this.cast = cast;
+ this.value = value;
+ }
+
+ @Override
+ public Integer getMaxLength() {
+ return cast.getMaxLength();
+ }
+
+ @Override
+ public Integer getPrecision() {
+ return cast.getPrecision();
+ }
+
+ @Override
+ public Integer getScale() {
+ return cast.getScale();
+ }
+
+ @Override
+ public SRID getSrid() {
+ return cast.getSrid();
+ }
+
+ @Override
+ public EdmType getType() {
+ if (type == null) {
+ final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(cast.getType()).build();
+ type = typeInfo.getType();
+ }
+ return type;
+ }
+
+ @Override
+ public EdmDynamicAnnotationExpression getValue() {
+ return value;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
new file mode 100644
index 0000000..83ad8ec
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmConstantAnnotationExpressionImpl.java
@@ -0,0 +1,139 @@
+/*
+ * 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.commons.core.edm.annotation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.commons.api.Constants;
+import org.apache.olingo.commons.api.domain.ODataEnumValue;
+import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.annotation.EdmConstantAnnotationExpression;
+import org.apache.olingo.commons.api.edm.annotation.EdmDynamicAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.ConstantAnnotationExpression;
+import org.apache.olingo.commons.core.domain.ODataCollectionValueImpl;
+import org.apache.olingo.commons.core.domain.ODataEnumValueImpl;
+import org.apache.olingo.commons.core.domain.ODataPrimitiveValueImpl;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+
+public class EdmConstantAnnotationExpressionImpl implements EdmConstantAnnotationExpression {
+
+ private final ODataValue value;
+
+ public EdmConstantAnnotationExpressionImpl(final ConstantAnnotationExpression constExprConstruct) {
+ if (constExprConstruct.getType() == ConstantAnnotationExpression.Type.EnumMember) {
+ final List<ODataEnumValue> enumValues = new ArrayList<ODataEnumValue>();
+ String enumTypeName = null;
+ for (String split : StringUtils.split(constExprConstruct.getValue(), ' ')) {
+ final String[] enumSplit = StringUtils.split(split, '/');
+ enumTypeName = enumSplit[0];
+ enumValues.add(new ODataEnumValueImpl(enumSplit[0], enumSplit[1]));
+ }
+ if (enumValues.size() == 1) {
+ value = enumValues.get(0);
+ } else {
+ final ODataCollectionValueImpl collValue = new ODataCollectionValueImpl(enumTypeName);
+ for (ODataValue enumValue : enumValues) {
+ collValue.add(enumValue);
+ }
+ value = collValue;
+ }
+ } else {
+ EdmPrimitiveTypeKind kind;
+ switch (constExprConstruct.getType()) {
+ case Binary:
+ kind = EdmPrimitiveTypeKind.Binary;
+ break;
+ case Bool:
+ kind = EdmPrimitiveTypeKind.Boolean;
+ break;
+ case Date:
+ kind = EdmPrimitiveTypeKind.Date;
+ break;
+ case DateTimeOffset:
+ kind = EdmPrimitiveTypeKind.DateTimeOffset;
+ break;
+ case Decimal:
+ kind = EdmPrimitiveTypeKind.Decimal;
+ break;
+ case Duration:
+ kind = EdmPrimitiveTypeKind.Duration;
+ break;
+ case Float:
+ kind = EdmPrimitiveTypeKind.Single;
+ break;
+ case Guid:
+ kind = EdmPrimitiveTypeKind.Guid;
+ break;
+ case Int:
+ kind = EdmPrimitiveTypeKind.Int32;
+ break;
+ case TimeOfDay:
+ kind = EdmPrimitiveTypeKind.TimeOfDay;
+ break;
+ case String:
+ default:
+ kind = EdmPrimitiveTypeKind.String;
+ }
+ final ODataPrimitiveValueImpl.BuilderImpl primitiveValueBuilder = new ODataPrimitiveValueImpl.BuilderImpl();
+ primitiveValueBuilder.setType(kind);
+ try {
+ final EdmPrimitiveType primitiveType = EdmPrimitiveTypeFactory.getInstance(kind);
+ primitiveValueBuilder.setValue(
+ primitiveType.valueOfString(constExprConstruct.getValue(),
+ null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null,
+ primitiveType.getDefaultType()));
+ } catch (final EdmPrimitiveTypeException e) {
+ throw new IllegalArgumentException(e);
+ }
+
+ value = primitiveValueBuilder.build();
+ }
+ }
+
+ @Override
+ public boolean isConstant() {
+ return true;
+ }
+
+ @Override
+ public EdmConstantAnnotationExpression asConstant() {
+ return this;
+ }
+
+ @Override
+ public boolean isDynamic() {
+ return false;
+ }
+
+ @Override
+ public EdmDynamicAnnotationExpression asDynamic() {
+ return null;
+ }
+
+ @Override
+ public ODataValue getValue() {
+ return value;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmIsOfImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmIsOfImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmIsOfImpl.java
new file mode 100644
index 0000000..03ae319
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmIsOfImpl.java
@@ -0,0 +1,79 @@
+/*
+ * 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.commons.core.edm.annotation;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.annotation.EdmDynamicAnnotationExpression;
+import org.apache.olingo.commons.api.edm.annotation.EdmIsOf;
+import org.apache.olingo.commons.api.edm.geo.SRID;
+import org.apache.olingo.commons.api.edm.provider.annotation.IsOf;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+
+public class EdmIsOfImpl extends AbstractEdmAnnotatableDynamicAnnotationExpression implements EdmIsOf {
+
+ private final Edm edm;
+
+ private final IsOf isOf;
+
+ private final EdmDynamicAnnotationExpression value;
+
+ private EdmType type;
+
+ public EdmIsOfImpl(final Edm edm, final IsOf isOf, final EdmDynamicAnnotationExpression value) {
+ this.edm = edm;
+ this.isOf = isOf;
+ this.value = value;
+ }
+
+ @Override
+ public Integer getMaxLength() {
+ return isOf.getMaxLength();
+ }
+
+ @Override
+ public Integer getPrecision() {
+ return isOf.getPrecision();
+ }
+
+ @Override
+ public Integer getScale() {
+ return isOf.getScale();
+ }
+
+ @Override
+ public SRID getSrid() {
+ return isOf.getSrid();
+ }
+
+ @Override
+ public EdmType getType() {
+ if (type == null) {
+ final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(isOf.getType()).build();
+ type = typeInfo.getType();
+ }
+ return type;
+ }
+
+ @Override
+ public EdmDynamicAnnotationExpression getValue() {
+ return value;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmRecordImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmRecordImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmRecordImpl.java
new file mode 100644
index 0000000..cd71c6c
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/annotation/EdmRecordImpl.java
@@ -0,0 +1,54 @@
+/*
+ * 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.commons.core.edm.annotation;
+
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmStructuredType;
+import org.apache.olingo.commons.api.edm.annotation.EdmPropertyValue;
+import org.apache.olingo.commons.api.edm.annotation.EdmRecord;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+
+public class EdmRecordImpl extends AbstractEdmAnnotatableDynamicAnnotationExpression implements EdmRecord {
+
+ private final List<EdmPropertyValue> propertyValues;
+
+ private EdmStructuredType type;
+
+ public EdmRecordImpl(final Edm edm, final String type, final List<EdmPropertyValue> propertyValues) {
+ this.propertyValues = propertyValues;
+
+ if (type != null) {
+ final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(type).build();
+ this.type = typeInfo.getEntityType() == null ? typeInfo.getComplexType() : typeInfo.getEntityType();
+ }
+ }
+
+ @Override
+ public List<EdmPropertyValue> getPropertyValues() {
+ return propertyValues;
+ }
+
+ @Override
+ public EdmStructuredType getType() {
+ return type;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImpl.java
new file mode 100644
index 0000000..292f234
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImpl.java
@@ -0,0 +1,36 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+import org.apache.olingo.commons.api.edm.provider.Action;
+
+public class EdmActionImpl extends EdmOperationImpl implements EdmAction {
+
+ public static EdmActionImpl getInstance(final Edm edm, final FullQualifiedName name, final Action action) {
+ return EdmOperationImpl.getInstance(new EdmActionImpl(edm, name, action));
+ }
+
+ private EdmActionImpl(final Edm edm, final FullQualifiedName name, final Action action) {
+ super(edm, name, action, EdmTypeKind.ACTION);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImportImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImportImpl.java
new file mode 100644
index 0000000..5d9c68a
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmActionImportImpl.java
@@ -0,0 +1,46 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.EdmActionImport;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.provider.ActionImport;
+
+public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmActionImport {
+
+ private final ActionImport actionImport;
+
+ public EdmActionImportImpl(final Edm edm, final EdmEntityContainer container, final ActionImport actionImport) {
+
+ super(edm, container, actionImport);
+ this.actionImport = actionImport;
+ }
+
+ @Override
+ public EdmAction getUnboundAction() {
+ return edm.getUnboundAction(actionImport.getActionFQN());
+ }
+
+ @Override
+ public TargetType getAnnotationsTargetType() {
+ return TargetType.ActionImport;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationHelperImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationHelperImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationHelperImpl.java
new file mode 100644
index 0000000..f4f0b6f
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationHelperImpl.java
@@ -0,0 +1,67 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.provider.Annotatable;
+import org.apache.olingo.commons.api.edm.provider.Annotation;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+
+public class EdmAnnotationHelperImpl implements EdmAnnotationHelper {
+
+ private final Edm edm;
+
+ private final Annotatable annotatable;
+
+ private List<EdmAnnotation> annotations;
+
+ public EdmAnnotationHelperImpl(final Edm edm, final Annotatable annotatable) {
+ this.edm = edm;
+ this.annotatable = annotatable;
+ }
+
+ @Override
+ public EdmAnnotation getAnnotation(final EdmTerm term) {
+ EdmAnnotation result = null;
+ for (EdmAnnotation annotation : getAnnotations()) {
+ if (term.getFullQualifiedName().equals(annotation.getTerm().getFullQualifiedName())) {
+ result = annotation;
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ if (annotations == null) {
+ annotations = new ArrayList<EdmAnnotation>();
+ for (Annotation annotation : annotatable.getAnnotations()) {
+ annotations.add(new EdmAnnotationImpl(edm, annotation));
+ }
+ }
+ return annotations;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationImpl.java
new file mode 100644
index 0000000..9bebd12
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationImpl.java
@@ -0,0 +1,244 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotatable;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.annotation.EdmAnnotationExpression;
+import org.apache.olingo.commons.api.edm.annotation.EdmDynamicAnnotationExpression;
+import org.apache.olingo.commons.api.edm.annotation.EdmPropertyValue;
+import org.apache.olingo.commons.api.edm.provider.Annotatable;
+import org.apache.olingo.commons.api.edm.provider.Annotation;
+import org.apache.olingo.commons.api.edm.provider.annotation.AnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.DynamicAnnotationExpression;
+import org.apache.olingo.commons.api.edm.provider.annotation.PropertyValue;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.annotation.EdmAndImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmAnnotationPathImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmApplyImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmCastImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmCollectionImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmConstantAnnotationExpressionImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmEqImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmGeImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmGtImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmIfImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmIsOfImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmLabeledElementImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmLabeledElementReferenceImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmLeImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmLtImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmNavigationPropertyPathImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmNeImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmNotImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmNullImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmOrImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmPathImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmPropertyPathImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmPropertyValueImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmRecordImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmUrlRefImpl;
+
+public class EdmAnnotationImpl implements EdmAnnotation {
+
+ private final Edm edm;
+
+ private final Annotation annotation;
+
+ private final EdmAnnotationHelper helper;
+
+ private EdmTerm term;
+
+ private EdmAnnotationExpression expression;
+
+ public EdmAnnotationImpl(final Edm edm, final Annotation annotation) {
+ this.edm = edm;
+ this.annotation = annotation;
+ this.helper = new EdmAnnotationHelperImpl(edm, annotation);
+ }
+
+ @Override
+ public EdmTerm getTerm() {
+ if (term == null) {
+ term = edm.getTerm(new FullQualifiedName(annotation.getTerm()));
+ }
+ return term;
+ }
+
+ @Override
+ public String getQualifier() {
+ return annotation.getQualifier();
+ }
+
+ private EdmAnnotationExpression getExpression(final AnnotationExpression exp) {
+ EdmAnnotationExpression _expression = null;
+
+ if (exp.isConstant()) {
+ _expression = new EdmConstantAnnotationExpressionImpl(exp.asConstant());
+ } else if (annotation.getExpression().isDynamic()) {
+ _expression = getDynamicExpression(exp.asDynamic());
+ }
+
+ return _expression;
+ }
+
+ private EdmDynamicAnnotationExpression getDynamicExpression(final DynamicAnnotationExpression exp) {
+ EdmDynamicAnnotationExpression _expression = null;
+
+ if (exp.isNot()) {
+ _expression = new EdmNotImpl(getDynamicExpression(exp.asNot().getExpression()));
+ } else if (exp.isTwoParamsOp()) {
+ switch (exp.asTwoParamsOp().getType()) {
+ case And:
+ _expression = new EdmAndImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Or:
+ _expression = new EdmOrImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Eq:
+ _expression = new EdmEqImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Ne:
+ _expression = new EdmNeImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Ge:
+ _expression = new EdmGeImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Gt:
+ _expression = new EdmGtImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Le:
+ _expression = new EdmLeImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ case Lt:
+ _expression = new EdmLtImpl(
+ getDynamicExpression(exp.asTwoParamsOp().getLeftExpression()),
+ getDynamicExpression(exp.asTwoParamsOp().getRightExpression()));
+ break;
+
+ default:
+ }
+ } else if (exp.isAnnotationPath()) {
+ _expression = new EdmAnnotationPathImpl(exp.asAnnotationPath().getValue());
+ } else if (exp.isApply()) {
+ final List<EdmAnnotationExpression> parameters =
+ new ArrayList<EdmAnnotationExpression>(exp.asApply().getParameters().size());
+ for (AnnotationExpression param : exp.asApply().getParameters()) {
+ parameters.add(getExpression(param));
+ }
+ _expression = new EdmApplyImpl(exp.asApply().getFunction(), parameters);
+ } else if (exp.isCast()) {
+ _expression = new EdmCastImpl(edm, exp.asCast(), getDynamicExpression(exp.asCast().getValue()));
+ } else if (exp.isCollection()) {
+ final List<EdmAnnotationExpression> items =
+ new ArrayList<EdmAnnotationExpression>(exp.asCollection().getItems().size());
+ for (AnnotationExpression param : exp.asCollection().getItems()) {
+ items.add(getExpression(param));
+ }
+ _expression = new EdmCollectionImpl(items);
+ } else if (exp.isIf()) {
+ _expression = new EdmIfImpl(
+ getExpression(exp.asIf().getGuard()),
+ getExpression(exp.asIf().getThen()),
+ getExpression(exp.asIf().getElse()));
+ } else if (exp.isIsOf()) {
+ _expression = new EdmIsOfImpl(edm, exp.asIsOf(), getDynamicExpression(exp.asIsOf().getValue()));
+ } else if (exp.isLabeledElement()) {
+ _expression = new EdmLabeledElementImpl(
+ exp.asLabeledElement().getName(), getDynamicExpression(exp.asLabeledElement().getValue()));
+ } else if (exp.isLabeledElementReference()) {
+ _expression = new EdmLabeledElementReferenceImpl(exp.asLabeledElementReference().getValue());
+ } else if (exp.isNull()) {
+ _expression = new EdmNullImpl();
+ } else if (exp.isNavigationPropertyPath()) {
+ _expression = new EdmNavigationPropertyPathImpl(exp.asNavigationPropertyPath().getValue());
+ } else if (exp.isPath()) {
+ _expression = new EdmPathImpl(exp.asPath().getValue());
+ } else if (exp.isPropertyPath()) {
+ _expression = new EdmPropertyPathImpl(exp.asPropertyPath().getValue());
+ } else if (exp.isPropertyValue()) {
+ _expression = new EdmPropertyValueImpl(
+ exp.asPropertyValue().getProperty(), getExpression(exp.asPropertyValue().getValue()));
+ } else if (exp.isRecord()) {
+ final List<EdmPropertyValue> propertyValues =
+ new ArrayList<EdmPropertyValue>(exp.asRecord().getPropertyValues().size());
+ for (PropertyValue propertyValue : exp.asRecord().getPropertyValues()) {
+ propertyValues.add(new EdmPropertyValueImpl(
+ propertyValue.getProperty(), getExpression(propertyValue.getValue())));
+ }
+ _expression = new EdmRecordImpl(edm, exp.asRecord().getType(), propertyValues);
+ } else if (exp.isUrlRef()) {
+ _expression = new EdmUrlRefImpl(getExpression(exp.asUrlRef().getValue()));
+ }
+
+ if (_expression instanceof EdmAnnotatable && exp instanceof Annotatable) {
+ for (Annotation _annotation : ((Annotatable) exp).getAnnotations()) {
+ ((EdmAnnotatable) _expression).getAnnotations().add(new EdmAnnotationImpl(edm, _annotation));
+ }
+ }
+
+ return _expression;
+ }
+
+ @Override
+ public EdmAnnotationExpression getExpression() {
+ if (expression == null) {
+ expression = getExpression(annotation.getExpression());
+ }
+ return expression;
+ }
+
+ @Override
+ public EdmAnnotation getAnnotation(final EdmTerm term) {
+ return helper.getAnnotation(term);
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationsImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationsImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationsImpl.java
new file mode 100644
index 0000000..d64056d
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmAnnotationsImpl.java
@@ -0,0 +1,143 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmAnnotations;
+import org.apache.olingo.commons.api.edm.EdmAnnotationsTarget;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.EdmStructuredType;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.Annotation;
+import org.apache.olingo.commons.api.edm.provider.Annotations;
+
+public class EdmAnnotationsImpl implements EdmAnnotations {
+
+ private final Edm edm;
+ private final EdmSchema schema;
+ private final Annotations annotationGroup;
+ private EdmAnnotationsTarget target;
+ private List<EdmAnnotation> annotations;
+
+ public EdmAnnotationsImpl(final Edm edm, final EdmSchema schema, final Annotations annotationGroup) {
+ this.edm = edm;
+ this.schema = schema;
+ this.annotationGroup = annotationGroup;
+ }
+
+ private EdmAnnotationsTarget getTarget(final EdmStructuredType structured, final String path) {
+ EdmAnnotationsTarget _target = null;
+ if (structured != null) {
+ _target = path == null
+ ? structured
+ : structured.getStructuralProperty(path);
+ if (_target == null) {
+ _target = structured.getNavigationProperty(path);
+ }
+ }
+ return _target;
+ }
+
+ private EdmAnnotationsTarget getTarget(final EdmEnumType enumType, final String path) {
+ EdmAnnotationsTarget _target = null;
+ if (enumType != null) {
+ _target = path == null
+ ? enumType
+ : enumType.getMember(path);
+ }
+ return _target;
+ }
+
+ @Override
+ public EdmAnnotationsTarget getTarget() {
+ if (target == null) {
+ final String[] splitted = StringUtils.split(annotationGroup.getTarget(), '/');
+ final FullQualifiedName base = new FullQualifiedName(splitted[0]);
+ final String path = splitted.length > 1 ? splitted[1] : null;
+
+ final EdmEntityContainer baseEntityContainer = schema.getEntityContainer(base);
+
+ target = baseEntityContainer == null? null: baseEntityContainer.getActionImport(path);
+ if (target == null) {
+ target = getTarget(edm.getComplexType(base), path);
+ if (target == null) {
+ target = baseEntityContainer;
+ if (target == null) {
+ target = baseEntityContainer == null? null: baseEntityContainer.getEntitySet(path);
+ if (target == null) {
+ target = getTarget(edm.getEntityType(base), path);
+ if (target == null) {
+ target = getTarget(edm.getEnumType(base), path);
+ if (target == null) {
+ target = baseEntityContainer == null? null: baseEntityContainer.getFunctionImport(path);
+ if (target == null) {
+ target = baseEntityContainer == null? null: baseEntityContainer.getSingleton(path);
+ if (target == null) {
+ target = edm.getTerm(base);
+ if (target == null) {
+ target = edm.getTypeDefinition(base);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return target;
+ }
+
+ @Override
+ public String getQualifier() {
+ return annotationGroup.getQualifier();
+ }
+
+ @Override
+ public EdmAnnotation getAnnotation(final EdmTerm term) {
+ EdmAnnotation result = null;
+ for (EdmAnnotation annotation : getAnnotations()) {
+ if (term.getFullQualifiedName().equals(annotation.getTerm().getFullQualifiedName())) {
+ result = annotation;
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ if (annotations == null) {
+ annotations = new ArrayList<EdmAnnotation>();
+ for (Annotation annotation : annotationGroup.getAnnotations()) {
+ annotations.add(new EdmAnnotationImpl(edm, annotation));
+ }
+ }
+ return annotations;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmBindingTargetImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmBindingTargetImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmBindingTargetImpl.java
new file mode 100644
index 0000000..d6bb531
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmBindingTargetImpl.java
@@ -0,0 +1,71 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmNavigationPropertyBinding;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.provider.BindingTarget;
+import org.apache.olingo.commons.api.edm.provider.NavigationPropertyBinding;
+import org.apache.olingo.commons.core.edm.AbstractEdmBindingTarget;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.EdmNavigationPropertyBindingImpl;
+
+public abstract class EdmBindingTargetImpl extends AbstractEdmBindingTarget {
+
+ private final BindingTarget target;
+ private List<EdmNavigationPropertyBinding> navigationPropertyBindings;
+ private final EdmAnnotationHelper helper;
+
+ public EdmBindingTargetImpl(final Edm edm, final EdmEntityContainer container, final BindingTarget target) {
+ super(edm, container, target.getName(), target.getTypeFQN());
+ this.target = target;
+ this.helper = new EdmAnnotationHelperImpl(edm, target);
+ }
+
+ @Override
+ public List<EdmNavigationPropertyBinding> getNavigationPropertyBindings() {
+ if (navigationPropertyBindings == null) {
+ List<NavigationPropertyBinding> providerBindings = target.getNavigationPropertyBindings();
+ navigationPropertyBindings = new ArrayList<EdmNavigationPropertyBinding>();
+ if (providerBindings != null) {
+ for (NavigationPropertyBinding binding : providerBindings) {
+ navigationPropertyBindings.add(new EdmNavigationPropertyBindingImpl(binding.getPath(), binding.getTarget()));
+ }
+ }
+ }
+ return navigationPropertyBindings;
+ }
+
+
+ @Override
+ public EdmAnnotation getAnnotation(final EdmTerm term) {
+ return helper.getAnnotation(term);
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5cef4fae/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmComplexTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmComplexTypeImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmComplexTypeImpl.java
new file mode 100644
index 0000000..5b641ba
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmComplexTypeImpl.java
@@ -0,0 +1,82 @@
+/*
+ * 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.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.ComplexType;
+import org.apache.olingo.commons.core.edm.AbstractEdmComplexType;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
+
+import java.util.List;
+import java.util.Map;
+
+public class EdmComplexTypeImpl extends AbstractEdmComplexType {
+
+ private final EdmStructuredTypeHelper helper;
+
+ private EdmAnnotationHelper annotationHelper;
+
+ public static EdmComplexTypeImpl getInstance(
+ final Edm edm, final FullQualifiedName name, final ComplexType complexType) {
+
+ return new EdmComplexTypeImpl(edm, name, complexType);
+ }
+
+ private EdmComplexTypeImpl(final Edm edm, final FullQualifiedName name, final ComplexType complexType) {
+ super(edm, name, complexType.getBaseTypeFQN());
+ this.helper = new EdmStructuredTypeHelperImpl(edm, name, complexType);
+ this.annotationHelper = new EdmAnnotationHelperImpl(edm, complexType);
+ }
+
+ @Override
+ protected Map<String, EdmProperty> getProperties() {
+ return helper.getProperties();
+ }
+
+ @Override
+ protected Map<String, EdmNavigationProperty> getNavigationProperties() {
+ return helper.getNavigationProperties();
+ }
+
+ @Override
+ public boolean isOpenType() {
+ return helper.isOpenType();
+ }
+
+ @Override
+ public boolean isAbstract() {
+ return helper.isAbstract();
+ }
+
+ @Override
+ public EdmAnnotation getAnnotation(final EdmTerm term) {
+ return annotationHelper == null ? null : annotationHelper.getAnnotation(term);
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return annotationHelper == null ? null : annotationHelper.getAnnotations();
+ }
+}