[jboss-svn-commits] JBL Code SVN: r10371 - in labs/jbosslabs/trunk/portal-extensions: forge-common/src/java/org/jboss/forge/common and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Mar 20 19:51:48 EDT 2007
Author: adamw
Date: 2007-03-20 19:51:47 -0400 (Tue, 20 Mar 2007)
New Revision: 10371
Added:
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractBaseCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/BaseCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/MainCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCFImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/AbstractPageDelegateCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/DownloadCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegateCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCFImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/WikiCF.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/DownloadUrlFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/jboss-portlet.xml
Removed:
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsBaseCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java
labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jbosslabs/
Modified:
labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.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/downloads/Downloads.java
Log:
Downloads mapper
Modified: labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml 2007-03-20 23:51:47 UTC (rev 10371)
@@ -753,7 +753,7 @@
<!-- LABS command factories -->
<mbean
- code="org.jboss.labs.mapper.command.LabsMainCommandFactory"
+ code="org.jboss.labs.mapper.command.MainCF"
name="portal:commandFactory=LabsMain"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -762,16 +762,16 @@
optional-attribute-name="Container"
proxy-type="attribute">portal:container=PortalObject</depends>
<depends
- optional-attribute-name="DelegatingCF"
- proxy-type="attribute">portal:commandFactory=LabsDelegating</depends>
+ optional-attribute-name="PageDelegatingCF"
+ proxy-type="attribute">portal:commandFactory=LabsPageDelegating</depends>
<depends
optional-attribute-name="PortalObjectCF"
proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
</mbean>
<mbean
- code="org.jboss.labs.mapper.command.LabsDelegatingCommandFactoryImpl"
- name="portal:commandFactory=LabsDelegating"
+ code="org.jboss.labs.mapper.command.delegating.page.PageDelegatingCFImpl"
+ name="portal:commandFactory=LabsPageDelegating"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
<xmbean/>
@@ -780,7 +780,7 @@
proxy-type="attribute">portal:container=PortalObject</depends>
</mbean>
<mbean
- code="org.jboss.labs.mapper.command.WikiCommandFactory"
+ code="org.jboss.labs.mapper.command.delegating.page.WikiCF"
name="portal:commandFactory=Wiki"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -792,15 +792,32 @@
optional-attribute-name="Container"
proxy-type="attribute">portal:container=PortalObject</depends>
<depends
- optional-attribute-name="DelegatingCF"
- proxy-type="attribute">portal:commandFactory=LabsDelegating</depends>
+ optional-attribute-name="PageDelegatingCF"
+ proxy-type="attribute">portal:commandFactory=LabsPageDelegating</depends>
<depends
optional-attribute-name="PortalObjectCF"
proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
</mbean>
+ <mbean
+ code="org.jboss.labs.mapper.command.delegating.page.DownloadCF"
+ name="portal:commandFactory=Download"
+ xmbean-dd=""
+ xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+ <xmbean/>
+ <attribute name="Path">downloads</attribute>
+ <depends
+ optional-attribute-name="Container"
+ proxy-type="attribute">portal:container=PortalObject</depends>
+ <depends
+ optional-attribute-name="PageDelegatingCF"
+ proxy-type="attribute">portal:commandFactory=LabsPageDelegating</depends>
+ <depends
+ optional-attribute-name="PortalObjectCF"
+ proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
+ </mbean>
<mbean
- code="org.jboss.labs.mapper.command.LabsPortalObjectCommandFactoryImpl"
+ code="org.jboss.labs.mapper.command.PortalObjectCFImpl"
name="portal:commandFactory=LabsPortalObject"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
@@ -918,6 +935,20 @@
optional-attribute-name="Factory"
proxy-type="attribute">portal:urlFactory=Delegating</depends>
</mbean>
+ <mbean
+ code="org.jboss.labs.mapper.url.DownloadUrlFactory"
+ name="portal:urlFactory=Download"
+ xmbean-dd=""
+ xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+ <attribute name="Path">downloads</attribute>
+ <xmbean/>
+ <depends
+ optional-attribute-name="Container"
+ proxy-type="attribute">portal:container=PortalObject</depends>
+ <depends
+ optional-attribute-name="Factory"
+ proxy-type="attribute">portal:urlFactory=Delegating</depends>
+ </mbean>
<!-- The federating portlet invoker -->
<mbean
Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -40,6 +40,13 @@
public static final String PORTAL_OBJECT_LABS_MARKER = "labs";
/**
+ * Name of a declared property for portal objects, which are handeled
+ * by labs, and have separate windows on one page. This property enables
+ * to distinguish between them.
+ */
+ public static final String PORTAL_OBJECT_UNIQUE_ID_MARKER = "uniqueId";
+
+ /**
* Name of a portlet preference, which, if present, is used when
* creating project pages, in case there is one then more portlets
* of the same type on a page; the unique id is then used to generate
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-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -427,6 +427,11 @@
// Marking this window as belonging to this project.
markAsLabsObject(window, projectId);
+ // If the unique id is set, setting is as a property.
+ if (uniqueId != null) {
+ window.setDeclaredProperty(Constants.PORTAL_OBJECT_UNIQUE_ID_MARKER, uniqueId);
+ }
+
// Creating necessary security bindings.
//setSecurityBindings(window);
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractBaseCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractBaseCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractBaseCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,67 @@
+package org.jboss.labs.mapper.command;
+
+import org.jboss.portal.core.model.portal.*;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowRenderCommand;
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.jems.as.system.AbstractJBossService;
+import org.jboss.portal.theme.navigation.WindowNavigationalState;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.labs.mapper.MapperTools;
+
+import java.io.IOException;
+
+/**
+ * A base class for Labs command factories.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public abstract class AbstractBaseCF extends AbstractJBossService
+ implements BaseCF {
+ private PortalObjectContainer container;
+
+ public PortalObjectContainer getContainer() {
+ return container;
+ }
+
+ public void setContainer(PortalObjectContainer container) {
+ this.container = container;
+ }
+
+ protected ControllerCommand invokeRenderCommand(ServerInvocation invocation, Window window,
+ StateString params) {
+ WindowNavigationalState windowNavState = MapperTools.getWindowNavState(invocation, window);
+
+ return new InvokePortletWindowRenderCommand(window.getId(), windowNavState.getMode(),
+ windowNavState.getWindowState(), params);
+ }
+
+ protected boolean hasMetaParameter(ServerInvocation invocation) {
+ return invocation.getServerContext().getQueryParameterMap().get(
+ PortletRequestDecoder.META_PARAMETER) != null;
+ }
+
+ protected void sendRedirect(ServerInvocation invocation, String where) {
+ try {
+ String queryString = invocation.getServerContext().getClientRequest().getQueryString();
+ if (queryString != null) {
+ where += "?" + queryString;
+ }
+ invocation.getServerContext().getClientResponse().sendRedirect(where);
+ } catch (IOException e) {
+ // Oh well ...
+ }
+ }
+
+ /*
+ * Service lifecycle methods.
+ */
+
+ protected void startService() throws Exception {
+
+ }
+
+ protected void stopService() throws Exception {
+
+ }
+}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,67 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.model.portal.*;
-import org.jboss.portal.core.model.portal.command.InvokePortletWindowRenderCommand;
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.jems.as.system.AbstractJBossService;
-import org.jboss.portal.theme.navigation.WindowNavigationalState;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.portlet.StateString;
-import org.jboss.portal.portlet.impl.PortletRequestDecoder;
-import org.jboss.labs.mapper.MapperTools;
-
-import java.io.IOException;
-
-/**
- * A base class for Labs command factories.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public abstract class AbstractLabsBaseCommandFactory extends AbstractJBossService
- implements LabsBaseCommandFactory {
- private PortalObjectContainer container;
-
- public PortalObjectContainer getContainer() {
- return container;
- }
-
- public void setContainer(PortalObjectContainer container) {
- this.container = container;
- }
-
- protected ControllerCommand invokeRenderCommand(ServerInvocation invocation, Window window,
- StateString params) {
- WindowNavigationalState windowNavState = MapperTools.getWindowNavState(invocation, window);
-
- return new InvokePortletWindowRenderCommand(window.getId(), windowNavState.getMode(),
- windowNavState.getWindowState(), params);
- }
-
- protected boolean hasMetaParameter(ServerInvocation invocation) {
- return invocation.getServerContext().getQueryParameterMap().get(
- PortletRequestDecoder.META_PARAMETER) != null;
- }
-
- protected void sendRedirect(ServerInvocation invocation, String where) {
- try {
- String queryString = invocation.getServerContext().getClientRequest().getQueryString();
- if (queryString != null) {
- where += "?" + queryString;
- }
- invocation.getServerContext().getClientResponse().sendRedirect(where);
- } catch (IOException e) {
- // Oh well ...
- }
- }
-
- /*
- * Service lifecycle methods.
- */
-
- protected void startService() throws Exception {
-
- }
-
- protected void stopService() throws Exception {
-
- }
-}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,35 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-/**
- * A base class for Labs delegate command factories.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public abstract class AbstractLabsDelegateCommandFactory extends AbstractLabsBaseCommandFactory
- implements LabsDelegateCommandFactory {
- private LabsDelegatingCommandFactory delegatingCF;
- private String path;
-
- public LabsDelegatingCommandFactory getDelegatingCF() {
- return delegatingCF;
- }
-
- public void setDelegatingCF(LabsDelegatingCommandFactory delegatingCF) {
- this.delegatingCF = delegatingCF;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- /*
- * Service lifecycle methods.
- */
-
- protected void startService() throws Exception {
- getDelegatingCF().register(getPath(), this);
- }
-}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/BaseCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsBaseCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/BaseCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/BaseCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,11 @@
+package org.jboss.labs.mapper.command;
+
+import org.jboss.portal.core.model.portal.PortalObjectContainer;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface BaseCF {
+ public PortalObjectContainer getContainer();
+ public void setContainer(PortalObjectContainer container);
+}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsBaseCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsBaseCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsBaseCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,11 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.model.portal.PortalObjectContainer;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsBaseCommandFactory {
- public PortalObjectContainer getContainer();
- public void setContainer(PortalObjectContainer container);
-}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,23 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.PathParser;
-
-/**
- * A base interface for factories, to which mapping requests can
- * be delegated basing on the request path, by
- * {@see LabsDelegatingCommandFactory}.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsDelegateCommandFactory extends LabsBaseCommandFactory {
- public ControllerCommand doMapping(ServerInvocation invocation,
- String host, String contextPath,
- PathParser parser);
-
- public LabsDelegatingCommandFactory getDelegatingCF();
- public void setDelegatingCF(LabsDelegatingCommandFactory delegating);
-
- public String getPath();
- public void setPath(String path);
-}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,25 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.PathParser;
-
-/**
- * A delegating command factory, which delegates mapping to registered
- * factories based on the first token of the requested path.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsDelegatingCommandFactory extends LabsBaseCommandFactory {
- public ControllerCommand doMapping(ServerInvocation invocation,
- String host, String contextPath,
- PathParser parser);
-
- /**
- * Registeres a factory so that requests with the given first token
- * will be delegated to it.
- * @param path First token of the request path that must be matched
- * in order to delegate the mapping.
- * @param factory Factory to which mapping should be delegated.
- */
- public void register(String path, LabsDelegateCommandFactory factory);
-}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,45 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.PathParser;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- *
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsDelegatingCommandFactoryImpl extends AbstractLabsBaseCommandFactory
- implements LabsDelegatingCommandFactory {
- private Map<String, LabsDelegateCommandFactory> factories;
-
- public LabsDelegatingCommandFactoryImpl() {
- factories = new HashMap<String, LabsDelegateCommandFactory>();
- }
-
- public ControllerCommand doMapping(ServerInvocation invocation, String host,
- String contextPath, PathParser parser) {
- if (parser.hasFirstToken()) {
- // Checking if there is any delegate factory registered for the
- // given token.
- String firstToken = parser.getFirstToken();
- for (String path : factories.keySet()) {
- if (firstToken.equals(path)) {
- // Found a match; skipping the matched token and proceeding
- // with the mapping.
- parser.proceed();
- return factories.get(path).doMapping(invocation, host, contextPath,
- parser);
- }
- }
- }
-
- return null;
- }
-
- public synchronized void register(String path, LabsDelegateCommandFactory factory) {
- factories.put(path, factory);
- }
-}
Deleted: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,112 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.command.mapper.CommandFactory;
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.core.model.portal.*;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.PathParser;
-import org.jboss.forge.common.Constants;
-
-/**
- * Main Labs command factory. Finds the most specific portal object
- * the request reffers to; then tries to delegate the mapping to
- * some registered delegate factory and if this is unsuccessfull,
- * default portal object mapping is invoked.
- * @author Adam Warski (adamw at aster.pl)
- */
-public class LabsMainCommandFactory extends AbstractLabsBaseCommandFactory implements CommandFactory {
- private LabsDelegatingCommandFactory delegatingCF;
- private LabsPortalObjectCommandFactory portalObjectCF;
-
- /*
- * Getters and setters.
- */
-
- public LabsPortalObjectCommandFactory getPortalObjectCF() {
- return portalObjectCF;
- }
-
- public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
- this.portalObjectCF = portalObjectCF;
- }
-
- public LabsDelegatingCommandFactory getDelegatingCF() {
- return delegatingCF;
- }
-
- public void setDelegatingCF(LabsDelegatingCommandFactory delegatingCF) {
- this.delegatingCF = delegatingCF;
- }
-
- /**
- * Portal id of the labs portal.
- */
- private PortalObjectId defaultPortalPath = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
- PortalObjectId.CANONICAL_FORMAT);
-
- /**
- *
- * @return A portal object representing the Labs portal.
- */
- private Portal getLabsPortal() {
- return (Portal) getContainer().getObject(defaultPortalPath);
- }
-
- /**
- *
- * @param parser Parser from which to read the data.
- * @return The most specific portal object, corresponding to the data from
- * the parser.
- */
- private PortalObject getPortalObject(PathParser parser) {
- PortalObject o = getLabsPortal();
-
- while (true) {
- if (!parser.hasFirstToken()) {
- return o;
- }
-
- PortalObject child = o.getChild(parser.getFirstToken());
-
- if (child == null) {
- return o;
- }
-
- o = child;
- parser.proceed();
- }
- }
-
- public ControllerCommand doMapping(ServerInvocation invocation, String host,
- String contextPath, String requestPath) {
- PathParser parser = new PathParser(requestPath);
-
- // Getting the portal object referenced by the path.
- PortalObject target = getPortalObject(parser);
-
- // In case the portal object is a portal, the "real" target is this
- // portal's default page.
- if (target instanceof Portal) {
- target = ((Portal) target).getDefaultPage();
- }
-
- if (target instanceof Page) {
- // First trying to delegate the mapping.
- ControllerCommand cmd = delegatingCF.doMapping(invocation, host, contextPath, parser);
-
- if (cmd == null) {
- // If this is unsuccessfull, doing the default page mappnig.
- return getPortalObjectCF().doMapping(invocation, parser, (Page) target);
- } else {
- return cmd;
- }
- } else if (target instanceof Window) {
- // If the path referenced a window, then the mapping cannot be
- // delegated; doing the default window mapping.
- return getPortalObjectCF().doMapping(invocation, parser, (Window) target);
- } else {
- // Unknown portal object type.
- return null;
- }
- }
-}
Deleted: 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-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,26 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.core.model.portal.Page;
-import org.jboss.portal.core.model.portal.Window;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.labs.mapper.PathParser;
-
-import java.util.Map;
-
-/**
- * A command factory which maps a page/ window request to a freezone
- * request, or a portal action/ render request.
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public interface LabsPortalObjectCommandFactory {
- public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
- Page page);
-
- public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
- Window window);
-
- public ControllerCommand doMapping(ServerInvocation invocation, Window window,
- Map<String, Object> additionalParameters,
- boolean overwrite);
-}
Deleted: 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-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,204 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.core.model.portal.Page;
-import org.jboss.portal.core.model.portal.Window;
-import org.jboss.portal.core.model.portal.command.RenderPageCommand;
-import org.jboss.portal.core.model.portal.command.InvokePortletWindowRenderCommand;
-import org.jboss.portal.core.model.portal.command.InvokePortletWindowActionCommand;
-import org.jboss.portal.core.model.portal.command.ImportPageToDashboardCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.portlet.PortletParametersStateString;
-import org.jboss.portal.portlet.StateString;
-import org.jboss.portal.portlet.impl.PortletRequestDecoder;
-import org.jboss.portal.theme.navigation.WindowNavigationalState;
-import org.jboss.portal.WindowState;
-import org.jboss.portal.Mode;
-import org.jboss.forge.common.Constants;
-import org.jboss.forge.common.ForgeHelper;
-import org.jboss.forge.common.projects.ProjectsHelper;
-import org.jboss.forge.common.exceptions.ServiceRetrievalException;
-import org.jboss.forge.common.ejb3.LabsServices;
-import org.jboss.labs.mapper.PathParser;
-import org.jboss.labs.mapper.MapperTools;
-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;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class LabsPortalObjectCommandFactoryImpl extends AbstractLabsBaseCommandFactory
- implements LabsPortalObjectCommandFactory {
- @Inject
- private ContentManager cm;
-
- public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
- Window window) {
- return doMapping(invocation, window, null, true);
- }
-
- public ControllerCommand doMapping(ServerInvocation invocation, Window window,
- Map<String, Object> additionalParameters,
- boolean overwrite) {
- if (window == null) {
- throw new IllegalArgumentException("Window cannot be null.");
- }
-
- //noinspection unchecked
- Map<String, String[]> queryParams = new HashMap<String, String[]>(
- invocation.getServerContext().getQueryParameterMap());
-
- if (additionalParameters != null) {
- for (String key : additionalParameters.keySet()) {
- if ((!overwrite) && (queryParams.containsKey(key))) {
- continue;
- }
-
- Object value = additionalParameters.get(key);
- if (value instanceof String[]) {
- queryParams.put(key, (String[]) value);
- } else if (value != null) {
- queryParams.put(key, new String[] { value.toString() });
- }
- }
- }
-
- // Decoding the window state.
- PortletRequestDecoder decoder = new PortletRequestDecoder();
- decoder.decode(queryParams, invocation.getServerContext().getBodyParameterMap());
-
- // Get the window navigational state
- WindowNavigationalState windowNavState = MapperTools.getWindowNavState(invocation, window);
-
- //
- WindowState windowState = decoder.getWindowState();
- if (windowState == null) {
- windowState = windowNavState.getWindowState();
- }
-
- //
- Mode mode = decoder.getMode();
- if (mode == null) {
- mode = windowNavState.getMode();
- }
-
- // If any additional navigational parameters where passed and if we
- // can add them, adding them.
- StateString navState = decoder.getNavigationalstate();
-
- // Returning an appropriate command.
- switch (decoder.getType())
- {
- case PortletRequestDecoder.NAV_TYPE:
- return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState);
- case PortletRequestDecoder.ACTION_TYPE:
- return new InvokePortletWindowActionCommand(window.getId(), mode, windowState,
- navState, decoder.getInteractionState(),
- decoder.getForm());
- case PortletRequestDecoder.RENDER_TYPE:
- return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState,
- navState);
- }
-
- return null;
- }
-
- protected final static String FREEZONE_PORTLET_NAME = "freezone";
-
- private String getFreezoneWindowId(String projectId, Page page) {
- try {
- if (projectId == null) {
- return LabsServices.getProjectPagesService().createWindowId(
- FREEZONE_PORTLET_NAME, null, page.getName(), null);
- } 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, pageName, null);
- }
- } catch (ServiceRetrievalException e) {
- return null;
- }
- }
-
- public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
- Page page) {
- if (page == null) {
- throw new IllegalArgumentException("Page cannot be null.");
- }
-
- // If a page is requested, the URL must end with a /, in order for
- // relative paths to work.
- if ((!parser.hasFirstToken()) && (!parser.getFullPath().endsWith("/"))) {
- sendRedirect(invocation, parser.getFullPath()+"/");
- return null;
- }
-
- // Checking if there is a freezone on the page.
- String projectId = page.getDeclaredProperty(Constants.PORTAL_OBJECT_LABS_MARKER);
-
- Window freezone = null;
- String freezoneId = getFreezoneWindowId(projectId, page);
-
- if (freezoneId != null) {
- freezone = page.getWindow(freezoneId);
- }
-
- if (freezone != null) {
- // Found a freezone window; invoking a render command on it.
- String path = parser.getCurrent();
-
- // Checking the mime type of the requested resource.
- try {
- String absPath = ProjectsHelper.createAbsoluteFreezonePath(projectId,
- path);
- if (!Constants.PAGES_MIME_TYPE.equals(cm.getNode(absPath).getMimeType())) {
- // A binary request; redirecting to file-access.
- sendRedirect(invocation, ForgeHelper.createFileAccessPath(absPath));
- return null;
- }
- } catch (ResourceDoesNotExist resourceDoesNotExist) {
- // The page does not exist; proceeding.
- }
-
- // Setting the path parameter for the freezone to know what page
- // to display. It has to be not-null, so "" is used as a
- // null-marker.
- if (path == null) { path = ""; }
-
- // Checking if there is a meta parameter - if so, invoking portal actions.
- if (hasMetaParameter(invocation)) {
- // If so, invoking default portal actions on a window action request,
- // with a default path parameter.
- Map<String, Object> additionalParameters = new HashMap<String, Object>();
- additionalParameters.put(Constants.FREEZONE_PATH_PARAM, path);
-
- return doMapping(invocation, freezone, additionalParameters, true);
- }
-
- // Otherwise, invoking a render command on the freezone window.
- PortletParametersStateString params = new PortletParametersStateString();
- params.setValue(Constants.FREEZONE_PATH_PARAM, path);
- return invokeRenderCommand(invocation, freezone, params);
- }
-
- // Invoking a normal page render command.
- String action = invocation.getServerContext().getQueryParameterMap().getValue("action");
-
- //
- if ("import".equals(action)) {
- return new ImportPageToDashboardCommand(page.getId());
- } else {
- return new RenderPageCommand(page.getId());
- }
- }
-}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/MainCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsMainCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/MainCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/MainCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,116 @@
+package org.jboss.labs.mapper.command;
+
+import org.jboss.portal.core.controller.command.mapper.CommandFactory;
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.*;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.command.delegating.page.PageDelegatingCF;
+import org.jboss.forge.common.Constants;
+
+/**
+ * Main Labs command factory. Finds the most specific portal object
+ * the request reffers to; then tries to delegate the mapping to
+ * some registered delegate factory and if this is unsuccessfull,
+ * default portal object mapping is invoked.
+ * @author Adam Warski (adamw at aster.pl)
+ */
+public class MainCF extends AbstractBaseCF implements CommandFactory {
+ private PageDelegatingCF pageDelegatingCF;
+ private PortalObjectCF portalObjectCF;
+
+ /*
+ * Getters and setters.
+ */
+
+ public PortalObjectCF getPortalObjectCF() {
+ return portalObjectCF;
+ }
+
+ public void setPortalObjectCF(PortalObjectCF portalObjectCF) {
+ this.portalObjectCF = portalObjectCF;
+ }
+
+ public PageDelegatingCF getPageDelegatingCF() {
+ return pageDelegatingCF;
+ }
+
+ public void setPageDelegatingCF(PageDelegatingCF pageDelegatingCF) {
+ this.pageDelegatingCF = pageDelegatingCF;
+ }
+
+ /**
+ * Portal id of the labs portal.
+ */
+ private PortalObjectId defaultPortalPath = PortalObjectId.parse("/" + Constants.LABS_PORTAL,
+ PortalObjectId.CANONICAL_FORMAT);
+
+ /**
+ *
+ * @return A portal object representing the Labs portal.
+ */
+ private Portal getLabsPortal() {
+ return (Portal) getContainer().getObject(defaultPortalPath);
+ }
+
+ /**
+ *
+ * @param parser Parser from which to read the data.
+ * @return The most specific portal object, corresponding to the data from
+ * the parser.
+ */
+ private PortalObject getPortalObject(PathParser parser) {
+ PortalObject o = getLabsPortal();
+
+ while (true) {
+ if (!parser.hasFirstToken()) {
+ return o;
+ }
+
+ PortalObject child = o.getChild(parser.getFirstToken());
+
+ if (child == null) {
+ return o;
+ }
+
+ o = child;
+ parser.proceed();
+ }
+ }
+
+ public ControllerCommand doMapping(ServerInvocation invocation, String host,
+ String contextPath, String requestPath) {
+ PathParser parser = new PathParser(requestPath);
+
+ // Getting the portal object referenced by the path.
+ PortalObject target = getPortalObject(parser);
+
+ // In case the portal object is a portal, the "real" target is this
+ // portal's default page.
+ if (target instanceof Portal) {
+ target = ((Portal) target).getDefaultPage();
+ }
+
+ if (target instanceof Page) {
+ Page page = (Page) target;
+
+ // First trying to delegate the mapping to a prefix-based factory.
+ ControllerCommand cmd = pageDelegatingCF.doMapping(invocation, host, contextPath,
+ parser, page);
+
+ if (cmd != null) {
+ return cmd;
+ }
+
+ // If this is unsuccessfull, doing the default page mappnig.
+ return getPortalObjectCF().doMapping(invocation, parser, (Page) target);
+ } else if (target instanceof Window) {
+ // If the path referenced a window, then the mapping cannot be
+ // delegated; doing the default window mapping.
+ return getPortalObjectCF().doMapping(invocation, parser, (Window) target);
+ } else {
+ // Unknown portal object type.
+ return null;
+ }
+ }
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCF.java (from rev 10330, 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/PortalObjectCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,26 @@
+package org.jboss.labs.mapper.command;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.PathParser;
+
+import java.util.Map;
+
+/**
+ * A command factory which maps a page/ window request to a freezone
+ * request, or a portal action/ render request.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface PortalObjectCF {
+ public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+ Page page);
+
+ public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+ Window window);
+
+ public ControllerCommand doMapping(ServerInvocation invocation, Window window,
+ Map<String, Object> additionalParameters,
+ boolean overwrite);
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCFImpl.java (from rev 10330, 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/PortalObjectCFImpl.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/PortalObjectCFImpl.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,204 @@
+package org.jboss.labs.mapper.command;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.core.model.portal.command.RenderPageCommand;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowRenderCommand;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowActionCommand;
+import org.jboss.portal.core.model.portal.command.ImportPageToDashboardCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.PortletParametersStateString;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.portal.theme.navigation.WindowNavigationalState;
+import org.jboss.portal.WindowState;
+import org.jboss.portal.Mode;
+import org.jboss.forge.common.Constants;
+import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.projects.ProjectsHelper;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
+import org.jboss.forge.common.ejb3.LabsServices;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.MapperTools;
+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;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class PortalObjectCFImpl extends AbstractBaseCF
+ implements PortalObjectCF {
+ @Inject
+ private ContentManager cm;
+
+ public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+ Window window) {
+ return doMapping(invocation, window, null, true);
+ }
+
+ public ControllerCommand doMapping(ServerInvocation invocation, Window window,
+ Map<String, Object> additionalParameters,
+ boolean overwrite) {
+ if (window == null) {
+ throw new IllegalArgumentException("Window cannot be null.");
+ }
+
+ //noinspection unchecked
+ Map<String, String[]> queryParams = new HashMap<String, String[]>(
+ invocation.getServerContext().getQueryParameterMap());
+
+ if (additionalParameters != null) {
+ for (String key : additionalParameters.keySet()) {
+ if ((!overwrite) && (queryParams.containsKey(key))) {
+ continue;
+ }
+
+ Object value = additionalParameters.get(key);
+ if (value instanceof String[]) {
+ queryParams.put(key, (String[]) value);
+ } else if (value != null) {
+ queryParams.put(key, new String[] { value.toString() });
+ }
+ }
+ }
+
+ // Decoding the window state.
+ PortletRequestDecoder decoder = new PortletRequestDecoder();
+ decoder.decode(queryParams, invocation.getServerContext().getBodyParameterMap());
+
+ // Get the window navigational state
+ WindowNavigationalState windowNavState = MapperTools.getWindowNavState(invocation, window);
+
+ //
+ WindowState windowState = decoder.getWindowState();
+ if (windowState == null) {
+ windowState = windowNavState.getWindowState();
+ }
+
+ //
+ Mode mode = decoder.getMode();
+ if (mode == null) {
+ mode = windowNavState.getMode();
+ }
+
+ // If any additional navigational parameters where passed and if we
+ // can add them, adding them.
+ StateString navState = decoder.getNavigationalstate();
+
+ // Returning an appropriate command.
+ switch (decoder.getType())
+ {
+ case PortletRequestDecoder.NAV_TYPE:
+ return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState);
+ case PortletRequestDecoder.ACTION_TYPE:
+ return new InvokePortletWindowActionCommand(window.getId(), mode, windowState,
+ navState, decoder.getInteractionState(),
+ decoder.getForm());
+ case PortletRequestDecoder.RENDER_TYPE:
+ return new InvokePortletWindowRenderCommand(window.getId(), mode, windowState,
+ navState);
+ }
+
+ return null;
+ }
+
+ protected final static String FREEZONE_PORTLET_NAME = "freezone";
+
+ private String getFreezoneWindowId(String projectId, Page page) {
+ try {
+ if (projectId == null) {
+ return LabsServices.getProjectPagesService().createWindowId(
+ FREEZONE_PORTLET_NAME, null, page.getName(), null);
+ } 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, pageName, null);
+ }
+ } catch (ServiceRetrievalException e) {
+ return null;
+ }
+ }
+
+ public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
+ Page page) {
+ if (page == null) {
+ throw new IllegalArgumentException("Page cannot be null.");
+ }
+
+ // If a page is requested, the URL must end with a /, in order for
+ // relative paths to work.
+ if ((!parser.hasFirstToken()) && (!parser.getFullPath().endsWith("/"))) {
+ sendRedirect(invocation, parser.getFullPath()+"/");
+ return null;
+ }
+
+ // Checking if there is a freezone on the page.
+ String projectId = page.getDeclaredProperty(Constants.PORTAL_OBJECT_LABS_MARKER);
+
+ Window freezone = null;
+ String freezoneId = getFreezoneWindowId(projectId, page);
+
+ if (freezoneId != null) {
+ freezone = page.getWindow(freezoneId);
+ }
+
+ if (freezone != null) {
+ // Found a freezone window; invoking a render command on it.
+ String path = parser.getCurrent();
+
+ // Checking the mime type of the requested resource.
+ try {
+ String absPath = ProjectsHelper.createAbsoluteFreezonePath(projectId,
+ path);
+ if (!Constants.PAGES_MIME_TYPE.equals(cm.getNode(absPath).getMimeType())) {
+ // A binary request; redirecting to file-access.
+ sendRedirect(invocation, ForgeHelper.createFileAccessPath(absPath));
+ return null;
+ }
+ } catch (ResourceDoesNotExist resourceDoesNotExist) {
+ // The page does not exist; proceeding.
+ }
+
+ // Setting the path parameter for the freezone to know what page
+ // to display. It has to be not-null, so "" is used as a
+ // null-marker.
+ if (path == null) { path = ""; }
+
+ // Checking if there is a meta parameter - if so, invoking portal actions.
+ if (hasMetaParameter(invocation)) {
+ // If so, invoking default portal actions on a window action request,
+ // with a default path parameter.
+ Map<String, Object> additionalParameters = new HashMap<String, Object>();
+ additionalParameters.put(Constants.FREEZONE_PATH_PARAM, path);
+
+ return doMapping(invocation, freezone, additionalParameters, true);
+ }
+
+ // Otherwise, invoking a render command on the freezone window.
+ PortletParametersStateString params = new PortletParametersStateString();
+ params.setValue(Constants.FREEZONE_PATH_PARAM, path);
+ return invokeRenderCommand(invocation, freezone, params);
+ }
+
+ // Invoking a normal page render command.
+ String action = invocation.getServerContext().getQueryParameterMap().getValue("action");
+
+ //
+ if ("import".equals(action)) {
+ return new ImportPageToDashboardCommand(page.getId());
+ } else {
+ return new RenderPageCommand(page.getId());
+ }
+ }
+}
Deleted: 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-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,135 +0,0 @@
-package org.jboss.labs.mapper.command;
-
-import org.jboss.portal.core.controller.ControllerCommand;
-import org.jboss.portal.core.model.portal.PortalObjectId;
-import org.jboss.portal.core.model.portal.Window;
-import org.jboss.portal.core.model.portal.command.RenderPageCommand;
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.portlet.PortletParametersStateString;
-import org.jboss.portal.portlet.impl.PortletRequestDecoder;
-import org.jboss.labs.mapper.PathParser;
-import org.jboss.labs.mapper.MapperTools;
-import org.jboss.forge.common.Constants;
-
-/**
- * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
- */
-public class WikiCommandFactory extends AbstractLabsDelegateCommandFactory {
- private String pageName;
-
- private PortalObjectId wikiPageId;
-
- private String windowName;
-
- private PortalObjectId windowId;
-
- private LabsPortalObjectCommandFactory portalObjectCF;
-
- private void setIds() {
- if ((pageName != null) && (windowName != null)) {
- wikiPageId = PortalObjectId.parse("/" + Constants.LABS_PORTAL + "/"
- + pageName, PortalObjectId.CANONICAL_FORMAT);
-
- windowId = PortalObjectId.parse("/" + Constants.LABS_PORTAL + "/"
- + pageName + "/" + windowName,
- PortalObjectId.CANONICAL_FORMAT);
- }
- }
-
- public String getPageName() {
- return pageName;
- }
-
- public void setPageName(String pageName) {
- this.pageName = pageName;
- setIds();
- }
-
- public String getWindowName() {
- return windowName;
- }
-
- public void setWindowName(String windowName) {
- this.windowName = windowName;
- setIds();
- }
-
- public LabsPortalObjectCommandFactory getPortalObjectCF() {
- return portalObjectCF;
- }
-
- public void setPortalObjectCF(LabsPortalObjectCommandFactory portalObjectCF) {
- this.portalObjectCF = portalObjectCF;
- }
-
- private ControllerCommand getDefaultCommand() {
- return new RenderPageCommand(wikiPageId);
- }
-
- public ControllerCommand doMapping(ServerInvocation invocation,
- String host, String contextPath, PathParser parser) {
- String firstToken = parser.getFirstToken();
- String language = null;
- String current = parser.getCurrent();
-
- if ((firstToken != null)
- && (firstToken.length() == 2)
- && (Character.isLowerCase(firstToken.charAt(0)) && Character
- .isLowerCase(firstToken.charAt(1)))) {
- language = firstToken.toUpperCase();
- parser.proceed();
- }
-
- String page = null;
- while (parser.hasFirstToken()) {
- firstToken = parser.getFirstToken();
- if (Character.isUpperCase(firstToken.charAt(0))) {
- if (page == null) {
- page = firstToken;
- } else {
- page += "/" + firstToken;
- }
- } else {
- sendRedirect(invocation, "/wiki-files/" + current);
- return null;
- }
-
- parser.proceed();
- }
-
- String version = null;
- if ((page != null) && (page.contains(":"))) {
- String[] tokens = page.split("[:]", 2);
- if ((tokens.length == 2)) {
- page = tokens[0];
- version = tokens[1];
- } else {
- return getDefaultCommand();
- }
- }
-
- PortletParametersStateString params = new PortletParametersStateString();
- params
- .setValue(MapperTools.JSF_VIEW_ID_PARAM,
- "/views/wiki_view.xhtml");
- if (page != null)
- params.setValue("page", page);
- if (language != null) {
- params.setValue("language", language);
- }
- if (version != null) {
- params.setValue("version", version);
- }
-
- Window wikiWindow = (Window) getContainer().getObject(windowId);
- if (hasMetaParameter(invocation)) {
- 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(), false);
- }
- }
-}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/AbstractPageDelegateCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsDelegateCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/AbstractPageDelegateCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/AbstractPageDelegateCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,47 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.labs.mapper.command.AbstractBaseCF;
+import org.jboss.labs.mapper.command.PortalObjectCF;
+
+/**
+ * A base class for Labs delegate command factories.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public abstract class AbstractPageDelegateCF extends AbstractBaseCF
+ implements PageDelegateCF {
+ private PageDelegatingCF pageDelegatingCF;
+ private PortalObjectCF portalObjectCF;
+ private String path;
+
+ public PageDelegatingCF getPageDelegatingCF() {
+ return pageDelegatingCF;
+ }
+
+ public void setPageDelegatingCF(PageDelegatingCF pageDelegatingCF) {
+ this.pageDelegatingCF = pageDelegatingCF;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public PortalObjectCF getPortalObjectCF() {
+ return portalObjectCF;
+ }
+
+ public void setPortalObjectCF(PortalObjectCF portalObjectCF) {
+ this.portalObjectCF = portalObjectCF;
+ }
+
+ /*
+ * Service lifecycle methods.
+ */
+
+ protected void startService() throws Exception {
+ getPageDelegatingCF().register(getPath(), this);
+ }
+}
Added: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/DownloadCF.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/DownloadCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/DownloadCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,75 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.core.model.portal.PortalObjectContainer;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.forge.common.Constants;
+import org.jboss.forge.common.exceptions.ServiceRetrievalException;
+import org.jboss.forge.common.ejb3.LabsServices;
+import org.jboss.forge.common.ejb3.ProjectPagesService;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class DownloadCF extends AbstractPageDelegateCF {
+ protected final static String DOWNLOAD_PORTLET_NAME = "downloads";
+
+ public ControllerCommand doMapping(ServerInvocation invocation, String host,
+ String contextPath, PathParser parser, Page page) {
+ String projectId = page.getDeclaredProperty(Constants.PORTAL_OBJECT_LABS_MARKER);
+
+ // Only project pages are supported.
+ if (projectId == null) {
+ return null;
+ }
+
+ ProjectPagesService pps;
+
+ try {
+ pps = LabsServices.getProjectPagesService();
+ } catch (ServiceRetrievalException e) {
+ return null;
+ }
+
+ String pageName = null;
+ if (!projectId.equals(page.getName())) {
+ pageName = page.getName();
+ }
+
+ // First trying a window with a possible unique-id
+ Window downloadsWindow = page.getWindow(pps.createWindowId(DOWNLOAD_PORTLET_NAME, projectId, pageName,
+ parser.getFirstToken()));
+ if (downloadsWindow == null) {
+ // Trying if there is no single downloads window.
+ downloadsWindow = page.getWindow(pps.createWindowId(DOWNLOAD_PORTLET_NAME, projectId, pageName, null));
+ } else {
+ // Forgetting the unique-id.
+ parser.proceed();
+ }
+
+ // Checking if a downloads window was found on the page.
+ if (downloadsWindow == null) {
+ return null;
+ }
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("category", parser.getCurrent());
+
+ if (hasMetaParameter(invocation)) {
+ return getPortalObjectCF().doMapping(invocation, downloadsWindow,
+ params, false);
+ } else {
+ params.put(PortletRequestDecoder.META_PARAMETER, Integer
+ .toString(PortletRequestDecoder.RENDER_MASK));
+ return getPortalObjectCF().doMapping(invocation, downloadsWindow,
+ params, false);
+ }
+ }
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegateCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegateCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegateCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegateCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,25 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.command.BaseCF;
+
+/**
+ * A base interface for factories, to which mapping requests can
+ * be delegated basing on the request path, by
+ * {@see LabsDelegatingCommandFactory}.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface PageDelegateCF extends BaseCF {
+ public ControllerCommand doMapping(ServerInvocation invocation,
+ String host, String contextPath,
+ PathParser parser, Page page);
+
+ public PageDelegatingCF getPageDelegatingCF();
+ public void setPageDelegatingCF(PageDelegatingCF delegating);
+
+ public String getPath();
+ public void setPath(String path);
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCF.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactory.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,27 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.command.BaseCF;
+
+/**
+ * A delegating command factory, which delegates mapping to registered
+ * factories based on the first token of the requested path.
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public interface PageDelegatingCF extends BaseCF {
+ public ControllerCommand doMapping(ServerInvocation invocation,
+ String host, String contextPath,
+ PathParser parser, Page page);
+
+ /**
+ * Registeres a factory so that requests with the given first token
+ * will be delegated to it.
+ * @param path First token of the request path that must be matched
+ * in order to delegate the mapping.
+ * @param factory Factory to which mapping should be delegated.
+ */
+ public void register(String path, PageDelegateCF factory);
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCFImpl.java (from rev 10330, labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsDelegatingCommandFactoryImpl.java)
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCFImpl.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/PageDelegatingCFImpl.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,47 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.command.AbstractBaseCF;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ *
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class PageDelegatingCFImpl extends AbstractBaseCF
+ implements PageDelegatingCF {
+ private Map<String, PageDelegateCF> factories;
+
+ public PageDelegatingCFImpl() {
+ factories = new HashMap<String, PageDelegateCF>();
+ }
+
+ public ControllerCommand doMapping(ServerInvocation invocation, String host,
+ String contextPath, PathParser parser, Page page) {
+ if (parser.hasFirstToken()) {
+ // Checking if there is any delegate factory registered for the
+ // given token.
+ String firstToken = parser.getFirstToken();
+ for (String path : factories.keySet()) {
+ if (firstToken.equals(path)) {
+ // Found a match; skipping the matched token and proceeding
+ // with the mapping.
+ parser.proceed();
+ return factories.get(path).doMapping(invocation, host, contextPath,
+ parser, page);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public synchronized void register(String path, PageDelegateCF factory) {
+ factories.put(path, factory);
+ }
+}
Copied: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/WikiCF.java (from rev 10330, 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/delegating/page/WikiCF.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/delegating/page/WikiCF.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,126 @@
+package org.jboss.labs.mapper.command.delegating.page;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.PortalObjectId;
+import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.core.model.portal.Page;
+import org.jboss.portal.core.model.portal.command.RenderPageCommand;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.labs.mapper.PathParser;
+import org.jboss.labs.mapper.MapperTools;
+import org.jboss.forge.common.Constants;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class WikiCF extends AbstractPageDelegateCF {
+ private String pageName;
+
+ private PortalObjectId wikiPageId;
+
+ private String windowName;
+
+ private PortalObjectId windowId;
+
+ private void setIds() {
+ if ((pageName != null) && (windowName != null)) {
+ wikiPageId = PortalObjectId.parse("/" + Constants.LABS_PORTAL + "/"
+ + pageName, PortalObjectId.CANONICAL_FORMAT);
+
+ windowId = PortalObjectId.parse("/" + Constants.LABS_PORTAL + "/"
+ + pageName + "/" + windowName,
+ PortalObjectId.CANONICAL_FORMAT);
+ }
+ }
+
+ public String getPageName() {
+ return pageName;
+ }
+
+ public void setPageName(String pageName) {
+ this.pageName = pageName;
+ setIds();
+ }
+
+ public String getWindowName() {
+ return windowName;
+ }
+
+ public void setWindowName(String windowName) {
+ this.windowName = windowName;
+ setIds();
+ }
+
+ private ControllerCommand getDefaultCommand() {
+ return new RenderPageCommand(wikiPageId);
+ }
+
+ public ControllerCommand doMapping(ServerInvocation invocation,
+ String host, String contextPath, PathParser parser, Page portalPage) {
+ String firstToken = parser.getFirstToken();
+ String language = null;
+ String current = parser.getCurrent();
+
+ if ((firstToken != null)
+ && (firstToken.length() == 2)
+ && (Character.isLowerCase(firstToken.charAt(0)) && Character
+ .isLowerCase(firstToken.charAt(1)))) {
+ language = firstToken.toUpperCase();
+ parser.proceed();
+ }
+
+ String page = null;
+ while (parser.hasFirstToken()) {
+ firstToken = parser.getFirstToken();
+ if (Character.isUpperCase(firstToken.charAt(0))) {
+ if (page == null) {
+ page = firstToken;
+ } else {
+ page += "/" + firstToken;
+ }
+ } else {
+ sendRedirect(invocation, "/wiki-files/" + current);
+ return null;
+ }
+
+ parser.proceed();
+ }
+
+ String version = null;
+ if ((page != null) && (page.contains(":"))) {
+ String[] tokens = page.split("[:]", 2);
+ if ((tokens.length == 2)) {
+ page = tokens[0];
+ version = tokens[1];
+ } else {
+ return getDefaultCommand();
+ }
+ }
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put(MapperTools.JSF_VIEW_ID_PARAM, "/views/wiki_view.xhtml");
+ if (page != null)
+ params.put("page", page);
+ if (language != null) {
+ params.put("language", language);
+ }
+ if (version != null) {
+ params.put("version", version);
+ }
+
+ Window wikiWindow = (Window) getContainer().getObject(windowId);
+ if (hasMetaParameter(invocation)) {
+ return getPortalObjectCF().doMapping(invocation, wikiWindow,
+ params, false);
+ } else {
+ params.put(PortletRequestDecoder.META_PARAMETER, Integer
+ .toString(PortletRequestDecoder.RENDER_MASK));
+ return getPortalObjectCF().doMapping(invocation, wikiWindow,
+ params, false);
+ }
+ }
+}
Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -1,9 +1,17 @@
package org.jboss.labs.mapper.url;
import org.jboss.portal.core.controller.command.mapper.URLFactoryDelegate;
+import org.jboss.portal.core.model.portal.PortalObjectId;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowActionCommand;
+import org.jboss.portal.core.model.portal.command.InvokePortletWindowRenderCommand;
import org.jboss.portal.server.ServerURL;
import org.jboss.portal.server.AbstractServerURL;
+import org.jboss.portal.portlet.impl.PortletRequestEncoder;
+import org.jboss.portal.portlet.impl.PortletRequestDecoder;
+import org.jboss.portal.portlet.StateString;
+import java.util.Iterator;
+
/**
* @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
*/
@@ -28,4 +36,57 @@
return asu;
}
+
+ /**
+ * To the given buffer, adds a portal-id-path to the given portal object id,
+ * without the portal name (that is, the first part of the id).
+ * @param sb Buffer to which to add the path.
+ * @param id Id from which to read the information.
+ * @param addLast Should the last token be added to the buffer.
+ */
+ protected void addToPath(StringBuffer sb, PortalObjectId id, boolean addLast) {
+ Iterator it = id.names();
+ // Skipping the portal name.
+ it.next();
+ for (; it.hasNext();) {
+ String current = (String) it.next();
+
+ if ((addLast || it.hasNext())) {
+ addTokenToPath(sb, current);
+ } else {
+ break;
+ }
+ }
+ }
+
+ protected void encodeUrl(InvokePortletWindowActionCommand actionCmd,
+ InvokePortletWindowRenderCommand renderCmd,
+ ServerURL url, StateString navigationalState) {
+ PortletRequestEncoder encoder = new PortletRequestEncoder(url.getParameterMap());
+
+ if (actionCmd != null) {
+ encoder.encodeAction(actionCmd.getNavigationalState(),
+ actionCmd.getInteractionState(), actionCmd.getMode(),
+ actionCmd.getWindowState());
+ } else if (renderCmd != null) {
+ encoder.encodeRender(navigationalState,
+ renderCmd.getMode(), renderCmd.getWindowState());
+
+ // 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);
+ }
+ }
+ }
+ }
}
Added: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/DownloadUrlFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/DownloadUrlFactory.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/DownloadUrlFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,84 @@
+package org.jboss.labs.mapper.url;
+
+import org.jboss.portal.server.ServerURL;
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.command.*;
+import org.jboss.portal.core.model.portal.PortalObjectId;
+import org.jboss.portal.core.model.portal.PortalObjectContainer;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.PortletParametersStateString;
+import org.jboss.forge.common.Constants;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class DownloadUrlFactory extends AbstractLabsDelegateUrlFactory {
+ private PortalObjectContainer container;
+
+ public PortalObjectContainer getContainer() {
+ return container;
+ }
+
+ public void setContainer(PortalObjectContainer container) {
+ this.container = container;
+ }
+
+ public ServerURL doMapping(ServerInvocation invocation, ControllerCommand cmd) {
+ if (cmd == null) {
+ throw new IllegalArgumentException("No null command accepted");
+ }
+
+ if (cmd instanceof InvokeWindowCommand) {
+ PortalObjectCommand poc = (PortalObjectCommand) cmd;
+ PortalObjectId targetId = poc.getTargetId();
+
+ if (targetId.getLength() >= 0) {
+ return null;
+ }
+
+ if (targetId.getName(Math.abs(targetId.getLength()) - 1).toLowerCase().contains(getPath())) {
+ StringBuffer sb = new StringBuffer();
+ addToPath(sb, targetId, false);
+ addTokenToPath(sb, getPath());
+
+ InvokePortletWindowActionCommand actionCmd = null;
+ InvokePortletWindowRenderCommand renderCmd = null;
+
+ StateString navigationalState = null;
+
+ if (poc instanceof InvokePortletWindowActionCommand) {
+ actionCmd = (InvokePortletWindowActionCommand) poc;
+ navigationalState = actionCmd.getNavigationalState();
+ } else if (poc instanceof InvokePortletWindowRenderCommand) {
+ renderCmd = (InvokePortletWindowRenderCommand) poc;
+ navigationalState = renderCmd.getNavigationalState();
+ }
+
+ String uniqueId = getContainer().getObject(targetId).getDeclaredProperty(
+ Constants.PORTAL_OBJECT_UNIQUE_ID_MARKER);
+ if (uniqueId != null) {
+ addTokenToPath(sb, uniqueId);
+ }
+
+ if (navigationalState instanceof PortletParametersStateString) {
+ PortletParametersStateString ppss =
+ (PortletParametersStateString) navigationalState;
+
+ if (ppss.getValue("category") != null) {
+ addTokenToPath(sb, ppss.getValue("category").toLowerCase());
+ }
+ }
+
+ ServerURL url = convertToURL(sb);
+ encodeUrl(actionCmd, renderCmd, url, navigationalState);
+
+ url.getParameterMap().remove("category");
+
+ return url;
+ }
+ }
+
+ return null;
+ }
+}
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-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -6,8 +6,6 @@
import org.jboss.portal.server.ServerInvocation;
import org.jboss.portal.portlet.StateString;
import org.jboss.portal.portlet.PortletParametersStateString;
-import org.jboss.portal.portlet.impl.PortletRequestEncoder;
-import org.jboss.portal.portlet.impl.PortletRequestDecoder;
import org.jboss.labs.mapper.MapperTools;
/**
@@ -70,33 +68,8 @@
}
ServerURL url = convertToURL(sb);
- PortletRequestEncoder encoder = new PortletRequestEncoder(url.getParameterMap());
+ encodeUrl(actionCmd, renderCmd, url, navigationalState);
- if (actionCmd != null) {
- encoder.encodeAction(actionCmd.getNavigationalState(),
- actionCmd.getInteractionState(), actionCmd.getMode(),
- actionCmd.getWindowState());
- } else if (renderCmd != null) {
- encoder.encodeRender(navigationalState,
- renderCmd.getMode(), renderCmd.getWindowState());
-
- // 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(
MapperTools.JSF_VIEW_ID_PARAM);
String jsfPage = jsfPageParam == null ? null : jsfPageParam[0];
Modified: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java 2007-03-20 22:44:49 UTC (rev 10370)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/java/org/jboss/forge/projects/downloads/Downloads.java 2007-03-20 23:51:47 UTC (rev 10371)
@@ -29,7 +29,6 @@
import javax.portlet.PortletRequestDispatcher;
-import org.jboss.forge.common.Constants;
import org.jboss.forge.common.ForgeHelper;
import org.jboss.forge.common.ejb3.LabsServices;
import org.jboss.forge.common.exceptions.ServiceRetrievalException;
@@ -47,10 +46,6 @@
* @author adamw
*/
public class Downloads extends JBossPortlet {
- private final static String DOWNLOADS_JSP = "prj-downloads/downloads.jsp";
-
- private static final String DOWNLOADS = "Downloads";
-
public void doView(JBossRenderRequest request, JBossRenderResponse response)
throws IOException {
response.setContentType("text/html");
@@ -62,42 +57,37 @@
// Getting the selected project
String projectId = ProjectsHelper.getSelectedProjectId(request);
if (projectId == null)
- throw new Exception("1");
+ throw new Exception("No project selected");
response.setTitle(projects.getProjectName(projectId) + " "
- + DOWNLOADS);
+ + "Downloads");
// Getting the selected category (null if no selected category)
- String categoryId = request
- .getParameter(Constants.FREEZONE_PATH_PARAM);
+ String categoryId = request.getParameter("category");
- // Getting the appropriate context
- Set<File> files = getAllFiles(projectId);
+ request.setAttribute(DownloadsConstants.FILES, getAllFiles(projectId));
- request.setAttribute(DownloadsConstants.FILES, files);
-
// Setting the attributes
- // request.setAttribute(PortalJsp.CTX_REQUEST, context);
request.setAttribute(ProjectsHelper.PROJECT_ID, projectId);
// set tagme attributes
- request.setAttribute("DOWNLOAD-URL", "/portal/" + projectId
+ request.setAttribute("DOWNLOAD-URL", "/" + projectId
+ "/downloads/" + ((categoryId != null) ? categoryId : ""));
if (request.getUser() != null) {
- request.setAttribute("DOWNLOAD-USER", request.getUser()
- .getUserName());
+ request.setAttribute("DOWNLOAD-USER", request.getUser().getUserName());
}
// Displaying the JSP
PortletRequestDispatcher rd = getPortletContext()
.getRequestDispatcher(
ForgeHelper.createRepoAccessPath(portalName,
- DOWNLOADS_JSP));
+ "prj-downloads/downloads.jsp"));
rd.include(request, response);
} catch (Exception e) {
- response.getWriter().write("ERROR: " + e.getMessage());
+ e.printStackTrace();
+ response.getWriter().write("ERROR: " + e.getMessage());
}
}
@@ -106,7 +96,20 @@
Set<File> allFiles = new TreeSet<File>(new Comparator<File>() {
public int compare(File o1, File o2) {
- return o1.getRelease().compareTo(o2.getRelease());
+ if (o1 == null) {
+ if (o2 == null) return 0;
+ return -1;
+ }
+
+ if (o1.getRelease() == null) {
+ if (o2.getRelease() == null) {
+ return 0;
+ }
+
+ return -1;
+ }
+
+ return o1.getRelease().compareTo(o2.getRelease());
}
});
@@ -123,7 +126,11 @@
}
private void addFilesFromCategory(Set<File> allFiles, Category category) {
- for (Category c : category.getCategories().getCategory()) {
+ if (category.getCategories() == null) {
+ return;
+ }
+
+ for (Category c : category.getCategories().getCategory()) {
addFilesFromCategory(allFiles, c);
}
Added: labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/jboss-portlet.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/jboss-portlet.xml (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-portlets/src/web/WEB-INF/jboss-portlet.xml 2007-03-20 23:51:47 UTC (rev 10371)
@@ -0,0 +1,8 @@
+<portlet-app>
+ <portlet>
+ <portlet-name>DownloadsPortlet</portlet-name>
+ <transaction>
+ <trans-attribute>Required</trans-attribute>
+ </transaction>
+ </portlet>
+</portlet-app>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list