[jboss-svn-commits] JBL Code SVN: r9591 - in labs/jbosslabs/trunk/portal-extensions: forge-common/src/java/org/jboss/forge/common and 8 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 19 07:21:19 EST 2007


Author: adamw
Date: 2007-02-19 07:21:19 -0500 (Mon, 19 Feb 2007)
New Revision: 9591

Removed:
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatePagesCommandFactory.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/forge-common/src/java/org/jboss/forge/common/Constants.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/FacesTools.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/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/PathParser.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.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/web/WEB-INF/portlet-instances.xml
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet.xml
   labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml
Log:
New URL/Command factories; 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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml	2007-02-19 12:21:19 UTC (rev 9591)
@@ -591,10 +591,10 @@
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
-      <!-- LABS
+      <!-- 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"
@@ -633,7 +633,7 @@
       <depends
          optional-attribute-name="DelegateFactory"
          proxy-type="attribute">portal:commandFactory=PortalObject</depends>
-   </mbean>
+   </mbean> -->
    <mbean
       code="org.jboss.portal.core.controller.command.mapper.SimpleCommandFactory"
       name="portal:commandFactory=SignOut"
@@ -736,6 +736,9 @@
       <depends
          optional-attribute-name="DelegatingCF"
          proxy-type="attribute">portal:commandFactory=LabsDelegating</depends>
+      <depends
+         optional-attribute-name="PortalObjectCF"
+         proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
    </mbean>
 
    <mbean
@@ -747,27 +750,7 @@
       <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.command.LabsDelegatePagesCommandFactory"
-      name="portal:commandFactory=LabsDelegatePages"
-      xmbean-dd=""
-      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
-      <xmbean/>
-      <attribute name="Path">pages</attribute>
-      <depends
-         optional-attribute-name="DelegatingCF"
-         proxy-type="attribute">portal:commandFactory=LabsDelegating</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>
 
     <mbean
       code="org.jboss.labs.mapper.command.LabsPortalObjectCommandFactoryImpl"
@@ -778,6 +761,7 @@
       <depends
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
+      <depends>shotoku:service=svn</depends>
    </mbean>
 
    <!-- URL factories -->
@@ -788,6 +772,7 @@
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
    </mbean>
+   <!-- LABS
    <mbean
       code="org.jboss.portal.core.model.portal.PortalObjectURLFactory"
       name="portal:urlFactory=PortalObject"
@@ -798,7 +783,7 @@
       <depends
          optional-attribute-name="Factory"
          proxy-type="attribute">portal:urlFactory=Delegating</depends>
-   </mbean>
+   </mbean> -->
    <mbean
       code="org.jboss.portal.core.controller.command.mapper.SimpleURLFactory"
       name="portal:urlFactory=SignOut"
@@ -848,6 +833,22 @@
          proxy-type="attribute">portal:urlFactory=Delegating</depends>
    </mbean>
 
+   <!-- LABS URL factories -->
+
+   <mbean
+      code="org.jboss.labs.mapper.url.LabsMainUrlFactory"
+      name="portal:urlFactory=LabsMain"
+      xmbean-dd=""
+      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+      <xmbean/>
+      <depends
+         optional-attribute-name="Factory"
+         proxy-type="attribute">portal:urlFactory=Delegating</depends>
+      <depends
+         optional-attribute-name="Container"
+         proxy-type="attribute">portal:container=PortalObject</depends>
+   </mbean>
+
    <!-- The federating portlet invoker -->
    <mbean
       code="org.jboss.portal.federation.impl.FederatingPortletInvokerService"

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -49,7 +49,7 @@
 	/**
 	 * Beginning of links to portal pages.
 	 */
-	public static final String LINK_BASE				= "/portal/";
+	public static final String LINK_BASE				= "/";
 	
 	/**
 	 * Default freezone project name (global freezone).

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/FacesTools.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/FacesTools.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/FacesTools.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -88,7 +88,7 @@
     }
 
     public static String getPortalName() {
-        return getRequestProperty(Constants.PROP_SHOTOKU_PORTAL_DIRECTORY);
+        return Constants.LABS_PORTAL;
     }
 
     public static boolean hasPermission(String permission) {

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -39,16 +39,12 @@
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
-import javax.management.MalformedObjectNameException;
 import javax.portlet.PortalContext;
 import javax.portlet.PortletRequest;
 import javax.servlet.ServletRequest;
 
-import org.jboss.mx.util.MBeanProxyExt;
-import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.portlet.JBossRenderRequest;
 import org.jboss.shotoku.ContentManager;
-import org.jboss.shotoku.tools.Tools;
 import org.jboss.shotoku.aop.CacheItem;
 import org.w3c.dom.Node;
 
@@ -196,6 +192,17 @@
 	}
 
     /**
+     *
+     * @param path Absolute path to the Shotoku resource.
+     * @return A path to the given resource, accessible by the client using
+     * the file-access servlet.
+     */
+    public static String createFileAccessPath(String path) {
+        return "/" + ForgeHelper.FILE_ACCESS_DIR + "/" + path;
+    }
+
+
+    /**
 	 * Creates a path which lets portlets to include pages (JSP and other) from
 	 * the repository.
 	 *
@@ -251,8 +258,7 @@
 	 * @return Name of the current portal.
 	 */
 	public static String getPortalName(PortletRequest request) {
-		PortalContext portalCtx = request.getPortalContext();
-		return portalCtx.getProperty(Constants.PROP_SHOTOKU_PORTAL_DIRECTORY);
+		return Constants.LABS_PORTAL;
 	}
 
 	/**
@@ -395,12 +401,6 @@
         return link;
     }
 
-    private static String removeParameter(String link, String param) {
-        link = link.replace("?" + param + "&", "?");
-        link = link.replace("?" + param, "");
-        return link.replace("&" + param, "");
-    }
-
     public static String prepareLinkForChecking(String portalName, String link) {
         if (link == null)
             return link;
@@ -553,4 +553,26 @@
 		
 		return md5.asHex();
 	}
+
+    /**
+     * Creates a camel-case concatenation of the given words.
+     * Null words are ommited.
+     * @param words Words to concatenate.
+     * @return A camel-case concatenation of the given words.
+     */
+    public static String createCamelCase(String... words) {
+        StringBuilder result = new StringBuilder("");
+        for (String word : words) {
+            if (word == null) { continue; }
+            if (word.length() == 1) {
+                result.append(word.toUpperCase());
+                continue;
+            }
+
+            result.append(word.substring(0, 1).toUpperCase()).append(
+                    word.substring(1).toLowerCase());
+        }
+
+        return result.toString();
+    }
 }

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -42,94 +42,94 @@
 
 /**
  * Various helper methods for project-specific portlets.
- * 
+ *
  * @author Adam Warski (adamw at aster.pl)
  * @author Ryszard Kozmik
  */
 public class ProjectsHelper {
-	
-	private static Logger log = Logger.getLogger(ProjectsHelper.class);
-	
-	/**
-	 * This class cannot be instatiated.
-	 */
-	private ProjectsHelper() {
 
-	}
+    private static Logger log = Logger.getLogger(ProjectsHelper.class);
 
-	/**
-	 * <code>PROJECT_ID</code> - name of the attribute under which the
-	 * selected project's id can be found in a servlet response object.
-	 */
-	public final static String PROJECT_ID = "projectId";
-	/**
-	 * <code>LEVEL_ID</code> - name of the attribute under which the
-	 * selected level's id can be found in a servlet response object.
-	 */
-	public final static String LEVEL_ID = "levelId";
-	/**
-	 * <code>PROJECT_NAME</code> - name of the attribute under which the
-	 * selected project's name can be found in a servlet response object.
-	 */
-	public final static String PROJECT_NAME = "projectName";
+    /**
+     * This class cannot be instatiated.
+     */
+    private ProjectsHelper() {
 
-	/**
-	 * <code>DEFAULT_PROJECT</code> - name of the project to return if there
-	 * is no project selected.
-	 */
-	private final static String DEFAULT_PROJECT = "default";
+    }
 
-	/**
-	 * <code>projectsObjects</code> - portalName -> Projects object
-	 */
-	private static Map<String, Projects> projectsObjects;
+    /**
+     * <code>PROJECT_ID</code> - name of the attribute under which the
+     * selected project's id can be found in a servlet response object.
+     */
+    public final static String PROJECT_ID = "projectId";
+    /**
+     * <code>LEVEL_ID</code> - name of the attribute under which the
+     * selected level's id can be found in a servlet response object.
+     */
+    public final static String LEVEL_ID = "levelId";
+    /**
+     * <code>PROJECT_NAME</code> - name of the attribute under which the
+     * selected project's name can be found in a servlet response object.
+     */
+    public final static String PROJECT_NAME = "projectName";
 
-	public final static String PROJECT_DESC = "project.xml";
-	public final static String PROJECTS_DESC = "projects.xml";
+    /**
+     * <code>DEFAULT_PROJECT</code> - name of the project to return if there
+     * is no project selected.
+     */
+    private final static String DEFAULT_PROJECT = "default";
 
-	public final static String LEVELS_DESC = "levels.xml";
-	protected final static String PAGES_DESC = "pages.xml";
-	protected final static String JEMS_DESC = "jems.xml";
-	protected final static String CATEGORIES_DESC = "categories.xml";
-	protected final static String DOWNLOADS_DESC = "downloads.xml";
-	protected final static String DOWNLOADCOUNTER_DESC = "counter.xml";
-	protected final static String DOWNLOADCOUNTERMAIN_DESC = "counters.xml";
-	public final static String POLLS_DESC = "polls.xml";
-	public final static String POLL_DESC = "poll.xml";
+    /**
+     * <code>projectsObjects</code> - portalName -> Projects object
+     */
+    private static Map<String, Projects> projectsObjects;
 
-	/**
-	 * <code>MEMBERS_DIRECTORY</code> - base repository directory in which
-	 * members store their files.
-	 */
-	public final static String MEMBERS_DIR = "members";
-	public final static String DOWNLOADS_DIR = "downloads";
-	public final static String BLOG_DIR = "blog";
-	public final static String FREEZONE_DIR = "freezone";
+    public final static String PROJECT_DESC = "project.xml";
+    public final static String PROJECTS_DESC = "projects.xml";
 
-	static {
-		projectsObjects = new HashMap<String, Projects>();
-	}
+    public final static String LEVELS_DESC = "levels.xml";
+    protected final static String PAGES_DESC = "pages.xml";
+    protected final static String JEMS_DESC = "jems.xml";
+    protected final static String CATEGORIES_DESC = "categories.xml";
+    protected final static String DOWNLOADS_DESC = "downloads.xml";
+    protected final static String DOWNLOADCOUNTER_DESC = "counter.xml";
+    protected final static String DOWNLOADCOUNTERMAIN_DESC = "counters.xml";
+    public final static String POLLS_DESC = "polls.xml";
+    public final static String POLL_DESC = "poll.xml";
 
-	/**
-	 * Gets an instance of the Projects object for the given portal.
-	 *
-	 * @param portalName
-	 *            Name of the portal.
-	 * @return An appropriate instance of class Projects.
-	 */
-	public static Projects getProjects(String portalName) {
-		Projects projects = projectsObjects.get(portalName);
-		if (projects == null) {
+    /**
+     * <code>MEMBERS_DIRECTORY</code> - base repository directory in which
+     * members store their files.
+     */
+    public final static String MEMBERS_DIR = "members";
+    public final static String DOWNLOADS_DIR = "downloads";
+    public final static String BLOG_DIR = "blog";
+    public final static String FREEZONE_DIR = "freezone";
+
+    static {
+        projectsObjects = new HashMap<String, Projects>();
+    }
+
+    /**
+     * Gets an instance of the Projects object for the given portal.
+     *
+     * @param portalName
+     *            Name of the portal.
+     * @return An appropriate instance of class Projects.
+     */
+    public static Projects getProjects(String portalName) {
+        Projects projects = projectsObjects.get(portalName);
+        if (projects == null) {
             synchronized (ProjectsHelper.class) {
                 if (projects == null) {
                     projects = new Projects(portalName);
                     projectsObjects.put(portalName, projects);
                 }
             }
-		}
+        }
 
-		return projects;
-	}
+        return projects;
+    }
 
     public static Projects getProjects() {
         return getProjects(Constants.LABS_PORTAL);
@@ -140,148 +140,172 @@
     }
 
     /**
-	 * Equivalent to <code>getSelectedProjectId(request, false)</code>.
-	 * @param request
-	 *            A request object from which the selected project name will be
-	 *            read.
-	 * @return Selected project's id, or null, if no project is selected (never
-	 * the default project, as it cannot be selected).
-	 */
-	public static String getSelectedProjectId(JBossRenderRequest request) {
-		return getSelectedProjectId(request, false);
-	}
+     * Equivalent to <code>getSelectedProjectId(request, false)</code>.
+     * @param request
+     *            A request object from which the selected project name will be
+     *            read.
+     * @return Selected project's id, or null, if no project is selected (never
+     * the default project, as it cannot be selected).
+     */
+    public static String getSelectedProjectId(JBossRenderRequest request) {
+        return getSelectedProjectId(request, false);
+    }
 
-	/**
-	 * @param request
-	 *            A request object from which the selected project name will be
-	 *            read.
-	 * @param withDefault
-	 * 			  True if default project name should be returned if no project
-	 * 			  is selected. False if null should be returned in such case.
-	 * @return Selected project's id, or the default project's id/ null, depending
-	 * on <code>withDefault</code>, if no project is selected.
-	 */
-	public static String getSelectedProjectId(JBossRenderRequest request,
-			boolean withDefault) {
+    /**
+     * @param request
+     *            A request object from which the selected project name will be
+     *            read.
+     * @param withDefault
+     * 			  True if default project name should be returned if no project
+     * 			  is selected. False if null should be returned in such case.
+     * @return Selected project's id, or the default project's id/ null, depending
+     * on <code>withDefault</code>, if no project is selected.
+     */
+    public static String getSelectedProjectId(JBossRenderRequest request,
+                                              boolean withDefault) {
         String projectId = getSeletedProjectId(request);
 
         if ((projectId == null) && (withDefault)) {
-			projectId = DEFAULT_PROJECT;
-		} else if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) {
-			projectId = null;
-		} else if ((!DEFAULT_PROJECT.equals(projectId)) &&
-				(getProjects(ForgeHelper.getPortalName(request)).getProjectContext(
-						new RenderRequestPermissionsChecker(request), projectId) == null)) {
-			// No project context --> project does not exist.
-			projectId = null;
-		}
+            projectId = DEFAULT_PROJECT;
+        } else if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) {
+            projectId = null;
+        } else if ((!DEFAULT_PROJECT.equals(projectId)) &&
+                (getProjects(ForgeHelper.getPortalName(request)).getProjectContext(
+                        new RenderRequestPermissionsChecker(request), projectId) == null)) {
+            // No project context --> project does not exist.
+            projectId = null;
+        }
 
         return projectId;
-	}
+    }
 
-	/**
-	 * Equivalent to <code>getSelectedProjectId(request, false)</code>.
-	 * @param request
-	 *            A request object from which the selected project name will be
-	 *            read.
-	 * @return Selected project's id, or null, if no project is selected (never
-	 * the default project, as it cannot be selected).
-	 */
-	public static String getSelectedProjectId(JBossActionRequest request) {
-		return getSelectedProjectId(request, false);
-	}
+    /**
+     * Equivalent to <code>getSelectedProjectId(request, false)</code>.
+     * @param request
+     *            A request object from which the selected project name will be
+     *            read.
+     * @return Selected project's id, or null, if no project is selected (never
+     * the default project, as it cannot be selected).
+     */
+    public static String getSelectedProjectId(JBossActionRequest request) {
+        return getSelectedProjectId(request, false);
+    }
 
-	/**
-	 * @param request
-	 *            A request object from which the selected project name will be
-	 *            read.
-	 * @param withDefault
-	 * 			  True if default project name should be returned if no project
-	 * 			  is selected. False if null should be returned in such case.
-	 * @return Selected project's id, or the default project's id/ null, depending
-	 * on <code>withDefault</code>, if no project is selected.
-     * @deprecated
-	 */
-	public static String getSelectedProjectId(JBossActionRequest request,
-			boolean withDefault) {
+    /**
+     * @param request
+     *            A request object from which the selected project name will be
+     *            read.
+     * @param withDefault
+     * 			  True if default project name should be returned if no project
+     * 			  is selected. False if null should be returned in such case.
+     * @return Selected project's id, or the default project's id/ null, depending
+     * on <code>withDefault</code>, if no project is selected.
+     */
+    public static String getSelectedProjectId(JBossActionRequest request,
+                                              boolean withDefault) {
         String projectId = getSeletedProjectId(request);
 
         if ((projectId == null) && (withDefault)) {
-			projectId = DEFAULT_PROJECT;
-		} else if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) {
-			projectId = null;
-		} else if ((!DEFAULT_PROJECT.equals(projectId)) &&
-				(getProjects(ForgeHelper.getPortalName(request)).getProjectContext(
-						new ActionRequestPermissionsChecker(request), projectId) == null)) {
-			// No project context --> project does not exist.
-			projectId = null;
-		}
+            projectId = DEFAULT_PROJECT;
+        } else if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) {
+            projectId = null;
+        } else if ((!DEFAULT_PROJECT.equals(projectId)) &&
+                (getProjects(ForgeHelper.getPortalName(request)).getProjectContext(
+                        new ActionRequestPermissionsChecker(request), projectId) == null)) {
+            // No project context --> project does not exist.
+            projectId = null;
+        }
 
         return projectId;
-	}
+    }
 
-	/**
-	 * Prepares a request object for generating a JSP. PROJECT_NAME and
-	 * PROJECT_ID attributes are set.
-	 *
-	 * @param request
-	 *            Request to prepare.
-	 */
-	public static void prepareRequest(JBossRenderRequest request) {
-	}
+    /**
+     * Prepares a request object for generating a JSP. PROJECT_NAME and
+     * PROJECT_ID attributes are set.
+     *
+     * @param request
+     *            Request to prepare.
+     */
+    public static void prepareRequest(JBossRenderRequest request) {
+    }
 
-	/**
-	 * Creates a link to a freezone page basing on the given parameters.
-	 *
-	 * @param portalName
-	 *            Name of the portal.
-	 * @param projectId
-	 *            Id of the project.
-	 * @param page
-	 *            Page to link to.
-	 * @return A link to the given page.
-	 */
-	public static String createFreezonePageLink(String portalName, String projectId,
-			String page) {
-		return Constants.LINK_BASE + projectId + "/" + page;
-	}
+    /**
+     * Creates a link to a freezone page basing on the given parameters.
+     *
+     * @param portalName
+     *            Name of the portal.
+     * @param projectId
+     *            Id of the project.
+     * @param page
+     *            Page to link to.
+     * @return A link to the given page.
+     */
+    public static String createFreezonePageLink(String portalName, String projectId,
+                                                String page) {
+        return Constants.LINK_BASE + projectId + "/" + page;
+    }
 
-	/**
-	 * Creates a link to a portal page based on the given parameters.
-	 * @param portalName Name of the portal.
-	 * @param projectId Id of the project for which the page should be displayed.
-	 * @param page Page to display.
-	 * @return A link to the given portal page.
-	 */
-	public static String createPageLink(String portalName, String projectId, String page) {
-		return Constants.LINK_BASE + projectId + "/" + page;
-	}
+    /**
+     * Creates a link to a portal page based on the given parameters.
+     * @param portalName Name of the portal.
+     * @param projectId Id of the project for which the page should be displayed.
+     * @param page Page to display.
+     * @return A link to the given portal page.
+     */
+    public static String createPageLink(String portalName, String projectId, String page) {
+        return Constants.LINK_BASE + projectId + "/" + page;
+    }
 
-	public static Map<String, String> getProjectsNameId(String portalName) {
-		return getProjects(portalName).getProjectsNameId();
-	}
-	
-	public static Set<String> getProjectIds(String portalName) {
-		return getProjects(portalName).getProjectIds();
-	}
+    public static Map<String, String> getProjectsNameId(String portalName) {
+        return getProjects(portalName).getProjectsNameId();
+    }
 
-	public static ProjectsService getProjectsService() {
-		
-		ProjectsService service = null;
-		
-		try {
-			MBeanServer server = MBeanServerLocator.locate();
+    public static Set<String> getProjectIds(String portalName) {
+        return getProjects(portalName).getProjectIds();
+    }
 
-	        service = (ProjectsService) MBeanProxyExt.create(
-        									ProjectsService.class,
-        									ProjectsService.PROJECTS_SERVICE,
-        									server);
-			
-		
-		} catch (MalformedObjectNameException e) {
-			log.warn("Unable to get ProjectsService", e);
-		}
-		
-		return service;
-	}
+    public static ProjectsService getProjectsService() {
+
+        ProjectsService service = null;
+
+        try {
+            MBeanServer server = MBeanServerLocator.locate();
+
+            service = (ProjectsService) MBeanProxyExt.create(
+                    ProjectsService.class,
+                    ProjectsService.PROJECTS_SERVICE,
+                    server);
+
+
+        } catch (MalformedObjectNameException e) {
+            log.warn("Unable to get ProjectsService", e);
+        }
+
+        return service;
+    }
+
+    /**
+     *
+     * @param projectId Id of the project to which freezone's the given path
+     * is relative.
+     * @param relPath Relative path of the resource.
+     * @return Absolute path to the given Shotoku resource in the given's
+     * project's freezone. If the path denotes a directory, default page
+     * is added to the path.
+     */
+    public static String createAbsoluteFreezonePath(String projectId, String relPath) {
+        String path = Constants.LABS_PORTAL + "/" + ProjectsHelper.MEMBERS_DIR + "/" +
+                projectId + "/" + ProjectsHelper.FREEZONE_DIR + "/" +
+                (relPath == null ? "" : relPath);
+
+        if (!path.contains(".")) {
+            if (!path.endsWith("/")) {
+                path += "/";
+            }
+
+            path += Constants.FREEZONE_DEFAULT_PAGE;
+        }
+
+        return path;
+    }
 }

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -3,6 +3,7 @@
 import org.jboss.forge.common.ejb3.ProjectPagesService;
 import org.jboss.forge.common.ejb3.LabsServices;
 import org.jboss.forge.common.Constants;
+import org.jboss.forge.common.ForgeHelper;
 import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 import org.jboss.forge.common.projects.portlets.ProjectsPortlet;
 import org.jboss.portal.core.model.portal.*;
@@ -61,32 +62,6 @@
     }
 
     /*
-     * Utility functions.
-     */
-
-    /**
-     * Creates a camel-case concatenation of the given words.
-     * Null words are ommited.
-     * @param words Words to concatenate.
-     * @return A camel-case concatenation of the given words.
-     */
-    private String createCamelCase(String... words) {
-        StringBuilder result = new StringBuilder("");
-        for (String word : words) {
-            if (word == null) { continue; }
-            if (word.length() == 1) {
-                result.append(word.toUpperCase());
-                continue;
-            }
-
-            result.append(word.substring(0, 1).toUpperCase()).append(
-                    word.substring(1).toLowerCase());
-        }
-
-        return result.toString();
-    }
-
-    /*
      * DEBUG
      */
 
@@ -267,7 +242,7 @@
         String portletId = portlet.getPortalId();
 
         // Constructing the instance id.
-        String instanceId = createCamelCase(portletName, projectId, pageName, "instance");
+        String instanceId = ForgeHelper.createCamelCase(portletName, projectId, pageName, "instance");
 
         // Checking if the instance already exists.
         Instance instance = pic.getDefinition(instanceId);
@@ -348,7 +323,7 @@
     }
 
     public String createWindowId(String portletName, String projectId, String pageName) {
-        return createCamelCase(portletName, projectId, pageName, "window");    
+        return ForgeHelper.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/PathParser.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -1,6 +1,8 @@
 package org.jboss.labs.mapper;
 
 /**
+ * A simple path parser, which enables to access tokens of a given
+ * string split around '/'.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public class PathParser {
@@ -50,22 +52,42 @@
         rest = (tokens.length > 1 ? tokens[1] : null);
     }
 
+    /**
+     *
+     * @return The current first token.
+     */
     public String getFirstToken() {
         return firstToken;
     }
 
+    /**
+     *
+     * @return The current rest of the path.
+     */
     public String getRest() {
         return rest;
     }
 
+    /**
+     *
+     * @return True iff there are more non-null tokens.
+     */
     public boolean hasMoreTokens() {
         return rest != null;
     }
 
+    /**
+     *
+     * @return True iff a non-null first token is present
+     */
     public boolean hasFirstToken() {
         return firstToken != null;
     }
 
+    /**
+     * Shifts the parser by one token, that is, forgets the first one
+     * and reads the next from the previous rest of the path.
+     */
     public void proceed() {
         if (hasMoreTokens()) {
             doSplit(rest);
@@ -74,6 +96,11 @@
         }
     }
 
+    /**
+     *
+     * @return The current full path, that is, the first token
+     * concatenated with '/' and the rest of the path
+     */
     public String getCurrent() {
         return lastRest;
     }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -1,23 +1,14 @@
 package org.jboss.labs.mapper.command;
 
 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;
-
 /**
+ * A base class for Labs command factories.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public abstract class AbstractLabsBaseCommandFactory extends AbstractJBossService
         implements LabsBaseCommandFactory {
-    protected final static String FREEZONE_PORTLET_NAME = "freezone";
-
     private PortalObjectContainer container;
 
     public PortalObjectContainer getContainer() {
@@ -26,37 +17,7 @@
 
     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.

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -1,17 +1,13 @@
 package org.jboss.labs.mapper.command;
 
-import org.jboss.labs.mapper.command.AbstractLabsBaseCommandFactory;
-import org.jboss.labs.mapper.command.LabsPortalObjectCommandFactory;
-import org.jboss.labs.mapper.command.LabsDelegatingCommandFactory;
-
 /**
+ * A base class for Labs delegate command factories.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public abstract class AbstractLabsDelegateCommandFactory extends AbstractLabsBaseCommandFactory
         implements LabsDelegateCommandFactory {
     private LabsDelegatingCommandFactory delegatingCF;
     private String path;
-    private LabsPortalObjectCommandFactory portalObjectCF;
 
     public LabsDelegatingCommandFactory getDelegatingCF() {
         return delegatingCF;
@@ -21,14 +17,6 @@
         this.delegatingCF = delegatingCF;
     }
 
-    public LabsPortalObjectCommandFactory getPortalObjectCF() {
-        return portalObjectCF;
-    }
-
-    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
-        this.portalObjectCF = portalObjectCF;
-    }
-
     public String getPath() {
         return path;
     }
@@ -38,8 +26,8 @@
     }
 
     /*
-    * Service lifecycle methods.
-    */
+     * Service lifecycle methods.
+     */
 
     protected void startService() throws Exception {
         getDelegatingCF().register(getPath(), this);

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -2,25 +2,22 @@
 
 import org.jboss.portal.core.controller.ControllerCommand;
 import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.command.LabsBaseCommandFactory;
 import org.jboss.labs.mapper.PathParser;
-import org.jboss.labs.mapper.command.LabsPortalObjectCommandFactory;
-import org.jboss.labs.mapper.command.LabsDelegatingCommandFactory;
 
 /**
+ * A base interface for factories, to which mapping requests can
+ * be delegated basing on the request path, by
+ * {@see LabsDelegatingCommandFactory}.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public interface LabsDelegateCommandFactory extends LabsBaseCommandFactory {
     public ControllerCommand doMapping(ServerInvocation invocation,
                                        String host, String contextPath,
-                                       PathParser parser, String projectId);
+                                       PathParser parser);
 
     public LabsDelegatingCommandFactory getDelegatingCF();
     public void setDelegatingCF(LabsDelegatingCommandFactory delegating);
 
-    public LabsPortalObjectCommandFactory getPortalObjectCF();
-    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF);
-
     public String getPath();
     public void setPath(String path);
 }

Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatePagesCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatePagesCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatePagesCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -1,16 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.command.AbstractLabsDelegateCommandFactory;
-import org.jboss.labs.mapper.PathParser;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsDelegatePagesCommandFactory extends AbstractLabsDelegateCommandFactory {
-    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
-                                       PathParser parser, String projectId) {
-        return null;
-    }
-}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -7,11 +7,21 @@
 import org.jboss.labs.mapper.command.LabsDelegateCommandFactory;
 
 /**
+ * A delegating command factory, which delegates mapping to registered
+ * factories based on the first token of the requested path.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public interface LabsDelegatingCommandFactory extends LabsBaseCommandFactory {
     public ControllerCommand doMapping(ServerInvocation invocation,
                                        String host, String contextPath,
-                                       PathParser parser, String projectId);
+                                       PathParser parser);
+
+    /**
+     * Registeres a factory so that requests with the given first token
+     * will be delegated to it.
+     * @param path First token of the request path that must be matched
+     * in order to delegate the mapping.
+     * @param factory Factory to which mapping should be delegated.
+     */
     public void register(String path, LabsDelegateCommandFactory factory);
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -1,58 +1,42 @@
 package org.jboss.labs.mapper.command;
 
 import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.core.model.portal.Page;
 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.PathParser;
 
 import java.util.Map;
 import java.util.HashMap;
 
 /**
+ * 
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public class LabsDelegatingCommandFactoryImpl extends AbstractLabsBaseCommandFactory
         implements LabsDelegatingCommandFactory {
-    private LabsPortalObjectCommandFactory portalObjectCF;
-
-    public LabsPortalObjectCommandFactory getPortalObjectCF() {
-        return portalObjectCF;
-    }
-
-    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
-        this.portalObjectCF = portalObjectCF;
-    }
-
     private Map<String, LabsDelegateCommandFactory> factories;
 
     public LabsDelegatingCommandFactoryImpl() {
         factories = new HashMap<String, LabsDelegateCommandFactory>();
     }
 
-    public ControllerCommand doMapping(ServerInvocation invocation, String host, String contextPath,
-                                       PathParser parser, String projectId) {
+    public ControllerCommand doMapping(ServerInvocation invocation, String host,
+                                       String contextPath, PathParser parser) {
         if (parser.hasFirstToken()) {
+            // Checking if there is any delegate factory registered for the
+            // given token.
             String firstToken = parser.getFirstToken();
             for (String path : factories.keySet()) {
                 if (firstToken.equals(path)) {
+                    // Found a match; skipping the matched token and proceeding
+                    // with the mapping.                    
                     parser.proceed();
                     return factories.get(path).doMapping(invocation, host, contextPath,
-                            parser, projectId);
+                            parser);
                 }
             }
         }
 
-        // No match -> showing the default page.
-        try {
-            Page page = (projectId == null ? getLabsPortal().getDefaultPage() : getLabsPortal().getPage(projectId));
-            return getPortalObjectCF().doMapping(invocation, parser, page,
-                    LabsServices.getProjectPagesService().createWindowId(FREEZONE_PORTLET_NAME,
-                            projectId, null));
-        } catch (ServiceRetrievalException e) {
-            return null;
-        }
+        return null;
     }
 
     public synchronized void register(String path, LabsDelegateCommandFactory factory) {

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -2,22 +2,34 @@
 
 import org.jboss.portal.core.controller.command.mapper.CommandFactory;
 import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.*;
 import org.jboss.portal.server.ServerInvocation;
-import org.jboss.forge.common.projects.ProjectsHelper;
-import org.jboss.forge.common.projects.Projects;
+import org.jboss.labs.mapper.PathParser;
 import org.jboss.forge.common.Constants;
-import org.jboss.labs.mapper.PathParser;
 
 /**
+ * Main Labs command factory. Finds the most specific portal object
+ * the request reffers to; then tries to delegate the mapping to
+ * some registered delegate factory and if this is unsuccessfull,
+ * default portal object mapping is invoked.
  * @author Adam Warski (adamw at aster.pl)
  */
 public class LabsMainCommandFactory extends AbstractLabsBaseCommandFactory implements CommandFactory {
     private LabsDelegatingCommandFactory delegatingCF;
+    private LabsPortalObjectCommandFactory portalObjectCF;
 
     /*
      * Getters and setters.
      */
 
+    public LabsPortalObjectCommandFactory getPortalObjectCF() {
+        return portalObjectCF;
+    }
+
+    public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
+        this.portalObjectCF = portalObjectCF;
+    }
+
     public LabsDelegatingCommandFactory getDelegatingCF() {
         return delegatingCF;
     }
@@ -26,25 +38,75 @@
         this.delegatingCF = delegatingCF;
     }
 
+    /**
+     * Portal id of the labs portal.
+     */
+    private PortalObjectId defaultPortalPath = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
+            PortalObjectId.CANONICAL_FORMAT);
+
+    /**
+     *
+     * @return A portal object representing the Labs portal.
+     */
+    private Portal getLabsPortal() {
+        return (Portal) getContainer().getObject(defaultPortalPath);
+    }
+
+    /**
+     *
+     * @param parser Parser from which to read the data.
+     * @return The most specific portal object, corresponding to the data from
+     * the parser.
+     */
+    private PortalObject getPortalObject(PathParser parser) {
+        PortalObject o = getLabsPortal();
+
+        while (true) {
+            if (!parser.hasFirstToken()) {
+                return o;
+            }
+            
+            PortalObject child = o.getChild(parser.getFirstToken());
+
+            if (child == null) {
+                return o;
+            }
+
+            o = child;
+            parser.proceed();
+        }
+    }
+
     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()) {
-            return null;
+        // Getting the portal object referenced by the path.
+        PortalObject target = getPortalObject(parser);
+
+        // In case the portal object is a portal, the "real" target is this
+        // portal's default page.
+        if (target instanceof Portal) {
+            target = ((Portal) target).getDefaultPage();
         }
 
-        Projects projects = ProjectsHelper.getProjects(Constants.LABS_PORTAL);
-        String projectId = parser.getFirstToken();
+        if (target instanceof Page) {
+            // First trying to delegate the mapping.
+            ControllerCommand cmd = delegatingCF.doMapping(invocation, host, contextPath, parser);
 
-        if (projects.projectExists(projectId)) {
-            System.out.println("RECOGNIZED A PROJECT: " + projectId);
-            parser.proceed();
+            if (cmd == null) {
+                // If this is unsuccessfull, doing the default page mappnig.
+                return getPortalObjectCF().doMapping(invocation, parser, (Page) target);
+            } else {
+                return cmd;
+            }
+        } else if (target instanceof Window) {
+            // If the path referenced a window, then the mapping cannot be
+            // delegated; doing the default window mapping.
+            return getPortalObjectCF().doMapping(invocation, parser, (Window) target);
         } else {
-            projectId = null;
+            // Unknown portal object type.
+            return null;
         }
-
-        return delegatingCF.doMapping(invocation, host, contextPath, parser, projectId);
     }
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -2,13 +2,19 @@
 
 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.server.ServerInvocation;
 import org.jboss.labs.mapper.PathParser;
 
 /**
+ * A command factory which maps a page/ window request to a freezone
+ * request, or a portal action/ render request.
  * @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);
+                                       Page page);
+
+    public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+                                       Window window);
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -4,44 +4,212 @@
 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.core.model.portal.command.InvokePortletWindowRenderCommand;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowActionCommand;
+import org.jboss.portal.core.model.portal.command.ImportPageToDashboardCommand;
 import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.portlet.PortletParameters;
+import org.jboss.portal.portlet.PortletParametersStateString;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.portal.theme.navigation.WindowNavigationalState;
+import org.jboss.portal.WindowState;
+import org.jboss.portal.Mode;
 import org.jboss.forge.common.Constants;
-import org.jboss.labs.mapper.command.AbstractLabsBaseCommandFactory;
+import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.projects.ProjectsHelper;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
+import org.jboss.forge.common.ejb3.LabsServices;
 import org.jboss.labs.mapper.PathParser;
+import org.jboss.shotoku.aop.Inject;
+import org.jboss.shotoku.ContentManager;
+import org.jboss.shotoku.exceptions.ResourceDoesNotExist;
 
+import java.io.IOException;
+import java.util.Map;
+import java.util.HashMap;
+
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public class LabsPortalObjectCommandFactoryImpl extends AbstractLabsBaseCommandFactory
         implements LabsPortalObjectCommandFactory {
+    @Inject
+    private ContentManager cm;
+
+    private WindowNavigationalState getWindowNavState(ServerInvocation invocation, Window window) {
+        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 windowNavState;
+    }
+
+    private ControllerCommand invokeRenderCommand(ServerInvocation invocation, Window window,
+                                                  StateString params) {
+        WindowNavigationalState windowNavState = getWindowNavState(invocation, window);
+
+        return new InvokePortletWindowRenderCommand(window.getId(), windowNavState.getMode(),
+                windowNavState.getWindowState(), params);
+    }
+
     public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
-                                       Page page, String freezoneWindowId) {
+                                       Window window) {
+        return doMapping(invocation, window, null);
+    }
+
+    private ControllerCommand doMapping(ServerInvocation invocation, Window window,
+                                        Map<String, String> additionalParameters) {
+        if (window == null) {
+            throw new IllegalArgumentException("Window cannot be null.");
+        }
+
+        // Decoding the window state.
+        PortletRequestDecoder decoder = new PortletRequestDecoder();
+        decoder.decode(invocation.getServerContext().getQueryParameterMap(),
+                invocation.getServerContext().getBodyParameterMap());
+
+        // Get the window navigational state
+        WindowNavigationalState windowNavState = getWindowNavState(invocation, window);
+
+        //
+        WindowState windowState = decoder.getWindowState();
+        if (windowState == null) {
+            windowState = windowNavState.getWindowState();
+        }
+
+        //
+        Mode mode = decoder.getMode();
+        if (mode == null) {
+            mode = windowNavState.getMode();
+        }
+
+        // If any additional navigational parameters where passed and if we
+        // can add them, adding them.
+        StateString navState = decoder.getNavigationalstate();
+        if ((additionalParameters != null) && (navState instanceof PortletParametersStateString)) {
+            PortletParametersStateString ppss = (PortletParametersStateString) navState;
+
+            for (String key : additionalParameters.keySet()) {
+                ppss.setValue(key, additionalParameters.get(key));
+            }
+        }
+
+        // Returning an appropriate command.
+        switch (decoder.getType())
+        {
+            case PortletRequestDecoder.NAV_TYPE:
+                return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState);
+            case PortletRequestDecoder.ACTION_TYPE:
+                return new InvokePortletWindowActionCommand(window.getId(), mode, windowState,
+                        navState, decoder.getInteractionState(),
+                        decoder.getForm());
+            case PortletRequestDecoder.RENDER_TYPE:
+                return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState,
+                        navState);
+        }
+
+        return null;
+    }
+
+    protected final static String FREEZONE_PORTLET_NAME = "freezone";
+
+    private String getFreezoneWindowId(String projectId, Page page) {
+        try {
+            if (projectId == null) {
+                return LabsServices.getProjectPagesService().createWindowId(
+                        FREEZONE_PORTLET_NAME, null, page.getName());
+            } else {
+                return LabsServices.getProjectPagesService().createWindowId(
+                        FREEZONE_PORTLET_NAME, projectId, null);
+            }
+        } catch (ServiceRetrievalException e) {
+            return null;
+        }
+    }
+
+    private void sendRedirect(ServerInvocation invocation, String where) {
+        try {
+            invocation.getServerContext().getClientResponse().sendRedirect(where);
+        } catch (IOException e) {
+            // Oh well ...
+        }
+    }
+
+    public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+                                       Page page) {
         if (page == null) {
+            throw new IllegalArgumentException("Page cannot be null.");
+        }
+
+        // If a page is requested, the URL must end with a /, in order for
+        // relative paths to work.
+        if ((!parser.hasFirstToken()) && (!parser.getFullPath().endsWith("/"))) {
+            sendRedirect(invocation, parser.getFullPath()+"/");
             return null;
         }
 
-        if (!parser.hasFirstToken()) {
-            if (!parser.getFullPath().endsWith("/")) {
-                System.out.println("REDIRECTING");
-                sendRedirect(invocation, parser.getFullPath()+"/");
-                return null;
+        // Checking if there is a freezone on the page.
+        String projectId = page.getDeclaredProperty(Constants.PORTAL_OBJECT_LABS_MARKER);
+
+        Window freezone = null;
+        String freezoneId = getFreezoneWindowId(projectId, page);
+
+        if (freezoneId != null) {
+            freezone = page.getWindow(freezoneId);
+        }
+
+        if (freezone != null) {
+            // Found a freezone window; invoking a render command on it.
+            String path = parser.getCurrent();
+
+            // Checking the mime type of the requested resource.
+            try {
+                String absPath = ProjectsHelper.createAbsoluteFreezonePath(projectId,
+                        parser.getCurrent());
+                if (!Constants.PAGES_MIME_TYPE.equals(cm.getNode(absPath).getMimeType())) {
+                    // A binary request; redirecting to file-access.
+                    sendRedirect(invocation, ForgeHelper.createFileAccessPath(absPath));
+                    return null;
+                }
+            } catch (ResourceDoesNotExist resourceDoesNotExist) {
+                // The page does not exist; proceeding.
             }
 
-            System.out.println("SHOWING NORMAL PAGE");
-            return new RenderPageCommand(page.getId());
-        } else {
-            Window freezone = page.getWindow(freezoneWindowId);
+            // Setting the path parameter for the freezone to know what page
+            // to display. It has to be not-null, so "" is used as a
+            // null-marker.
+            if (path == null) { path = ""; }
 
-            if (freezone == null) {
-                return null;
+            // Checking if this is not an action request.
+            if (invocation.getServerContext().getQueryParameterMap().get(
+                    PortletRequestDecoder.META_PARAMETER) != null) {
+                // If so, invoking default portal actions on a window action request,
+                // with a default path parameter.
+                Map<String, String> additionalParameters = new HashMap<String, String>();
+                additionalParameters.put(Constants.FREEZONE_PATH_PARAM, path);
+
+                return doMapping(invocation, freezone, additionalParameters);
             }
 
-            System.out.println("INVOKING FREEZONE: " + parser.getCurrent());
-            PortletParameters params = new PortletParameters();
-            params.put(Constants.FREEZONE_PATH_PARAM, new String[] { parser.getCurrent() });
+            // Otherwise, invoking a render command on the freezone window.
+            PortletParametersStateString params = new PortletParametersStateString();
+            params.setValue(Constants.FREEZONE_PATH_PARAM, path);
+            return invokeRenderCommand(invocation, freezone, params);
+        }
 
-            return invokeActionCommand(invocation, freezone, params);
+        // Invoking a normal page render command.
+        String action = invocation.getServerContext().getQueryParameterMap().getValue("action");
+
+        //
+        if ("import".equals(action)) {
+            return new ImportPageToDashboardCommand(page.getId());
+        } else {
+            return new RenderPageCommand(page.getId());
         }
     }
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -3,32 +3,61 @@
 import org.jboss.portal.core.controller.command.mapper.URLFactoryDelegate;
 import org.jboss.portal.core.controller.ControllerCommand;
 import org.jboss.portal.core.model.portal.command.*;
-import org.jboss.portal.core.model.portal.PortalObject;
-import org.jboss.portal.core.model.portal.Window;
-import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.*;
 import org.jboss.portal.server.ServerURL;
 import org.jboss.portal.server.ServerInvocation;
 import org.jboss.portal.server.AbstractServerURL;
 import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.PortletParametersStateString;
 import org.jboss.portal.portlet.impl.PortletRequestEncoder;
-import org.jboss.portal.Mode;
-import org.jboss.portal.WindowState;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
 import org.jboss.forge.common.Constants;
 
+import java.util.Iterator;
+
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public class LabsMainUrlFactory extends URLFactoryDelegate {
-    private static final String FREEZONE_WINDOW_COMPONENT = "Freezone";
+    /*
+     * Getters and setters.
+     */
 
+    private PortalObjectContainer container;
+
+    public PortalObjectContainer getContainer() {
+        return container;
+    }
+
+    public void setContainer(PortalObjectContainer container) {
+        this.container = container;
+    }
+
     private void addTokenToPath(StringBuffer sb, String toAdd) {
         sb.append('/').append(toAdd);
     }
 
-    private void addToPath(StringBuffer sb, PortalObject po) {
-        while ((po instanceof Window) || (po instanceof Page)) {
-            addTokenToPath(sb, po.getName());
-            po = po.getParent();
+    private static final String FREEZONE_WINDOW_COMPONENT = "Freezone";
+
+    /**
+     * To the given buffer, adds a portal-id-path to the given portal object id,
+     * without the portal name (that is, the first part of the id).
+     * @param sb Buffer to which to add the path.
+     * @param id Id from which to read the information.
+     * @param addLast Should the last token be added to the buffer.
+     */
+    private void addToPath(StringBuffer sb, PortalObjectId id, boolean addLast) {
+        Iterator it = id.names();
+        // Skipping the portal name.
+        it.next();
+        for (; it.hasNext();) {
+            String current = (String) it.next();
+
+            if ((addLast || it.hasNext())) {
+                addTokenToPath(sb, current);
+            } else {
+                break;
+            }
         }
     }
 
@@ -45,73 +74,69 @@
             throw new IllegalArgumentException("No null command accepted");
         }
 
-        System.out.println("        LABS URLS");
-
         if (command instanceof PortalObjectCommand) {
             StringBuffer sb = new StringBuffer();
             PortalObjectCommand poc = (PortalObjectCommand) command;
 
-            if (poc.getTarget() == null) {
+            if (poc instanceof RenderPageCommand) {
+                // A simple render page command - only adding the portal-id path.
+                addToPath(sb, poc.getTargetId(), true);
+
                 return convertToURL(sb);
-            }
+            } else
+            if (poc instanceof InvokeWindowCommand) {
+                InvokeWindowCommand wndCmd = (InvokeWindowCommand) poc;
+                InvokePortletWindowActionCommand actionCmd = null;
+                InvokePortletWindowRenderCommand renderCmd = null;
+                boolean freezone = false;
 
-            String projectId = poc.getTarget().getDeclaredProperty(
-                    Constants.PORTAL_OBJECT_LABS_MARKER);
+                StateString navigationalState = null;
 
-            if (projectId != null) {
-                System.out.println("        ADDING PROJECT");
-                addTokenToPath(sb, projectId);
-            }
+                if (poc instanceof InvokePortletWindowActionCommand) {
+                    actionCmd = (InvokePortletWindowActionCommand) poc;
+                    navigationalState = actionCmd.getNavigationalState();
+                } else if (poc instanceof InvokePortletWindowRenderCommand) {
+                    renderCmd = (InvokePortletWindowRenderCommand) poc;
+                    navigationalState = renderCmd.getNavigationalState();
+                }
 
-            if (poc instanceof RenderPageCommand) {
-                System.out.println("        RENDER PAGE");
-                addToPath(sb, poc.getTarget());
+                if (wndCmd.getTargetId().toString().contains(FREEZONE_WINDOW_COMPONENT)) {
+                    // A freezone window request; adding the resource path to
+                    // the buffer.
+                    freezone = true;
+                    String path = null;
+                    if (navigationalState instanceof PortletParametersStateString) {
+                        PortletParametersStateString ppss =
+                                (PortletParametersStateString) navigationalState;
+                        path = ppss.getParameters().getValue(Constants.FREEZONE_PATH_PARAM);
+                        ppss.getParameters().remove(Constants.FREEZONE_PATH_PARAM);
+                    }
 
-                return convertToURL(sb);
-            } else if (poc instanceof InvokePortletWindowActionCommand) {
-                System.out.println("        ACTION");
-                InvokePortletWindowActionCommand actionCmd =
-                        (InvokePortletWindowActionCommand) poc;
-
-                if (actionCmd.getWindow().getName().contains(FREEZONE_WINDOW_COMPONENT)) {
-                    System.out.println("        FREEZONE");
-                    String path =
-                            actionCmd.getFormParameters().getValue(Constants.FREEZONE_PATH_PARAM);
-                    if (path != null) {
-                        addTokenToPath(sb, path);
-                        actionCmd.getFormParameters().remove(Constants.FREEZONE_PATH_PARAM);
-                    } else {
-                        addToPath(sb, poc.getTarget().getParent());    
-                    }
+                    addToPath(sb, poc.getTargetId(), false);
+                    if (path != null) { addTokenToPath(sb, path); }
                 } else {
-                    addToPath(sb, poc.getTarget());
+                    // A non-freezone window request; constructing the URL in a
+                    // canonical (almost standard portal) way.
+                    addToPath(sb, poc.getTargetId(), true);
                 }
 
-                Mode mode = actionCmd.getMode();
-                WindowState windowState = actionCmd.getWindowState();
-
                 ServerURL url = convertToURL(sb);
 
-                StateString interactionState = actionCmd.getInteractionState();
-                StateString navigationalState = actionCmd.getNavigationalState();
-                PortletRequestEncoder.encodeAction(url, navigationalState, interactionState,
-                        mode, windowState);
-            } else if (poc instanceof InvokePortletWindowRenderCommand) {
-                System.out.println("        RENDER");
-                InvokePortletWindowRenderCommand renderCmd =
-                        (InvokePortletWindowRenderCommand) poc;
+                if (actionCmd != null) {
+                    PortletRequestEncoder.encodeAction(url, actionCmd.getNavigationalState(),
+                            actionCmd.getInteractionState(), actionCmd.getMode(),
+                            actionCmd.getWindowState());
+                } else if (renderCmd != null) {
+                    PortletRequestEncoder.encodeRender(url, navigationalState,
+                            renderCmd.getMode(), renderCmd.getWindowState());
 
-                addToPath(sb, poc.getTarget());
+                    if (freezone) {
+                        url.getParameterMap().remove(PortletRequestDecoder.META_PARAMETER);
+                    }
+                }
 
-                Mode mode = renderCmd.getMode();
-                WindowState windowState = renderCmd.getWindowState();
-
-                ServerURL url = convertToURL(sb);
-
-                StateString navigationalState = renderCmd.getNavigationalState();
-                PortletRequestEncoder.encodeRender(url, navigationalState, mode, windowState);
+                return url;
             } else if (poc instanceof ImportPageToDashboardCommand) {
-                System.out.println("        DASHBOARD");
                 ServerURL url = convertToURL(sb);
                 url.setParameterValue("action", "import");
 

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/Freezone.java	2007-02-19 12:21:19 UTC (rev 9591)
@@ -69,7 +69,11 @@
         // 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
+        if ("".equals(requestedRelPath)) {
+            requestedRelPath = null;
+        }
+
+        // It is used if an instance has defined preference in instance
 		// descriptor.
 		Object requestedPathFromPref = request.getPreferences().getValue("page", null);
 
@@ -77,12 +81,7 @@
 			requestedRelPath = requestedPathFromPref.toString();
 		}
 
-		if (requestedRelPath == null) {
-            requestedRelPath = Constants.FREEZONE_DEFAULT_PAGE;
-        }
-
-        return Constants.LABS_PORTAL + "/" + ProjectsHelper.MEMBERS_DIR + "/" +
-                projectId + "/" + ProjectsHelper.FREEZONE_DIR + "/" + requestedRelPath;
+        return ProjectsHelper.createAbsoluteFreezonePath(projectId, requestedRelPath);
     }
 
     public void labsDoView(JBossRenderRequest request,
@@ -92,7 +91,6 @@
 		 * checked in the url mapper).
 		 */
 		String projectId = ProjectsHelper.getSelectedProjectId(request);
-        System.out.println("PROJECT ID: " + projectId);
 
 		if ((projectId != null) && (!"default".equals(projectId))
 				&& (!ProjectsHelper.getProjects(Constants.LABS_PORTAL)

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-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet-instances.xml	2007-02-19 12:21:19 UTC (rev 9591)
@@ -7,8 +7,12 @@
             <portlet-ref>FreezonePortlet</portlet-ref>
             <preferences>
                 <preference>
+                    <name>projectId</name>
+                    <value>default</value>
+                </preference>
+                <preference>
                     <name>page</name>
-                    <value>default/members/default/freezone/welcome.html</value>
+                    <value>welcome.html</value>
                 </preference>
             </preferences>
         </instance>
@@ -20,8 +24,12 @@
             <portlet-ref>FreezonePortlet</portlet-ref>
             <preferences>
                 <preference>
+                    <name>projectId</name>
+                    <value>default</value>
+                </preference>
+                <preference>
                     <name>page</name>
-                    <value>default/members/default/freezone/rightPanelContent.html</value>
+                    <value>rightPanelContent.html</value>
                 </preference>
             </preferences>
         </instance>
@@ -33,8 +41,12 @@
             <portlet-ref>FreezonePortlet</portlet-ref>
             <preferences>
                 <preference>
+                    <name>projectId</name>
+                    <value>default</value>
+                </preference>
+                <preference>
                     <name>page</name>
-                    <value>default/members/default/freezone/mostdownloaded.html</value>
+                    <value>mostdownloaded.html</value>
                 </preference>
             </preferences>
         </instance>

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet.xml	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/portlet.xml	2007-02-19 12:21:19 UTC (rev 9591)
@@ -2,28 +2,6 @@
 <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
              version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
-    <!--
-        <portlet>
-            <description>Forge project info portlet</description>
-                <portlet-name>InfoPortlet</portlet-name>
-                <display-name>Project information</display-name>
-                <portlet-class>org.jboss.forge.projects.info.Info</portlet-class>
-                <supports>
-            <mime-type>text/html</mime-type>
-            <portlet-mode>VIEW</portlet-mode>
-            </supports>
-            <portlet-info>
-            <title>Project information</title>
-            </portlet-info>
-        <portlet-preferences>
-            <preference>
-                <name>projectId</name>
-                <value>default</value>
-            </preference>
-        </portlet-preferences>
-        </portlet>
-    -->
-
     <portlet>
         <description>Forge project info portlet</description>
         <portlet-name>InfoPortlet</portlet-name>

Modified: labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml	2007-02-19 11:51:50 UTC (rev 9590)
+++ labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml	2007-02-19 12:21:19 UTC (rev 9591)
@@ -83,7 +83,7 @@
 				</window>
 
                 <window>
-					<window-name>FreezoneDefaultPortletWindow</window-name>
+					<window-name>FreezoneDefaultWindow</window-name>
 					<instance-ref>FreezoneDefaultPageInstance</instance-ref>
 					<region>left</region>
 					<height>0</height>




More information about the jboss-svn-commits mailing list