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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Feb 24 10:27:39 EST 2007


Author: adamw
Date: 2007-02-24 10:27:39 -0500 (Sat, 24 Feb 2007)
New Revision: 9734

Removed:
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java
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/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/portlets/ObjectFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlet.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortletPreference.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlets.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/package-info.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/web/WEB-INF/projectsPortlets.xsd
   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/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/command/WikiCommandFactory.java
   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/WikiUrlFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet3.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoBean.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoTools.java
   labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/web.xml
Log:
http://jira.jboss.com/jira/browse/JBLAB-818

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -564,6 +564,7 @@
         StringBuilder result = new StringBuilder("");
         for (String word : words) {
             if (word == null) { continue; }
+            if (word.length() == 0) { continue; }
             if (word.length() == 1) {
                 result.append(word.toUpperCase());
                 continue;

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/LabsServices.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -56,9 +56,13 @@
         return (PropertyService) getStatelessBean(PropertyService.PROPERTY_SERVICE);
     }
 
-    public static ProjectsService getProjectsService() throws MalformedObjectNameException {
-        return (ProjectsService) getService(ProjectsService.class,
-                ProjectsService.PROJECTS_SERVICE);
+    public static ProjectsService getProjectsService() throws ServiceRetrievalException {
+        try {
+            return (ProjectsService) getService(ProjectsService.class,
+                    ProjectsService.PROJECTS_SERVICE);
+        } catch (MalformedObjectNameException e) {
+            throw new ServiceRetrievalException(e);
+        }
     }
     
     public static ProjectsServiceRW getProjectsServiceRW() throws MalformedObjectNameException {

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -1,27 +1,26 @@
 package org.jboss.forge.common.ejb3;
 
-import java.util.Set;
+import org.jboss.forge.common.projects.project.Project;
 
+import java.util.Collection;
+
 /**
+ * A service which automatically creates pages with portlets for projects,
+ * as specified in a descriptor.
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
 public interface ProjectPagesService {
     public static final String PROJECT_PAGES_SERVICE = "ProjectPagesServiceBean/local";
 
     /**
-     * Updates pages and portlets for the given project.
-     * @param projectId Project for which to update the pages.
+     * Updates pages and portlets for all projects. All portlet instances and
+     * protal objects that are handeled by Labs, but are not used by any
+     * of the given projects, will be removed. 
+     * @param projects Projects, for which to update the pages.
      */
-    public void updatePages(String projectId);
+    public void updatePages(Collection<Project> projects);
 
     /**
-     * Removes pages belonging to projects, which are not in the given set.
-     * @param projectIds Set of project ids, for which pages shouldn't be
-     * deleted.
-     */
-    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.

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -34,7 +34,6 @@
 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;
 import org.jboss.forge.common.projects.elements.BindingsHandlerIterSingleKey;
 import org.jboss.forge.common.projects.elements.ElementDescriptor;
@@ -167,12 +166,7 @@
         }
 
         try {
-            ProjectPagesService pps = LabsServices.getProjectPagesService();
-            for (String projectId : getProjectIds()) {
-                pps.updatePages(projectId);
-            }
-
-            pps.removeExcessPages(getProjectIds());
+            LabsServices.getProjectPagesService().updatePages(getNewProjects().values());
         } catch (ServiceRetrievalException e) {
             log.error("Error getting labs project pages service.", e);
         }
@@ -379,8 +373,7 @@
               projectWithErrorsDescriptors.add(projectId + "/"
                       + ProjectsHelper.PROJECT_DESC);
 
-              log.warn("Project " + projectId + " parse error: " + e);
-              e.printStackTrace();
+              log.warn("Project " + projectId + " parse error.", e);
           }    
 	}
 	
@@ -408,8 +401,7 @@
            projectWithErrorsDescriptors.add(projectId + "/"
                    + ProjectsHelper.PROJECT_DESC);
 
-           log.warn("Project " + projectId + " (RW mode) parse error: " + e);
-           e.printStackTrace();
+           log.warn("Project " + projectId + " (RW mode) parse error.", e);
        }    
 	}
 

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ObjectFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ObjectFactory.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ObjectFactory.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.2-b01-fcs 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2007.02.15 at 11:54:09 PM CET 
+// Generated on: 2007.02.24 at 01:04:17 AM CET 
 //
 
 
@@ -37,6 +37,14 @@
     }
 
     /**
+     * Create an instance of {@link ProjectsPortlet }
+     * 
+     */
+    public ProjectsPortlet createProjectsPortlet() {
+        return new ProjectsPortlet();
+    }
+
+    /**
      * Create an instance of {@link ProjectsPortlets }
      * 
      */
@@ -52,12 +60,4 @@
         return new ProjectsPortletPreference();
     }
 
-    /**
-     * Create an instance of {@link ProjectsPortlet }
-     * 
-     */
-    public ProjectsPortlet createProjectsPortlet() {
-        return new ProjectsPortlet();
-    }
-
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlet.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlet.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlet.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.2-b01-fcs 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2007.02.15 at 11:54:09 PM CET 
+// Generated on: 2007.02.24 at 01:04:17 AM CET 
 //
 
 

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortletPreference.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortletPreference.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortletPreference.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.2-b01-fcs 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2007.02.15 at 11:54:09 PM CET 
+// Generated on: 2007.02.24 at 01:04:17 AM CET 
 //
 
 
@@ -30,7 +30,6 @@
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "preference", propOrder = {
     "name",
-    "required",
     "_default",
     "values"
 })
@@ -41,8 +40,6 @@
     private final static long serialVersionUID = 1L;
     @XmlElement(required = true)
     protected String name;
-    @XmlElement(defaultValue = "false")
-    protected Boolean required;
     @XmlElement(name = "default")
     protected String _default;
     @XmlElement(name = "value")
@@ -73,30 +70,6 @@
     }
 
     /**
-     * Gets the value of the required property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link Boolean }
-     *     
-     */
-    public Boolean isRequired() {
-        return required;
-    }
-
-    /**
-     * Sets the value of the required property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link Boolean }
-     *     
-     */
-    public void setRequired(Boolean value) {
-        this.required = value;
-    }
-
-    /**
      * Gets the value of the default property.
      * 
      * @return

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlets.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlets.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/ProjectsPortlets.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.2-b01-fcs 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2007.02.15 at 11:54:09 PM CET 
+// Generated on: 2007.02.24 at 01:04:17 AM CET 
 //
 
 

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/package-info.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/package-info.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/portlets/package-info.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.1.2-b01-fcs 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2007.02.15 at 11:54:09 PM CET 
+// Generated on: 2007.02.24 at 01:04:17 AM CET 
 //
 
 @javax.xml.bind.annotation.XmlSchema(namespace = "http://jboss.org", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/web/WEB-INF/projectsPortlets.xsd
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/web/WEB-INF/projectsPortlets.xsd	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/web/WEB-INF/projectsPortlets.xsd	2007-02-24 15:27:39 UTC (rev 9734)
@@ -100,7 +100,6 @@
         </xs:annotation>
         <xs:sequence>
             <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
-            <xs:element name="required" type="xs:boolean" default="false" minOccurs="0" maxOccurs="1" />
             <xs:element name="default" type="xs:string" minOccurs="0" maxOccurs="1" />
             <xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="unbounded">
                 <xs:annotation>

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -6,10 +6,14 @@
 import org.jboss.forge.common.ForgeHelper;
 import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 import org.jboss.forge.common.projects.portlets.ProjectsPortlet;
+import org.jboss.forge.common.projects.project.Project;
+import org.jboss.forge.common.projects.project.Pages;
+import org.jboss.forge.common.projects.project.Preference;
 import org.jboss.portal.core.model.portal.*;
 import org.jboss.portal.core.model.instance.InstanceContainer;
 import org.jboss.portal.core.model.instance.DuplicateInstanceException;
 import org.jboss.portal.core.model.instance.Instance;
+import org.jboss.portal.core.model.instance.NoSuchInstanceException;
 import org.jboss.portal.core.model.content.ContentType;
 import org.jboss.portal.security.spi.provider.DomainConfigurator;
 import org.jboss.portal.security.RoleSecurityBinding;
@@ -21,13 +25,18 @@
 import org.jboss.portal.common.value.StringValue;
 import org.jboss.portal.theme.ThemeConstants;
 import org.jboss.annotation.ejb.Depends;
+import org.jboss.shotoku.tools.Tools;
+import org.apache.log4j.Logger;
 
 import javax.ejb.Stateless;
 import javax.ejb.TransactionAttribute;
 import javax.ejb.TransactionAttributeType;
 import javax.ejb.Local;
+import javax.security.jacc.PolicyContext;
 import java.util.Set;
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.Collection;
 
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
@@ -36,6 +45,8 @@
 @Local(ProjectPagesService.class)
 @TransactionAttribute(TransactionAttributeType.REQUIRED)
 public class ProjectPagesServiceBean implements ProjectPagesService {
+    private final static Logger log = Logger.getLogger(ProjectPagesService.class);
+
     @Depends("portal:container=PortalObject")
     private PortalObjectContainer poc;
 
@@ -83,7 +94,7 @@
             Instance instDef = (Instance) o;
             try {
                 result += (instDef.getId() + " | " + instDef.getPortlet().getContext().getId()) +
-                         "\n<br />";
+                        "\n<br />";
             } catch (PortletInvokerException e) {
                 e.printStackTrace();
             }
@@ -113,7 +124,7 @@
         result += printInstanceDefinitions();
         result += "<br /><hr /><br />";
         result += printPortlets();
-        
+
         return result;
     }
 
@@ -123,13 +134,14 @@
      * ****************************************
      */
 
+    private static final PortalObjectId LABS_PORTAL_ID = PortalObjectId.parse("/" +
+            Constants.LABS_PORTAL, PortalObjectId.CANONICAL_FORMAT);
+
     /**
      * @return Labs portal.
      */
     private Portal getLabsPortal() {
-        PortalObjectId id = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
-                PortalObjectId.CANONICAL_FORMAT);
-        return (Portal) poc.getObject(id);
+        return (Portal) poc.getObject(LABS_PORTAL_ID);
     }
 
     /**
@@ -168,6 +180,37 @@
     }
 
     /**
+     * Checks if the given instance is handeled by Labs.
+     * @param po Portal object to check.
+     * @return True if the given portal object is handeled by Labs.
+     */
+    private boolean isLabsObject(PortalObject po) {
+        return po.getDeclaredProperty(Constants.PORTAL_OBJECT_LABS_MARKER) != null;
+    }
+
+    /**
+     * Marks the given instance as belonging to Labs-handeled objects.
+     * @param instance Instance to mark.
+     * @param projectId Project id, to which this instance belongs.
+     * @throws PortletInvokerException In case of a portal exception.
+     */
+    private void markAsLabsObject(Instance instance, String projectId)
+            throws PortletInvokerException {
+        setInstancePreference(instance, Constants.PORTAL_OBJECT_LABS_MARKER, projectId);
+    }
+
+    /**
+     * Checks if the given instance is handeled by Labs.
+     * @param instance Instance to check.
+     * @throws PortletInvokerException In case of a portal exception.
+     * @return True if the given instance is handeled by Labs.
+     */
+    private boolean isLabsObject(Instance instance)
+            throws PortletInvokerException {
+        return instance.getProperties().getProperty(Constants.PORTAL_OBJECT_LABS_MARKER) != null;
+    }
+
+    /**
      * Set a preference in the given instance.
      * @param instance Instance in which to set the preference.
      * @param name Name on the preference.
@@ -181,36 +224,72 @@
     }
 
     /**
-     * Marks the given instance as belonging to Labs-handeled objects.
-     * @param instance Instance to mark.
-     * @param projectId Project id, to which this instance belongs.
+     * Removes all portlet instances that are handeled by Labs, whose ids are not
+     * in the given set.
+     * @param portletIds Ids of portlet instances, which should be kept.
      * @throws PortletInvokerException In case of a portal exception.
      */
-    private void markAsLabsObject(Instance instance, String projectId)
-            throws PortletInvokerException {
-        setInstancePreference(instance, Constants.PORTAL_OBJECT_LABS_MARKER, projectId);
+    private void cleanupPortlets(Set<String> portletIds) throws PortletInvokerException {
+        //noinspection unchecked
+        Set<Instance> instances = new HashSet<Instance>(pic.getDefinitions());
+        for (Instance instance : instances) {
+            if ((isLabsObject(instance)) && (!portletIds.contains(instance.getId()))) {
+                try {
+                    pic.destroyDefinition(instance.getId());
+                } catch (NoSuchInstanceException e) {
+                    // Even better, no work to do.
+                }
+            }
+        }
     }
 
     /**
-     * Gets a page, with the given name, for the gien project. If such a page
-     * does not yet exists, it is created, marked as belonging to this project
-     * and necessary security bindings are created. 
+     * Removes all portal objects that are handeled by Labs, whose ids are not
+     * in the given set.
+     * @param portalObjIds Ids of portal objects, which should be kept.
+     * @param parent Current parent, whose children will be recursively checked
+     * (when scanning the portal object tree).
+     */
+    private void cleanupPortalObjects(Set<PortalObjectId> portalObjIds, PortalObject parent) {
+        //noinspection unchecked
+        for (PortalObject child : (Collection<PortalObject>) parent.getChildren()) {
+            if ((isLabsObject(child) && (!portalObjIds.contains(child.getId())))) {
+                try {
+                    parent.destroyChild(child.getName());
+                } catch (NoSuchPortalObjectException e) {
+                    // Even better, no work to do.
+                }
+            } else {
+                cleanupPortalObjects(portalObjIds, child);
+            }
+        }
+    }
+
+    /**
+     * Gets a page, with the given name, for the given project, which i s a
+     * parent of the given portal object. If such a page does not yet exist,
+     * it is created, marked as belonging to this project and necessary
+     * security bindings are created.
+     * @param parent Parent of the page.
      * @param projectId Project to which the page should belong.
      * @param pageName Name of the page.
+     * @param portalObjIds A set where the id of the page should be added, for
+     * later cleanup.
      * @return A specified page for this project.
+     * @throws UnknownPortalException In case of a portal exception.
      */
-    private Page getProjectPage(String projectId, String pageName) {
-        Portal labsPortal = getLabsPortal();
-
+    private Page getPage(PortalObject parent, String projectId, String pageName,
+                         Set<PortalObjectId> portalObjIds) throws UnknownPortalException {
         // Checking if the page already exists.
-        Page page = labsPortal.getPage(projectId);
+        Page page = (Page) parent.getChild(pageName);
         if (page != null) {
+            portalObjIds.add(page.getId());
             return page;
         }
 
         try {
             // Trying to create a new page.
-            page = labsPortal.createPage(projectId);
+            page = ((PageContainer) parent).createPage(pageName);
 
             // Marking this page as belonging to this project.
             markAsLabsObject(page, projectId);
@@ -218,14 +297,47 @@
             // Allowing users to view the page.
             setSecurityBindings(page);
 
+            portalObjIds.add(page.getId());
             return page;
         } catch (DuplicatePortalObjectException e) {
-            throw new RuntimeException("WEIRD 1");
+            throw new UnknownPortalException(e);
         }
     }
 
+    /**
+     * Gets a page, with the given name, for the given project. If such a page
+     * does not yet exists, it is created, marked as belonging to this project
+     * and necessary security bindings are created. 
+     * @param projectId Project to which the page should belong.
+     * @param pageName Name of the subpage.
+     * @param portalObjIds A set where the id of the page should be added, for
+     * later cleanup.
+     * @return A specified page for this project.
+     * @throws UnknownPortalException In case of a portal exception.
+     */
+    private Page getProjectPage(String projectId, String pageName, Set<PortalObjectId> portalObjIds)
+            throws UnknownPortalException {
+        Page page = getPage(getLabsPortal(), projectId, projectId, portalObjIds);
+        if (!Tools.isEmpty(pageName)) {
+            page = getPage(page, projectId, pageName, portalObjIds);
+        }
+
+        return page;
+    }
+
+    /**
+     * Gets a specified instance of a portlet for the specified project. If such
+     * an instances doesn't exist, it is created.
+     * @param projectId Project to which the instance should belong.
+     * @param pageName Name of the subpage, on which the instance will be placed.
+     * @param portletName Name of portlet, which the instance should reference.
+     * @param portletIds Set where ids of portlet instances objects should be added.
+     * @return The specified instance.
+     * @throws UnknownPortletException In case the portlet is not found.
+     * @throws UnknownPortalException In case of a portal exception.
+     */
     private Instance getProjectPortletInstance(String projectId, String pageName,
-                                               String portletName)
+                                               String portletName, Set<String> portletIds)
             throws UnknownPortletException, UnknownPortalException {
         // Determining the portlet id.
         ProjectsPortlet portlet;
@@ -243,6 +355,7 @@
 
         // Constructing the instance id.
         String instanceId = ForgeHelper.createCamelCase(portletName, projectId, pageName, "instance");
+        portletIds.add(instanceId);
 
         // Checking if the instance already exists.
         Instance instance = pic.getDefinition(instanceId);
@@ -265,67 +378,142 @@
 
             return instance;
         } catch (DuplicateInstanceException e) {
-            throw new RuntimeException("WEIRD 2");
+            throw new UnknownPortalException(e);
         } catch (PortletInvokerException e) {
             throw new UnknownPortalException(e);
         }
     }
 
+    /**
+     * Adds the given instance to the given page; if necessary, creates a portal
+     * window (unless one is already present).
+     * @param projectId Id of the project to which the new window will belong.
+     * @param pageName Name of the sub-page on which the window should be placed.
+     * @param portletName Name of portlet, which's instance is added.
+     * @param page Portal page object, to which the window referencing the given
+     * instances shuld be added.
+     * @param instance Instance, which should be added to the given page.
+     * @param region Region of the page, where the window should be placed.
+     * @param height Height on the page, where the window should be placed.
+     * @param portalObjIds Set where ids of used portal objects should be added.
+     */
     private void addInstanceToPage(String projectId, String pageName, String portletName,
                                    Page page, Instance instance,
-                                   String region, int order) {
+                                   String region, int height, Set<PortalObjectId> portalObjIds) {
         String windowId = createWindowId(portletName, projectId, pageName);
 
         Window window = page.getWindow(windowId);
-        if (window != null) {
-            // The window exists, nothing to do.
-            return;
+        if (window == null) {
+            try {
+                window = page.createWindow(windowId, ContentType.PORTLET, instance.getId());
+
+                // Marking this window as belonging to this project.
+                markAsLabsObject(window, projectId);
+
+                // Creating necessary security bindings.
+                //setSecurityBindings(window);
+            } catch (DuplicatePortalObjectException e) {
+                log.warn(e);
+                return;
+            }
         }
-        
-        try {
-            window = page.createWindow(windowId, ContentType.PORTLET, instance.getId());
 
-            // Placing the window on the page, as required.
-            window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_REGION, region);
-            window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER, Integer.toString(order));
+        portalObjIds.add(window.getId());
 
-            // Creating necessary security bindings.
-            //setSecurityBindings(window);
-
-            // Marking this window as belonging to this project.
-            markAsLabsObject(window, projectId);
-        } catch (DuplicatePortalObjectException e) {
-            throw new RuntimeException("WEIRD 3");
-        }
+        // Placing the window on the page, as required.
+        window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_REGION, region);
+        window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER, Integer.toString(height));
     }
 
-    private void updateProjectPage(String projectId, String pageName) {
-        Page page = getProjectPage(projectId, pageName);
+    /**
+     * Updates one page for the given project.
+     * @param projectId Id of the project for which to update the pages.
+     * @param projectPage Page descriptor.
+     * @param portalObjIds Set where ids of used portal objects should be added.
+     * @param portletIds Set where ids of portlet instances objects should be added.
+     */
+    private void updateProjectPage(String projectId,
+                                   org.jboss.forge.common.projects.project.Page projectPage,
+                                   Set<PortalObjectId> portalObjIds, Set<String> portletIds) {
+        String pageName = projectPage.getName();
 
         try {
-            Instance freezone = getProjectPortletInstance(projectId, null, "freezone");
-            Instance downloads = getProjectPortletInstance(projectId, null, "downloads");
-            Instance info = getProjectPortletInstance(projectId, null, "info");
+            Page page = getProjectPage(projectId, pageName, portalObjIds);
+            
+            for (org.jboss.forge.common.projects.project.Portlet portlet : projectPage.getPortlets()) {
+                // Getting the instance.
+                Instance instance = getProjectPortletInstance(projectId, pageName,
+                        portlet.getName(), portletIds);
 
-            addInstanceToPage(projectId, pageName, "freezone", page, freezone, "center", 0);
-            addInstanceToPage(projectId, pageName, "downloads", page, downloads, "center", 1);
-            addInstanceToPage(projectId, pageName, "info", page, info, "center", 2);
+                // Setting preferences.
+                for (Preference pref : portlet.getPreferences()) {
+                    setInstancePreference(instance, pref.getName(), pref.getValue());
+                }
+
+                // Adding the window.
+                addInstanceToPage(projectId, pageName, portlet.getName(), page,instance,
+                        portlet.getRegion(), Integer.parseInt(portlet.getHeight()), portalObjIds);
+            }
         } catch (UnknownPortletException e) {
             e.printStackTrace();
         } catch (UnknownPortalException e) {
             e.printStackTrace();
+        } catch (PortletInvokerException e) {
+            e.printStackTrace();
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
         }
+    }
 
+    /**
+     * Updates pages for the given project.
+     * @param projectId Id of the project for which to update the pages.
+     * @param pages A pages descriptor.
+     * @param portalObjIds Set where ids of used portal objects should be added.
+     * @param portletIds Set where ids of portlet instances objects should be added.
+     */
+    private void updateProject(String projectId, Pages pages,
+                               Set<PortalObjectId> portalObjIds, Set<String> portletIds) {
+        if (pages == null) {
+            return;
+        }
+
+        // Updating each page.
+        for (org.jboss.forge.common.projects.project.Page page : pages.getPages()) {
+            updateProjectPage(projectId, page, portalObjIds, portletIds);
+        }
     }
 
-    public void updatePages(String projectId) {
-        updateProjectPage(projectId, null);
+    public void updatePages(Collection<Project> projects) {
+        String ejbContextID = PolicyContext.getContextID();
+        try {
+            PolicyContext.setContextID("portal-server.war");
+
+            Set<PortalObjectId> portalObjIds = new HashSet<PortalObjectId>();
+            Set<String> portletIds = new HashSet<String>();
+
+            // Updating pages for each project; also, collecting used ids of portal
+            // objects and portlet ids. This way, we will later know which Labs-
+            // handeled objects can be safely deleted.
+            for (Project project : projects) {
+                updateProject(project.getId(), project.getPages(), portalObjIds, portletIds);
+            }
+
+            // Cleaning up portlet instances.
+            try {
+                cleanupPortlets(portletIds);
+            } catch (PortletInvokerException e) {
+                log.warn(e);
+            }
+
+            // Cleaning up portal objects.
+            cleanupPortalObjects(portalObjIds, poc.getRootObject());
+        } finally {
+            PolicyContext.setContextID(ejbContextID);
+        }
     }
 
     public String createWindowId(String portletName, String projectId, String pageName) {
-        return ForgeHelper.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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/PathParser.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -17,9 +17,9 @@
         }
 
         fullPath = path;
-        path = normalize(path);
+        rest = normalize(path);
 
-        doSplit(path);
+        doSplit();
     }
 
     private String normalize(String path) {
@@ -38,16 +38,16 @@
         return path;
     }
 
-    private void doSplit(String path) {
+    private void doSplit() {
         lastRest = rest;
         
-        if (path == null) {
+        if (rest == null) {
             firstToken = null;
             rest = null;
             return;
         }
 
-        String[] tokens = path.split("[/]", 2);
+        String[] tokens = rest.split("[/]", 2);
         firstToken = tokens[0];
         rest = (tokens.length > 1 ? tokens[1] : null);
     }
@@ -90,9 +90,10 @@
      */
     public void proceed() {
         if (hasMoreTokens()) {
-            doSplit(rest);
+            doSplit();
         } else {
             firstToken = null;
+            lastRest = null;
         }
     }
 

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -21,5 +21,6 @@
                                        Window window);
 
     public ControllerCommand doMapping(ServerInvocation invocation, Window window,
-                                        Map<String, Object> additionalParameters);
+                                        Map<String, Object> additionalParameters,
+                                        boolean overwrite);
 }

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -22,11 +22,11 @@
 import org.jboss.labs.mapper.PathParser;
 import org.jboss.shotoku.aop.Inject;
 import org.jboss.shotoku.ContentManager;
+import org.jboss.shotoku.tools.Tools;
 import org.jboss.shotoku.exceptions.ResourceDoesNotExist;
 
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Collections;
 
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
@@ -38,27 +38,26 @@
 
     public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
                                        Window window) {
-        return doMapping(invocation, window, null);
+        return doMapping(invocation, window, null, true);
     }
 
     public ControllerCommand doMapping(ServerInvocation invocation, Window window,
-                                        Map<String, Object> additionalParameters) {
+                                        Map<String, Object> additionalParameters,
+                                        boolean overwrite) {
         if (window == null) {
             throw new IllegalArgumentException("Window cannot be null.");
         }
 
-        Map bodyParams = invocation.getServerContext().getBodyParameterMap();
-        if (bodyParams == null) { bodyParams = Collections.emptyMap(); }
         //noinspection unchecked
         Map<String, String[]> queryParams = new HashMap<String, String[]>(
                 invocation.getServerContext().getQueryParameterMap());
-        
-        if (additionalParameters != null) {            
+
+        if (additionalParameters != null) {
             for (String key : additionalParameters.keySet()) {
-                if (queryParams.containsKey(key) || bodyParams.containsKey(key)) {
+                if ((!overwrite) && (queryParams.containsKey(key))) {
                     continue;
                 }
-                
+
                 Object value = additionalParameters.get(key);
                 if (value instanceof String[]) {
                     queryParams.put(key, (String[]) value);
@@ -70,7 +69,7 @@
 
         // Decoding the window state.
         PortletRequestDecoder decoder = new PortletRequestDecoder();
-        decoder.decode(queryParams, bodyParams);
+        decoder.decode(queryParams, invocation.getServerContext().getBodyParameterMap());
 
         // Get the window navigational state
         WindowNavigationalState windowNavState = getWindowNavState(invocation, window);
@@ -116,8 +115,14 @@
                 return LabsServices.getProjectPagesService().createWindowId(
                         FREEZONE_PORTLET_NAME, null, page.getName());
             } else {
+                String pageName = null;
+                if (!Tools.objectsEqual(projectId, page.getName())) {
+                    // The page is not a main project page, but a subpage.
+                    // So it must be considered when generating the window id.
+                    pageName = page.getName();
+                }
                 return LabsServices.getProjectPagesService().createWindowId(
-                        FREEZONE_PORTLET_NAME, projectId, null);
+                        FREEZONE_PORTLET_NAME, projectId, pageName);
             }
         } catch (ServiceRetrievalException e) {
             return null;
@@ -154,7 +159,7 @@
             // Checking the mime type of the requested resource.
             try {
                 String absPath = ProjectsHelper.createAbsoluteFreezonePath(projectId,
-                        parser.getCurrent());
+                        path);
                 if (!Constants.PAGES_MIME_TYPE.equals(cm.getNode(absPath).getMimeType())) {
                     // A binary request; redirecting to file-access.
                     sendRedirect(invocation, ForgeHelper.createFileAccessPath(absPath));
@@ -176,7 +181,7 @@
                 Map<String, Object> additionalParameters = new HashMap<String, Object>();
                 additionalParameters.put(Constants.FREEZONE_PATH_PARAM, path);
 
-                return doMapping(invocation, freezone, additionalParameters);
+                return doMapping(invocation, freezone, additionalParameters, true);
             }
 
             // Otherwise, invoking a render command on the freezone window.

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -111,11 +111,13 @@
         
         Window wikiWindow = (Window) getContainer().getObject(windowId);
         if (hasMetaParameter(invocation)) {
-            return getPortalObjectCF().doMapping(invocation, wikiWindow, params.getMap());
+            return getPortalObjectCF().doMapping(invocation, wikiWindow, params.getMap(),
+                    false);
         } else {
             params.setValue(PortletRequestDecoder.META_PARAMETER,
                     Integer.toString(PortletRequestDecoder.RENDER_MASK));
-            return getPortalObjectCF().doMapping(invocation, wikiWindow, params.getMap());
+            return getPortalObjectCF().doMapping(invocation, wikiWindow, params.getMap(),
+                    false);
         }
     }
 }

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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -108,7 +108,6 @@
                         PortletParametersStateString ppss =
                                 (PortletParametersStateString) navigationalState;
                         path = ppss.getParameters().getValue(Constants.FREEZONE_PATH_PARAM);
-                        ppss.getParameters().remove(Constants.FREEZONE_PATH_PARAM);
                     }
 
                     addToPath(sb, poc.getTargetId(), false);
@@ -146,6 +145,8 @@
                                 url.getParameterMap().remove(PortletRequestDecoder.META_PARAMETER);
                             }
                         }
+
+                        url.getParameterMap().remove(Constants.FREEZONE_PATH_PARAM);
                     }
                 }
 

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -79,7 +79,21 @@
                         PortletRequestEncoder.encodeRender(url, navigationalState,
                                 renderCmd.getMode(), renderCmd.getWindowState());
 
-                        url.getParameterMap().remove(PortletRequestDecoder.META_PARAMETER);
+                        // If the request isn't only a render request, but also, for
+                        // example, window state change, we leave the meta
+                        // parameter intact. Otherwise, we remove it from the
+                        // url.
+                        Object meta = url.getParameterMap().get(
+                                PortletRequestDecoder.META_PARAMETER);
+
+                        if (meta != null) {
+                            int metaInt = Integer.parseInt(((String []) meta)[0], 16);
+
+                            if ((metaInt | PortletRequestDecoder.RENDER_MASK) ==
+                                    PortletRequestDecoder.RENDER_MASK) {
+                                url.getParameterMap().remove(PortletRequestDecoder.META_PARAMETER);
+                            }
+                        }
                     }
 
                     String[] jsfPageParam = (String[]) url.getParameterMap().get(

Deleted: 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-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -1,29 +0,0 @@
-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;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletException;
-import javax.naming.NamingException;
-import java.io.IOException;
-
-/**
- * TO REMOVE! Just for testing.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class TestServlet extends HttpServlet {
-
-    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        response.setContentType("text/html");
-        response.getWriter().println("Calling project pages service bean.");
-
-        try {
-            LabsServices.getProjectPagesService().updatePages("jbossas");
-        } catch (ServiceRetrievalException e) {
-            e.printStackTrace();
-        }
-    }
-}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet3.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet3.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/freezone/TestServlet3.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -33,7 +33,6 @@
                 for (ProjectsPortletPreference ppp : portlet.getPreferences()) {
                     w.println("&nbsp;&nbsp;&nbsp;" + ppp.getName() + "<br />");
                     w.println("&nbsp;&nbsp;&nbsp;" + ppp.getDefault() + "<br />");
-                    w.println("&nbsp;&nbsp;&nbsp;" + ppp.isRequired() + "<br />");
 
                     for (String value : ppp.getValues()) {
                         w.println("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + value + "<br />");    

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoBean.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoBean.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoBean.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -25,6 +25,7 @@
 import javax.management.MalformedObjectNameException;
 
 import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 import org.jboss.forge.common.projects.ProjectsHelper;
 import org.jboss.forge.common.projects.project.Project;
 import org.jboss.forge.common.ejb3.LabsServices;
@@ -74,7 +75,7 @@
 		ProjectsService service;
 		try {
 			service = LabsServices.getProjectsService();
-		} catch (MalformedObjectNameException e) {
+		} catch (ServiceRetrievalException e) {
 			log.warn("Unable to obtain ProjectsService. " + e.getMessage());
 			return null;
 		}

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoTools.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoTools.java	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/info/ProjectInfoTools.java	2007-02-24 15:27:39 UTC (rev 9734)
@@ -36,6 +36,7 @@
 import org.jboss.forge.common.projects.project.DocumentationType;
 import org.jboss.forge.common.projects.project.Project;
 import org.jboss.forge.common.projects.project.rw.ProjectRW;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
 import org.jboss.logging.Logger;
 
 
@@ -52,6 +53,8 @@
 			projectsService = LabsServices.getProjectsService();
 		} catch (MalformedObjectNameException e) {
 			log.warn("Cannot get ProjectsServiceRW");
+		} catch (ServiceRetrievalException e) {
+			log.warn("Cannot get ProjectsServiceRW");
 		}
 	}
 	

Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/web.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/web.xml	2007-02-24 09:35:16 UTC (rev 9733)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/web.xml	2007-02-24 15:27:39 UTC (rev 9734)
@@ -19,16 +19,7 @@
     </filter-mapping>
 
     <!-- DEBUG only -->
-    <servlet>
-        <servlet-name>Test1</servlet-name>
-        <servlet-class>org.jboss.forge.projects.freezone.TestServlet</servlet-class>
-    </servlet>
 
-    <servlet-mapping>
-        <servlet-name>Test1</servlet-name>
-        <url-pattern>/test1/*</url-pattern>
-    </servlet-mapping>
-
     <servlet>
         <servlet-name>Test2</servlet-name>
         <servlet-class>org.jboss.forge.projects.freezone.TestServlet2</servlet-class>




More information about the jboss-svn-commits mailing list