[jboss-svn-commits] JBL Code SVN: r9567 - in labs/jbosslabs/trunk/portal-extensions: configuration/to-copy/server/default/deploy/jboss-portal.sar/portal-server.war/WEB-INF and 9 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Feb 17 09:12:00 EST 2007


Author: adamw
Date: 2007-02-17 09:12:00 -0500 (Sat, 17 Feb 2007)
New Revision: 9567

Added:
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/AbstractLabsProjectsCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsPagesCommandFactory.java
Removed:
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsProjectsCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsCmsCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsPagesCommandFactory.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
   labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/LabsServices.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java
   labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsBaseCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsMainCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPagesCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/Freezone.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet2.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet-instances.xml
Log:
http://jira.jboss.com/jira/browse/JBLAB-837

Modified: labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml	2007-02-17 14:12:00 UTC (rev 9567)
@@ -591,10 +591,10 @@
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
-      <!-- LABS -->
-      <!--<depends
+      <!-- LABS
+      <depends
          optional-attribute-name="NextFactory"
-         proxy-type="attribute">portal:commandFactory=LabsMain</depends>-->
+         proxy-type="attribute">portal:commandFactory=LabsMain</depends> -->
    </mbean>
    <mbean
       code="org.jboss.portal.core.model.portal.DefaultPortalCommandFactory"
@@ -619,7 +619,7 @@
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
    </mbean>
-   <!-- LABS -->
+   <!-- LABS  -->
    <mbean
       code="org.jboss.portal.core.controller.command.mapper.CommandFactoryDelegate"
       name="portal:commandFactory=Delegate,path=portal"
@@ -737,16 +737,14 @@
          optional-attribute-name="DelegatingCF"
          proxy-type="attribute">portal:commandFactory=LabsProjectsDelegating</depends>
       <depends
-         optional-attribute-name="CmsCF"
-         proxy-type="attribute">portal:commandFactory=LabsCms</depends>
-      <depends
          optional-attribute-name="PagesCF"
          proxy-type="attribute">portal:commandFactory=LabsPages</depends>
       <depends>shotoku:service=shotoku</depends>
+      <depends>shotoku:service=svn</depends>
    </mbean>
 
    <mbean
-      code="org.jboss.labs.mapper.LabsProjectsDelegatingCommandFactoryImpl"
+      code="org.jboss.labs.mapper.projects.LabsProjectsDelegatingCommandFactoryImpl"
       name="portal:commandFactory=LabsProjectsDelegating"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -754,9 +752,12 @@
       <depends
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
+      <depends
+         optional-attribute-name="PortalObjectCF"
+         proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
    </mbean>
    <mbean
-      code="org.jboss.labs.mapper.LabsProjectsPagesCommandFactory"
+      code="org.jboss.labs.mapper.projects.LabsProjectsPagesCommandFactory"
       name="portal:commandFactory=LabsProjectsPages"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -766,6 +767,9 @@
          optional-attribute-name="DelegatingCF"
          proxy-type="attribute">portal:commandFactory=LabsProjectsDelegating</depends>
       <depends
+         optional-attribute-name="PortalObjectCF"
+         proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
+      <depends
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
    </mbean>
@@ -779,10 +783,14 @@
       <depends
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
+      <depends
+         optional-attribute-name="PortalObjectCF"
+         proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
    </mbean>
-   <mbean
-      code="org.jboss.labs.mapper.LabsCmsCommandFactory"
-      name="portal:commandFactory=LabsCms"
+
+    <mbean
+      code="org.jboss.labs.mapper.LabsPortalObjectCommandFactoryImpl"
+      name="portal:commandFactory=LabsPortalObject"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>

Modified: labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml	2007-02-17 14:12:00 UTC (rev 9567)
@@ -107,10 +107,10 @@
       <filter-class>org.jboss.forge.portal.InjectLoginLinks</filter-class>
    </filter>
    
-   <filter-mapping>
+   <!--<filter-mapping>
       <filter-name>injectLoginLinkFilter</filter-name>
       <url-pattern>/*</url-pattern>
-   </filter-mapping>
+   </filter-mapping>-->
 
    <filter>
 	<filter-name>autologinFilter</filter-name>

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -27,9 +27,9 @@
  */
 public class Constants {
 	/* 
-	 * Attributes passed to portlets from the URL.
+	 * Parameter name for passing to freezone path to the requsted resource.
 	 */
-	public static final String ATTR_REQ_PATH		= "path";
+	public static final String FREEZONE_PATH_PARAM  = "path";
 	public static final String ATTR_URL				= "nav-url";
 	
 	/*
@@ -52,7 +52,7 @@
 	/**
 	 * Default freezone page (if not specified).
 	 */
-	public static final String DEFAULT_FREEZONE_PAGE		= "index.html";
+	public static final String FREEZONE_DEFAULT_PAGE = "index.html";
 	
 	/**
 	 * Mime type of pages that can be displayed.
@@ -75,7 +75,7 @@
 	 */
 	public final static String FALSE_VALUE 			= "false";
     /**
-	 * <code>LABS_PORTAL</code> - name of the portal where the labs page is.
+	 * Name of the portal where the labs page is.
      */
     public final static String LABS_PORTAL = "default";
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -195,9 +195,22 @@
 				+ resource;
 	}
 
-	/**
+    /**
 	 * Creates a path which lets portlets to include pages (JSP and other) from
 	 * the repository.
+	 *
+	 * @param resource
+	 *            Resource we want to access.
+	 * @return A repository-access path.
+	 */
+	public static String createRepoAccessPath(String resource) {
+		return "/" + ForgeHelper.REPO_ACCESS_DIR + "/" + Constants.LABS_PORTAL + "/"
+				+ resource;
+	}
+
+    /**
+	 * Creates a path which lets portlets to include pages (JSP and other) from
+	 * the repository.
 	 * 
 	 * @param request
 	 *            The current render request.
@@ -207,11 +220,7 @@
 	 */
 	public static String createRepoAccessPath(JBossRenderRequest request,
 			String resource) {
-		PortalContext portalCtx = request.getPortalContext();
-		String portalName = portalCtx
-				.getProperty(Constants.PROP_SHOTOKU_PORTAL_DIRECTORY);
-		
-		return createRepoAccessPath(portalName, resource);
+		return createRepoAccessPath(resource);
 	}
 
 	/**

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/LabsServices.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/LabsServices.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/LabsServices.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -60,8 +60,12 @@
                 ProjectsService.PROJECTS_SERVICE);
     }
 
-    public static ProjectPagesService getProjectPagesService() throws NamingException {
-        return (ProjectPagesService) getStatelessBean(ProjectPagesService.PROJECT_PAGES_SERVICE);
+    public static ProjectPagesService getProjectPagesService() throws ServiceRetrievalException {
+        try {
+            return (ProjectPagesService) getStatelessBean(ProjectPagesService.PROJECT_PAGES_SERVICE);
+        } catch (NamingException e) {
+            throw new ServiceRetrievalException(e);
+        }
     }
 
     public static ProjectsPortletsService getProjectsPortletsService() throws ServiceRetrievalException {

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -22,9 +22,19 @@
     public void removeExcessPages(Set<String> projectIds);
 
     /**
+     * Creates name of a portal window for the given portlet.
+     * @param portletName Name of the portlet.
+     * @param projectId Id of the project.
+     * @param pageName Name of the page on which the window should be. Null, if it is
+     * the default page.
+     * @return Name of a portal window for the given portlet. 
+     */
+    public String createWindowId(String portletName, String projectId, String pageName);
+
+    /**
      * DEBUG ONLY
      * TODO: remove
-     * @return
+     * @return X
      */
     public String getTree();
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -33,6 +33,7 @@
 import org.jboss.forge.common.ForgeHelper;
 import org.jboss.forge.common.SearchTools;
 import org.jboss.forge.common.XmlTools;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 import org.jboss.forge.common.ejb3.LabsServices;
 import org.jboss.forge.common.ejb3.ProjectPagesService;
 import org.jboss.forge.common.projects.XmlInputFactory.XmlNotFoundException;
@@ -170,7 +171,7 @@
             }
 
             pps.removeExcessPages(getProjectIds());
-        } catch (NamingException e) {
+        } catch (ServiceRetrievalException e) {
             log.error("Error getting labs project pages service.", e);
         }
     }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -131,6 +131,10 @@
 		return projects;
 	}
 
+    public static Projects getProjects() {
+        return getProjects(Constants.LABS_PORTAL);
+    }
+
     private static String getSeletedProjectId(PortletRequest request) {
         return request.getPreferences().getValue("projectId", "default");
     }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -299,7 +299,7 @@
     private void addInstanceToPage(String projectId, String pageName, String portletName,
                                    Page page, Instance instance,
                                    String region, int order) {
-        String windowId = createCamelCase(portletName, projectId, pageName, "window");
+        String windowId = createWindowId(portletName, projectId, pageName);
 
         Window window = page.getWindow(windowId);
         if (window != null) {
@@ -332,8 +332,6 @@
             Instance downloads = getProjectPortletInstance(projectId, null, "downloads");
             Instance info = getProjectPortletInstance(projectId, null, "info");
 
-            addInstanceToPage(projectId, pageName, "freezoneNavigation", page,
-                    pic.getDefinition("FreezoneNavigationInstance"), "left", 0);
             addInstanceToPage(projectId, pageName, "freezone", page, freezone, "center", 0);
             addInstanceToPage(projectId, pageName, "downloads", page, downloads, "center", 1);
             addInstanceToPage(projectId, pageName, "info", page, info, "center", 2);
@@ -349,6 +347,10 @@
         updateProjectPage(projectId, null);
     }
 
+    public String createWindowId(String portletName, String projectId, String pageName) {
+        return createCamelCase(portletName, projectId, pageName, "window");    
+    }
+
     public void removeExcessPages(Set<String> projectIds) {
     }
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsBaseCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsBaseCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsBaseCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,13 +1,23 @@
 package org.jboss.labs.mapper;
 
-import org.jboss.portal.core.model.portal.PortalObjectContainer;
+import org.jboss.portal.core.model.portal.*;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowActionCommand;
+import org.jboss.portal.core.controller.ControllerCommand;
 import org.jboss.portal.jems.as.system.AbstractJBossService;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.PortletParameters;
+import org.jboss.portal.theme.navigation.WindowNavigationalState;
+import org.jboss.forge.common.Constants;
 
+import java.io.IOException;
+
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public abstract class AbstractLabsBaseCommandFactory extends AbstractJBossService
-        implements LabsBaseCommandFactory {    
+        implements LabsBaseCommandFactory {
+    protected final static String FREEZONE_PORTLET_NAME = "freezone";
+
     private PortalObjectContainer container;
 
     public PortalObjectContainer getContainer() {
@@ -17,6 +27,36 @@
     public void setContainer(PortalObjectContainer container) {
         this.container = container;
     }
+
+    private PortalObjectId defaultPortalPath = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
+            PortalObjectId.CANONICAL_FORMAT);
+
+    protected Portal getLabsPortal() {
+        return (Portal) getContainer().getObject(defaultPortalPath);
+    }
+
+    protected void sendRedirect(ServerInvocation invocation, String where) {
+        try {
+            invocation.getServerContext().getClientResponse().sendRedirect(where);
+        } catch (IOException e) {
+            // Oh well ...
+        }
+    }
+
+    protected ControllerCommand invokeActionCommand(ServerInvocation invocation, Window window,
+                                                    PortletParameters params) {
+        WindowNavigationalState windowNavState = (WindowNavigationalState)
+                invocation.getAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
+                        window.getId() + "_window");
+        if (windowNavState == null) {
+            windowNavState = new WindowNavigationalState();
+            invocation.setAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
+                    window.getId() + "_window", windowNavState);
+        }
+
+        return new InvokePortletWindowActionCommand(window.getId(), windowNavState.getMode(),
+                windowNavState.getWindowState(), null, null, params);
+    }
     
     /*
      * Service lifecycle methods.

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsProjectsCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsProjectsCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsProjectsCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,34 +0,0 @@
-package org.jboss.labs.mapper;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public abstract class AbstractLabsProjectsCommandFactory extends AbstractLabsBaseCommandFactory
-        implements LabsProjectsCommandFactory {
-    private LabsProjectsDelegatingCommandFactory delegatingCF;
-    private String path;
-
-    public LabsProjectsDelegatingCommandFactory getDelegatingCF() {
-        return delegatingCF;
-    }
-
-    public void setDelegatingCF(LabsProjectsDelegatingCommandFactory delegatingCF) {
-        this.delegatingCF = delegatingCF;
-    }
-
-    public String getPath() {
-        return path;
-    }
-
-    public void setPath(String path) {
-        this.path = path;
-    }
-
-    /*
-     * Service lifecycle methods.
-     */
-
-    protected void startService() throws Exception {
-        getDelegatingCF().register(getPath(), this);
-    }
-}

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsCmsCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsCmsCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsCmsCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,15 +0,0 @@
-package org.jboss.labs.mapper;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsCmsCommandFactory extends AbstractLabsBaseCommandFactory
-        implements LabsCommandFactory {
-    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
-                                       PathParser parser) {
-        return null;
-    }       
-}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsMainCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsMainCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsMainCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -12,6 +12,7 @@
 import org.jboss.forge.common.projects.Projects;
 import org.jboss.forge.common.Constants;
 import org.jboss.forge.common.ForgeHelper;
+import org.jboss.labs.mapper.projects.LabsProjectsDelegatingCommandFactory;
 
 import java.io.IOException;
 
@@ -21,7 +22,6 @@
 public class LabsMainCommandFactory extends AbstractLabsBaseCommandFactory implements CommandFactory {
     private LabsProjectsDelegatingCommandFactory delegatingCF;
     private LabsCommandFactory pagesCF;
-    private LabsCommandFactory cmsCF;
 
     private ContentManager cm;
 
@@ -45,14 +45,6 @@
         this.pagesCF = pagesCF;
     }
 
-    public LabsCommandFactory getCmsCF() {
-        return cmsCF;
-    }
-
-    public void setCmsCF(LabsCommandFactory cmsCF) {
-        this.cmsCF = cmsCF;
-    }
-
     /*
      * Helper methods.
      */
@@ -107,7 +99,7 @@
             if (!cmsPath.endsWith("/"))
                 cmsPath += "/";
 
-            cmsPath += Constants.DEFAULT_FREEZONE_PAGE;
+            cmsPath += Constants.FREEZONE_DEFAULT_PAGE;
         }
 
         return cmsPath;
@@ -121,12 +113,7 @@
         invocation.getServerContext().getClientRequest().getSession().setAttribute(name, value);
     }
 
-    /**
-     * Sets the response to be a redirect to the given location/
-     */
-    private void sendRedirect(ServerInvocation invocation, String where) throws IOException {
-        invocation.getServerContext().getClientResponse().sendRedirect(where);
-    }
+    
 
     /**
      * Gets the appropriate command basing on the given path and the selected
@@ -157,7 +144,7 @@
                 return getPageCommand(invocation, Constants.DEFAULT_PORTAL_PAGE);
             }
 
-            setAttribute(invocation, Constants.ATTR_REQ_PATH, cmsPath);
+            setAttribute(invocation, Constants.FREEZONE_PATH_PARAM, cmsPath);
 
             return getPageCommand(invocation, Constants.FREEZONE_PAGE);
         } else {
@@ -166,7 +153,7 @@
                      * Setting the rest of the path as an attribute so the portlets
                      * can use it.
                      */
-                setAttribute(invocation, Constants.ATTR_REQ_PATH, tokens[1]);
+                setAttribute(invocation, Constants.FREEZONE_PATH_PARAM, tokens[1]);
             }
 
             return c;
@@ -223,6 +210,7 @@
 
     public ControllerCommand doMapping(ServerInvocation invocation, String host,
                                        String contextPath, String requestPath) {
+        System.out.println("MAIN LABS CF");
         PathParser parser = new PathParser(requestPath);
 
         if (!parser.hasFirstToken()) {
@@ -233,18 +221,13 @@
         String firstToken = parser.getFirstToken();
 
         if (projects.projectExists(firstToken)) {
+            System.out.println("RECOGNIZED A PROJECT: " + firstToken);
             parser.proceed();
             return delegatingCF.doMapping(invocation, host, contextPath, parser, firstToken);
         }
 
-        ControllerCommand command;
-        command = pagesCF.doMapping(invocation, host, contextPath, parser);
-
-        if (command != null) {
-            return command;
-        }
-
-        return cmsCF.doMapping(invocation, host, contextPath, parser);
+        System.out.println("PROCEEDING TO PAGES");
+        return pagesCF.doMapping(invocation, host, contextPath, parser);
     }
 
     /*

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPagesCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPagesCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPagesCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,6 +1,5 @@
 package org.jboss.labs.mapper;
 
-import org.jboss.portal.core.model.portal.PortalObjectContainer;
 import org.jboss.portal.core.controller.ControllerCommand;
 import org.jboss.portal.server.ServerInvocation;
 
@@ -9,6 +8,16 @@
  */
 public class LabsPagesCommandFactory extends AbstractLabsBaseCommandFactory
         implements LabsCommandFactory {
+    private LabsPortalObjectCommandFactory portalObjectCF;
+
+    public LabsPortalObjectCommandFactory getPortalObjectCF() {
+        return portalObjectCF;
+    }
+
+    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
+        this.portalObjectCF = portalObjectCF;
+    }
+
     public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
                                        PathParser parser) {
         return null;

Added: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactory.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,13 @@
+package org.jboss.labs.mapper;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.server.ServerInvocation;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface LabsPortalObjectCommandFactory {
+    public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+                                       Page page, String freezoneWindowId);
+}

Added: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactoryImpl.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsPortalObjectCommandFactoryImpl.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,45 @@
+package org.jboss.labs.mapper;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.core.model.portal.command.RenderPageCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.PortletParameters;
+import org.jboss.forge.common.Constants;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class LabsPortalObjectCommandFactoryImpl extends AbstractLabsBaseCommandFactory
+        implements LabsPortalObjectCommandFactory {
+    public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+                                       Page page, String freezoneWindowId) {
+        if (page == null) {
+            return null;
+        }
+
+        if (!parser.hasFirstToken()) {
+            if (!parser.getFullPath().endsWith("/")) {
+                System.out.println("REDIRECTING");
+                sendRedirect(invocation, parser.getFullPath()+"/");
+                return null;
+            }
+
+            System.out.println("SHOWING NORMAL PAGE");
+            return new RenderPageCommand(page.getId());
+        } else {
+            Window freezone = page.getWindow(freezoneWindowId);
+
+            if (freezone == null) {
+                return null;
+            }
+
+            System.out.println("INVOKING FREEZONE: " + parser.getCurrent());
+            PortletParameters params = new PortletParameters();
+            params.put(Constants.FREEZONE_PATH_PARAM, new String[] { parser.getCurrent() });
+
+            return invokeActionCommand(invocation, freezone, params);
+        }
+    }
+}

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,19 +0,0 @@
-package org.jboss.labs.mapper;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsProjectsCommandFactory extends LabsBaseCommandFactory {
-    public ControllerCommand doMapping(ServerInvocation invocation,
-                                       String host, String contextPath,
-                                       PathParser parser, String projectName);
-
-    public LabsProjectsDelegatingCommandFactory getDelegatingCF();
-    public void setDelegatingCF(LabsProjectsDelegatingCommandFactory delegating);
-
-    public String getPath();
-    public void setPath(String path);
-}

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,14 +0,0 @@
-package org.jboss.labs.mapper;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsProjectsDelegatingCommandFactory extends LabsBaseCommandFactory {
-    public ControllerCommand doMapping(ServerInvocation invocation,
-                                       String host, String contextPath,
-                                       PathParser parser, String projectName);
-    public void register(String path, LabsProjectsCommandFactory factory);
-}

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactoryImpl.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactoryImpl.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,40 +0,0 @@
-package org.jboss.labs.mapper;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsProjectsDelegatingCommandFactoryImpl extends AbstractLabsBaseCommandFactory
-        implements LabsProjectsDelegatingCommandFactory {
-    private Map<String, LabsProjectsCommandFactory> factories;
-
-    public LabsProjectsDelegatingCommandFactoryImpl() {
-        factories = new HashMap<String, LabsProjectsCommandFactory>();
-    }
-
-    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
-                                       PathParser parser, String projectName) {
-        if (parser.hasFirstToken()) {
-            String firstToken = parser.getFirstToken();
-            for (String path : factories.keySet()) {
-                if (firstToken.equals(path)) {
-                    parser.proceed();
-                    return factories.get(path).doMapping(invocation, host, contextPath,
-                            parser, projectName);
-                }
-            }
-        }
-
-        // No match -> showing the default page.
-        return null;
-    }
-
-    public synchronized void register(String path, LabsProjectsCommandFactory factory) {
-        factories.put(path, factory);
-    }
-}

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsPagesCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsPagesCommandFactory.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsPagesCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,14 +0,0 @@
-package org.jboss.labs.mapper;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsProjectsPagesCommandFactory extends AbstractLabsProjectsCommandFactory {
-    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
-                                       PathParser parser, String projectName) {
-        return null;
-    }
-}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -6,7 +6,20 @@
 public class PathParser {
     private String firstToken;
     private String rest;
+    private String fullPath;
+    private String lastRest;
 
+    public PathParser(String path) {
+        if (path == null) {
+            return;
+        }
+
+        fullPath = path;
+        path = normalize(path);
+
+        doSplit(path);
+    }
+
     private String normalize(String path) {
         while (path.indexOf("//") != -1) {
             path = path.replace("//", "/");
@@ -16,10 +29,16 @@
             path = path.substring(1);
         }
 
+        if (path.endsWith("/")) {
+            path = path.substring(0, path.length()-1);
+        }
+
         return path;
     }
 
     private void doSplit(String path) {
+        lastRest = rest;
+        
         if (path == null) {
             firstToken = null;
             rest = null;
@@ -31,15 +50,6 @@
         rest = (tokens.length > 1 ? tokens[1] : null);
     }
 
-    public PathParser(String path) {
-        if (path == null) {
-            return;
-        }
-
-        path = normalize(path);
-        doSplit(path);
-    }
-
     public String getFirstToken() {
         return firstToken;
     }
@@ -59,6 +69,20 @@
     public void proceed() {
         if (hasMoreTokens()) {
             doSplit(rest);
+        } else {
+            firstToken = null;
         }
     }
+
+    public String getCurrent() {
+        return lastRest;
+    }
+
+    /**
+     *
+     * @return The original path, passed to the parser.
+     */
+    public String getFullPath() {
+        return fullPath;
+    }
 }

Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/AbstractLabsProjectsCommandFactory.java (from rev 9561, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/AbstractLabsProjectsCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/AbstractLabsProjectsCommandFactory.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/AbstractLabsProjectsCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,46 @@
+package org.jboss.labs.mapper.projects;
+
+import org.jboss.labs.mapper.AbstractLabsBaseCommandFactory;
+import org.jboss.labs.mapper.LabsPortalObjectCommandFactory;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public abstract class AbstractLabsProjectsCommandFactory extends AbstractLabsBaseCommandFactory
+        implements LabsProjectsCommandFactory {
+    private LabsProjectsDelegatingCommandFactory delegatingCF;
+    private String path;
+    private LabsPortalObjectCommandFactory portalObjectCF;
+
+    public LabsPortalObjectCommandFactory getPortalObjectCF() {
+        return portalObjectCF;
+    }
+
+    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
+        this.portalObjectCF = portalObjectCF;
+    }
+
+    public LabsProjectsDelegatingCommandFactory getDelegatingCF() {
+        return delegatingCF;
+    }
+
+    public void setDelegatingCF(LabsProjectsDelegatingCommandFactory delegatingCF) {
+        this.delegatingCF = delegatingCF;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    /*
+    * Service lifecycle methods.
+    */
+
+    protected void startService() throws Exception {
+        getDelegatingCF().register(getPath(), this);
+    }
+}

Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsCommandFactory.java (from rev 9561, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsCommandFactory.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,25 @@
+package org.jboss.labs.mapper.projects;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.LabsBaseCommandFactory;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.LabsPortalObjectCommandFactory;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface LabsProjectsCommandFactory extends LabsBaseCommandFactory {
+    public ControllerCommand doMapping(ServerInvocation invocation,
+                                       String host, String contextPath,
+                                       PathParser parser, String projectId);
+
+    public LabsProjectsDelegatingCommandFactory getDelegatingCF();
+    public void setDelegatingCF(LabsProjectsDelegatingCommandFactory delegating);
+
+    public LabsPortalObjectCommandFactory getPortalObjectCF();
+    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF);
+
+    public String getPath();
+    public void setPath(String path);
+}

Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactory.java (from rev 9561, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactory.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,16 @@
+package org.jboss.labs.mapper.projects;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.LabsBaseCommandFactory;
+import org.jboss.labs.mapper.PathParser;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface LabsProjectsDelegatingCommandFactory extends LabsBaseCommandFactory {
+    public ControllerCommand doMapping(ServerInvocation invocation,
+                                       String host, String contextPath,
+                                       PathParser parser, String projectId);
+    public void register(String path, LabsProjectsCommandFactory factory);
+}

Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactoryImpl.java (from rev 9561, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsDelegatingCommandFactoryImpl.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactoryImpl.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsDelegatingCommandFactoryImpl.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,62 @@
+package org.jboss.labs.mapper.projects;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.forge.common.ejb3.LabsServices;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
+import org.jboss.labs.mapper.AbstractLabsBaseCommandFactory;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.LabsPortalObjectCommandFactory;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class LabsProjectsDelegatingCommandFactoryImpl extends AbstractLabsBaseCommandFactory
+        implements LabsProjectsDelegatingCommandFactory {
+    private LabsPortalObjectCommandFactory portalObjectCF;
+
+    public LabsPortalObjectCommandFactory getPortalObjectCF() {
+        return portalObjectCF;
+    }
+
+    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
+        this.portalObjectCF = portalObjectCF;
+    }
+
+    private Map<String, LabsProjectsCommandFactory> factories;
+
+    public LabsProjectsDelegatingCommandFactoryImpl() {
+        factories = new HashMap<String, LabsProjectsCommandFactory>();
+    }
+
+    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
+                                       PathParser parser, String projectId) {
+        if (parser.hasFirstToken()) {
+            String firstToken = parser.getFirstToken();
+            for (String path : factories.keySet()) {
+                if (firstToken.equals(path)) {
+                    parser.proceed();
+                    return factories.get(path).doMapping(invocation, host, contextPath,
+                            parser, projectId);
+                }
+            }
+        }
+
+        // No match -> showing the default page.
+        try {
+            return getPortalObjectCF().doMapping(invocation, parser,
+                    getLabsPortal().getPage(projectId),
+                    LabsServices.getProjectPagesService().createWindowId(FREEZONE_PORTLET_NAME,
+                            projectId, null));
+        } catch (ServiceRetrievalException e) {
+            return null;
+        }
+    }
+
+    public synchronized void register(String path, LabsProjectsCommandFactory factory) {
+        factories.put(path, factory);
+    }
+}

Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsPagesCommandFactory.java (from rev 9561, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/LabsProjectsPagesCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsPagesCommandFactory.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/projects/LabsProjectsPagesCommandFactory.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -0,0 +1,16 @@
+package org.jboss.labs.mapper.projects;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.projects.AbstractLabsProjectsCommandFactory;
+import org.jboss.labs.mapper.PathParser;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class LabsProjectsPagesCommandFactory extends AbstractLabsProjectsCommandFactory {
+    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
+                                       PathParser parser, String projectId) {
+        return null;
+    }
+}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -59,7 +59,7 @@
 
 			// Getting the selected category (null if no selected category)
 			String categoryId = ForgeHelper.getRequestParameter(request,
-					Constants.ATTR_REQ_PATH);
+					Constants.FREEZONE_PATH_PARAM);
 
 			// Getting the appropriate context
 			DelegateContext context = projects.getDownloadsContext(

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/Freezone.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/Freezone.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/Freezone.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -65,7 +65,27 @@
 		response.getWriter().println(ERROR_404_MSG);
 	}
 
-	public void labsDoView(JBossRenderRequest request,
+    private String getRequestedPath(String projectId, RenderRequest request) {
+        // Getting the path from render parameters.
+		String requestedRelPath = request.getParameter(Constants.FREEZONE_PATH_PARAM);
+
+		// It is used if an instance has defined preference in instance
+		// descriptor.
+		Object requestedPathFromPref = request.getPreferences().getValue("page", null);
+
+        if ((requestedRelPath == null) && (!Tools.isEmpty((String) requestedPathFromPref))) {
+			requestedRelPath = requestedPathFromPref.toString();
+		}
+
+		if (requestedRelPath == null) {
+            requestedRelPath = Constants.FREEZONE_DEFAULT_PAGE;
+        }
+
+        return Constants.LABS_PORTAL + "/" + ProjectsHelper.MEMBERS_DIR + "/" +
+                projectId + "/" + ProjectsHelper.FREEZONE_DIR + "/" + requestedRelPath;
+    }
+
+    public void labsDoView(JBossRenderRequest request,
 			JBossRenderResponse response) throws IOException, PortletException {        
         /*
 		 * Checking if the user has access to the selected project (this isn't
@@ -74,10 +94,8 @@
 		String projectId = ProjectsHelper.getSelectedProjectId(request);
         System.out.println("PROJECT ID: " + projectId);
 
-        String portalName = ForgeHelper.getPortalName(request);
-
 		if ((projectId != null) && (!"default".equals(projectId))
-				&& (!ProjectsHelper.getProjects(portalName)
+				&& (!ProjectsHelper.getProjects(Constants.LABS_PORTAL)
 						.projectExists(
 								new RenderRequestPermissionsChecker(request),
 								projectId))) {
@@ -85,43 +103,23 @@
 			return;
 		}
 
-		// Getting the path requested by the user.
-		Object requestedPathObject = request
-				.getAttribute(Constants.ATTR_REQ_PATH);
+        if (projectId == null) {
+            projectId = "default";
+        }
 
-		String requestedPath;
-		if (requestedPathObject == null) {
-			requestedPath = request.getParameter(Constants.ATTR_REQ_PATH);
-		} else {
-			requestedPath = requestedPathObject.toString();
-		}
+        // Getting the path requested by the user.
+		String requestedPath = getRequestedPath(projectId, request);
 
-		// It is used if an instance has defined preference in instance
-		// descriptor.
-		Object requestedPathFromPref = request.getPreferences().getValue(
-				"page", null);
-
-        //System.out.println("REQ PATH FROM PREF: " + requestedPathFromPref);
-
-        if (!Tools.isEmpty((String) requestedPathFromPref)) {
-			requestedPath = (String) requestedPathFromPref;
-		}
-
-		if (requestedPath == null) {
-            requestedPath = "default/members/" + projectId + "/freezone/index.html";
-            //sendResponseNotFound(response);
-		}
-
 		Node requestedNode;
 		try {
 			requestedNode = cm.getNode(requestedPath);
 		} catch (ResourceDoesNotExist e) {
 			// Even if the resource doesn't exist, writing an edit link, to
 			// (possibly) create a new page.ru
-			if (isAllowedToEdit(portalName, request, response)) {
+			if (isAllowedToEdit(request, response)) {
 				response.setContentType(Constants.PAGES_MIME_TYPE);
-				writeTagmeButton(portalName, request, response, requestedPath);
-				writeEditLink(portalName, requestedPath, request, response);
+				writeTagmeButton(request, response, requestedPath);
+				writeEditLink(requestedPath, request, response);
 				response.getWriter().println(ERROR_404_MSG);
 			} else {
 				sendResponseNotFound(response);
@@ -131,9 +129,9 @@
 		}
 
 		response.setContentType(Constants.PAGES_MIME_TYPE);
-		writeTagmeButton(portalName, request, response, requestedPath);
-		if (isAllowedToEdit(portalName, request, response)) {
-			writeEditLink(portalName, requestedPath, request, response);
+		writeTagmeButton(request, response, requestedPath);
+		if (isAllowedToEdit(request, response)) {
+			writeEditLink(requestedPath, request, response);
 			Tools.transfer(requestedNode.getContentInputStream(), response
 					.getWriter());
 		} else {
@@ -142,8 +140,8 @@
 		}
 	}
 
-	private void writeTagmeButton(String portalName,
-			JBossRenderRequest request, JBossRenderResponse response,
+	private void writeTagmeButton(JBossRenderRequest request,
+                                  JBossRenderResponse response,
 			String requestedPath) throws PortletException, IOException {
 		if (request.getUser() != null) {
 			request.setAttribute("TAGME_PATH", requestedPath);
@@ -151,8 +149,7 @@
 
 			PortletRequestDispatcher rd = getPortletContext()
 					.getRequestDispatcher(
-							ForgeHelper.createRepoAccessPath(portalName,
-									TAGME_JSP));
+							ForgeHelper.createRepoAccessPath(TAGME_JSP));
 
 			rd.include(request, response);
 		}
@@ -162,19 +159,9 @@
 	@Override
 	protected boolean isAllowed(JBossRenderRequest request,
 			JBossRenderResponse response) {
-		Object requestedPathFromPref = request.getPreferences().getValue(
-				"page", null);
-		Object cmsPathObject = request.getAttribute(Constants.ATTR_REQ_PATH);
-		String cmsPath = null;
-		if (cmsPathObject != null) {
-			cmsPath = cmsPathObject.toString();
-		}
-		if (requestedPathFromPref != null) {
-			cmsPath = (String) requestedPathFromPref;
-		}
+		String cmsPath = getRequestedPath(ProjectsHelper.getSelectedProjectId(request), request);
 
-		List<String> loggedInOnly = conf
-				.get(ForgeHelper.getPortalName(request));
+		List<String> loggedInOnly = conf.get(ForgeHelper.getPortalName(request));
 
 		return (request.getUser() != null)
 				|| (loggedInOnly != null && !loggedInOnly.contains(cmsPath));
@@ -207,29 +194,22 @@
 
 	private final static String CONTENT = "content";
 
-	protected boolean isAllowedToEdit(String portalName,
-			JBossRenderRequest request, JBossRenderResponse response) {
-		return ProjectsHelper.getProjects(portalName).editPermissionAllowed(
+	protected boolean isAllowedToEdit(JBossRenderRequest request, JBossRenderResponse response) {
+		return ProjectsHelper.getProjects().editPermissionAllowed(
 				new RenderRequestPermissionsChecker(request),
 				ProjectsHelper.getSelectedProjectId(request, true));
 	}
 
-	protected void writeEditLink(String portalName, String requestedPath,
+	protected void writeEditLink(String requestedPath,
 			JBossRenderRequest request, JBossRenderResponse response)
 			throws IOException, PortletException {
 		PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
-				ForgeHelper.createRepoAccessPath(portalName, EDIT_LINK_JSP));
+				ForgeHelper.createRepoAccessPath(EDIT_LINK_JSP));
 
 		String ret = request.getParameter(ATTR_RETURN);
-		if (ret == null) {
-			Object retObj = request.getAttribute(Constants.ATTR_URL);
-			if (retObj != null) {
-				ret = retObj.toString();
-			}
-		}
 
 		request.setAttribute(ATTR_RETURN, ret);
-		request.setAttribute(Constants.ATTR_REQ_PATH, requestedPath);
+		request.setAttribute(Constants.FREEZONE_PATH_PARAM, requestedPath);
 
 		rd.include(request, response);
 	}
@@ -255,7 +235,7 @@
 		response.setContentType(Constants.PAGES_MIME_TYPE);
 
 		// First checking if a user is allowed to edit the page.
-		if (!isAllowedToEdit(portalName, request, response)) {
+		if (!isAllowedToEdit(request, response)) {
 			response.getWriter().write(ERROR_403_MSG);
 			return;
 		}
@@ -264,7 +244,7 @@
 		String content = request.getParameter(CONTENT);
 		if (content == null) {
 			content = getNodeForPath(
-					request.getParameter(Constants.ATTR_REQ_PATH)).getContent();
+					request.getParameter(Constants.FREEZONE_PATH_PARAM)).getContent();
 		}
 
 		request.setAttribute(CONTENT, content);
@@ -278,16 +258,19 @@
 
 	public void processAction(ActionRequest request, ActionResponse response)
 			throws PortletException, IOException {
-		// Passing necessary parameters.
-		response.setRenderParameter(Constants.ATTR_REQ_PATH, request
-				.getParameter(Constants.ATTR_REQ_PATH));
-		response.setRenderParameter(ATTR_RETURN, request
-				.getParameter(ATTR_RETURN));
-		/*
-		 * request.setAttribute(ProjectsHelper.PROJECT_URL_PARAM,
-		 * request.getParameter(ProjectsHelper.PROJECT_URL_PARAM));
-		 */
+        System.out.println("FREEZONE PARAM: " + request.getParameter(Constants.FREEZONE_PATH_PARAM));
 
+        // Passing necessary parameters.
+        String requestPathParam = request
+				.getParameter(Constants.FREEZONE_PATH_PARAM);
+        if (requestPathParam != null) {
+            response.setRenderParameter(Constants.FREEZONE_PATH_PARAM, requestPathParam);
+        }
+
+        // TODO fix
+        //response.setRenderParameter(ATTR_RETURN, request
+		//		.getParameter(ATTR_RETURN));
+
 		if (request.getParameter(ACTION_PREVIEW) != null) {
 			// Preview.
 			response.setRenderParameter(CONTENT, request.getParameter(CONTENT));
@@ -298,7 +281,7 @@
 		if (request.getParameter(ACTION_SAVE) != null) {
 			// Save.
 			Node n = getNodeForPath(request
-					.getParameter(Constants.ATTR_REQ_PATH));
+					.getParameter(Constants.FREEZONE_PATH_PARAM));
 			n.setContent(request.getParameter(CONTENT));
 
 			try {

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,6 +1,7 @@
 package org.jboss.forge.projects.freezone;
 
 import org.jboss.forge.common.ejb3.LabsServices;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -21,7 +22,7 @@
 
         try {
             LabsServices.getProjectPagesService().updatePages("jbossas");
-        } catch (NamingException e) {
+        } catch (ServiceRetrievalException e) {
             e.printStackTrace();
         }
     }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet2.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet2.java	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet2.java	2007-02-17 14:12:00 UTC (rev 9567)
@@ -1,6 +1,7 @@
 package org.jboss.forge.projects.freezone;
 
 import org.jboss.forge.common.ejb3.LabsServices;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -21,7 +22,7 @@
 
         try {
             response.getWriter().println(LabsServices.getProjectPagesService().getTree());
-        } catch (NamingException e) {
+        } catch (ServiceRetrievalException e) {
             e.printStackTrace();
         }
     }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet-instances.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet-instances.xml	2007-02-17 09:22:33 UTC (rev 9566)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet-instances.xml	2007-02-17 14:12:00 UTC (rev 9567)
@@ -39,19 +39,6 @@
             </preferences>
         </instance>
     </deployment>
-    <deployment>
-        <if-exists>overwrite</if-exists>
-        <instance>
-            <instance-id>FreezoneNavigationInstance</instance-id>
-            <portlet-ref>FreezonePortlet</portlet-ref>
-            <preferences>
-                <preference>
-                    <name>page</name>
-                    <value>default/members/default/freezone/navigation.html</value>
-                </preference>
-            </preferences>
-        </instance>
-    </deployment>
 
     <deployment>
         <if-exists>overwrite</if-exists>




More information about the jboss-svn-commits mailing list