http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f24c3874/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/util/Util.java
----------------------------------------------------------------------
diff --git 
a/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/util/Util.java 
b/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/util/Util.java
new file mode 100755
index 0000000..8ad19a0
--- /dev/null
+++ 
b/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/util/Util.java
@@ -0,0 +1,122 @@
+/*
+ * 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.util;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.olingo.commons.api.data.Entity;
+import org.apache.olingo.commons.api.data.EntityCollection;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
+import org.apache.olingo.server.api.ODataApplicationException;
+import org.apache.olingo.server.api.uri.UriInfoResource;
+import org.apache.olingo.server.api.uri.UriParameter;
+import org.apache.olingo.server.api.uri.UriResource;
+import org.apache.olingo.server.api.uri.UriResourceEntitySet;
+
+public class Util {
+
+  public static EdmEntitySet getEdmEntitySet(UriInfoResource uriInfo) throws 
ODataApplicationException {
+
+    List<UriResource> resourcePaths = uriInfo.getUriResourceParts();
+    // To get the entity set we have to interpret all URI segments
+    if (!(resourcePaths.get(0) instanceof UriResourceEntitySet)) {
+      // Here we should interpret the whole URI but in this example we do not 
support navigation so we throw an
+      // exception
+      throw new ODataApplicationException("Invalid resource type for first 
segment.", HttpStatusCode.NOT_IMPLEMENTED
+          .getStatusCode(), Locale.ENGLISH);
+    }
+
+    UriResourceEntitySet uriResource = (UriResourceEntitySet) 
resourcePaths.get(0);
+
+    return uriResource.getEntitySet();
+  }
+
+  public static Entity findEntity(EdmEntityType edmEntityType, 
EntityCollection entitySet,
+      List<UriParameter> keyParams) throws ODataApplicationException {
+
+    List<Entity> entityList = entitySet.getEntities();
+
+    // loop over all entities in order to find that one that matches all keys 
in request
+    // e.g. contacts(ContactID=1, CompanyID=1)
+    for (Entity entity: entityList) {
+      boolean foundEntity = entityMatchesAllKeys(edmEntityType, entity, 
keyParams);
+      if (foundEntity) {
+        return entity;
+      }
+    }
+
+    return null;
+  }
+
+  public static boolean
+      entityMatchesAllKeys(EdmEntityType edmEntityType, Entity entity, 
List<UriParameter> keyParams)
+          throws ODataApplicationException {
+
+    // loop over all keys
+    for (final UriParameter key : keyParams) {
+      // key
+      String keyName = key.getName();
+      String keyText = key.getText();
+      
+      // Edm: we need this info for the comparison below
+      EdmProperty edmKeyProperty = (EdmProperty) 
edmEntityType.getProperty(keyName);
+      Boolean isNullable = edmKeyProperty.isNullable();
+      Integer maxLength = edmKeyProperty.getMaxLength();
+      Integer precision = edmKeyProperty.getPrecision();
+      Boolean isUnicode = edmKeyProperty.isUnicode();
+      Integer scale = edmKeyProperty.getScale();
+      // get the EdmType in order to compare
+      EdmType edmType = edmKeyProperty.getType();
+      EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmType;
+
+      // Runtime data: the value of the current entity
+      // don't need to check for null, this is done in olingo library
+      Object valueObject = entity.getProperty(keyName).getValue();
+
+      // now need to compare the valueObject with the keyText String
+      // this is done using the type.valueToString //
+      String valueAsString = null;
+      try {
+        valueAsString = edmPrimitiveType.valueToString(valueObject, 
isNullable, maxLength, precision, scale, isUnicode);
+      } catch (EdmPrimitiveTypeException e) {
+        throw new ODataApplicationException("Failed to retrieve String value", 
HttpStatusCode.INTERNAL_SERVER_ERROR
+            .getStatusCode(), Locale.ENGLISH, e);
+      }
+
+      if (valueAsString == null) {
+        return false;
+      }
+
+      boolean matches = valueAsString.equals(keyText);
+      if (!matches) {
+        // if any of the key properties is not found in the entity, we don't 
need to search further
+        return false;
+      }
+    }
+
+    return true;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f24c3874/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/web/DemoServlet.java
----------------------------------------------------------------------
diff --git 
a/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/web/DemoServlet.java
 
b/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/web/DemoServlet.java
new file mode 100755
index 0000000..2e7b65f
--- /dev/null
+++ 
b/samples/tutorials/p3_write/src/main/java/myservice/mynamespace/web/DemoServlet.java
@@ -0,0 +1,73 @@
+/*
+ * 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.lang.Override;import java.lang.RuntimeException;import 
java.util.ArrayList;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import myservice.mynamespace.data.Storage;
+import myservice.mynamespace.service.DemoEdmProvider;
+import myservice.mynamespace.service.DemoEntityCollectionProcessor;
+import myservice.mynamespace.service.DemoEntityProcessor;
+import myservice.mynamespace.service.DemoPrimitiveProcessor;
+
+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;
+
+public class DemoServlet extends HttpServlet {
+
+  private static final long serialVersionUID = 1L;
+  private static final Logger LOG = LoggerFactory.getLogger(DemoServlet.class);
+
+  @Override
+  protected void service(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
+    try {
+      HttpSession session = req.getSession(true);
+      Storage storage = (Storage) 
session.getAttribute(Storage.class.getName());
+      if (storage == null) {
+        storage = new Storage();
+        session.setAttribute(Storage.class.getName(), storage);
+      }
+
+      // 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(storage));
+      handler.register(new DemoEntityProcessor(storage));
+      handler.register(new DemoPrimitiveProcessor(storage));
+
+      // 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/f24c3874/samples/tutorials/p3_write/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/samples/tutorials/p3_write/src/main/webapp/WEB-INF/web.xml 
b/samples/tutorials/p3_write/src/main/webapp/WEB-INF/web.xml
new file mode 100755
index 0000000..21de52a
--- /dev/null
+++ b/samples/tutorials/p3_write/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/f24c3874/samples/tutorials/p3_write/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/samples/tutorials/p3_write/src/main/webapp/index.jsp 
b/samples/tutorials/p3_write/src/main/webapp/index.jsp
new file mode 100755
index 0000000..7ffb4ba
--- /dev/null
+++ b/samples/tutorials/p3_write/src/main/webapp/index.jsp
@@ -0,0 +1,26 @@
+<!--
+
+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.
+
+-->
+<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/f24c3874/samples/tutorials/pom.xml
----------------------------------------------------------------------
diff --git a/samples/tutorials/pom.xml b/samples/tutorials/pom.xml
index ba86233..e64da0a 100644
--- a/samples/tutorials/pom.xml
+++ b/samples/tutorials/pom.xml
@@ -36,6 +36,8 @@
 
   <modules>
     <module>p1_read</module>
+    <module>p2_readep</module>
+    <module>p3_write</module>
   </modules>
 
   <build>

Reply via email to