[OLINGO-694] Added read tutorial (part 1)
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/7c557f25 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/7c557f25 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/7c557f25 Branch: refs/heads/master Commit: 7c557f25bd47b90aa75ed684b22db79b519b4e74 Parents: 5e2c60d Author: Michael Bolz <[email protected]> Authored: Wed Jun 17 15:48:14 2015 +0200 Committer: Michael Bolz <[email protected]> Committed: Wed Jun 17 15:48:14 2015 +0200 ---------------------------------------------------------------------- samples/pom.xml | 6 + samples/tutorials/p1_read/pom.xml | 75 +++++++++ .../mynamespace/service/DemoEdmProvider.java | 153 +++++++++++++++++++ .../service/DemoEntityCollectionProcessor.java | 129 ++++++++++++++++ .../myservice/mynamespace/web/DemoServlet.java | 67 ++++++++ .../p1_read/src/main/webapp/WEB-INF/web.xml | 40 +++++ .../tutorials/p1_read/src/main/webapp/index.jsp | 6 + samples/tutorials/pom.xml | 52 +++++++ 8 files changed, 528 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/pom.xml ---------------------------------------------------------------------- diff --git a/samples/pom.xml b/samples/pom.xml index 765bd95..95e3ddb 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -45,5 +45,11 @@ <module>client</module> </modules> </profile> + <profile> + <id>tutorials</id> + <modules> + <module>tutorials</module> + </modules> + </profile> </profiles> </project> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/pom.xml ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/pom.xml b/samples/tutorials/p1_read/pom.xml new file mode 100755 index 0000000..c815f8d --- /dev/null +++ b/samples/tutorials/p1_read/pom.xml @@ -0,0 +1,75 @@ +<?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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>myservice.mynamespace</groupId> + <artifactId>DemoService</artifactId> + <packaging>war</packaging> + <version>0.0.1</version> + + <name>DemoService Maven Webapp</name> + + <properties> + <javax.version>2.5</javax.version> + <odata.version>4.0.0-beta-03</odata.version> + <slf4j.version>1.7.7</slf4j.version> + </properties> + + <dependencies> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>${javax.version}</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.apache.olingo</groupId> + <artifactId>odata-server-api</artifactId> + <version>${odata.version}</version> + </dependency> + <dependency> + <groupId>org.apache.olingo</groupId> + <artifactId>odata-server-core</artifactId> + <version>${odata.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.olingo</groupId> + <artifactId>odata-commons-api</artifactId> + <version>${odata.version}</version> + </dependency> + <dependency> + <groupId>org.apache.olingo</groupId> + <artifactId>odata-commons-core</artifactId> + <version>${odata.version}</version> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>${slf4j.version}</version> + <scope>runtime</scope> + </dependency> + </dependencies> +</project> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEdmProvider.java ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEdmProvider.java b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEdmProvider.java new file mode 100755 index 0000000..dd46e86 --- /dev/null +++ b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEdmProvider.java @@ -0,0 +1,153 @@ +/* + * 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 myservice.mynamespace.service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.apache.olingo.commons.api.ODataException; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.api.edm.provider.CsdlAbstractEdmProvider; +import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainer; +import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainerInfo; +import org.apache.olingo.commons.api.edm.provider.CsdlEntitySet; +import org.apache.olingo.commons.api.edm.provider.CsdlEntityType; +import org.apache.olingo.commons.api.edm.provider.CsdlProperty; +import org.apache.olingo.commons.api.edm.provider.CsdlPropertyRef; +import org.apache.olingo.commons.api.edm.provider.CsdlSchema; + +/** + * this class is supposed to declare the metadata of the OData service + * it is invoked by the Olingo framework e.g. when the metadata document of the service is invoked + * e.g. http://localhost:8080/ExampleService1/ExampleService1.svc/$metadata + */ +public class DemoEdmProvider extends CsdlAbstractEdmProvider { + + // Service Namespace + public static final String NAMESPACE = "OData.Demo"; + + // EDM Container + public static final String CONTAINER_NAME = "Container"; + public static final FullQualifiedName CONTAINER = new FullQualifiedName(NAMESPACE, CONTAINER_NAME); + + // Entity Types Names + public static final String ET_PRODUCT_NAME = "Product"; + public static final FullQualifiedName ET_PRODUCT_FQN = new FullQualifiedName(NAMESPACE, ET_PRODUCT_NAME); + + // Entity Set Names + public static final String ES_PRODUCTS_NAME = "Products"; + + + @Override + public List<CsdlSchema> getSchemas() throws ODataException { + + // create Schema + CsdlSchema schema = new CsdlSchema(); + schema.setNamespace(NAMESPACE); + + // add EntityTypes + List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>(); + entityTypes.add(getEntityType(ET_PRODUCT_FQN)); + schema.setEntityTypes(entityTypes); + + // add EntityContainer + schema.setEntityContainer(getEntityContainer()); + + // finally + List<CsdlSchema> schemas = new ArrayList<CsdlSchema>(); + schemas.add(schema); + + return schemas; + } + + + @Override + public CsdlEntityType getEntityType(FullQualifiedName entityTypeName) throws ODataException { + + // this method is called for one of the EntityTypes that are configured in the Schema + if(entityTypeName.equals(ET_PRODUCT_FQN)){ + + //create EntityType properties + CsdlProperty id = new CsdlProperty().setName("ID").setType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName()); + CsdlProperty name = new CsdlProperty().setName("Name").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()); + CsdlProperty description = new CsdlProperty().setName("Description").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()); + + // create CsdlPropertyRef for Key element + CsdlPropertyRef propertyRef = new CsdlPropertyRef(); + propertyRef.setName("ID"); + + // configure EntityType + CsdlEntityType entityType = new CsdlEntityType(); + entityType.setName(ET_PRODUCT_NAME); + entityType.setProperties(Arrays.asList(id, name , description)); + entityType.setKey(Collections.singletonList(propertyRef)); + + return entityType; + } + + return null; + } + + @Override + public CsdlEntitySet getEntitySet(FullQualifiedName entityContainer, String entitySetName) throws ODataException { + + if(entityContainer.equals(CONTAINER)){ + if(entitySetName.equals(ES_PRODUCTS_NAME)){ + CsdlEntitySet entitySet = new CsdlEntitySet(); + entitySet.setName(ES_PRODUCTS_NAME); + entitySet.setType(ET_PRODUCT_FQN); + + return entitySet; + } + } + + return null; + } + + @Override + public CsdlEntityContainer getEntityContainer() throws ODataException { + + // create EntitySets + List<CsdlEntitySet> entitySets = new ArrayList<CsdlEntitySet>(); + entitySets.add(getEntitySet(CONTAINER, ES_PRODUCTS_NAME)); + + // create EntityContainer + CsdlEntityContainer entityContainer = new CsdlEntityContainer(); + entityContainer.setName(CONTAINER_NAME); + entityContainer.setEntitySets(entitySets); + + return entityContainer; + } + + @Override + public CsdlEntityContainerInfo getEntityContainerInfo(FullQualifiedName entityContainerName) throws ODataException { + + // This method is invoked when displaying the service document at e.g. http://localhost:8080/DemoService/DemoService.svc + if(entityContainerName == null || entityContainerName.equals(CONTAINER)){ + CsdlEntityContainerInfo entityContainerInfo = new CsdlEntityContainerInfo(); + entityContainerInfo.setContainerName(CONTAINER); + return entityContainerInfo; + } + + return null; + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEntityCollectionProcessor.java ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEntityCollectionProcessor.java b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEntityCollectionProcessor.java new file mode 100755 index 0000000..e82a3ca --- /dev/null +++ b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/service/DemoEntityCollectionProcessor.java @@ -0,0 +1,129 @@ +/* + * 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 myservice.mynamespace.service; + +import java.util.List; + +import org.apache.olingo.commons.api.data.ContextURL; +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.data.ValueType; +import org.apache.olingo.commons.api.edm.EdmEntitySet; +import org.apache.olingo.commons.api.edm.EdmEntityType; +import org.apache.olingo.commons.api.format.ContentType; +import org.apache.olingo.commons.api.format.ODataFormat; +import org.apache.olingo.commons.api.http.HttpHeader; +import org.apache.olingo.commons.api.http.HttpStatusCode; +import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.ODataApplicationException; +import org.apache.olingo.server.api.ODataRequest; +import org.apache.olingo.server.api.ODataResponse; +import org.apache.olingo.server.api.ServiceMetadata; +import org.apache.olingo.server.api.processor.EntityCollectionProcessor; +import org.apache.olingo.server.api.serializer.EntityCollectionSerializerOptions; +import org.apache.olingo.server.api.serializer.ODataSerializer; +import org.apache.olingo.server.api.serializer.SerializerException; +import org.apache.olingo.server.api.serializer.SerializerResult; +import org.apache.olingo.server.api.uri.UriInfo; +import org.apache.olingo.server.api.uri.UriResource; +import org.apache.olingo.server.api.uri.UriResourceEntitySet; + +/** + * This class is invoked by the Olingo framework when the the OData service is invoked order to display a list/collection of data (entities). + * This is the case if an EntitySet is requested by the user. + * Such an example URL would be: + * http://localhost:8080/ExampleService1/ExampleService1.svc/Products + */ +public class DemoEntityCollectionProcessor implements EntityCollectionProcessor { + + private OData odata; + private ServiceMetadata serviceMetadata; + + // our processor is initialized with the OData context object + public void init(OData odata, ServiceMetadata serviceMetadata) { + this.odata = odata; + this.serviceMetadata = serviceMetadata; + } + + + // the only method that is declared in the EntityCollectionProcessor interface + // this method is called, when the user fires a request to an EntitySet + // in our example, the URL would be: + // http://localhost:8080/ExampleService1/ExampleServlet1.svc/Products + public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { + + // 1st we have retrieve the requested EntitySet from the uriInfo object (representation of the parsed service URI) + List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); + UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); // in our example, the first segment is the EntitySet + EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); + + // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object + EntityCollection entitySet = getData(edmEntitySet); + + // 3rd: create a serializer based on the requested format (json) + ODataFormat format = ODataFormat.fromContentType(responseFormat); + ODataSerializer serializer = odata.createSerializer(format); + + // 4th: Now serialize the content: transform from the EntitySet object to InputStream + EdmEntityType edmEntityType = edmEntitySet.getEntityType(); + ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); + + EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().contextURL(contextUrl).build(); + SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); + + // Finally: configure the response object: set the body, headers and status code + response.setContent(serializedContent.getContent()); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); + } + + + /** + * Helper method for providing some sample data + * @param edmEntitySet for which the data is requested + * @return data of requested entity set + */ + private EntityCollection getData(EdmEntitySet edmEntitySet){ + + EntityCollection entityCollection = new EntityCollection(); + // check for which EdmEntitySet the data is requested + if(DemoEdmProvider.ES_PRODUCTS_NAME.equals(edmEntitySet.getName())) { + List<Entity> entityList = entityCollection.getEntities(); + + // add some sample product entities + entityList.add(new Entity() + .addProperty(new Property(null, "ID", ValueType.PRIMITIVE, 1)) + .addProperty(new Property(null, "Name", ValueType.PRIMITIVE, "Notebook Basic 15")) + .addProperty(new Property(null, "Description", ValueType.PRIMITIVE, "Notebook Basic, 1.7GHz - 15 XGA - 1024MB DDR2 SDRAM - 40GB"))); + + entityList.add(new Entity() + .addProperty(new Property(null, "ID", ValueType.PRIMITIVE, 2)) + .addProperty(new Property(null, "Name", ValueType.PRIMITIVE, "1UMTS PDA")) + .addProperty(new Property(null, "Description", ValueType.PRIMITIVE, "Ultrafast 3G UMTS/HSDPA Pocket PC, supports GSM network"))); + + entityList.add(new Entity() + .addProperty(new Property(null, "ID", ValueType.PRIMITIVE, 3)) + .addProperty(new Property(null, "Name", ValueType.PRIMITIVE, "Ergo Screen")) + .addProperty(new Property(null, "Description", ValueType.PRIMITIVE, "17 Optimum Resolution 1024 x 768 @ 85Hz, resolution 1280 x 960"))); + } + + return entityCollection; + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/web/DemoServlet.java ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/web/DemoServlet.java b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/web/DemoServlet.java new file mode 100755 index 0000000..486770c --- /dev/null +++ b/samples/tutorials/p1_read/src/main/java/myservice/mynamespace/web/DemoServlet.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package myservice.mynamespace.web; + +import java.io.IOException; +import java.util.ArrayList; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import myservice.mynamespace.service.DemoEdmProvider; +import myservice.mynamespace.service.DemoEntityCollectionProcessor; + +import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.ODataHttpHandler; +import org.apache.olingo.server.api.ServiceMetadata; +import org.apache.olingo.server.api.edmx.EdmxReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This class represents a standard HttpServlet implementation. + * It is used as main entry point for the web application that carries the OData service. + * The implementation of this HttpServlet simply delegates the user requests to the ODataHttpHandler + */ +public class DemoServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + private static final Logger LOG = LoggerFactory.getLogger(DemoServlet.class); + + @Override + protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { + + try { + // create odata handler and configure it with EdmProvider and Processor + OData odata = OData.newInstance(); + ServiceMetadata edm = odata.createServiceMetadata(new DemoEdmProvider(), new ArrayList<EdmxReference>()); + ODataHttpHandler handler = odata.createHandler(edm); + handler.register(new DemoEntityCollectionProcessor()); + + // let the handler do the work + handler.process(req, resp); + + } catch (RuntimeException e) { + LOG.error("Server Error occurred in ExampleServlet", e); + throw new ServletException(e); + } + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/src/main/webapp/WEB-INF/web.xml b/samples/tutorials/p1_read/src/main/webapp/WEB-INF/web.xml new file mode 100755 index 0000000..21de52a --- /dev/null +++ b/samples/tutorials/p1_read/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,40 @@ +<?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. +--> +<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" + id="WebApp_ID" version="2.5"> + + <!-- Register the HttpServlet implementation --> + <servlet> + <servlet-name>DemoServlet</servlet-name> + <servlet-class>myservice.mynamespace.web.DemoServlet</servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <!-- + Our OData service can be invoked at + http://localhost:8080/DemoService/DemoService.svc + --> + <servlet-mapping> + <servlet-name>DemoServlet</servlet-name> + <url-pattern>/DemoService.svc/*</url-pattern> + </servlet-mapping> +</web-app> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/p1_read/src/main/webapp/index.jsp ---------------------------------------------------------------------- diff --git a/samples/tutorials/p1_read/src/main/webapp/index.jsp b/samples/tutorials/p1_read/src/main/webapp/index.jsp new file mode 100755 index 0000000..2baf543 --- /dev/null +++ b/samples/tutorials/p1_read/src/main/webapp/index.jsp @@ -0,0 +1,6 @@ +<html> +<body> +<h2>Hello World!</h2> +<a href="DemoService.svc/">OData Olingo V4 Demo Service</a> +</body> +</html> http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7c557f25/samples/tutorials/pom.xml ---------------------------------------------------------------------- diff --git a/samples/tutorials/pom.xml b/samples/tutorials/pom.xml new file mode 100644 index 0000000..ba86233 --- /dev/null +++ b/samples/tutorials/pom.xml @@ -0,0 +1,52 @@ +<?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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <artifactId>odata-tutorials</artifactId> + <packaging>pom</packaging> + <name>${project.artifactId}</name> + + <parent> + <groupId>org.apache.olingo</groupId> + <artifactId>odata-samples</artifactId> + <version>4.0.0-SNAPSHOT</version> + <relativePath>..</relativePath> + </parent> + + <modules> + <module>p1_read</module> + </modules> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + </plugins> + </build> +</project>
