You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/05/04 18:24:11 UTC
[8/9] [OLINGO-263][OLINGO-264] First draft Edm annotation interfaces
+ client-side implementation (server components have TODO)
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/PropertyValue.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/PropertyValue.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/PropertyValue.java
new file mode 100644
index 0000000..74b7721
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/PropertyValue.java
@@ -0,0 +1,29 @@
+/*
+ * 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.api.edm.xml.v4.annotation;
+
+import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
+
+public interface PropertyValue extends DynamicAnnotationExpression, Annotatable {
+
+ String getProperty();
+
+ AnnotationExpression getValue();
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/Record.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/Record.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/Record.java
new file mode 100644
index 0000000..fe2cd8d
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/Record.java
@@ -0,0 +1,30 @@
+/*
+ * 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.api.edm.xml.v4.annotation;
+
+import java.util.List;
+import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
+
+public interface Record extends DynamicAnnotationExpression, Annotatable {
+
+ List<PropertyValue> getPropertyValues();
+
+ String getType();
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/TwoParamsOpDynamicAnnotationExpression.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/TwoParamsOpDynamicAnnotationExpression.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/TwoParamsOpDynamicAnnotationExpression.java
new file mode 100644
index 0000000..15f56a1
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/TwoParamsOpDynamicAnnotationExpression.java
@@ -0,0 +1,50 @@
+/*
+ * 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.api.edm.xml.v4.annotation;
+
+public interface TwoParamsOpDynamicAnnotationExpression extends DynamicAnnotationExpression {
+
+ public static enum Type {
+
+ And,
+ Or,
+ Eq,
+ Ne,
+ Gt,
+ Ge,
+ Lt,
+ Le;
+
+ public static Type fromString(final String value) {
+ Type result = null;
+ for (Type type : values()) {
+ if (value.equals(type.name())) {
+ result = type;
+ }
+ }
+ return result;
+ }
+ }
+
+ Type getType();
+
+ DynamicAnnotationExpression getLeftExpression();
+
+ DynamicAnnotationExpression getRightExpression();
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/UrlRef.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/UrlRef.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/UrlRef.java
new file mode 100644
index 0000000..9e67cfb
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v4/annotation/UrlRef.java
@@ -0,0 +1,25 @@
+/*
+ * 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.api.edm.xml.v4.annotation;
+
+public interface UrlRef extends DynamicAnnotationExpression {
+
+ AnnotationExpression getValue();
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
index db9b8c8..576d648 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
@@ -22,7 +22,6 @@ import org.apache.olingo.client.api.CommonODataClient;
import org.apache.olingo.client.api.communication.request.batch.v3.BatchRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v3.CUDRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
-import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory;
import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory;
import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory;
import org.apache.olingo.client.api.op.v3.ODataBinder;
@@ -65,8 +64,5 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
StreamedRequestFactory getStreamedRequestFactory();
@Override
- InvokeRequestFactory getInvokeRequestFactory();
-
- @Override
BatchRequestFactory getBatchRequestFactory();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
index 7ee53bf..171f51f 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
@@ -22,7 +22,6 @@ import org.apache.olingo.client.api.CommonODataClient;
import org.apache.olingo.client.api.communication.request.batch.v4.BatchRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v4.CUDRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
-import org.apache.olingo.client.api.communication.request.invoke.v4.InvokeRequestFactory;
import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRequestFactory;
import org.apache.olingo.client.api.communication.request.streamed.v4.StreamedRequestFactory;
import org.apache.olingo.client.api.communication.request.v4.AsyncRequestFactory;
@@ -68,8 +67,5 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
StreamedRequestFactory getStreamedRequestFactory();
@Override
- InvokeRequestFactory getInvokeRequestFactory();
-
- @Override
BatchRequestFactory getBatchRequestFactory();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
index a1a1b8c..08fc6f2 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
@@ -19,22 +19,15 @@
package org.apache.olingo.client.core.communication.request.invoke;
import java.net.URI;
-import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.client.api.communication.request.invoke.CommonInvokeRequestFactory;
+import org.apache.olingo.client.api.communication.request.invoke.InvokeRequestFactory;
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
import org.apache.olingo.commons.api.edm.EdmOperation;
-public abstract class AbstractInvokeRequestFactory implements CommonInvokeRequestFactory {
+public abstract class AbstractInvokeRequestFactory implements InvokeRequestFactory {
private static final long serialVersionUID = -906760270085197249L;
- protected final CommonODataClient client;
-
- protected AbstractInvokeRequestFactory(final CommonODataClient client) {
- this.client = client;
- }
-
@Override
public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
final URI uri, final EdmOperation operation) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
index 662f9db..0d71a4a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
@@ -23,7 +23,6 @@ import java.util.Map;
import org.apache.olingo.client.api.v3.ODataClient;
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
-import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory;
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
import org.apache.olingo.commons.api.domain.ODataValue;
import org.apache.olingo.client.api.http.HttpMethod;
@@ -36,12 +35,14 @@ import org.apache.olingo.commons.api.edm.EdmOperation;
import org.apache.olingo.commons.api.edm.EdmReturnType;
import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
-public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory implements InvokeRequestFactory {
+public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory {
private static final long serialVersionUID = -659256862901915496L;
+ private final ODataClient client;
+
public InvokeRequestFactoryImpl(final ODataClient client) {
- super(client);
+ this.client = client;
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
index 4d5a4b1..ded9992 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
@@ -23,7 +23,6 @@ import java.util.Map;
import org.apache.olingo.client.api.v4.ODataClient;
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
-import org.apache.olingo.client.api.communication.request.invoke.v4.InvokeRequestFactory;
import org.apache.olingo.client.api.http.HttpMethod;
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
import org.apache.olingo.commons.api.domain.ODataValue;
@@ -36,12 +35,14 @@ import org.apache.olingo.commons.api.edm.EdmOperation;
import org.apache.olingo.commons.api.edm.EdmReturnType;
import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
-public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory implements InvokeRequestFactory {
+public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory {
private static final long serialVersionUID = 8452737360003104372L;
+ private final ODataClient client;
+
public InvokeRequestFactoryImpl(final ODataClient client) {
- super(client);
+ this.client = client;
}
@SuppressWarnings("unchecked")
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
index 15a9604..f95746e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
@@ -18,18 +18,23 @@
*/
package org.apache.olingo.client.core.edm;
+import java.util.List;
import org.apache.olingo.client.api.edm.xml.v4.ActionImport;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
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.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmActionImport {
private final ActionImport actionImport;
+ private final EdmAnnotationHelper helper;
+
private FullQualifiedName actionFQN;
public EdmActionImportImpl(final Edm edm, final EdmEntityContainer container, final String name,
@@ -37,6 +42,7 @@ public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmAc
super(edm, container, name, actionImport.getEntitySet());
this.actionImport = actionImport;
+ this.helper = new EdmAnnotationHelperImpl(edm, actionImport);
}
public FullQualifiedName getActionFQN() {
@@ -52,4 +58,13 @@ public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmAc
return edm.getUnboundAction(getActionFQN());
}
+ @Override
+ public TargetType getAnnotationsTargetType() {
+ return TargetType.ActionImport;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
new file mode 100644
index 0000000..6333bca
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationHelperImpl.java
@@ -0,0 +1,53 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
+import org.apache.olingo.client.api.edm.xml.v4.Annotation;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+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 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/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
new file mode 100644
index 0000000..b219eb2
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationImpl.java
@@ -0,0 +1,238 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
+import org.apache.olingo.client.api.edm.xml.v4.Annotation;
+import org.apache.olingo.client.api.edm.xml.v4.annotation.AnnotationExpression;
+import org.apache.olingo.client.api.edm.xml.v4.annotation.DynamicAnnotationExpression;
+import org.apache.olingo.client.api.edm.xml.v4.annotation.PropertyValue;
+import org.apache.olingo.client.core.edm.v4.annotation.EdmCastImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmAnnotationPathImpl;
+import org.apache.olingo.client.core.edm.v4.annotation.EdmConstantAnnotationExpressionImpl;
+import org.apache.olingo.client.core.edm.v4.annotation.EdmIsOfImpl;
+import org.apache.olingo.client.core.edm.v4.annotation.EdmRecordImpl;
+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.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.annotation.EdmAndImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmApplyImpl;
+import org.apache.olingo.commons.core.edm.annotation.EdmCollectionImpl;
+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.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.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(edm, 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 List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationsImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationsImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationsImpl.java
new file mode 100644
index 0000000..b4888b6
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmAnnotationsImpl.java
@@ -0,0 +1,146 @@
+/*
+ * 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;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.client.api.edm.xml.v4.Annotation;
+import org.apache.olingo.client.api.edm.xml.v4.Annotations;
+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;
+
+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/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
index 452c880..9aa3485 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmBindingTargetImpl.java
@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.olingo.client.api.edm.xml.v4.BindingTarget;
import org.apache.olingo.client.api.edm.xml.v4.NavigationPropertyBinding;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmBindingTarget;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmException;
@@ -32,18 +33,23 @@ import org.apache.olingo.commons.api.edm.EdmNavigationPropertyBinding;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.Target;
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 final EdmAnnotationHelper helper;
+
private List<EdmNavigationPropertyBinding> navigationPropertyBindings;
public EdmBindingTargetImpl(final Edm edm, final EdmEntityContainer container,
- final String name, final FullQualifiedName type, final BindingTarget target) {
+ final String name, final FullQualifiedName type, final BindingTarget target) {
super(edm, container, name, type);
this.target = target;
+ this.helper = new EdmAnnotationHelperImpl(edm, target);
}
@Override
@@ -53,8 +59,8 @@ public abstract class EdmBindingTargetImpl extends AbstractEdmBindingTarget {
final List<? extends NavigationPropertyBinding> navigationPropertyBindings = target.getNavigationPropertyBindings();
boolean found = false;
for (final Iterator<? extends NavigationPropertyBinding> itor = navigationPropertyBindings.iterator(); itor
- .hasNext()
- && !found;) {
+ .hasNext()
+ && !found;) {
final NavigationPropertyBinding binding = itor.next();
if (binding.getPath().equals(path)) {
@@ -95,4 +101,9 @@ public abstract class EdmBindingTargetImpl extends AbstractEdmBindingTarget {
return navigationPropertyBindings;
}
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
index ae6c377..0b40f67 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
@@ -18,21 +18,19 @@
*/
package org.apache.olingo.client.core.edm;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
-import org.apache.olingo.client.api.v3.UnsupportedInV3Exception;
import org.apache.olingo.client.api.edm.xml.CommonParameter;
import org.apache.olingo.client.api.edm.xml.ComplexType;
import org.apache.olingo.client.api.edm.xml.EntityContainer;
@@ -41,12 +39,18 @@ import org.apache.olingo.client.api.edm.xml.EnumType;
import org.apache.olingo.client.api.edm.xml.Schema;
import org.apache.olingo.client.api.edm.xml.v3.FunctionImport;
import org.apache.olingo.client.api.edm.xml.v4.Action;
+import org.apache.olingo.client.api.edm.xml.v4.Annotatable;
+import org.apache.olingo.client.api.edm.xml.v4.Annotation;
+import org.apache.olingo.client.api.edm.xml.v4.Annotations;
import org.apache.olingo.client.api.edm.xml.v4.Function;
+import org.apache.olingo.client.api.edm.xml.v4.Term;
import org.apache.olingo.client.api.edm.xml.v4.TypeDefinition;
import org.apache.olingo.client.core.edm.v3.EdmActionProxy;
import org.apache.olingo.client.core.edm.v3.EdmFunctionProxy;
import org.apache.olingo.client.core.edm.v3.FunctionImportUtils;
import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmAnnotations;
import org.apache.olingo.commons.api.edm.EdmComplexType;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmEntityType;
@@ -54,10 +58,12 @@ import org.apache.olingo.commons.api.edm.EdmEnumType;
import org.apache.olingo.commons.api.edm.EdmFunction;
import org.apache.olingo.commons.api.edm.EdmSchema;
import org.apache.olingo.commons.api.edm.EdmServiceMetadata;
+import org.apache.olingo.commons.api.edm.EdmTerm;
import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.core.edm.AbstractEdm;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
public class EdmClientImpl extends AbstractEdm {
@@ -102,6 +108,15 @@ public class EdmClientImpl extends AbstractEdm {
}
@Override
+ protected Map<String, EdmSchema> createSchemas() {
+ final Map<String, EdmSchema> _schemas = new LinkedHashMap<String, EdmSchema>(xmlSchemas.size());
+ for (Schema schema : xmlSchemas) {
+ _schemas.put(schema.getNamespace(), new EdmSchemaImpl(version, this, xmlSchemas, schema));
+ }
+ return _schemas;
+ }
+
+ @Override
protected EdmEntityContainer createEntityContainer(final FullQualifiedName containerName) {
EdmEntityContainer result = null;
@@ -142,8 +157,6 @@ public class EdmClientImpl extends AbstractEdm {
if (xmlTypeDefinition != null) {
result = new EdmTypeDefinitionImpl(version, this, typeDefinitionName, xmlTypeDefinition);
}
- } else {
- throw new UnsupportedInV3Exception();
}
return result;
@@ -408,6 +421,57 @@ public class EdmClientImpl extends AbstractEdm {
}
@Override
+ protected EdmTerm createTerm(final FullQualifiedName termName) {
+ EdmTerm result = null;
+
+ final Schema schema = xmlSchemaByNamespace.get(termName.getNamespace());
+ if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+ final Term term = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getTerm(termName.getName());
+ if (term != null) {
+ result = new EdmTermImpl(this, term);
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ protected EdmAnnotations createAnnotationGroup(final FullQualifiedName targetName) {
+ EdmAnnotationsImpl result = null;
+
+ final Schema schema = xmlSchemaByNamespace.get(targetName.getNamespace());
+ if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+ final Annotations annotationGroup =
+ ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotationGroup(targetName.getName());
+ if (annotationGroup != null) {
+ result = new EdmAnnotationsImpl(this, schemas.get(schema.getNamespace()), annotationGroup);
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ protected List<EdmAnnotation> createAnnotations(final FullQualifiedName annotatedName) {
+ List<EdmAnnotation> result = null;
+
+ final Schema schema = xmlSchemaByNamespace.get(annotatedName.getNamespace());
+ if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+ final Annotatable annotatable =
+ ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).getAnnotatables().get(annotatedName.getName());
+ if (annotatable != null && annotatable.getAnnotations() != null) {
+ result = new ArrayList<EdmAnnotation>();
+ for (Annotation annotation : annotatable.getAnnotations()) {
+ final EdmTerm term = getTerm(new FullQualifiedName(annotation.getTerm()));
+ result.add(new EdmAnnotationImpl(this, annotation));
+ }
+ }
+ }
+
+ return result;
+ }
+
+ @Override
public boolean equals(final Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@@ -421,13 +485,4 @@ public class EdmClientImpl extends AbstractEdm {
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
}
-
- @Override
- protected List<EdmSchema> createSchemas() {
- final List<EdmSchema> schemas = new ArrayList<EdmSchema>();
- for (Schema schema : xmlSchemas) {
- schemas.add(new EdmSchemaImpl(version, this, xmlSchemas, schema));
- }
- return schemas;
- }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
index 1ccc8d5..f770e56 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
@@ -24,15 +24,19 @@ import java.util.Map;
import org.apache.olingo.client.api.edm.xml.ComplexType;
import org.apache.olingo.client.api.edm.xml.Schema;
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.FullQualifiedName;
import org.apache.olingo.commons.core.edm.AbstractEdmComplexType;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
public class EdmComplexTypeImpl extends AbstractEdmComplexType {
- private final EdmStructuredTypeHelper helper;
+ private final EdmStructuredTypeHelper typeHelper;
+
+ private EdmAnnotationHelper annotationHelper;
public static EdmComplexTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn,
final List<? extends Schema> xmlSchemas, final ComplexType complexType) {
@@ -53,26 +57,36 @@ public class EdmComplexTypeImpl extends AbstractEdmComplexType {
final List<? extends Schema> xmlSchemas, final ComplexType complexType) {
super(edm, fqn, baseTypeName);
- this.helper = new EdmStructuredTypeHelperImpl(edm, xmlSchemas, complexType);
+ this.typeHelper = new EdmStructuredTypeHelperImpl(edm, getFullQualifiedName(), xmlSchemas, complexType);
+ if (complexType instanceof org.apache.olingo.client.api.edm.xml.v4.ComplexType) {
+ this.annotationHelper = new EdmAnnotationHelperImpl(edm,
+ (org.apache.olingo.client.api.edm.xml.v4.ComplexType) complexType);
+ }
}
@Override
protected Map<String, EdmProperty> getProperties() {
- return helper.getProperties();
+ return typeHelper.getProperties();
}
@Override
protected Map<String, EdmNavigationProperty> getNavigationProperties() {
- return helper.getNavigationProperties();
+ return typeHelper.getNavigationProperties();
}
@Override
public boolean isOpenType() {
- return helper.isOpenType();
+ return typeHelper.isOpenType();
}
@Override
public boolean isAbstract() {
- return helper.isAbstract();
+ return typeHelper.isAbstract();
}
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return annotationHelper == null ? null : annotationHelper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
index cf846f7..ff0938b 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
@@ -18,6 +18,7 @@
*/
package org.apache.olingo.client.core.edm;
+import java.util.Collections;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
import java.util.List;
@@ -34,12 +35,13 @@ import org.apache.olingo.client.core.edm.v3.EdmEntitySetProxy;
import org.apache.olingo.client.core.edm.v3.EdmFunctionImportProxy;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmActionImport;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
-import org.apache.olingo.commons.api.edm.EdmException;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
import org.apache.olingo.commons.api.edm.EdmSingleton;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.core.edm.AbstractEdmEntityContainer;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
@@ -47,6 +49,8 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
private final List<? extends Schema> xmlSchemas;
+ private EdmAnnotationHelper helper;
+
public EdmEntityContainerImpl(final Edm edm, final FullQualifiedName entityContainerName,
final EntityContainer xmlEntityContainer, final List<? extends Schema> xmlSchemas) {
@@ -55,6 +59,10 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
this.xmlEntityContainer = xmlEntityContainer;
this.xmlSchemas = xmlSchemas;
+ if (xmlEntityContainer instanceof org.apache.olingo.client.api.edm.xml.v4.EntityContainer) {
+ this.helper = new EdmAnnotationHelperImpl(edm,
+ (org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer);
+ }
}
@Override
@@ -72,63 +80,69 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
final Singleton singleton = ((org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
getSingleton(singletonName);
- if (singleton == null) {
- throw new EdmException("Singleton named '" + singletonName + "' not found in " + entityContainerName);
- }
- return new EdmSingletonImpl(edm, this, singletonName, new EdmTypeInfo.Builder().
- setTypeExpression(singleton.getEntityType()).setDefaultNamespace(entityContainerName.getNamespace()).
- build().getFullQualifiedName(), singleton);
+ return singleton == null
+ ? null
+ : new EdmSingletonImpl(edm, this, singletonName, new EdmTypeInfo.Builder().
+ setTypeExpression(singleton.getEntityType()).
+ setDefaultNamespace(entityContainerName.getNamespace()).
+ build().getFullQualifiedName(), singleton);
}
@Override
protected EdmEntitySet createEntitySet(final String entitySetName) {
+ EdmEntitySet result = null;
+
final EntitySet entitySet = xmlEntityContainer.getEntitySet(entitySetName);
- if (entitySet == null) {
- throw new EdmException("EntitySet named '" + entitySetName + "' not found in " + entityContainerName);
+ if (entitySet != null) {
+ final FullQualifiedName entityType = new EdmTypeInfo.Builder().setTypeExpression(entitySet.getEntityType()).
+ setDefaultNamespace(entityContainerName.getNamespace()).build().getFullQualifiedName();
+ if (entitySet instanceof org.apache.olingo.client.api.edm.xml.v4.EntitySet) {
+ result = new EdmEntitySetImpl(edm, this, entitySetName, entityType,
+ (org.apache.olingo.client.api.edm.xml.v4.EntitySet) entitySet);
+ } else {
+ result = new EdmEntitySetProxy(edm, this, entitySetName, entityType, xmlSchemas);
+ }
}
- final FullQualifiedName entityType = new EdmTypeInfo.Builder().setTypeExpression(entitySet.getEntityType()).
- setDefaultNamespace(entityContainerName.getNamespace()).build().getFullQualifiedName();
- if (entitySet instanceof org.apache.olingo.client.api.edm.xml.v4.EntitySet) {
- return new EdmEntitySetImpl(edm, this, entitySetName, entityType,
- (org.apache.olingo.client.api.edm.xml.v4.EntitySet) entitySet);
- } else {
- return new EdmEntitySetProxy(edm, this, entitySetName, entityType, xmlSchemas);
- }
+ return result;
}
@Override
protected EdmActionImport createActionImport(final String actionImportName) {
+ EdmActionImport result = null;
+
if (xmlEntityContainer instanceof org.apache.olingo.client.api.edm.xml.v4.EntityContainer) {
final ActionImport actionImport = ((org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
getActionImport(actionImportName);
- if (actionImport == null) {
- throw new EdmException("ActionImport named '" + actionImportName + "' not found in " + entityContainerName);
+ if (actionImport != null) {
+ result = new EdmActionImportImpl(edm, this, actionImportName, actionImport);
}
- return new EdmActionImportImpl(edm, this, actionImportName, actionImport);
} else {
final FunctionImport functionImport = (FunctionImport) xmlEntityContainer.getFunctionImport(actionImportName);
- if (functionImport == null) {
- throw new EdmException("FunctionImport named '" + actionImportName + "' not found in " + entityContainerName);
+ if (functionImport != null) {
+ result = new EdmActionImportProxy(edm, this, actionImportName, functionImport);
}
- return new EdmActionImportProxy(edm, this, actionImportName, functionImport);
}
+
+ return result;
}
@Override
protected EdmFunctionImport createFunctionImport(final String functionImportName) {
+ EdmFunctionImport result = null;
+
final CommonFunctionImport functionImport = xmlEntityContainer.getFunctionImport(functionImportName);
- if (functionImport == null) {
- throw new EdmException("FunctionImport named '" + functionImportName + "' not found in " + entityContainerName);
+ if (functionImport != null) {
+ if (functionImport instanceof org.apache.olingo.client.api.edm.xml.v4.FunctionImport) {
+ result = new EdmFunctionImportImpl(edm, this, functionImportName,
+ (org.apache.olingo.client.api.edm.xml.v4.FunctionImport) functionImport);
+ } else {
+ result = new EdmFunctionImportProxy(edm, this, functionImportName,
+ (org.apache.olingo.client.api.edm.xml.v3.FunctionImport) functionImport);
+ }
}
- if (functionImport instanceof org.apache.olingo.client.api.edm.xml.v4.FunctionImport) {
- return new EdmFunctionImportImpl(edm, this, functionImportName,
- (org.apache.olingo.client.api.edm.xml.v4.FunctionImport) functionImport);
- } else {
- return new EdmFunctionImportProxy(edm, this, functionImportName,
- (org.apache.olingo.client.api.edm.xml.v3.FunctionImport) functionImport);
- }
+ return result;
}
@Override
@@ -209,4 +223,15 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
}
}
}
+
+ @Override
+ public TargetType getAnnotationsTargetType() {
+ return TargetType.EntityContainer;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntitySetImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntitySetImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntitySetImpl.java
index ec9af77..2c80ad1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntitySetImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntitySetImpl.java
@@ -26,12 +26,13 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName;
public class EdmEntitySetImpl extends EdmBindingTargetImpl implements EdmEntitySet {
- private EntitySet entitySet;
+ private final EntitySet entitySet;
public EdmEntitySetImpl(final Edm edm, final EdmEntityContainer container, final String name,
final FullQualifiedName type, final EntitySet entitySet) {
super(edm, container, name, type, entitySet);
+
this.entitySet = entitySet;
}
@@ -39,4 +40,9 @@ public class EdmEntitySetImpl extends EdmBindingTargetImpl implements EdmEntityS
public boolean isIncludeInServiceDocument() {
return entitySet.isIncludeInServiceDocument();
}
+
+ @Override
+ public TargetType getAnnotationsTargetType() {
+ return TargetType.EntitySet;
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
index c7dc7fd..3cd09cb 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
@@ -27,21 +27,25 @@ import org.apache.olingo.client.api.edm.xml.EntityType;
import org.apache.olingo.client.api.edm.xml.PropertyRef;
import org.apache.olingo.client.api.edm.xml.Schema;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
import org.apache.olingo.commons.api.edm.EdmProperty;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.core.edm.AbstractEdmEntityType;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
public class EdmEntityTypeImpl extends AbstractEdmEntityType {
- private final EdmStructuredTypeHelper helper;
+ private final EdmStructuredTypeHelper typeHelper;
- public static EdmEntityTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn,
+ private EdmAnnotationHelper annotationHelper;
+
+ public static EdmEntityTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn,
final List<? extends Schema> xmlSchemas, final EntityType entityType) {
-
+
final FullQualifiedName baseTypeName = entityType.getBaseType() == null
? null
: new EdmTypeInfo.Builder().setTypeExpression(entityType.getBaseType()).build().getFullQualifiedName();
@@ -68,26 +72,36 @@ public class EdmEntityTypeImpl extends AbstractEdmEntityType {
final List<? extends Schema> xmlSchemas, final EntityType entityType) {
super(edm, fqn, baseTypeName, entityType.isHasStream());
- this.helper = new EdmStructuredTypeHelperImpl(edm, xmlSchemas, entityType);
+ this.typeHelper = new EdmStructuredTypeHelperImpl(edm, getFullQualifiedName(), xmlSchemas, entityType);
+ if (entityType instanceof org.apache.olingo.client.api.edm.xml.v4.EntityType) {
+ this.annotationHelper = new EdmAnnotationHelperImpl(edm,
+ (org.apache.olingo.client.api.edm.xml.v4.EntityType) entityType);
+ }
}
@Override
protected Map<String, EdmProperty> getProperties() {
- return helper.getProperties();
+ return typeHelper.getProperties();
}
@Override
protected Map<String, EdmNavigationProperty> getNavigationProperties() {
- return helper.getNavigationProperties();
+ return typeHelper.getNavigationProperties();
}
@Override
public boolean isOpenType() {
- return helper.isOpenType();
+ return typeHelper.isOpenType();
}
@Override
public boolean isAbstract() {
- return helper.isAbstract();
+ return typeHelper.isAbstract();
}
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return annotationHelper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
index bba016b..4a76953 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
@@ -18,6 +18,12 @@
*/
package org.apache.olingo.client.core.edm;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.olingo.client.api.edm.xml.EnumType;
import org.apache.olingo.client.api.edm.xml.Member;
import org.apache.olingo.commons.api.edm.Edm;
@@ -26,14 +32,6 @@ import org.apache.olingo.commons.api.edm.EdmMember;
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.core.edm.AbstractEdmEnumType;
-import org.apache.olingo.commons.core.edm.EdmMemberImpl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.olingo.commons.api.edm.EdmException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
@@ -76,7 +74,7 @@ public class EdmEnumTypeImpl extends AbstractEdmEnumType implements EdmEnumType
final Map<String, EdmMember> _members = new LinkedHashMap<String, EdmMember>(xmlMembers.size());
for (Member xmlMember : xmlMembers) {
_memberNames.add(xmlMember.getName());
- _members.put(xmlMember.getName(), new EdmMemberImpl(edm, xmlMember.getName(), xmlMember.getValue()));
+ _members.put(xmlMember.getName(), new EdmMemberImpl(edm, fqn, xmlMember));
}
this.memberNames = Collections.unmodifiableList(_memberNames);
this.members = Collections.unmodifiableMap(_members);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
index 5c2575e..4a68b9b 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
@@ -23,15 +23,19 @@ import java.util.List;
import org.apache.olingo.client.api.edm.xml.v4.FunctionImport;
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.EdmFunction;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
public class EdmFunctionImportImpl extends EdmOperationImportImpl implements EdmFunctionImport {
private final FunctionImport functionImport;
+ private final EdmAnnotationHelper helper;
+
private FullQualifiedName functionFQN;
public EdmFunctionImportImpl(final Edm edm, final EdmEntityContainer container, final String name,
@@ -39,6 +43,12 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm
super(edm, container, name, functionImport.getEntitySet());
this.functionImport = functionImport;
+ this.helper = new EdmAnnotationHelperImpl(edm, functionImport);
+ }
+
+ @Override
+ public TargetType getAnnotationsTargetType() {
+ return TargetType.FunctionImport;
}
@Override
@@ -65,4 +75,9 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm
return functionImport.isIncludeInServiceDocument();
}
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
new file mode 100644
index 0000000..39806a4
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmMemberImpl.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import java.util.Collections;
+import java.util.List;
+import org.apache.olingo.client.api.edm.xml.Member;
+import org.apache.olingo.client.core.edm.xml.v4.MemberImpl;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.AbstractEdmMember;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+
+public class EdmMemberImpl extends AbstractEdmMember {
+
+ private EdmAnnotationHelper helper;
+
+ public EdmMemberImpl(final Edm edm, final FullQualifiedName enumFQN, final Member member) {
+ super(edm, enumFQN, member.getName(), member.getValue());
+ this.helper = member instanceof MemberImpl
+ ? new EdmAnnotationHelperImpl(edm, (MemberImpl) member)
+ : null;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
index 08abd9c..9939364 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
@@ -24,24 +24,34 @@ import java.util.List;
import org.apache.olingo.client.api.edm.xml.v4.NavigationProperty;
import org.apache.olingo.client.api.edm.xml.v4.ReferentialConstraint;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.core.edm.AbstractEdmNavigationProperty;
-import org.apache.olingo.commons.core.edm.EdmReferentialConstraintImpl;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
+ private final FullQualifiedName structuredTypeName;
+
private final NavigationProperty navigationProperty;
private final EdmTypeInfo edmTypeInfo;
+ private final EdmAnnotationHelper helper;
+
private List<EdmReferentialConstraint> referentialConstraints;
- public EdmNavigationPropertyImpl(final Edm edm, final NavigationProperty navigationProperty) {
+ public EdmNavigationPropertyImpl(
+ final Edm edm, final FullQualifiedName structuredTypeName, final NavigationProperty navigationProperty) {
+
super(edm, navigationProperty.getName());
+
+ this.structuredTypeName = structuredTypeName;
this.navigationProperty = navigationProperty;
this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(navigationProperty.getType()).build();
+ this.helper = new EdmAnnotationHelperImpl(edm, navigationProperty);
}
@Override
@@ -71,11 +81,9 @@ public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
@Override
public String getReferencingPropertyName(final String referencedPropertyName) {
- final List<? extends ReferentialConstraint> _referentialConstraints =
- navigationProperty.getReferentialConstraints();
- for (ReferentialConstraint constraint : _referentialConstraints) {
- if (constraint.getReferencedProperty().equals(referencedPropertyName)) {
- return constraint.getProperty();
+ for (EdmReferentialConstraint constraint : getReferentialConstraints()) {
+ if (constraint.getReferencedPropertyName().equals(referencedPropertyName)) {
+ return constraint.getPropertyName();
}
}
@@ -89,12 +97,21 @@ public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
referentialConstraints = new ArrayList<EdmReferentialConstraint>();
if (providerConstraints != null) {
for (ReferentialConstraint constraint : providerConstraints) {
- referentialConstraints.add(
- new EdmReferentialConstraintImpl(constraint.getProperty(), constraint.getReferencedProperty()));
+ referentialConstraints.add(new EdmReferentialConstraintImpl(edm, constraint));
}
}
}
return referentialConstraints;
}
+ @Override
+ public FullQualifiedName getAnnotationsTargetFQN() {
+ return structuredTypeName;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
index da29a68..c0d3471 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
@@ -24,20 +24,24 @@ import java.util.List;
import org.apache.olingo.client.api.edm.xml.CommonParameter;
import org.apache.olingo.client.api.edm.xml.v4.Action;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmParameter;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
import org.apache.olingo.commons.core.edm.AbstractEdmOperation;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
public abstract class EdmOperationImpl extends AbstractEdmOperation {
protected final Action operation;
+ protected final EdmAnnotationHelper helper;
+
protected static <T extends EdmOperationImpl> T getInstance(final T instance) {
final List<? extends CommonParameter> parameters = instance.operation.getParameters();
final List<EdmParameter> _parameters = new ArrayList<EdmParameter>(parameters.size());
for (CommonParameter parameter : parameters) {
- _parameters.add(EdmParameterImpl.getInstance(instance.edm, parameter));
+ _parameters.add(new EdmParameterImpl(instance.edm, parameter));
}
instance.setParameters(_parameters);
@@ -57,6 +61,7 @@ public abstract class EdmOperationImpl extends AbstractEdmOperation {
super(edm, name, kind);
this.operation = operation;
+ this.helper = new EdmAnnotationHelperImpl(edm, operation);
}
private EdmParameter getBindingParameter() {
@@ -87,4 +92,10 @@ public abstract class EdmOperationImpl extends AbstractEdmOperation {
}
return result;
}
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
index 9f7aadf..f415246 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImportImpl.java
@@ -18,7 +18,10 @@
*/
package org.apache.olingo.client.core.edm;
+import java.util.Collections;
+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.Target;
import org.apache.olingo.commons.core.edm.AbstractEdmOperationImport;
@@ -31,4 +34,8 @@ public abstract class EdmOperationImportImpl extends AbstractEdmOperationImport
super(edm, container, name, entitySet == null ? null : new Target.Builder(entitySet, container).build());
}
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return Collections.<EdmAnnotation>emptyList();
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
index 6c71709..68388b3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
@@ -18,32 +18,39 @@
*/
package org.apache.olingo.client.core.edm;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import java.util.Collections;
+import java.util.List;
import org.apache.olingo.client.api.edm.xml.CommonParameter;
+import org.apache.olingo.client.api.edm.xml.v4.Parameter;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmMapping;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.geo.SRID;
import org.apache.olingo.commons.core.edm.AbstractEdmParameter;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
public class EdmParameterImpl extends AbstractEdmParameter {
private final CommonParameter parameter;
- private final EdmTypeInfo parameterInfo;
+ private final EdmTypeInfo typeInfo;
- public static EdmParameterImpl getInstance(final Edm edm, final CommonParameter parameter) {
- final EdmTypeInfo paramTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(parameter.getType()).build();
- return new EdmParameterImpl(edm, parameter, paramTypeInfo);
- }
+ private EdmAnnotationHelper helper;
- private EdmParameterImpl(final Edm edm, final CommonParameter parameter, final EdmTypeInfo parameterInfo) {
- super(edm, parameter.getName(), parameterInfo.getFullQualifiedName());
+ public EdmParameterImpl(final Edm edm, final CommonParameter parameter) {
+ super(edm, parameter.getName(), new FullQualifiedName(parameter.getType()));
this.parameter = parameter;
- this.parameterInfo = parameterInfo;
+ this.typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(parameter.getType()).build();
+ if (parameter instanceof Parameter) {
+ this.helper = new EdmAnnotationHelperImpl(edm, (Parameter) parameter);
+ }
}
@Override
public boolean isCollection() {
- return parameterInfo.isCollection();
+ return typeInfo.isCollection();
}
@Override
@@ -71,4 +78,16 @@ public class EdmParameterImpl extends AbstractEdmParameter {
return parameter.getScale();
}
+ @Override
+ public SRID getSrid() {
+ return (parameter instanceof Parameter)
+ ? ((Parameter) parameter).getSrid()
+ : null;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
index 9c9b4f6..3928c64 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
@@ -18,34 +18,44 @@
*/
package org.apache.olingo.client.core.edm;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import java.util.Collections;
+import java.util.List;
import org.apache.olingo.client.api.edm.xml.CommonProperty;
+import org.apache.olingo.client.api.edm.xml.v4.Property;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
import org.apache.olingo.commons.api.edm.EdmMapping;
import org.apache.olingo.commons.api.edm.EdmProperty;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.geo.SRID;
import org.apache.olingo.commons.core.edm.AbstractEdmProperty;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
public class EdmPropertyImpl extends AbstractEdmProperty implements EdmProperty {
+ private final FullQualifiedName structuredTypeName;
+
private final CommonProperty property;
- private final EdmTypeInfo edmTypeInfo;
+ private final EdmTypeInfo typeInfo;
- public EdmPropertyImpl(final Edm edm, final CommonProperty property) {
+ private EdmAnnotationHelper helper;
+
+ public EdmPropertyImpl(final Edm edm, final FullQualifiedName structuredTypeName, final CommonProperty property) {
super(edm, property.getName());
- this.property = property;
- this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
- }
- @Override
- protected FullQualifiedName getTypeFQN() {
- return edmTypeInfo.getFullQualifiedName();
+ this.structuredTypeName = structuredTypeName;
+ this.property = property;
+ this.typeInfo = new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(property.getType()).build();
+ if (property instanceof Property) {
+ this.helper = new EdmAnnotationHelperImpl(edm, (Property) property);
+ }
}
@Override
- public boolean isCollection() {
- return edmTypeInfo.isCollection();
+ protected EdmTypeInfo getTypeInfo() {
+ return typeInfo;
}
@Override
@@ -88,4 +98,21 @@ public class EdmPropertyImpl extends AbstractEdmProperty implements EdmProperty
return property.getDefaultValue();
}
+ @Override
+ public SRID getSrid() {
+ return (property instanceof Property)
+ ? ((Property) property).getSrid()
+ : null;
+ }
+
+ @Override
+ public FullQualifiedName getAnnotationsTargetFQN() {
+ return structuredTypeName;
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper == null ? Collections.<EdmAnnotation>emptyList() : helper.getAnnotations();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
new file mode 100644
index 0000000..7237854
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReferentialConstraintImpl.java
@@ -0,0 +1,42 @@
+/*
+ * 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;
+
+import java.util.List;
+import org.apache.olingo.client.api.edm.xml.v4.ReferentialConstraint;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.core.edm.AbstractEdmReferentialConstraint;
+import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
+
+public class EdmReferentialConstraintImpl extends AbstractEdmReferentialConstraint {
+
+ private final EdmAnnotationHelper helper;
+
+ public EdmReferentialConstraintImpl(final Edm edm, final ReferentialConstraint constraint) {
+ super(constraint.getProperty(), constraint.getReferencedProperty());
+ this.helper = new EdmAnnotationHelperImpl(edm, constraint);
+ }
+
+ @Override
+ public List<EdmAnnotation> getAnnotations() {
+ return helper.getAnnotations();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/726fbe52/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
index 71a1009..851b299 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
@@ -18,16 +18,17 @@
*/
package org.apache.olingo.client.core.edm;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
import org.apache.olingo.client.api.edm.xml.v4.ReturnType;
import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.geo.SRID;
import org.apache.olingo.commons.core.edm.AbstractEdmReturnType;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
public class EdmReturnTypeImpl extends AbstractEdmReturnType {
private final ReturnType returnType;
- private final EdmTypeInfo returnTypeInfo;
+ private final boolean isCollection;
public static EdmReturnTypeImpl getInstance(final Edm edm, final ReturnType returnType) {
final EdmTypeInfo returnTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(returnType.getType()).build();
@@ -37,7 +38,12 @@ public class EdmReturnTypeImpl extends AbstractEdmReturnType {
private EdmReturnTypeImpl(final Edm edm, final ReturnType returnType, final EdmTypeInfo returnTypeInfo) {
super(edm, returnTypeInfo.getFullQualifiedName());
this.returnType = returnType;
- this.returnTypeInfo = returnTypeInfo;
+ this.isCollection = returnTypeInfo.isCollection();
+ }
+
+ @Override
+ public boolean isCollection() {
+ return isCollection;
}
@Override
@@ -61,8 +67,10 @@ public class EdmReturnTypeImpl extends AbstractEdmReturnType {
}
@Override
- public boolean isCollection() {
- return returnTypeInfo.isCollection();
+ public SRID getSrid() {
+ return (returnType instanceof ReturnType)
+ ? ((ReturnType) returnType).getSrid()
+ : null;
}
}