Author: julien_viet
Date: 2010-09-11 04:17:14 -0400 (Sat, 11 Sep 2010)
New Revision: 4151
Added:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/ControllerContext.java
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebRequestHandler.java
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/DownloadHandler.java
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/UploadHandler.java
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/PortalURL.java
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/navigation/NavigationLocator.java
Log:
make PortalURL now uses the router to build URLs
Added:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/ControllerContext.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/ControllerContext.java
(rev 0)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/ControllerContext.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web;
+
+import org.exoplatform.web.controller.QualifiedName;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class ControllerContext
+{
+
+ /** . */
+ private final HttpServletRequest request;
+
+ /** . */
+ private final HttpServletResponse response;
+
+ /** . */
+ private final WebAppController controller;
+
+ /** . */
+ private final Map<QualifiedName, String> parameters;
+
+ ControllerContext(
+ WebAppController controller,
+ HttpServletRequest request,
+ HttpServletResponse response,
+ Map<QualifiedName, String> parameters)
+ {
+ this.controller = controller;
+ this.request = request;
+ this.response = response;
+ this.parameters = parameters;
+ }
+
+ public WebAppController getController()
+ {
+ return controller;
+ }
+
+ public HttpServletRequest getRequest()
+ {
+ return request;
+ }
+
+ public HttpServletResponse getResponse()
+ {
+ return response;
+ }
+
+ public String getParameter(QualifiedName parameter)
+ {
+ return parameters.get(parameter);
+ }
+
+ public String renderURL(Map<QualifiedName, String> parameters)
+ {
+ return request.getContextPath() + controller.router.render(parameters);
+ }
+}
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -51,6 +51,9 @@
{
/** . */
+ public static final QualifiedName HANDLER_PARAM = new QualifiedName("gtn",
"handler");
+
+ /** . */
protected static Logger log = LoggerFactory.getLogger(WebAppController.class);
/** . */
@@ -63,7 +66,7 @@
private HashMap<String, WebRequestHandler> handlers;
/** . */
- private Router router;
+ final Router router;
/**
* The WebAppControler along with the PortalRequestHandler defined in the init()
method of the
@@ -112,8 +115,6 @@
applications_.put(app.getApplicationId(), app);
}
- private static final QualifiedName HANDLER_PARAM = new QualifiedName("ctrl",
"handler");
-
public void register(WebRequestHandler handler) throws Exception
{
for (String path : handler.getPath())
@@ -121,7 +122,7 @@
RouteMetaData routeMetaData = new RouteMetaData(path);
//
- String handlerKey = "" + System.identityHashCode(handler);
+ String handlerKey = handler.getClass().getSimpleName();
//
routeMetaData.addParameter(HANDLER_PARAM, handlerKey);
@@ -169,9 +170,12 @@
RequestLifeCycle.begin(portalContainer);
//
+ ControllerContext context = new ControllerContext(this, req, res,
parameters);
+
+ //
try
{
- handler.execute(this, req, res, parameters);
+ handler.execute(context);
}
finally
{
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebRequestHandler.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebRequestHandler.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebRequestHandler.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -20,12 +20,7 @@
package org.exoplatform.web;
import org.exoplatform.container.component.BaseComponentPlugin;
-import org.exoplatform.web.controller.QualifiedName;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
-
/**
* Created by The eXo Platform SAS
* Mar 21, 2007
@@ -47,11 +42,7 @@
abstract public String[] getPath();
- abstract public void execute(
- WebAppController app,
- HttpServletRequest req,
- HttpServletResponse res,
- Map<QualifiedName, String> parameters) throws Exception;
+ abstract public void execute(ControllerContext context) throws Exception;
public void onDestroy(WebAppController controler) throws Exception
{
Modified:
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/DownloadHandler.java
===================================================================
---
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/DownloadHandler.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/DownloadHandler.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -23,6 +23,7 @@
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.download.DownloadResource;
import org.exoplatform.download.DownloadService;
+import org.exoplatform.web.ControllerContext;
import org.exoplatform.web.WebAppController;
import org.exoplatform.web.WebRequestHandler;
import org.exoplatform.web.controller.QualifiedName;
@@ -50,8 +51,14 @@
return new String[]{"/download"};
}
- public void execute(WebAppController controller, HttpServletRequest req,
HttpServletResponse res, Map<QualifiedName, String> parameters) throws Exception
+ @Override
+ public void execute(ControllerContext context) throws Exception
{
+ execute(context.getController(), context.getRequest(), context.getResponse());
+ }
+
+ public void execute(WebAppController controller, HttpServletRequest req,
HttpServletResponse res) throws Exception
+ {
String resourceId = req.getParameter("resourceId");
res.setHeader("Cache-Control", "private max-age=600,
s-maxage=120");
ExoContainer container = ExoContainerContext.getCurrentContainer();
Modified:
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/UploadHandler.java
===================================================================
---
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/UploadHandler.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/component/web/server/src/main/java/org/exoplatform/web/handler/UploadHandler.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -24,6 +24,7 @@
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.upload.UploadResource;
import org.exoplatform.upload.UploadService;
+import org.exoplatform.web.ControllerContext;
import org.exoplatform.web.WebAppController;
import org.exoplatform.web.WebRequestHandler;
import org.exoplatform.web.controller.QualifiedName;
@@ -54,8 +55,14 @@
return new String[]{"/upload"};
}
- public void execute(WebAppController controller, HttpServletRequest req,
HttpServletResponse res, Map<QualifiedName, String> parameters) throws Exception
+ @Override
+ public void execute(ControllerContext context) throws Exception
{
+ execute(context.getController(), context.getRequest(), context.getResponse());
+ }
+
+ public void execute(WebAppController controller, HttpServletRequest req,
HttpServletResponse res) throws Exception
+ {
String action = req.getParameter("action");
String[] uploadIds = req.getParameterValues("uploadId");
Modified:
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
===================================================================
---
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -29,13 +29,13 @@
import org.exoplatform.portal.config.model.PageNode;
import org.exoplatform.portal.url.LocatorProviderService;
import org.exoplatform.portal.url.PortalURL;
-import org.exoplatform.portal.webui.portal.PageNodeEvent;
import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.resources.Orientation;
+import org.exoplatform.web.ControllerContext;
import org.exoplatform.web.application.JavascriptManager;
import org.exoplatform.web.application.URLBuilder;
import org.exoplatform.web.url.LocatorProvider;
@@ -45,7 +45,6 @@
import org.exoplatform.webui.application.WebuiApplication;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIComponent;
-import org.exoplatform.webui.event.Event;
import org.gatein.common.http.QueryStringParser;
import org.w3c.dom.Element;
@@ -95,9 +94,11 @@
final static public String REQUEST_METADATA =
"portal:requestMetadata".intern();
- private String portalOwner_;
+ /** The site name decoded from the request. */
+ private final String portalOwner_;
- private String nodePath_;
+ /** The path decoded from the request. */
+ private final String nodePath_;
private String requestURI_;
@@ -134,6 +135,9 @@
/** . */
private final LocatorProviderService locatorFactory;
+ /** . */
+ private final ControllerContext controllerContext;
+
public JavascriptManager getJavascriptManager()
{
return jsmanager_;
@@ -146,22 +150,22 @@
* 2. <code>portalOwner</code> : The portal name ( "classic" for
instance )<br/>
* 3. <code>portalURI</code> : The URI to current portal (
"/portal/public/classic/ for instance )<br/>
* 4. <code>nodePath</code> : The path that is used to reflect to a
navigation node
- *
- * @param app an instance of {@link PortalApplication}
- * @param req the {@ HttpServletRequest} object that is sent to the {@link
PortalController} servlet
- * @param res
- * @throws Exception
*/
- public PortalRequestContext(WebuiApplication app, HttpServletRequest req,
HttpServletResponse res) throws Exception
+ public PortalRequestContext(
+ WebuiApplication app,
+ ControllerContext controllerContext,
+ String requestSiteName,
+ String requestPath) throws Exception
{
super(app);
//
- locatorFactory =
(LocatorProviderService)PortalContainer.getComponent(LocatorProviderService.class);
+ this.locatorFactory =
(LocatorProviderService)PortalContainer.getComponent(LocatorProviderService.class);
+ this.controllerContext = controllerContext;
//
- request_ = req;
- response_ = res;
+ request_ = controllerContext.getRequest();
+ response_ = controllerContext.getResponse();
response_.setBufferSize(1024 * 100);
setSessionId(request_.getSession().getId());
@@ -199,6 +203,7 @@
requestURI_ = URLDecoder.decode(request_.getRequestURI(), "UTF-8");
+/*
// req.getPathInfo will already have the encoding set from the server.
// We need to use the UTF-8 value since this is how we store the portal name.
// Reconstructing the getPathInfo from the non server decoded values.
@@ -215,6 +220,10 @@
}
portalOwner_ = pathInfo.substring(1, colonIndex);
nodePath_ = pathInfo.substring(colonIndex, pathInfo.length());
+*/
+ //
+ portalOwner_ = requestSiteName;
+ nodePath_ = requestPath;
portalURI = requestURI_.substring(0, requestURI_.lastIndexOf(nodePath_)) +
"/";
@@ -236,6 +245,11 @@
return new PortalURL<R, L>(this, locator, false);
}
+ public ControllerContext getControllerContext()
+ {
+ return controllerContext;
+ }
+
public void refreshResourceBundle() throws Exception
{
appRes_ = getApplication().getResourceBundle(getLocale());
Modified:
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
===================================================================
---
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -23,7 +23,7 @@
import org.exoplatform.portal.config.StaleModelException;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.exoplatform.web.WebAppController;
+import org.exoplatform.web.ControllerContext;
import org.exoplatform.web.WebRequestHandler;
import org.exoplatform.web.application.ApplicationLifecycle;
import org.exoplatform.web.application.ApplicationRequestPhaseLifecycle;
@@ -32,11 +32,8 @@
import org.exoplatform.web.controller.QualifiedName;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIApplication;
-import org.exoplatform.webui.core.UIComponent;
-import org.exoplatform.webui.event.Event;
import java.util.List;
-import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -53,6 +50,14 @@
protected static Log log =
ExoLogger.getLogger("portal:PortalRequestHandler");
+
+ /** . */
+ public static final QualifiedName REQUEST_PATH = new QualifiedName("gtn",
"path");
+
+ /** . */
+ public static final QualifiedName REQUEST_SITE_NAME = new
QualifiedName("gtn", "sitename");
+
+ /** . */
private String[] PATHS = {"/public/{{gtn}sitename}{{gtn}path:.*}",
"/private/{{gtn}sitename}{{gtn}path:.*}"};
public String[] getPath()
@@ -84,13 +89,23 @@
*
*/
@SuppressWarnings("unchecked")
- public void execute(WebAppController controller, HttpServletRequest req,
HttpServletResponse res, Map<QualifiedName, String> parameters) throws Exception
+ @Override
+ public void execute(ControllerContext controllerContext) throws Exception
{
+ HttpServletRequest req = controllerContext.getRequest();
+ HttpServletResponse res = controllerContext.getResponse();
+
+
log.debug("Session ID = " + req.getSession().getId());
res.setHeader("Cache-Control", "no-cache");
- PortalApplication app =
controller.getApplication(PortalApplication.PORTAL_APPLICATION_ID);
- PortalRequestContext context = new PortalRequestContext(app, req, res);
+ //
+ String requestPath = controllerContext.getParameter(REQUEST_PATH);
+ String requestSiteName = controllerContext.getParameter(REQUEST_SITE_NAME);
+
+ //
+ PortalApplication app =
controllerContext.getController().getApplication(PortalApplication.PORTAL_APPLICATION_ID);
+ PortalRequestContext context = new PortalRequestContext(app, controllerContext,
requestSiteName, requestPath);
if (context.getPortalOwner().length() == 0) {
res.sendRedirect(req.getContextPath());
return;
Modified:
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/PortalURL.java
===================================================================
---
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/PortalURL.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/PortalURL.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -20,10 +20,16 @@
package org.exoplatform.portal.url;
import org.exoplatform.portal.application.PortalRequestContext;
+import org.exoplatform.portal.application.PortalRequestHandler;
+import org.exoplatform.web.ControllerContext;
+import org.exoplatform.web.WebAppController;
+import org.exoplatform.web.controller.QualifiedName;
import org.exoplatform.web.url.ResourceLocator;
import org.exoplatform.web.url.ResourceURL;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
@@ -67,12 +73,10 @@
}
//
- url.append(requestContext.getPortalURI());
-
- //
+ StringBuilder builder = new StringBuilder();
try
{
- locator.append(url);
+ locator.append(builder);
}
catch (IOException e)
{
@@ -81,7 +85,20 @@
throw ae;
}
+ // julien : find out how to change the hardcoded "classic"
+ Map<QualifiedName, String> parameters = new HashMap<QualifiedName,
String>();
+ parameters.put(PortalRequestHandler.REQUEST_PATH, builder.toString());
+ parameters.put(PortalRequestHandler.REQUEST_SITE_NAME, "classic");
+ parameters.put(WebAppController.HANDLER_PARAM,
PortalRequestHandler.class.getSimpleName());
+
//
+ ControllerContext controllerContext = requestContext.getControllerContext();
+ String s = controllerContext.renderURL(parameters);
+
+ //
+ url.append(s);
+
+ //
if (ajax)
{
url.append("?ajaxRequest=true");
Modified:
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/navigation/NavigationLocator.java
===================================================================
---
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/navigation/NavigationLocator.java 2010-09-11
03:07:31 UTC (rev 4150)
+++
portal/branches/navcontroller/webui/portal/src/main/java/org/exoplatform/portal/url/navigation/NavigationLocator.java 2010-09-11
08:17:14 UTC (rev 4151)
@@ -52,6 +52,6 @@
public void append(Appendable appendable) throws IOException
{
- appendable.append(resource.getUri());
+ appendable.append('/').append(resource.getUri());
}
}