[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