You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/08/07 21:11:09 UTC

svn commit: r429435 - /cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/

Author: cziegeler
Date: Mon Aug  7 12:11:08 2006
New Revision: 429435

URL: http://svn.apache.org/viewvc?rev=429435&view=rev
Log:
Continue implementation

Added:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java   (with props)
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java   (with props)
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java   (with props)
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java   (with props)
Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/ContainerServicesImpl.java

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/ContainerServicesImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/ContainerServicesImpl.java?rev=429435&r1=429434&r2=429435&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/ContainerServicesImpl.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/ContainerServicesImpl.java Mon Aug  7 12:11:08 2006
@@ -37,12 +37,13 @@
 
     protected PortalContext portalContext = new PortalContextImpl();
 
+    protected PortalCallbackServiceImpl portalCallbackService = new PortalCallbackServiceImpl();
+
     /**
      * @see org.apache.pluto.RequiredContainerServices#getPortalCallbackService()
      */
     public PortalCallbackService getPortalCallbackService() {
-        // TODO Auto-generated method stub
-        return null;
+        return this.portalCallbackService;
     }
 
     /**

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java?rev=429435&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java Mon Aug  7 12:11:08 2006
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.portal.pluto;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.spi.PortalCallbackService;
+import org.apache.pluto.spi.PortletURLProvider;
+import org.apache.pluto.spi.ResourceURLProvider;
+
+/**
+ * @version $Id$
+ */
+public class PortalCallbackServiceImpl implements PortalCallbackService {
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#addResponseProperty(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String, java.lang.String)
+     */
+    public void addResponseProperty(HttpServletRequest request, PortletWindow window, String name, String value) {
+        // TODO Auto-generated method stub        
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#getPortletURLProvider(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow)
+     */
+    public PortletURLProvider getPortletURLProvider(HttpServletRequest request, PortletWindow window) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#getRequestProperties(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow)
+     */
+    public Map getRequestProperties(HttpServletRequest request, PortletWindow window) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#getResourceURLProvider(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow)
+     */
+    public ResourceURLProvider getResourceURLProvider(HttpServletRequest request, PortletWindow window) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#setResponseProperty(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String, java.lang.String)
+     */
+    public void setResponseProperty(HttpServletRequest request, PortletWindow window, String name, String value) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortalCallbackService#setTitle(javax.servlet.http.HttpServletRequest, org.apache.pluto.PortletWindow, java.lang.String)
+     */
+    public void setTitle(HttpServletRequest request, PortletWindow window, String title) {
+        // TODO Auto-generated method stub
+        
+    }
+}

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortalCallbackServiceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java?rev=429435&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java Mon Aug  7 12:11:08 2006
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.portal.pluto;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.portlet.WindowState;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.parameters.Parameterizable;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalManagerAspect;
+import org.apache.cocoon.portal.PortalManagerAspectPrepareContext;
+import org.apache.cocoon.portal.PortalManagerAspectRenderContext;
+import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.coplet.CopletDefinitionFeatures;
+import org.apache.cocoon.portal.coplet.CopletInstance;
+import org.apache.cocoon.portal.coplet.adapter.CopletDecorationProvider;
+import org.apache.cocoon.portal.coplet.adapter.impl.AbstractCopletAdapter;
+import org.apache.cocoon.portal.event.Receiver;
+import org.apache.cocoon.portal.event.coplet.CopletInstanceSizingEvent;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+
+/**
+ * This is the adapter to use JSR-168 portlets as coplets.
+ *
+ * @version $Id$
+ */
+public class PortletAdapter 
+    extends AbstractCopletAdapter
+    implements PortalManagerAspect, CopletDecorationProvider, Receiver, Parameterizable {
+
+    /** Name of the temporary coplet instance attribute holding the portlet window. */
+    public static final String PORTLET_WINDOW_ATTRIBUTE_NAME = PortletAdapter.class.getName() + "/window";
+
+    /** Name of the temporary coplet instance attribute holding the dynamic title (if any). */
+    public static final String DYNAMIC_TITLE_ATTRIBUTE_NAME = PortletAdapter.class.getName() + "/dynamic-title";
+
+    /** Name of the temporary coplet instance attribute holding the window state. */
+    public static final String WINDOW_STATE_ATTRIBUTE_NAME = PortletAdapter.class.getName() + "/window-state";
+
+    /** Name of the temporary coplet instance attribute holding the portlet mode. */
+    public static final String PORTLET_MODE_ATTRIBUTE_NAME = PortletAdapter.class.getName() + "/portlet-mode";
+
+    /** Name of the portlet mode for full screen (if supported). */
+    public static final String FULL_SCREEN_WINDOW_STATE_ATTRIBUTE_NAME = "full-screen-mode";
+
+    /** Name of attribute in the coplet definition storing the portlet identifier. */
+    public static final String PORTLET_ATTRIBUTE_NAME = "portlet";
+
+    /** The configuration. */
+    protected Parameters parameters;
+
+    /** Is full-screen enabled? */
+    protected boolean enableFullScreen;
+
+    /** Is maximized enabled? */
+    protected boolean enableMaximized;
+
+    /**
+     * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
+     */
+    public void parameterize(Parameters params) throws ParameterException {
+        this.parameters = params;
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.CopletAdapter#login(org.apache.cocoon.portal.coplet.CopletInstance)
+     */
+    public void login(CopletInstance coplet) {
+        super.login(coplet);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.impl.AbstractCopletAdapter#streamContent(org.apache.cocoon.portal.coplet.CopletInstance, org.xml.sax.ContentHandler)
+     */
+    public void streamContent(CopletInstance coplet,
+                              ContentHandler contentHandler)
+    throws SAXException {
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.CopletAdapter#logout(org.apache.cocoon.portal.coplet.CopletInstance)
+     */
+    public void logout(CopletInstance coplet) {
+        super.logout(coplet);
+    }
+
+    /**
+     * @see org.apache.avalon.framework.activity.Disposable#dispose()
+     */
+    public void dispose() {
+        super.dispose();
+    }
+
+    /**
+     * @see org.apache.avalon.framework.activity.Initializable#initialize()
+     */
+    public void initialize() throws Exception {
+        super.initialize();
+        this.enableFullScreen = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_FULL_SCREEN_ENABLED, true);
+        this.enableMaximized = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_MAXIMIZED_ENABLED, true);
+        this.initContainer();
+    }
+
+    /**
+     * Initialize the container
+     */
+    public void initContainer() throws Exception {
+    }
+
+    /**
+     * This method is invoked each time an event for a portlet is received (user clicking/activating
+     * something in the portlet).
+     * @see Receiver
+     */
+    public void inform(PortletURLProviderImpl event, PortalService service) {
+    }
+
+    /**
+     * This method is invoked each time a coplet instance is resized.
+     * @see Receiver
+     */
+    public void inform(CopletInstanceSizingEvent event, PortalService service) {
+        WindowState ws = WindowState.NORMAL;
+        if ( event.getSize() == CopletInstance.SIZE_NORMAL ) {
+            ws = WindowState.NORMAL;
+        } else if ( event.getSize() == CopletInstance.SIZE_MAXIMIZED ) {
+            ws = WindowState.MAXIMIZED;
+        } else if ( event.getSize() == CopletInstance.SIZE_MINIMIZED ) {
+            ws = WindowState.MINIMIZED;
+        } else if ( event.getSize() == CopletInstance.SIZE_FULLSCREEN ) {
+            ws = new WindowState((String)CopletDefinitionFeatures.getAttributeValue(event.getTarget().getCopletDefinition(), FULL_SCREEN_WINDOW_STATE_ATTRIBUTE_NAME, null));
+        }
+        final String wsString = (String)event.getTarget().getTemporaryAttribute(WINDOW_STATE_ATTRIBUTE_NAME);
+        if ( !wsString.equals(ws.toString()) ) {
+            event.getTarget().setTemporaryAttribute(WINDOW_STATE_ATTRIBUTE_NAME, ws.toString());
+        }
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.PortalManagerAspect#prepare(org.apache.cocoon.portal.PortalManagerAspectPrepareContext, org.apache.cocoon.portal.PortalService)
+     */
+    public void prepare(PortalManagerAspectPrepareContext aspectContext,
+                        PortalService service)
+    throws ProcessingException {
+        // process the events
+        aspectContext.invokeNext();
+
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.PortalManagerAspect#render(org.apache.cocoon.portal.PortalManagerAspectRenderContext, org.apache.cocoon.portal.PortalService, org.xml.sax.ContentHandler, java.util.Properties)
+     */
+    public void render(PortalManagerAspectRenderContext aspectContext,
+                       PortalService service,
+                       ContentHandler ch,
+                       Properties properties)
+    throws SAXException {
+        final Map objectModel = aspectContext.getObjectModel();
+
+        // don't generate a response, if we issued a redirect
+        if (objectModel.remove("portlet-event") == null) {
+            aspectContext.invokeNext(ch, properties);
+        }
+    }
+
+    protected String getResponse(CopletInstance instance, HttpServletResponse response) {
+        return response.toString();
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.CopletDecorationProvider#getPossibleCopletModes(CopletInstance)
+     */
+    public List getPossibleCopletModes(CopletInstance copletInstanceData) {
+        final List modes = new ArrayList();
+        return modes;
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.CopletDecorationProvider#getPossibleWindowStates(CopletInstance)
+     */
+    public List getPossibleWindowStates(CopletInstance copletInstanceData) {
+        final List states = new ArrayList();
+        return states;
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.coplet.adapter.CopletDecorationProvider#getTitle(org.apache.cocoon.portal.coplet.CopletInstance)
+     */
+    public String getTitle(CopletInstance copletInstanceData) {
+        String title = null;
+        if ( title == null ) {
+            title = copletInstanceData.getTitle();
+        }
+        return title;
+    }
+}

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletAdapter.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java?rev=429435&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java Mon Aug  7 12:11:08 2006
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2003-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.portal.pluto;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.portlet.PortletMode;
+import javax.portlet.WindowState;
+
+import org.apache.pluto.util.StringUtils;
+
+/**
+ * Create the URL for a portlet.
+ *
+ * @version $Id$
+ */
+public class PortletURLConverter {
+
+    public static final String ACTION = "ac";
+    public static final String MODE = "md";
+    public static final String PORTLET_ID = "pid";
+    public static final String PREFIX = "_";
+    public static final String PARAM = "pm";
+    public static final String STATE = "st";
+
+    private final Map urlData = new HashMap();
+    private final Map parameters = new HashMap();
+    private String copletId;
+
+    /**
+     * Constructor used when the URL will be marshalled.
+     * @param cid The coplet id.
+     */
+    public PortletURLConverter() {
+        // default constructor
+    }
+
+    /**
+     * Constructor used when the URL will be unmarshalled.
+     * @param eventData The url data.
+     */
+    public PortletURLConverter(String eventData) {
+        StringTokenizer tokenizer = new StringTokenizer(eventData, "/");
+        while (tokenizer.hasMoreTokens()) {
+            String token = tokenizer.nextToken();
+            if (isParameter(token)) {
+                String name = decodeParameterName(token);
+                String key = encodeParameterName(name);
+                this.parameters.put(key, token.substring(key.length()));
+            } else {
+                StringTokenizer tokens = new StringTokenizer(token, PREFIX);
+
+                if (tokens.countTokens() > 1) {
+                    String key = tokens.nextToken();
+                    if (key.equals(PORTLET_ID)) {
+                        this.copletId = tokens.nextToken();
+                    } else {
+                        String value = tokens.nextToken();
+                        urlData.put(key, value);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Return the PortletMode
+     * @return The PortletMode
+     */
+    public PortletMode getMode() {
+        String mode = (String)urlData.get(getModeKey());
+        if (mode != null) {
+            return new PortletMode(mode);
+        }
+        return PortletMode.VIEW;
+    }
+
+    /**
+     * Return the WindowState
+     * @return The WindowState
+     */
+    public WindowState getState() {
+        String state = (String) urlData.get(getStateKey());
+        if (state != null) {
+            return new WindowState(state);
+        }
+        return WindowState.NORMAL;
+    }
+
+    /**
+     * Return the indicator if this is an action.
+     * @return true if this is an action URL, false if a render URL.
+     */
+    public boolean isAction() {
+        return (urlData.get(getActionKey()) != null);
+    }
+
+    /**
+     * Indicates that the URL is an action.
+     */
+    public void setAction() {
+        urlData.put(getActionKey(),ACTION.toUpperCase());
+    }
+
+    /**
+     * Sets the PortletMode.
+     * @param mode The PortletMode
+     */
+    public void setMode(PortletMode mode) {
+        urlData.put(getModeKey(), mode.toString());
+    }
+
+    /**
+     * Sets the WindowState
+     * @param state The WindowState
+     */
+    public void setState(WindowState state) {
+        urlData.put(getStateKey(), state.toString());
+    }
+
+    /**
+     * Returns the portlet id.
+     * @return The portlet id.
+     */
+    public String getCopletId() {
+        return this.copletId;
+    }
+
+    public void setCopletId(String value) {
+        this.copletId = value;
+    }
+
+    /**
+     * Returns the request parameters for this portlet URL.
+     * @return A Map containing the parameters for this URL.
+     */
+    public Map getParameters() {
+        Map map = new HashMap();
+        Iterator iter = this.parameters.entrySet().iterator();
+        while (iter.hasNext()) {
+            Map.Entry entry = (Map.Entry)iter.next();
+            String key = decodeParameterName((String) entry.getKey());
+            String[] values = decodeParameterValues((String)entry.getValue());
+            map.put(key, values);
+        }
+        return map;
+    }
+
+    /**
+     * Adds the parameter, replacing a parameter with the same name.
+     * @param name The parameter name
+     * @param values An array of Strings.
+     */
+    public void setParam(String name, String[] values) {
+        this.parameters.put(encodeParameterName(name), encodeParameterValues(values));
+    }
+
+    /**
+     * Returns the marshalled URL.
+     * @return A String containing the marshalled URL.
+     */
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(PORTLET_ID).append(PREFIX).append(copletId);
+        Iterator iter = urlData.entrySet().iterator();
+        while (iter.hasNext()) {
+            buffer.append("/");
+            Map.Entry entry = (Map.Entry)iter.next();
+            buffer.append(entry.getKey()).append(PREFIX).append(entry.getValue());
+        }
+        iter = this.parameters.entrySet().iterator();
+        while (iter.hasNext()) {
+            buffer.append("/");
+            Map.Entry entry = (Map.Entry) iter.next();
+            buffer.append(entry.getKey()).append(PREFIX).append(entry.getValue());
+        }
+        return buffer.toString();
+    }
+
+    private String getActionKey() {
+        return ACTION;
+    }
+
+    private String getModeKey() {
+        return MODE;
+    }
+
+    private String getStateKey() {
+        return STATE;
+    }
+
+    private String getParamKey() {
+        return PARAM + PREFIX;
+    }
+
+    private boolean isParameter(String key) {
+        return key.startsWith(getParamKey());
+    }
+
+    private String decodeParameterName(String encodedParamName) {
+        StringTokenizer tokenizer = new StringTokenizer(encodedParamName, PREFIX);
+        if (!tokenizer.hasMoreTokens()) {
+            return null;
+        }
+        // Skip the key
+        tokenizer.nextToken();
+        if (!tokenizer.hasMoreTokens()) {
+            return null;
+        }
+        String name = tokenizer.nextToken();
+        return decodeValue(name);
+    }
+
+    private String[] decodeParameterValues(String encodedParamValues) {
+        StringTokenizer tokenizer = new StringTokenizer(encodedParamValues, PREFIX);
+        if (!tokenizer.hasMoreTokens()) {
+            return null;
+        }
+        String _count = tokenizer.nextToken();
+        int count = Integer.valueOf(_count).intValue();
+        String[] values = new String[count];
+        for (int i = 0; i < count; i++) {
+            if (!tokenizer.hasMoreTokens()) {
+                return null;
+            }
+            values[i] = decodeValue(tokenizer.nextToken());
+        }
+        return values;
+    }
+
+    private String decodeValue(String value) {
+        String result = value;
+        result = StringUtils.replace(result, "0x1", "_");
+        result = StringUtils.replace(result, "0x2", ".");
+        result = StringUtils.replace(result, "0x3", "/");
+        result = StringUtils.replace(result, "0x4", "\r");
+        result = StringUtils.replace(result, "0x5", "\n");
+        result = StringUtils.replace(result, "0x6", "<");
+        result = StringUtils.replace(result, "0x7", ">");
+        result = StringUtils.replace(result, "0x8", " ");
+        result = StringUtils.replace(result, "0x0", "0x");
+        return result;
+    }
+
+    private String encodeParameterName(String paramName) {
+        StringBuffer returnvalue = new StringBuffer(50);
+        returnvalue.append(getParamKey()).append(encodeValue(paramName));
+        return returnvalue.toString();
+    }
+
+    private String encodeParameterValues(String[] paramValues) {
+        StringBuffer returnvalue = new StringBuffer(100);
+        returnvalue.append(paramValues.length);
+        for (int i = 0; i < paramValues.length; i++) {
+            returnvalue.append("_");
+            returnvalue.append(encodeValue(paramValues[i]));
+        }
+        return returnvalue.toString();
+    }
+
+    private String encodeValue(String value) {
+        String result = value;
+        result = StringUtils.replace(result, "0x", "0x0");
+        result = StringUtils.replace(result, "_", "0x1");
+        result = StringUtils.replace(result, ".", "0x2");
+        result = StringUtils.replace(result, "/", "0x3");
+        result = StringUtils.replace(result, "\r", "0x4");
+        result = StringUtils.replace(result, "\n", "0x5");
+        result = StringUtils.replace(result, "<", "0x6");
+        result = StringUtils.replace(result, ">", "0x7");
+        result = StringUtils.replace(result, " ", "0x8");
+        return result;
+    }
+}
\ No newline at end of file

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLConverter.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java?rev=429435&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java Mon Aug  7 12:11:08 2006
@@ -0,0 +1,211 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.portal.pluto;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.portlet.PortletMode;
+import javax.portlet.WindowState;
+
+import org.apache.cocoon.portal.LinkService;
+import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.coplet.CopletInstance;
+import org.apache.cocoon.portal.event.ConvertableEvent;
+import org.apache.cocoon.portal.event.CopletInstanceEvent;
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.spi.PortletURLProvider;
+
+/**
+ * Create the URL for a portlet.
+ *
+ * @version $Id$
+ */
+public class PortletURLProviderImpl 
+       implements PortletURLProvider, CopletInstanceEvent, ConvertableEvent {
+    
+    /** The new portlet mode */
+    protected PortletMode mode;
+    
+    /** The new window state */
+    protected WindowState state;
+    
+    /** Is this an action */
+    protected boolean action;
+    
+    /** Secure link? */
+    protected Boolean secure;
+    
+    /** Clear parameters */
+    protected boolean clearParameters;
+    
+    /** Parameters */
+    protected Map parameters;
+    
+    /** The generated url */
+    protected String generatedURL;
+    private final LinkService linkService;
+
+    /** Tbe coplet instance id. */
+    protected final String copletId;
+
+    /**
+     * Constructor
+     */
+    public PortletURLProviderImpl(PortletWindow portletWindow,
+                                  PortalService service,
+                                  String        copletInstanceId) {
+        this.linkService = service.getLinkService();
+        this.copletId = copletInstanceId;
+    }
+
+    /**
+     * Constructor for factory
+     * @param service
+     * @param eventData
+     */
+    public PortletURLProviderImpl(PortalService service,
+                                  String        eventData) {
+        this.linkService = service.getLinkService();
+        final PortletURLConverter urlConverter = new PortletURLConverter(eventData);
+        this.copletId = urlConverter.getCopletId();
+        this.mode = urlConverter.getMode();
+        this.state = urlConverter.getState();
+        this.action = urlConverter.isAction();
+        this.parameters = urlConverter.getParameters();
+        this.clearParameters = false;
+        this.secure = null;
+    }
+
+    /**
+     * Copy constructor
+     */
+    private PortletURLProviderImpl(PortletURLProviderImpl original) {
+        this.linkService = original.linkService;
+        this.copletId = original.copletId;
+        this.mode = original.mode;
+        this.state = original.state;
+        this.action = original.action;
+        this.secure = original.secure;
+        this.clearParameters = original.clearParameters;
+        this.generatedURL = original.generatedURL;
+        if (original.parameters != null) {
+            this.parameters = new HashMap(original.parameters.size());
+            this.parameters.putAll(original.parameters);
+        }
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#setPortletMode(javax.portlet.PortletMode)
+     */
+    public void setPortletMode(PortletMode mode) {
+        this.mode = mode;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#setWindowState(javax.portlet.WindowState)
+     */
+    public void setWindowState(WindowState state) {
+        this.state = state;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#setSecure()
+     */
+    public void setSecure() {
+        this.secure =  Boolean.TRUE;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#clearParameters()
+     */
+    public void clearParameters() {
+        this.clearParameters = true;
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#setParameters(java.util.Map)
+     */
+    public void setParameters(Map parameters) {
+        this.parameters = parameters;
+    }
+    
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString() {
+        return new PortletURLProviderImpl(this).getURL();
+    }
+
+    /**
+     * @return
+     */
+    private String getURL() {
+        if ( this.generatedURL == null ) {
+            this.generatedURL = this.linkService.getLinkURI(this, this.secure);
+        }
+        return linkService.encodeURL(this.generatedURL);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.event.CopletInstanceEvent#getTarget()
+     */
+    public CopletInstance getTarget() {        
+        return null;//((PortletEntityImpl)this.portletWindow.getPortletEntity()).getCopletInstanceData();
+    }
+
+    /**
+     * Return the URL as a String.
+     * @see org.apache.cocoon.portal.event.ConvertableEvent#asString()
+     */
+    public String asString() {
+        PortletURLConverter urlConverter = new PortletURLConverter();
+        urlConverter.setCopletId(this.copletId);
+        if (this.mode != null) {
+            urlConverter.setMode(this.mode);
+        }
+
+        if (this.state != null) {
+            urlConverter.setState(this.state);
+        }
+
+        if (this.action) {
+            urlConverter.setAction();
+        }
+
+        if (this.parameters != null) {
+            Iterator entries = this.parameters.entrySet().iterator();
+            while (entries.hasNext()) {
+                Map.Entry entry = (Map.Entry)entries.next();
+                String name = (String) entry.getKey();
+                Object value = entry.getValue();
+                String[] values = value instanceof String ?
+                    new String[]{(String) value} : (String[]) value;
+                urlConverter.setParam(name, values);
+            }
+        }
+
+        return urlConverter.toString();
+    }
+
+    /**
+     * @see org.apache.pluto.spi.PortletURLProvider#setAction(boolean)
+     */
+    public void setAction(boolean flag) {
+        this.action = flag;
+    }
+}

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-newimpl/src/main/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id