Repository: olingo-odata4 Updated Branches: refs/heads/master ce4bc57a8 -> 2dc14d676
Revert "[OLINGO-1062]Cannot consume Term defined in external Vocabulary" This reverts commit ce4bc57a84c0f79392a868159734bbf268d3fc4b. Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/2dc14d67 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/2dc14d67 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/2dc14d67 Branch: refs/heads/master Commit: 2dc14d6764da913967311f940d462ed0e0cb236c Parents: ce4bc57 Author: Archana Rai <[email protected]> Authored: Wed Jun 21 11:13:56 2017 +0530 Committer: Archana Rai <[email protected]> Committed: Wed Jun 21 11:13:56 2017 +0530 ---------------------------------------------------------------------- .../olingo/fit/tecsvc/client/BasicITCase.java | 61 --------- .../olingo/fit/tecsvc/http/BasicHttpITCase.java | 25 ---- .../test/resources/edmxWithCoreAnnotation.xml | 49 -------- .../serialization/ClientODataDeserializer.java | 4 - .../client/api/serialization/ODataReader.java | 12 -- .../ClientODataDeserializerImpl.java | 17 --- .../core/serialization/ODataReaderImpl.java | 13 -- .../apache/olingo/client/core/MetadataTest.java | 41 ------ .../org/apache/olingo/client/core/VOC_Core.xml | 125 ------------------- .../client/core/edmxWithCoreAnnotation.xml | 48 ------- .../commons/core/edm/EdmProviderImpl.java | 17 --- .../olingo/server/core/ODataHandlerImpl.java | 5 +- .../olingo/server/core/uri/parser/Parser.java | 13 +- .../TechnicalPrimitiveComplexProcessor.java | 14 +-- .../tecsvc/processor/TechnicalProcessor.java | 95 ++++---------- 15 files changed, 30 insertions(+), 509 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java index 6d1b51b..63a0d0e 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java @@ -29,12 +29,9 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; -import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; @@ -86,12 +83,9 @@ 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.EdmEntitySet; -import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; -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.annotation.EdmExpression; import org.apache.olingo.commons.api.ex.ODataError; import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.commons.api.http.HttpHeader; @@ -121,8 +115,6 @@ public class BasicITCase extends AbstractParamTecSvcITCase { private static final String PROPERTY_COMP_NAV = "CollPropertyCompNav"; private static final String COL_PROPERTY_COMP = "CollPropertyComp"; private static final String PROPERTY_COMP_TWO_PRIM = "PropertyCompTwoPrim"; - - private static final String SERVICE_ROOT_URL = "http://localhost:9080/odata-server-tecsvc/"; @Test public void readServiceDocument() { @@ -1611,57 +1603,4 @@ public class BasicITCase extends AbstractParamTecSvcITCase { getEntities().get(1).getTypeName().toString()); assertEquals("olingo.odata.test1.ETAllPrim", entity.getTypeName().toString()); } - - @Test - public void readViaXmlMetadataAnnotation() throws URISyntaxException, IOException { - InputStream input = Thread.currentThread().getContextClassLoader(). - getResourceAsStream("edmxWithCoreAnnotation.xml"); - final XMLMetadata metadata = getClient().getDeserializer(ContentType.APPLICATION_XML).toMetadata(input); - String vocabUrl = metadata.getReferences().get(0).getUri().toString(); - vocabUrl = vocabUrl.substring(vocabUrl.indexOf("../") + 3); - vocabUrl = SERVICE_ROOT_URL + vocabUrl; - URI uri = new URI(vocabUrl); - input.close(); - ODataRawRequest request = getClient().getRetrieveRequestFactory().getRawRequest(uri); - assertNotNull(request); - setCookieHeader(request); - - ODataRawResponse response = request.execute(); - saveCookieHeader(response); - assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode()); - - List<InputStream> streams = new ArrayList<InputStream>(); - streams.add(response.getRawResponse()); - Edm edm = getClient().getReader().readMetadata(Thread.currentThread().getContextClassLoader(). - getResourceAsStream("edmxWithCoreAnnotation.xml"), streams); - assertNotNull(edm); - final EdmEntityType person = edm.getEntityType( - new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Person")); - assertNotNull(person); - EdmProperty concurrency = (EdmProperty) person.getProperty("Concurrency"); - List<EdmAnnotation> annotations = concurrency.getAnnotations(); - for (EdmAnnotation annotation : annotations) { - annotation.getExpression(); - EdmTerm term = annotation.getTerm(); - assertNotNull(term); - assertEquals("Computed", term.getName()); - assertEquals("Org.OData.Core.V1.Computed", - term.getFullQualifiedName().getFullQualifiedNameAsString()); - assertEquals(1, term.getAnnotations().size()); - } - EdmProperty userName = (EdmProperty) person.getProperty("UserName"); - List<EdmAnnotation> userNameAnnotations = userName.getAnnotations(); - for (EdmAnnotation annotation : userNameAnnotations) { - EdmTerm term = annotation.getTerm(); - assertNotNull(term); - assertEquals("Permissions", term.getName()); - assertEquals("Org.OData.Core.V1.Permissions", - term.getFullQualifiedName().getFullQualifiedNameAsString()); - EdmExpression expression = annotation.getExpression(); - assertNotNull(expression); - assertTrue(expression.isConstant()); - assertEquals("Org.OData.Core.V1.Permission/Read", expression.asConstant().getValueAsString()); - assertEquals("EnumMember", expression.getExpressionName()); - } - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java index 7e4b9b0..55a04f5 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java @@ -181,30 +181,5 @@ public class BasicHttpITCase extends AbstractBaseTestITCase { protected ODataClient getClient() { return null; } - - @Test - public void testInvalidTopUrl() throws Exception { - URL url = new URL(SERVICE_URI + "?$top"); - - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(HttpMethod.GET.name()); - connection.connect(); - - assertEquals(HttpStatusCode.BAD_REQUEST.getStatusCode(), connection.getResponseCode()); - assertTrue(IOUtils.toString(connection.getErrorStream()). - contains("The system query option '$top' has the not-allowed value ''.")); - } - @Test - public void testInvalidSkipUrl() throws Exception { - URL url = new URL(SERVICE_URI + "?$skip="); - - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(HttpMethod.GET.name()); - connection.connect(); - - assertEquals(HttpStatusCode.BAD_REQUEST.getStatusCode(), connection.getResponseCode()); - assertTrue(IOUtils.toString(connection.getErrorStream()). - contains("The system query option '$skip' has the not-allowed value ''.")); - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/fit/src/test/resources/edmxWithCoreAnnotation.xml ---------------------------------------------------------------------- diff --git a/fit/src/test/resources/edmxWithCoreAnnotation.xml b/fit/src/test/resources/edmxWithCoreAnnotation.xml deleted file mode 100644 index e10fcf8..0000000 --- a/fit/src/test/resources/edmxWithCoreAnnotation.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - - 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. - ---> -<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> -<edmx:Reference Uri="../v4.0/cs02/vocabularies/Org.OData.Core.V1.xml"/> - <edmx:DataServices m:DataServiceVersion="4.0" m:MaxDataServiceVersion="4.0" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"> - <Schema Namespace="Microsoft.Exchange.Services.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm"> - <EntityType Name="Person" OpenType="true"> - <Key> - <PropertyRef Name="UserName"/> - </Key> - <Property Name="UserName" Type="Edm.String" Nullable="false"> - <Annotation Term="Org.OData.Core.V1.Permissions"> - <EnumMember>Org.OData.Core.V1.Permission/Read</EnumMember> - </Annotation> - </Property> - <Property Name="FirstName" Type="Edm.String" Nullable="false"/> - <Property Name="LastName" Type="Edm.String" Nullable="false"/> - <Property Name="Emails" Type="Collection(Edm.String)"/> - <Property Name="AddressInfo" Type="Collection(Microsoft.OData.SampleService.Models.TripPin.Location)"/> - <Property Name="Gender" Type="Microsoft.OData.SampleService.Models.TripPin.PersonGender"/> - <Property Name="Concurrency" Type="Edm.Int64" Nullable="false"> - <Annotation Term="Org.OData.Core.V1.Computed" Bool="true"/> - </Property> - </EntityType> - <EntityContainer Name="EntityContainer" m:IsDefaultEntityContainer="true"> - <EntitySet Name="People" EntityType="Microsoft.Exchange.Services.OData.Model.Person"/> - </EntityContainer> - </Schema> - </edmx:DataServices> -</edmx:Edmx> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ClientODataDeserializer.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ClientODataDeserializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ClientODataDeserializer.java index 47935b1..ba18683 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ClientODataDeserializer.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ClientODataDeserializer.java @@ -19,19 +19,15 @@ package org.apache.olingo.client.api.serialization; import java.io.InputStream; -import java.util.List; import org.apache.olingo.client.api.data.ResWrap; import org.apache.olingo.client.api.data.ServiceDocument; import org.apache.olingo.client.api.edm.xml.XMLMetadata; import org.apache.olingo.commons.api.data.Delta; -import org.apache.olingo.commons.api.edm.provider.CsdlSchema; public interface ClientODataDeserializer extends ODataDeserializer { XMLMetadata toMetadata(InputStream input); - - List<CsdlSchema> fetchTermDefinitionSchema(List<InputStream> input); /** * Gets the ServiceDocument object represented by the given InputStream. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ODataReader.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ODataReader.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ODataReader.java index 43f46e5..a374adb 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ODataReader.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/serialization/ODataReader.java @@ -19,7 +19,6 @@ package org.apache.olingo.client.api.serialization; import java.io.InputStream; -import java.util.List; import java.util.Map; import org.apache.olingo.client.api.data.ResWrap; @@ -48,15 +47,6 @@ public interface ODataReader { * @return metadata representation. */ Edm readMetadata(InputStream input); - - /** - * Parses a stream into metadata representation. - * Also parses a term definition stream into Term representation. - * @param input - * @param termDefinitions - * @return - */ - Edm readMetadata(InputStream input, List<InputStream> termDefinitions); /** * Parses a stream into metadata representation, including referenced metadata documents. @@ -66,8 +56,6 @@ public interface ODataReader { * @return metadata representation. */ Edm readMetadata(Map<String, CsdlSchema> xmlSchemas); - - Edm readMetadata(Map<String, CsdlSchema> xmlSchemas, List<CsdlSchema> termDefinitionSchema); /** * Parses an OData service document. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java index ca3d88a..ec361ab 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java @@ -20,8 +20,6 @@ package org.apache.olingo.client.core.serialization; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; import javax.xml.stream.XMLStreamException; @@ -40,7 +38,6 @@ import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntityCollection; import org.apache.olingo.commons.api.data.Property; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; -import org.apache.olingo.commons.api.edm.provider.CsdlSchema; import org.apache.olingo.commons.api.ex.ODataError; import org.apache.olingo.commons.api.format.ContentType; @@ -120,20 +117,6 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer { throw new IllegalArgumentException("Could not parse as Edmx document", e); } } - - @Override - public List<CsdlSchema> fetchTermDefinitionSchema(final List<InputStream> input) { - List<CsdlSchema> schemas = new ArrayList<CsdlSchema>(); - try { - for (InputStream stream : input) { - ClientCsdlEdmx edmx = getXmlMapper().readValue(stream, ClientCsdlEdmx.class); - schemas.addAll(edmx.getDataServices().getSchemas()); - } - return schemas; - } catch (Exception e) { - throw new IllegalArgumentException("Could not parse as Term definition", e); - } - } @Override public ResWrap<ServiceDocument> toServiceDocument(final InputStream input) throws ODataDeserializerException { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/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 c72ce6a..6b8c956 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 @@ -20,7 +20,6 @@ package org.apache.olingo.client.core.serialization; import java.io.InputStream; import java.net.URI; -import java.util.List; import java.util.Map; import org.apache.commons.io.IOUtils; @@ -68,24 +67,12 @@ public class ODataReaderImpl implements ODataReader { } @Override - public Edm readMetadata(final InputStream input, List<InputStream> termDefinition) { - return readMetadata(client.getDeserializer(ContentType.APPLICATION_XML).toMetadata(input).getSchemaByNsOrAlias(), - client.getDeserializer(ContentType.APPLICATION_XML).fetchTermDefinitionSchema(termDefinition)); - } - - @Override public Edm readMetadata(final Map<String, CsdlSchema> xmlSchemas) { ClientCsdlEdmProvider prov = new ClientCsdlEdmProvider(xmlSchemas); return new EdmProviderImpl(prov); } @Override - public Edm readMetadata(final Map<String, CsdlSchema> xmlSchemas, List<CsdlSchema> termDefinitionSchema) { - ClientCsdlEdmProvider prov = new ClientCsdlEdmProvider(xmlSchemas); - return new EdmProviderImpl(prov, termDefinitionSchema); - } - - @Override public ClientServiceDocument readServiceDocument(final InputStream input, final ContentType contentType) throws ODataDeserializerException { return client.getBinder().getODataServiceDocument( http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java index 181335b..c150e64 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/MetadataTest.java @@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.InputStream; -import java.util.ArrayList; import java.util.List; import org.apache.olingo.client.api.edm.xml.XMLMetadata; @@ -41,12 +40,9 @@ import org.apache.olingo.commons.api.edm.EdmEnumType; import org.apache.olingo.commons.api.edm.EdmFunction; import org.apache.olingo.commons.api.edm.EdmFunctionImport; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; -import org.apache.olingo.commons.api.edm.EdmProperty; import org.apache.olingo.commons.api.edm.EdmSchema; -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.annotation.EdmExpression; import org.apache.olingo.commons.api.edm.annotation.EdmUrlRef; import org.apache.olingo.commons.api.edm.constants.EdmTypeKind; import org.apache.olingo.commons.api.edm.provider.CsdlAnnotation; @@ -418,41 +414,4 @@ public class MetadataTest extends AbstractTest { assertNotNull(deleteRestrictions); assertEquals("Capabilities.DeleteRestrictionsType", deleteRestrictions.getType()); } - - @Test - public void readPropertyAnnotations() { - List<InputStream> streams = new ArrayList<InputStream>(); - streams.add(getClass().getResourceAsStream("VOC_Core.xml")); - final Edm edm = client.getReader().readMetadata(getClass().getResourceAsStream("edmxWithCoreAnnotation.xml"), - streams); - assertNotNull(edm); - - final EdmEntityType person = edm.getEntityType( - new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Person")); - assertNotNull(person); - EdmProperty concurrency = (EdmProperty) person.getProperty("Concurrency"); - List<EdmAnnotation> annotations = concurrency.getAnnotations(); - for (EdmAnnotation annotation : annotations) { - EdmTerm term = annotation.getTerm(); - assertNotNull(term); - assertEquals("Computed", term.getName()); - assertEquals("Org.OData.Core.V1.Computed", - term.getFullQualifiedName().getFullQualifiedNameAsString()); - assertEquals(1, term.getAnnotations().size()); - } - EdmProperty userName = (EdmProperty) person.getProperty("UserName"); - List<EdmAnnotation> userNameAnnotations = userName.getAnnotations(); - for (EdmAnnotation annotation : userNameAnnotations) { - EdmTerm term = annotation.getTerm(); - assertNotNull(term); - assertEquals("Permissions", term.getName()); - assertEquals("Org.OData.Core.V1.Permissions", - term.getFullQualifiedName().getFullQualifiedNameAsString()); - EdmExpression expression = annotation.getExpression(); - assertNotNull(expression); - assertTrue(expression.isConstant()); - assertEquals("Org.OData.Core.V1.Permission/Read", expression.asConstant().getValueAsString()); - assertEquals("EnumMember", expression.getExpressionName()); - } - } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-core/src/test/resources/org/apache/olingo/client/core/VOC_Core.xml ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/VOC_Core.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/VOC_Core.xml deleted file mode 100644 index 4e30cad..0000000 --- a/lib/client-core/src/test/resources/org/apache/olingo/client/core/VOC_Core.xml +++ /dev/null @@ -1,125 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - - 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. - ---> -<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0"> - <edmx:DataServices> - <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Org.OData.Core.V1" Alias="Core"> - <Annotation Term="Core.Description"> - <String>Core terms needed to write vocabularies</String> - </Annotation> - - <!--Documentation --> - - <Term Name="Description" Type="Edm.String"> - <Annotation Term="Core.Description" String="A brief description of a model element" /> - <Annotation Term="Core.IsLanguageDependent" /> - </Term> - - <Term Name="LongDescription" Type="Edm.String"> - <Annotation Term="Core.Description" String="A lengthy description of a model element" /> - <Annotation Term="Core.IsLanguageDependent" /> - </Term> - - <!-- Localization --> - - <Term Name="IsLanguageDependent" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term"> - <Annotation Term="Core.Description" String="Properties and terms annotated with this term are language-dependent" /> - <Annotation Term="Core.RequiresType" String="Edm.String" /> - </Term> - - <!-- Term Restrictions --> - - <TypeDefinition Name="Tag" UnderlyingType="Edm.Boolean"> - <Annotation Term="Core.Description" String="This is the type to use for all tagging terms" /> - </TypeDefinition> - - <Term Name="RequiresType" Type="Edm.String" AppliesTo="Term"> - <Annotation Term="Core.Description" - String="Properties and terms annotated with this annotation MUST have a type that is identical to or derived from the given type name" /> - </Term> - - <!--Resource Paths --> - - <Term Name="ResourcePath" Type="Edm.String" AppliesTo="EntitySet Singleton ActionImport FunctionImport"> - <Annotation Term="Core.Description" - String="Resource path for entity container child, can be relative to xml:base and the request URL" /> - <Annotation Term="Core.IsUrl" /> - </Term> - - <Term Name="DereferenceableIDs" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer"> - <Annotation Term="Core.Description" String="Entity-ids are URLs that locate the identified entity" /> - </Term> - - <Term Name="ConventionalIDs" Type="Core.Tag" DefaultValue="true" AppliesTo="EntityContainer"> - <Annotation Term="Core.Description" String="Entity-ids follow OData URL conventions" /> - </Term> - - <!-- Permissions --> - - <Term Name="Permissions" Type="Core.Permission" AppliesTo="Property"> - <Annotation Term="Core.Description" String="Permissions available for a property.The value of 2 is reserved for future use." /> - </Term> - <EnumType Name="Permission" IsFlags="true"> - <Member Name="None" Value="0" /> - <Member Name="Read" Value="1" /> - <Member Name="ReadWrite" Value="3" /> - </EnumType> - - <!-- Metadata Extensions --> - - <Term Name="Immutable" Type="Core.Tag" DefaultValue="true" AppliesTo="Property"> - <Annotation Term="Core.Description" - String="A value for this non-key property can be provided on insert and remains unchanged on update" /> - </Term> - - <Term Name="Computed" Type="Core.Tag" DefaultValue="true" AppliesTo="Property"> - <Annotation Term="Core.Description" String="A value for this property is generated on both insert and update" /> - </Term> - - <Term Name="IsUrl" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term"> - <Annotation Term="Core.Description" String="Properties and terms annotated with this term MUST contain a valid URL" /> - <Annotation Term="Core.RequiresType" String="Edm.String" /> - </Term> - - <Term Name="AcceptableMediaTypes" Type="Collection(Edm.String)" AppliesTo="EntityType Property"> - <Annotation Term="Core.Description" - String="Lists the MIME types acceptable for the annotated entity type marked with HasStream="true" or the annotated stream property" /> - <Annotation Term="Core.IsMediaType" /> - </Term> - - <Term Name="MediaType" Type="Edm.String" AppliesTo="Property"> - <Annotation Term="Core.IsMediaType" /> - <Annotation Term="Core.RequiresType" String="Edm.Binary" /> - </Term> - - <Term Name="IsMediaType" Type="Core.Tag" DefaultValue="true" AppliesTo="Property Term"> - <Annotation Term="Core.Description" String="Properties and terms annotated with this term MUST contain a valid MIME type" /> - <Annotation Term="Core.RequiresType" String="Edm.String" /> - </Term> - - <Term Name="OptimisticConcurrency" Type="Collection(Edm.PropertyPath)" AppliesTo="EntitySet"> - <Annotation Term="Core.Description" - String="Data modification requires the use of Etags. A non-empty collection contains the set of properties that are used to compute the ETag" /> - </Term> - - </Schema> - </edmx:DataServices> -</edmx:Edmx> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/client-core/src/test/resources/org/apache/olingo/client/core/edmxWithCoreAnnotation.xml ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/edmxWithCoreAnnotation.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/edmxWithCoreAnnotation.xml deleted file mode 100644 index 8dfa974..0000000 --- a/lib/client-core/src/test/resources/org/apache/olingo/client/core/edmxWithCoreAnnotation.xml +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - - 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. - ---> -<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> - <edmx:DataServices m:DataServiceVersion="4.0" m:MaxDataServiceVersion="4.0" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"> - <Schema Namespace="Microsoft.Exchange.Services.OData.Model" xmlns="http://docs.oasis-open.org/odata/ns/edm"> - <EntityType Name="Person" OpenType="true"> - <Key> - <PropertyRef Name="UserName"/> - </Key> - <Property Name="UserName" Type="Edm.String" Nullable="false"> - <Annotation Term="Org.OData.Core.V1.Permissions"> - <EnumMember>Org.OData.Core.V1.Permission/Read</EnumMember> - </Annotation> - </Property> - <Property Name="FirstName" Type="Edm.String" Nullable="false"/> - <Property Name="LastName" Type="Edm.String" Nullable="false"/> - <Property Name="Emails" Type="Collection(Edm.String)"/> - <Property Name="AddressInfo" Type="Collection(Microsoft.OData.SampleService.Models.TripPin.Location)"/> - <Property Name="Gender" Type="Microsoft.OData.SampleService.Models.TripPin.PersonGender"/> - <Property Name="Concurrency" Type="Edm.Int64" Nullable="false"> - <Annotation Term="Org.OData.Core.V1.Computed" Bool="true"/> - </Property> - </EntityType> - <EntityContainer Name="EntityContainer" m:IsDefaultEntityContainer="true"> - <EntitySet Name="People" EntityType="Microsoft.Exchange.Services.OData.Model.Person"/> - </EntityContainer> - </Schema> - </edmx:DataServices> -</edmx:Edmx> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmProviderImpl.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmProviderImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmProviderImpl.java index 362bae7..53c69f4 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmProviderImpl.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmProviderImpl.java @@ -59,16 +59,10 @@ public class EdmProviderImpl extends AbstractEdm { Collections.synchronizedMap(new HashMap<FullQualifiedName, List<CsdlAction>>()); private final Map<FullQualifiedName, List<CsdlFunction>> functionsMap = Collections.synchronizedMap(new HashMap<FullQualifiedName, List<CsdlFunction>>()); - private List<CsdlSchema> termSchemaDefinition = null; public EdmProviderImpl(final CsdlEdmProvider provider) { this.provider = provider; } - - public EdmProviderImpl(final CsdlEdmProvider provider, final List<CsdlSchema> termSchemaDefinition) { - this.provider = provider; - this.termSchemaDefinition = termSchemaDefinition; - } @Override public EdmEntityContainer createEntityContainer(final FullQualifiedName containerName) { @@ -340,17 +334,6 @@ public class EdmProviderImpl extends AbstractEdm { CsdlTerm providerTerm = provider.getTerm(termName); if (providerTerm != null) { return new EdmTermImpl(this, termName.getNamespace(), providerTerm); - } else if (termSchemaDefinition != null && termSchemaDefinition.size() > 0) { - for (CsdlSchema schema : termSchemaDefinition) { - if (schema.getNamespace().equalsIgnoreCase(termName.getNamespace())) { - List<CsdlTerm> terms = schema.getTerms(); - for (CsdlTerm term : terms) { - if (term.getName().equals(termName.getName())) { - return new EdmTermImpl(this, termName.getNamespace(), term); - } - } - } - } } return null; } catch (ODataException e) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java index 6d8ed1b..d1a9cf2 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java @@ -211,10 +211,7 @@ public class ODataHandlerImpl implements ODataHandler { if(endIndex == -1) { endIndex = query.length(); } - String format = ""; - if (index + formatOption.length() < endIndex) { - format = query.substring(index + formatOption.length(), endIndex); - } + final String format = query.substring(index + formatOption.length(), endIndex); return new FormatOptionImpl().setFormat(format); } return uriInfo.getFormatOption(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java index edbb369..0ce8c75 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java @@ -33,7 +33,6 @@ import org.apache.olingo.server.api.uri.UriInfoKind; import org.apache.olingo.server.api.uri.UriResource; import org.apache.olingo.server.api.uri.UriResourceAction; import org.apache.olingo.server.api.uri.UriResourceCount; -import org.apache.olingo.server.api.uri.UriResourceEntitySet; import org.apache.olingo.server.api.uri.UriResourceFunction; import org.apache.olingo.server.api.uri.UriResourcePartTyped; import org.apache.olingo.server.api.uri.UriResourceRef; @@ -256,17 +255,11 @@ public class Parser { if (lastSegment instanceof UriResourcePartTyped) { final UriResourcePartTyped typed = (UriResourcePartTyped) lastSegment; contextType = ParserHelper.getTypeInformation(typed); - if (contextType != null) { - if ((lastSegment instanceof UriResourceEntitySet && - (((UriResourceEntitySet) lastSegment).getTypeFilterOnCollection() != null - || ((UriResourceEntitySet) lastSegment).getTypeFilterOnEntry() != null)) - || contextUriInfo.getIdOption() != null) { - if (contextType instanceof EdmEntityType) { - contextUriInfo.setEntityTypeCast((EdmEntityType) contextType); - } + if (contextUriInfo.getIdOption() != null && contextType != null) { + if (contextType instanceof EdmEntityType) { + contextUriInfo.setEntityTypeCast((EdmEntityType) contextType); } } - contextIsCollection = typed.isCollection(); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java index a7aff95..f97b7eb 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java @@ -68,7 +68,6 @@ import org.apache.olingo.server.api.uri.UriHelper; import org.apache.olingo.server.api.uri.UriInfo; import org.apache.olingo.server.api.uri.UriInfoResource; import org.apache.olingo.server.api.uri.UriResource; -import org.apache.olingo.server.api.uri.UriResourceComplexProperty; import org.apache.olingo.server.api.uri.UriResourceFunction; import org.apache.olingo.server.api.uri.UriResourceKind; import org.apache.olingo.server.api.uri.UriResourceProperty; @@ -247,18 +246,9 @@ public class TechnicalPrimitiveComplexProcessor extends TechnicalProcessor } else { final EdmProperty edmProperty = path.isEmpty() ? null : ((UriResourceProperty) resourceParts.get(resourceParts.size() - trailing - 1)).getProperty(); - if (resourceParts.get(resourceParts.size() - trailing - 1) - instanceof UriResourceComplexProperty && - ((UriResourceComplexProperty)resourceParts.get(resourceParts.size() - trailing - 1)). - getComplexTypeFilter() != null) { - EdmType type1 = ((UriResourceComplexProperty)resourceParts.get(resourceParts.size() - trailing - 1)). - getComplexTypeFilter(); - property.setType(type1.getFullQualifiedName().getFullQualifiedNameAsString()); - } final EdmType type = edmProperty == null ? - ((UriResourceFunction) resourceParts.get(0)).getType() : - edmProperty.getType(); - + ((UriResourceFunction) resourceParts.get(0)).getType() : + edmProperty.getType(); final EdmReturnType returnType = resourceParts.get(0) instanceof UriResourceFunction ? ((UriResourceFunction) resourceParts.get(0)).getFunction().getReturnType() : null; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2dc14d67/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java index 9220db9..fc6991f 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java @@ -25,7 +25,6 @@ import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntityCollection; import org.apache.olingo.commons.api.data.Link; import org.apache.olingo.commons.api.edm.EdmBindingTarget; -import org.apache.olingo.commons.api.edm.EdmEntityContainer; import org.apache.olingo.commons.api.edm.EdmEntitySet; import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.commons.api.edm.EdmFunction; @@ -76,36 +75,11 @@ public abstract class TechnicalProcessor implements Processor { EdmEntitySet entitySet = null; final List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); EdmSingleton singleton = null; + // First must be an entity, an entity collection, a function import, or an action import. - //blockTypeFilters(resourcePaths.get(0)); - if (resourcePaths.get(0) instanceof UriResourceEntitySet) { - entitySet = getEntitySetBasedOnTypeCast(((UriResourceEntitySet)resourcePaths.get(0))); - //entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); - } else if (resourcePaths.get(0) instanceof UriResourceFunction) { - entitySet = ((UriResourceFunction) resourcePaths.get(0)).getFunctionImport().getReturnedEntitySet(); - } else if (resourcePaths.get(0) instanceof UriResourceAction) { - entitySet = ((UriResourceAction) resourcePaths.get(0)).getActionImport().getReturnedEntitySet(); - }else if (resourcePaths.get(0) instanceof UriResourceSingleton ) { - singleton =((UriResourceSingleton) resourcePaths.get(0)).getSingleton(); - } else { - throw new ODataApplicationException("Invalid resource type.", - HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); - } - - entitySet = (EdmEntitySet) getEntitySetForNavigation(entitySet, singleton, resourcePaths); - - return entitySet; - } - - protected EdmEntitySet getEdmEntitySetTypeCast(final UriInfoResource uriInfo) throws ODataApplicationException { - EdmEntitySet entitySet = null; - final List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); - EdmSingleton singleton = null; - // First must be an entity, an entity collection, a function import, or an action import. - //blockTypeFilters(resourcePaths.get(0)); + blockTypeFilters(resourcePaths.get(0)); if (resourcePaths.get(0) instanceof UriResourceEntitySet) { - entitySet = getEntitySetBasedOnTypeCast(((UriResourceEntitySet)resourcePaths.get(0))); - //entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); + entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceFunction) { entitySet = ((UriResourceFunction) resourcePaths.get(0)).getFunctionImport().getReturnedEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceAction) { @@ -126,24 +100,24 @@ public abstract class TechnicalProcessor implements Processor { List<UriResource> resourcePaths) throws ODataApplicationException { int navigationCount = 0; while ((entitySet != null || singleton!=null) - && ++navigationCount < resourcePaths.size() + && ++navigationCount < resourcePaths.size() && resourcePaths.get(navigationCount) instanceof UriResourceNavigation) { - final UriResourceNavigation uriResourceNavigation = - (UriResourceNavigation) resourcePaths.get(navigationCount); - blockTypeFilters(uriResourceNavigation); - if (uriResourceNavigation.getProperty().containsTarget()) { - throw new ODataApplicationException("Containment navigation is not supported.", - HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); - } - EdmBindingTarget target = null ; - if(entitySet!=null){ - target = entitySet.getRelatedBindingTarget(uriResourceNavigation.getProperty().getName()); - }else if(singleton != null){ - target = singleton.getRelatedBindingTarget(uriResourceNavigation.getProperty().getName()); - } - if (target instanceof EdmEntitySet) { - entitySet = (EdmEntitySet) target; - } + final UriResourceNavigation uriResourceNavigation = + (UriResourceNavigation) resourcePaths.get(navigationCount); + blockTypeFilters(uriResourceNavigation); + if (uriResourceNavigation.getProperty().containsTarget()) { + throw new ODataApplicationException("Containment navigation is not supported.", + HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); + } + EdmBindingTarget target = null ; + if(entitySet!=null){ + target = entitySet.getRelatedBindingTarget(uriResourceNavigation.getProperty().getName()); + }else if(singleton != null){ + target = singleton.getRelatedBindingTarget(uriResourceNavigation.getProperty().getName()); + } + if (target instanceof EdmEntitySet) { + entitySet = (EdmEntitySet) target; + } } return entitySet; } @@ -165,10 +139,11 @@ public abstract class TechnicalProcessor implements Processor { protected Entity readEntity(final UriInfoResource uriInfo, final boolean ignoreLastNavigation) throws ODataApplicationException { final List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); + Entity entity = null; if (resourcePaths.get(0) instanceof UriResourceEntitySet) { - EdmEntitySet entitySet = getEntitySetBasedOnTypeCast(((UriResourceEntitySet)resourcePaths.get(0))); - entity = dataProvider.read(entitySet, ((UriResourceEntitySet)resourcePaths.get(0)).getKeyPredicates()); + final UriResourceEntitySet uriResource = (UriResourceEntitySet) resourcePaths.get(0); + entity = dataProvider.read(uriResource.getEntitySet(), uriResource.getKeyPredicates()); }else if (resourcePaths.get(0) instanceof UriResourceSingleton) { final UriResourceSingleton uriResource = (UriResourceSingleton) resourcePaths.get(0); entity = dataProvider.read( uriResource.getSingleton()); @@ -230,27 +205,6 @@ public abstract class TechnicalProcessor implements Processor { return entity; } - protected EdmEntitySet getEntitySetBasedOnTypeCast(UriResourceEntitySet uriResource) { - EdmEntitySet entitySet = null; - EdmEntityContainer container = this.serviceMetadata.getEdm().getEntityContainer(); - if (uriResource.getTypeFilterOnEntry() != null || - uriResource.getTypeFilterOnCollection() != null) { - List<EdmEntitySet> entitySets = container.getEntitySets(); - for (EdmEntitySet entitySet1 : entitySets) { - EdmEntityType entityType = entitySet1.getEntityType(); - if ((uriResource.getTypeFilterOnEntry() != null && - entityType.getName().equalsIgnoreCase(uriResource.getTypeFilterOnEntry().getName())) || - (uriResource.getTypeFilterOnCollection() != null && - entityType.getName().equalsIgnoreCase(uriResource.getTypeFilterOnCollection().getName()))) { - entitySet = entitySet1; - break; - } - } - } else { - entitySet = uriResource.getEntitySet(); - } - return entitySet; - } protected EntityCollection readEntityCollection(final UriInfoResource uriInfo) throws ODataApplicationException { final List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); if (resourcePaths.size() > 1 && resourcePaths.get(1) instanceof UriResourceNavigation) { @@ -263,8 +217,7 @@ public abstract class TechnicalProcessor implements Processor { return dataProvider.readFunctionEntityCollection(uriResource.getFunction(), uriResource.getParameters(), uriInfo); } else { - EdmEntitySet entitySet = getEntitySetBasedOnTypeCast(((UriResourceEntitySet)resourcePaths.get(0))); - return dataProvider.readAll(entitySet); + return dataProvider.readAll(((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet()); } } }
