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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 1 09:14:07 EST 2007


Author: adamw
Date: 2007-02-01 09:14:07 -0500 (Thu, 01 Feb 2007)
New Revision: 9252

Added:
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesPortletsWatcher.java
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/java/org/jboss/forge/projects/freezone/TestServlet2.java
Modified:
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/project.xml
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
   labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/web/WEB-INF/web.xml
Log:
http://jira.jboss.com/jira/browse/JBLAB-818

Modified: labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-01 14:08:50 UTC (rev 9251)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-01 14:14:07 UTC (rev 9252)
@@ -20,4 +20,6 @@
      * deleted.
      */
     public void removeExcessPages(Set<String> projectIds);
+
+    public String getTree();
 }

Modified: labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java	2007-02-01 14:08:50 UTC (rev 9251)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java	2007-02-01 14:14:07 UTC (rev 9252)
@@ -157,7 +157,7 @@
             log.error("Projects descriptor constructor.", e);
         }
 
-        try {
+        /*try {
             ProjectPagesService pps = LabsServices.getProjectPagesService();
             for (String projectId : getProjectIds()) {
                 pps.updatePages(projectId);
@@ -166,7 +166,7 @@
             pps.removeExcessPages(getProjectIds());
         } catch (NamingException e) {
             log.error("Error getting labs project pages service.", e);
-        }
+        } */
     }
 
     private final static String PROJECT_EL = "project";

Modified: labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/project.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/project.xml	2007-02-01 14:08:50 UTC (rev 9251)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/project.xml	2007-02-01 14:14:07 UTC (rev 9252)
@@ -48,6 +48,11 @@
             <jar>portal-security-lib.jar</jar>
         </dependency>
         <dependency>
+            <groupId>jboss</groupId>
+            <artifactId>portal-theme-lib</artifactId>
+            <jar>portal-theme-lib.jar</jar>
+        </dependency>
+        <dependency>
             <groupId>jaxb</groupId>
             <artifactId>JAXB2</artifactId>
             <version>2.0</version>

Added: labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesPortletsWatcher.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesPortletsWatcher.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesPortletsWatcher.java	2007-02-01 14:14:07 UTC (rev 9252)
@@ -0,0 +1,18 @@
+package org.jboss.forge.ejb3.projectpages;
+
+import org.jboss.shotoku.cache.ShotokuPropertiesWatcher;
+
+import java.util.Properties;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class ProjectPagesPortletsWatcher extends ShotokuPropertiesWatcher<String> {
+    protected String getConfigFileName() {
+        return "configuration/portlets.properties";
+    }
+
+    public Properties getProperties() {
+        return get("");
+    }
+}

Modified: labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-01 14:08:50 UTC (rev 9251)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-01 14:14:07 UTC (rev 9252)
@@ -4,18 +4,21 @@
 import org.jboss.forge.common.Constants;
 import org.jboss.portal.core.model.portal.*;
 import org.jboss.portal.core.model.instance.InstanceContainer;
-import org.jboss.portal.core.model.instance.InstanceDefinition;
+import org.jboss.portal.core.model.instance.DuplicateInstanceException;
+import org.jboss.portal.core.model.instance.Instance;
 import org.jboss.portal.security.spi.provider.DomainConfigurator;
 import org.jboss.portal.security.RoleSecurityBinding;
 import org.jboss.portal.security.SecurityConstants;
 import org.jboss.portal.security.AuthorizationDomainRegistry;
 import org.jboss.portal.portlet.PortletInvokerException;
 import org.jboss.portal.portlet.Portlet;
+import org.jboss.portal.portlet.state.PropertyChange;
+import org.jboss.portal.common.value.StringValue;
+import org.jboss.portal.theme.ThemeConstants;
 import org.jboss.annotation.ejb.Depends;
 
 import javax.ejb.Stateless;
 import java.util.Set;
-import java.util.Iterator;
 import java.util.Collections;
 
 /**
@@ -24,52 +27,138 @@
 @Stateless
 public class ProjectPagesServiceBean implements ProjectPagesService {
     @Depends("portal:container=PortalObject")
-    PortalObjectContainer poc;
+    private PortalObjectContainer poc;
 
     @Depends("portal:container=Instance")
-    InstanceContainer pic;
+    private InstanceContainer pic;
 
     @Depends("portal:service=AuthorizationDomainRegistry")
-    AuthorizationDomainRegistry adr;
+    private AuthorizationDomainRegistry adr;
 
-    private void printObject(PortalObject po, String indent) {
-        for (Iterator iter = po.getChildren().iterator(); iter.hasNext();) {
-            PortalObject child = (PortalObject) iter.next();
-            System.out.println(indent
-                    + child.getId().toString(PortalObjectId.CANONICAL_FORMAT));
+    private ProjectPagesPortletsWatcher pppw;
+
+    public ProjectPagesServiceBean() {
+        pppw = new ProjectPagesPortletsWatcher();
+    }
+
+    /*
+     * Exceptions.
+     */
+
+    private class UnknownPortletException extends Exception {
+        public UnknownPortletException(String message) {
+            super(message);
+        }
+    }
+
+    private class UnknownPortalException extends Exception {
+        public UnknownPortalException(Throwable cause) {
+            super(cause);
+        }
+    }
+
+    /*
+     * 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
+     */
+
+    private String printObject(PortalObject po, String indent) {
+        String result = "";
+        for (Object o : po.getChildren()) {
+            PortalObject child = (PortalObject) o;
+            result += (indent
+                    + child.getId().toString(PortalObjectId.CANONICAL_FORMAT)) + "\n<br />";
             printObject(child, indent + "   ");
         }
+
+        return result;
     }
 
-    private void printInstanceDefinitions() {
-        System.out.println("SIZE: " + pic.getDefinitions().size());
-        for (Iterator iter = pic.getDefinitions().iterator(); iter.hasNext();) {
-            InstanceDefinition instDef = (InstanceDefinition) iter.next();
+    private String printInstanceDefinitions() {
+        String result = "";
+        for (Object o : pic.getDefinitions()) {
+            Instance instDef = (Instance) o;
             try {
-                System.out.println(instDef.getId() + " | " + instDef.getPortlet().getContext().getId());
+                result += (instDef.getId() + " | " + instDef.getPortlet().getContext().getId()) +
+                         "\n<br />";
             } catch (PortletInvokerException e) {
                 e.printStackTrace();
             }
         }
+
+        return result;
     }
 
-    private void printPortlets() {
+    private String printPortlets() {
+        String result = "";
         try {
-            for (Iterator iter = pic.getPortletInvoker().getPortlets().iterator(); iter.hasNext();) {
-                Portlet p = (Portlet) iter.next();
-                System.out.println(p.getContext().getId());
+            for (Object o : pic.getPortletInvoker().getPortlets()) {
+                Portlet p = (Portlet) o;
+                result += (p.getContext().getId()) + "\n<br />";
             }
         } catch (PortletInvokerException e) {
             e.printStackTrace();
         }
+
+        return result;
     }
 
+    public String getTree() {
+        String result = "";
+        result += printObject(poc.getRootObject(), "");
+        result += "<br /><hr /><br />";
+        result += printInstanceDefinitions();
+        result += "<br /><hr /><br />";
+        result += printPortlets();
+        
+        return result;
+    }
+
+    /*
+     * ****************************************
+     * ****************************************
+     * ****************************************
+     */
+
+    /**
+     * @return Labs portal.
+     */
     private Portal getLabsPortal() {
         PortalObjectId id = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
                 PortalObjectId.CANONICAL_FORMAT);
         return (Portal) poc.getObject(id);
     }
 
+    /**
+     * To the specified portal object, binds permissions, which allow unlogged
+     * users to view the object.
+     * @param po Portal object, to which permissions should be bound.
+     */
     private void setSecurityBindings(PortalObject po) {
         DomainConfigurator configurator = adr.getDomain("portalobject").getConfigurator();
         Set constraints = Collections.singleton(
@@ -78,14 +167,155 @@
         configurator.setSecurityBindings(po.getId().toString(PortalObjectId.CANONICAL_FORMAT), constraints);
     }
 
+    /**
+     * To the specified portlet instance, binds permissions, which allow unlogged
+     * users to view the isntance.
+     * @param instance Instance, to which permissions should be bound.
+     */
+    private void setSecurityBindings(Instance instance) {
+        DomainConfigurator configurator = adr.getDomain("instance").getConfigurator();
+        Set constraints = Collections.singleton(
+                new RoleSecurityBinding(PortalObjectPermission.VIEW_ACTION,
+                        SecurityConstants.UNCHECKED_ROLE_NAME));
+        configurator.setSecurityBindings(instance.getId(), constraints);
+    }
+
+    /**
+     * Marks the given portal object as belonging to Labs-handeled objects.
+     * @param po Portal object to mark.
+     * @param projectId Project id, to which this object belongs.
+     */
+    private void markAsLabsObject(PortalObject po, String projectId) {
+        po.setDeclaredProperty("labs", projectId);
+    }
+
+    /**
+     * Set a preference in the given instance.
+     * @param instance Instance in which to set the preference.
+     * @param name Name on the preference.
+     * @param value Value of the preference.
+     * @throws PortletInvokerException In case of a protal exception.
+     */
+    private void setInstancePreference(Instance instance, String name,
+                                       String value) throws PortletInvokerException {
+        instance.setProperties(new PropertyChange[] {
+                PropertyChange.newUpdate(name, new StringValue(value)) });
+    }
+
+    /**
+     * 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, "labs", projectId);
+    }
+
+    /**
+     * 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. 
+     * @param projectId Project to which the page should belong.
+     * @param pageName Name of the page.
+     * @return A specified page for this project.
+     */
+    private Page getProjectPage(String projectId, String pageName) {
+        Portal labsPortal = getLabsPortal();
+        try {
+            // Trying to create a new page.
+            Page page = labsPortal.createPage(projectId);
+
+            // Marking this page as belonging to this project.
+            markAsLabsObject(page, projectId);
+
+            // Allowing users to view the page.
+            setSecurityBindings(page);
+
+            return page;
+        } catch (DuplicatePortalObjectException e) {
+            // The page exists - getting it.
+            return labsPortal.getPage(projectId);
+        }
+    }
+
+    private Instance getProjectPortletInstance(String projectId, String pageName,
+                                                         String portletName)
+            throws UnknownPortletException, UnknownPortalException {
+        // Determining the portlet id.
+        String portletId = pppw.getProperties().getProperty(portletName);
+        if (portletId == null) {
+            throw new UnknownPortletException(portletName);
+        }
+
+        // Constructing the instance id.
+        String instanceId = createCamelCase(portletName, projectId, pageName, "instance");
+
+        try {
+            // Creating the instance.
+            Instance instance = pic.createDefinition(instanceId, portletId);
+
+            // Creating necessary security bindings.
+            setSecurityBindings(instance);
+
+            // Marking this instance as belonging to this project.
+            markAsLabsObject(instance, projectId);
+
+            // Setting preferences for the new instance.
+            setInstancePreference(instance, "projectId", projectId);
+
+            return instance;
+        } catch (DuplicateInstanceException e) {
+            // The instance already existed.
+            return pic.getDefinition(instanceId);
+        } catch (PortletInvokerException e) {
+            throw new UnknownPortalException(e);
+        }
+    }
+
+    private void addInstanceToPage(String projectId, String pageName, String portletName,
+                                   Page page, Instance instance,
+                                   String region, int order) {
+        try {
+            Window window = page.createWindow(createCamelCase(portletName, projectId,
+                    pageName, "window"));
+
+            window.setInstanceRef(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));
+
+            // Creating necessary security bindings.
+            setSecurityBindings(window);
+
+            // Marking this window as belonging to this project.
+            markAsLabsObject(window, projectId);
+        } catch (DuplicatePortalObjectException e) {
+            // The window exists, nothing to do.
+        }
+    }
+
+    private void updateProjectPage(String projectId, String pageName) {
+        Page page = getProjectPage(projectId, pageName);
+
+        try {
+            Instance freezone = getProjectPortletInstance(projectId, null, "freezone");
+            Instance downloads = getProjectPortletInstance(projectId, null, "downloads");
+
+            addInstanceToPage(projectId, pageName, "freezone", page, freezone, "center", 0);
+            addInstanceToPage(projectId, pageName, "downloads", page, downloads, "center", 1);
+        } catch (UnknownPortletException e) {
+            e.printStackTrace();
+        } catch (UnknownPortalException e) {
+            e.printStackTrace();
+        }
+
+    }
+
     public void updatePages(String projectId) {
-        System.out.println("UPDATING PROJECT PAGES: " + projectId);
-        printObject(poc.getRootObject(), "");
-        System.out.println("--------------------------------");
-        printInstanceDefinitions();
-        System.out.println("--------------------------------");
-        printPortlets();
-        System.out.println("--------------------------------");
+        updateProjectPage(projectId, null);
 
         /*Portal labsPortal = getLabsPortal();
         Page newPage;

Added: labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/java/org/jboss/forge/projects/freezone/TestServlet2.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/java/org/jboss/forge/projects/freezone/TestServlet2.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/java/org/jboss/forge/projects/freezone/TestServlet2.java	2007-02-01 14:14:07 UTC (rev 9252)
@@ -0,0 +1,28 @@
+package org.jboss.forge.projects.freezone;
+
+import org.jboss.forge.common.ejb3.LabsServices;
+
+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 TestServlet2 extends HttpServlet {
+
+    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        response.setContentType("text/html");
+        response.getWriter().println("Calling project pages service bean 2). <br />");
+
+        try {
+            LabsServices.getProjectPagesService().getTree();
+        } catch (NamingException e) {
+            e.printStackTrace();
+        }
+    }
+}

Modified: labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/web/WEB-INF/web.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/web/WEB-INF/web.xml	2007-02-01 14:08:50 UTC (rev 9251)
+++ labs/jbosslabs/trunk/portal-extensions-newprj/forge-freezone/src/web/WEB-INF/web.xml	2007-02-01 14:14:07 UTC (rev 9252)
@@ -16,12 +16,22 @@
 	</filter-mapping>
 
     <servlet>
-        <servlet-name>Test</servlet-name>
+        <servlet-name>Test1</servlet-name>
         <servlet-class>org.jboss.forge.projects.freezone.TestServlet</servlet-class>        
     </servlet>
 
     <servlet-mapping>
-        <servlet-name>Test</servlet-name>
-        <url-pattern>/*</url-pattern>
+        <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>        
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>Test2</servlet-name>
+        <url-pattern>/test2/*</url-pattern>
+    </servlet-mapping>
 </web-app>
\ No newline at end of file




More information about the jboss-svn-commits mailing list