[jboss-svn-commits] JBL Code SVN: r9623 - in labs/jbosslabs/trunk/portal-extensions: forge-mapper/src/java/org/jboss/labs/mapper/command and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 19 19:24:50 EST 2007


Author: adamw
Date: 2007-02-19 19:24:50 -0500 (Mon, 19 Feb 2007)
New Revision: 9623

Added:
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsDelegatingURLFactoryService.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java
   labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml
Log:
Wiki command & url factories

Modified: labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/configuration/to-copy/server/default/deploy/jboss-portal.sar/META-INF/jboss-service.xml	2007-02-20 00:24:50 UTC (rev 9623)
@@ -751,8 +751,27 @@
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
    </mbean>
+   <mbean
+      code="org.jboss.labs.mapper.command.WikiCommandFactory"
+      name="portal:commandFactory=Wiki"
+      xmbean-dd=""
+      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+      <xmbean/>
+      <attribute name="Path">wiki</attribute>
+      <attribute name="PageName">jbosswiki</attribute>
+      <attribute name="WindowName">WikiPortletWindow</attribute>
+      <depends
+         optional-attribute-name="Container"
+         proxy-type="attribute">portal:container=PortalObject</depends>
+      <depends
+         optional-attribute-name="DelegatingCF"
+         proxy-type="attribute">portal:commandFactory=LabsDelegating</depends>
+      <depends
+         optional-attribute-name="PortalObjectCF"
+         proxy-type="attribute">portal:commandFactory=LabsPortalObject</depends>
+   </mbean>
 
-    <mbean
+   <mbean
       code="org.jboss.labs.mapper.command.LabsPortalObjectCommandFactoryImpl"
       name="portal:commandFactory=LabsPortalObject"
       xmbean-dd=""
@@ -765,12 +784,17 @@
    </mbean>
 
    <!-- URL factories -->
+   <!-- LABS -->
    <mbean
-      code="org.jboss.portal.core.controller.command.mapper.DelegatingURLFactoryService"
+      code="org.jboss.labs.mapper.url.LabsDelegatingURLFactoryService"
       name="portal:urlFactory=Delegating"
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
+      <!-- LABS -->
+      <depends
+         optional-attribute-name="NextFactory"
+         proxy-type="attribute">portal:urlFactory=LabsMain</depends>
    </mbean>
    <!-- LABS
    <mbean
@@ -842,12 +866,21 @@
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
       <depends
-         optional-attribute-name="Factory"
-         proxy-type="attribute">portal:urlFactory=Delegating</depends>
-      <depends
          optional-attribute-name="Container"
          proxy-type="attribute">portal:container=PortalObject</depends>
    </mbean>
+   <mbean
+      code="org.jboss.labs.mapper.url.WikiUrlFactory"
+      name="portal:urlFactory=Wiki"
+      xmbean-dd=""
+      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+      <attribute name="Path">wiki</attribute>
+      <attribute name="PageName">jbosswiki</attribute>
+      <xmbean/>
+      <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-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/AbstractLabsBaseCommandFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -1,7 +1,13 @@
 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;
 
 /**
  * A base class for Labs command factories.
@@ -18,7 +24,34 @@
     public void setContainer(PortalObjectContainer container) {
         this.container = container;
     }  
-    
+
+    protected WindowNavigationalState getWindowNavState(ServerInvocation invocation,
+                                                        Window window) {
+        WindowNavigationalState windowNavState = (WindowNavigationalState)
+                invocation.getAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
+                        window.getId() + "_window");
+        if (windowNavState == null) {
+            windowNavState = new WindowNavigationalState();
+            invocation.setAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
+                    window.getId() + "_window", windowNavState);
+        }
+
+        return windowNavState;
+    }
+
+    protected ControllerCommand invokeRenderCommand(ServerInvocation invocation, Window window,
+                                                  StateString params) {
+        WindowNavigationalState windowNavState = 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;
+    }
+
     /*
      * Service lifecycle methods.
      */

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -6,6 +6,8 @@
 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.
@@ -17,4 +19,7 @@
 
     public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
                                        Window window);
+
+    public ControllerCommand doMapping(ServerInvocation invocation, Window window,
+                                        Map<String, String> additionalParameters);
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -36,33 +36,12 @@
     @Inject
     private ContentManager cm;
 
-    private WindowNavigationalState getWindowNavState(ServerInvocation invocation, Window window) {
-        WindowNavigationalState windowNavState = (WindowNavigationalState)
-                invocation.getAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
-                        window.getId() + "_window");
-        if (windowNavState == null) {
-            windowNavState = new WindowNavigationalState();
-            invocation.setAttribute(ServerInvocation.NAVIGATIONAL_STATE_SCOPE,
-                    window.getId() + "_window", windowNavState);
-        }
-
-        return windowNavState;
-    }
-
-    private ControllerCommand invokeRenderCommand(ServerInvocation invocation, Window window,
-                                                  StateString params) {
-        WindowNavigationalState windowNavState = getWindowNavState(invocation, window);
-
-        return new InvokePortletWindowRenderCommand(window.getId(), windowNavState.getMode(),
-                windowNavState.getWindowState(), params);
-    }
-
     public ControllerCommand doMapping(ServerInvocation invocation, PathParser parser,
                                        Window window) {
         return doMapping(invocation, window, null);
     }
 
-    private ControllerCommand doMapping(ServerInvocation invocation, Window window,
+    public ControllerCommand doMapping(ServerInvocation invocation, Window window,
                                         Map<String, String> additionalParameters) {
         if (window == null) {
             throw new IllegalArgumentException("Window cannot be null.");
@@ -190,8 +169,7 @@
             if (path == null) { path = ""; }
 
             // Checking if there is a meta parameter - if so, invoking portal actions.
-            if (invocation.getServerContext().getQueryParameterMap().get(
-                    PortletRequestDecoder.META_PARAMETER) != null) {
+            if (hasMetaParameter(invocation)) {
                 // If so, invoking default portal actions on a window action request,
                 // with a default path parameter.
                 Map<String, String> additionalParameters = new HashMap<String, String>();

Added: 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	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/WikiCommandFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -0,0 +1,141 @@
+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.labs.mapper.PathParser;
+import org.jboss.forge.common.Constants;
+
+import java.util.Map;
+
+/**
+ * @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) {
+        System.out.println("IN WIKI CF");
+
+        if (!parser.hasFirstToken()) {
+            return getDefaultCommand();
+        }
+
+        String firstToken = parser.getFirstToken();
+        String language = null;
+
+        if ((firstToken.length() == 2) && (Character.isUpperCase(firstToken.charAt(1)))) {
+            language = firstToken;
+            parser.proceed();
+        }
+
+        String page = null;
+        String file = null;
+        while (parser.hasFirstToken()) {
+            firstToken = parser.getFirstToken();
+            if (Character.isUpperCase(firstToken.charAt(0))) {
+                if (page == null) {
+                    page = firstToken;
+                } else {
+                    page += "/" + firstToken;
+                }
+            } else if (firstToken.startsWith("file:")) {
+                file = parser.getCurrent().substring(5);
+            } else {
+                return getDefaultCommand();
+            }
+        }
+
+        if (page == null) {
+            return getDefaultCommand();
+        }
+
+        String version = null;
+        if (page.contains(":")) {
+            String[] tokens = page.split("[:]", 2);
+            if ((tokens.length == 2)) {
+                page = tokens[0];
+                version = tokens[1];
+            } else {
+                return getDefaultCommand();
+            }
+        } else if ((file != null) && (file.contains(":"))) {
+            String[] tokens = file.split("[:]", 2);
+            if ((tokens.length == 2)) {
+                file = tokens[0];
+                version = tokens[1];
+            } else {
+                return getDefaultCommand();
+            }
+        }
+
+        if (file != null) {
+            // Redirect - where?
+            // TODO
+            return null;
+        }
+
+        PortletParametersStateString params = new PortletParametersStateString();
+        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());
+        } else {
+            return invokeRenderCommand(invocation, wikiWindow,
+                    params);
+        }
+    }
+}

Added: 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	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/AbstractLabsDelegateUrlFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -0,0 +1,31 @@
+package org.jboss.labs.mapper.url;
+
+import org.jboss.portal.core.controller.command.mapper.URLFactoryDelegate;
+import org.jboss.portal.server.ServerURL;
+import org.jboss.portal.server.AbstractServerURL;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public abstract class AbstractLabsDelegateUrlFactory extends URLFactoryDelegate {
+    private String path;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    protected void addTokenToPath(StringBuffer sb, String toAdd) {
+        sb.append('/').append(toAdd);
+    }
+
+    protected ServerURL convertToURL(StringBuffer sb) {
+        AbstractServerURL asu = new AbstractServerURL();
+        asu.setPortalRequestPath(sb.toString());
+
+        return asu;
+    }
+}

Added: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsDelegatingURLFactoryService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsDelegatingURLFactoryService.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsDelegatingURLFactoryService.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -0,0 +1,106 @@
+package org.jboss.labs.mapper.url;
+
+import org.jboss.portal.core.controller.command.mapper.AbstractURLFactory;
+import org.jboss.portal.core.controller.command.mapper.DelegatingURLFactory;
+import org.jboss.portal.core.controller.command.mapper.URLFactory;
+import org.jboss.portal.core.controller.command.mapper.URLFactoryDelegate;
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.server.ServerURL;
+import org.jboss.portal.server.ServerInvocation;
+
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class LabsDelegatingURLFactoryService extends AbstractURLFactory
+        implements DelegatingURLFactory
+{
+   private URLFactory nextFactory;
+
+   public URLFactory getNextFactory()
+   {
+       return nextFactory;
+   }
+
+   public void setNextFactory(URLFactory nextFactory)
+   {
+       this.nextFactory = nextFactory;
+   }
+
+    /** The different delegates. */
+   private ArrayList delegates = new ArrayList();
+
+   public ServerURL doMapping(ServerInvocation invocation, ControllerCommand cmd)
+   {
+      if (cmd == null)
+      {
+         throw new IllegalArgumentException("No null command accepted");
+      }
+
+      //
+      if (delegates != null)
+      {
+         for (int i = 0;i < delegates.size();i++)
+         {
+            URLFactory delegate = (URLFactory)delegates.get(i);
+            ServerURL url = delegate.doMapping(invocation, cmd);
+            if (url != null)
+            {
+               return url;
+            }
+         }
+      }
+
+      //
+      if (nextFactory != null)
+      {
+          return nextFactory.doMapping(invocation, cmd);
+      }
+
+      return null;
+   }
+
+   public void register(URLFactoryDelegate factory)
+   {
+      if (factory == null)
+      {
+         throw new IllegalArgumentException("Command class name must not be null");
+      }
+      synchronized (this)
+      {
+         if (delegates.contains(factory))
+         {
+            log.warn("Dual registration of URL factory " + factory);
+         }
+         else
+         {
+            ArrayList copy = new ArrayList(delegates);
+            copy.add(factory);
+            delegates = copy;
+         }
+      }
+   }
+
+   public void unregister(URLFactoryDelegate factory)
+   {
+      if (factory == null)
+      {
+         throw new IllegalArgumentException("Command class name must not be null");
+      }
+      synchronized (this)
+      {
+         if (delegates.contains(factory))
+         {
+            log.warn("Unregistration of URL factory " + factory + " failed because it is not registered");
+         }
+         else
+         {
+            ArrayList copy = new ArrayList(delegates);
+            copy.remove(factory);
+            delegates = copy;
+         }
+      }
+   }
+}
\ No newline at end of file

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/LabsMainUrlFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -1,6 +1,6 @@
 package org.jboss.labs.mapper.url;
 
-import org.jboss.portal.core.controller.command.mapper.URLFactoryDelegate;
+import org.jboss.portal.core.controller.command.mapper.AbstractURLFactory;
 import org.jboss.portal.core.controller.ControllerCommand;
 import org.jboss.portal.core.model.portal.command.*;
 import org.jboss.portal.core.model.portal.*;
@@ -18,7 +18,7 @@
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
  */
-public class LabsMainUrlFactory extends URLFactoryDelegate {
+public class LabsMainUrlFactory extends AbstractURLFactory {
     /*
      * Getters and setters.
      */
@@ -83,8 +83,7 @@
                 addToPath(sb, poc.getTargetId(), true);
 
                 return convertToURL(sb);
-            } else
-            if (poc instanceof InvokeWindowCommand) {
+            } else if (poc instanceof InvokeWindowCommand) {
                 InvokeWindowCommand wndCmd = (InvokeWindowCommand) poc;
                 InvokePortletWindowActionCommand actionCmd = null;
                 InvokePortletWindowRenderCommand renderCmd = null;

Added: 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	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/url/WikiUrlFactory.java	2007-02-20 00:24:50 UTC (rev 9623)
@@ -0,0 +1,111 @@
+package org.jboss.labs.mapper.url;
+
+import org.jboss.portal.core.controller.ControllerCommand;
+import org.jboss.portal.core.model.portal.command.*;
+import org.jboss.portal.server.ServerURL;
+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;
+
+/**
+ * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
+ */
+public class WikiUrlFactory extends AbstractLabsDelegateUrlFactory {
+    private String pageName;
+
+    public String getPageName() {
+        return pageName;
+    }
+
+    public void setPageName(String pageName) {
+        this.pageName = pageName;
+    }
+
+    public ServerURL doMapping(ServerInvocation serverInvocation, ControllerCommand cmd) {
+        if (cmd == null) {
+            throw new IllegalArgumentException("No null command accepted");
+        }
+
+        if (cmd instanceof PortalObjectCommand) {
+            PortalObjectCommand poc = (PortalObjectCommand) cmd;
+
+            if (getPageName().equals(poc.getTargetId().getName(1))) {
+                StringBuffer sb = new StringBuffer();
+                addTokenToPath(sb, getPath());
+
+                if (poc instanceof RenderPageCommand) {
+                    return convertToURL(sb);
+                } else if (poc instanceof InvokeWindowCommand) {
+                    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();
+                    }
+
+                    if (navigationalState instanceof PortletParametersStateString) {
+                        PortletParametersStateString ppss =
+                                (PortletParametersStateString) navigationalState;
+
+                        if (ppss.getValue("language") != null) {
+                            addTokenToPath(sb, ppss.getValue("language"));
+                        }
+
+                        if (ppss.getValue("page") != null) {
+                            addTokenToPath(sb, ppss.getValue("page"));
+                        }
+
+                        if (ppss.getValue("version") != null) {
+                            sb.append(":").append(ppss.getValue("version"));
+                        }
+                    }
+
+                    ServerURL url = convertToURL(sb);
+
+                    if (actionCmd != null) {
+                        PortletRequestEncoder.encodeAction(url, actionCmd.getNavigationalState(),
+                                actionCmd.getInteractionState(), actionCmd.getMode(),
+                                actionCmd.getWindowState());
+                    } else if (renderCmd != null) {
+                        PortletRequestEncoder.encodeRender(url, navigationalState,
+                                renderCmd.getMode(), renderCmd.getWindowState());
+
+                        // 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);
+                            }
+                        }
+                    }
+
+                    url.getParameterMap().remove("language");
+                    url.getParameterMap().remove("page");
+                    url.getParameterMap().remove("version");
+
+                    return url;
+                }
+            }
+
+            return null;
+        }
+
+        return null;
+    }
+}

Modified: labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml	2007-02-19 22:54:52 UTC (rev 9622)
+++ labs/jbosslabs/trunk/portal-extensions/portal-default/src/web/WEB-INF/default-object.xml	2007-02-20 00:24:50 UTC (rev 9623)
@@ -301,7 +301,7 @@
 		<if-exists>overwrite</if-exists>
 		<parent-ref>default</parent-ref>
 		<page>
-			<page-name>wiki</page-name>
+			<page-name>jbosswiki</page-name>
 			<window>
 				<window-name>WikiPortletWindow</window-name>
 				<instance-ref>WikiPortletInstance</instance-ref>




More information about the jboss-svn-commits mailing list