You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/01/27 20:25:03 UTC

[05/37] olingo-odata2 git commit: [OLINGO-193] Reuse as much code as possible between the spring and non-spring root locators.

[OLINGO-193] Reuse as much code as possible between the spring and non-spring root locators.


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/a339d295
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/a339d295
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/a339d295

Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: a339d2956d7dd892acd2f67893c1a608e796ad0e
Parents: fe1be5e
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Nov 26 09:08:21 2014 +0100
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Nov 26 09:19:59 2014 +0100

----------------------------------------------------------------------
 .../odata2/core/rest/ODataRootLocator.java      | 92 +++++---------------
 .../core/rest/spring/ODataRootLocator.java      | 19 ++--
 .../spring/OlingoServerDefinitionParser.java    |  5 +-
 3 files changed, 30 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
index d9a91cc..64f9d4f 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
@@ -18,24 +18,13 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.rest;
 
-import java.util.List;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.HeaderParam;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Request;
-import javax.ws.rs.core.UriInfo;
 
 import org.apache.olingo.odata2.api.ODataServiceFactory;
-import org.apache.olingo.odata2.api.exception.ODataBadRequestException;
-import org.apache.olingo.odata2.api.exception.ODataException;
 import org.apache.olingo.odata2.core.exception.ODataRuntimeException;
 import org.apache.olingo.odata2.core.rest.app.AbstractODataApplication;
 
@@ -52,74 +41,37 @@ import org.apache.olingo.odata2.core.rest.app.AbstractODataApplication;
  * 
  */
 @Path("/")
-public class ODataRootLocator {
+public class ODataRootLocator extends
+    org.apache.olingo.odata2.core.rest.spring.ODataRootLocator {
 
   @Context
-  private HttpHeaders httpHeaders;
-  @Context
-  private UriInfo uriInfo;
-  @Context
-  private Request request;
-  @Context
   private ServletConfig servletConfig;
-  @Context
-  private HttpServletRequest servletRequest;
-
-  @Context
-  private Application app;
-
-  /**
-   * Default root behavior which will delegate all paths to a ODataLocator.
-   * @param pathSegments URI path segments - all segments have to be OData
-   * @param xHttpMethod HTTP Header X-HTTP-Method for tunneling through POST
-   * @param xHttpMethodOverride HTTP Header X-HTTP-Method-Override for tunneling through POST
-   * @return a locator handling OData protocol
-   * @throws ODataException
-   * @throws ClassNotFoundException
-   * @throws IllegalAccessException
-   * @throws InstantiationException
-   */
-  @Path("/{pathSegments: .*}")
-  public Object handleRequest(
-      @Encoded @PathParam("pathSegments") final List<PathSegment> pathSegments,
-      @HeaderParam("X-HTTP-Method") final String xHttpMethod,
-      @HeaderParam("X-HTTP-Method-Override") final String xHttpMethodOverride)
-      throws ODataException, ClassNotFoundException, InstantiationException, IllegalAccessException {
-
-    if (xHttpMethod != null && xHttpMethodOverride != null) {
-
-      /*
-       * X-HTTP-Method-Override : implemented by CXF
-       * X-HTTP-Method : implemented in ODataSubLocator:handlePost
-       */
 
-      if (!xHttpMethod.equalsIgnoreCase(xHttpMethodOverride)) {
-        throw new ODataBadRequestException(ODataBadRequestException.AMBIGUOUS_XMETHOD);
-      }
-    }
-
-    if (servletRequest.getPathInfo() == null) {
-      return handleRedirect();
-    }
+  @Override
+  public ODataServiceFactory getServiceFactory() {
+    return createServiceFactoryFromContext(app, servletRequest,
+        servletConfig);
+  }
 
-    ODataServiceFactory serviceFactory = createServiceFactoryFromContext(app, servletRequest, servletConfig);
+  @Override
+  public void setServiceFactory(ODataServiceFactory serviceFactory) {
+    // Don't do anything
+  }
 
+  @Override
+  public int getPathSplit() {
     int pathSplit = 0;
-    final String pathSplitAsString = servletConfig.getInitParameter(ODataServiceFactory.PATH_SPLIT_LABEL);
+    final String pathSplitAsString = servletConfig
+        .getInitParameter(ODataServiceFactory.PATH_SPLIT_LABEL);
     if (pathSplitAsString != null) {
       pathSplit = Integer.parseInt(pathSplitAsString);
     }
+    return pathSplit;
+  }
 
-    final SubLocatorParameter param = new SubLocatorParameter();
-    param.setServiceFactory(serviceFactory);
-    param.setPathSegments(pathSegments);
-    param.setHttpHeaders(httpHeaders);
-    param.setUriInfo(uriInfo);
-    param.setRequest(request);
-    param.setServletRequest(servletRequest);
-    param.setPathSplit(pathSplit);
-
-    return ODataSubLocator.create(param);
+  @Override
+  public void setPathSplit(int pathSplit) {
+    // Don't do anything
   }
 
   public static ODataServiceFactory createServiceFactoryFromContext(final Application app,
@@ -148,8 +100,4 @@ public class ODataRootLocator {
       throw new ODataRuntimeException("Exception during ODataServiceFactory creation occured.", e);
     }
   }
-
-  private Object handleRedirect() {
-    return new ODataRedirectLocator();
-  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
old mode 100755
new mode 100644
index 295dc9d..ea143e7
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata2.core.rest.spring;
 
 import java.util.List;
 
-import javax.servlet.ServletConfig;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Encoded;
 import javax.ws.rs.HeaderParam;
@@ -62,12 +61,10 @@ public class ODataRootLocator {
   @Context
   private Request request;
   @Context
-  private ServletConfig servletConfig;
-  @Context
-  private HttpServletRequest servletRequest;
+  protected HttpServletRequest servletRequest;
 
   @Context
-  private Application app;
+  protected Application app;
 
   // These next two members are exposed so that they can be injected with Spring
   private ODataServiceFactory serviceFactory;
@@ -108,13 +105,13 @@ public class ODataRootLocator {
     }
 
     final SubLocatorParameter param = new SubLocatorParameter();
-    param.setServiceFactory(serviceFactory);
+    param.setServiceFactory(getServiceFactory());
     param.setPathSegments(pathSegments);
     param.setHttpHeaders(httpHeaders);
     param.setUriInfo(uriInfo);
     param.setRequest(request);
     param.setServletRequest(servletRequest);
-    param.setPathSplit(pathSplit);
+    param.setPathSplit(getPathSplit());
 
     return ODataSubLocator.create(param);
   }
@@ -124,18 +121,18 @@ public class ODataRootLocator {
   }
 
   public ODataServiceFactory getServiceFactory() {
-	return serviceFactory;
+    return serviceFactory;
   }
 
   public void setServiceFactory(ODataServiceFactory serviceFactory) {
-	this.serviceFactory = serviceFactory;
+    this.serviceFactory = serviceFactory;
   }
 
   public int getPathSplit() {
-	return pathSplit;
+    return pathSplit;
   }
 
   public void setPathSplit(int pathSplit) {
-	this.pathSplit = pathSplit;
+    this.pathSplit = pathSplit;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
----------------------------------------------------------------------
diff --git a/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java b/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
index fdb6e18..a8e7f77 100755
--- a/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
+++ b/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
@@ -71,9 +71,8 @@ public class OlingoServerDefinitionParser extends JAXRSServerFactoryBeanDefiniti
       builder.addPropertyValue("pathSplit", element.getAttribute("pathsplit"));
     }
     AbstractBeanDefinition definition = builder.getBeanDefinition();
-    BeanDefinitionHolder holder =
-        new BeanDefinitionHolder(definition, "OlingoODataRootLocator-" + element.getAttribute("id") + "-" + element.getAttribute("factory"),
-            new String[0]);
+    BeanDefinitionHolder holder = new BeanDefinitionHolder(definition,
+        "OlingoODataRootLocator-" + element.getAttribute("id") + "-" + element.getAttribute("factory"), new String[0]);
     registerBeanDefinition(holder, parserContext.getRegistry());
 
     ManagedList<BeanDefinition> services = new ManagedList<BeanDefinition>(3);