You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsrp4j-dev@portals.apache.org by dl...@apache.org on 2006/12/29 01:37:02 UTC

svn commit: r490880 - in /portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util: ./ portlet/

Author: dlouzan
Date: Thu Dec 28 16:37:01 2006
New Revision: 490880

URL: http://svn.apache.org/viewvc?view=rev&rev=490880
Log:
- Moved PortletUtils to package "portlet"
- Created a framework for filtering portlets using portlet filters, in a similar way servlet filters filter servlet requests

Added:
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/ControllerPortlet.java
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilter.java
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterChain.java
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterManager.java
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletUtils.java
      - copied, changed from r490315, portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/PortletUtils.java
Removed:
    portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/PortletUtils.java

Added: portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/ControllerPortlet.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/ControllerPortlet.java?view=auto&rev=490880
==============================================================================
--- portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/ControllerPortlet.java (added)
+++ portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/ControllerPortlet.java Thu Dec 28 16:37:01 2006
@@ -0,0 +1,113 @@
+/**
+ * Copyright 2003-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.wsrp4j.commons.consumer.util.portlet;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+
+/**
+ * Abstract class that has to be implemented for any portlet wishing to use
+ * the portlet filter framework.
+ *
+ * @version $Id$
+ */
+public abstract class ControllerPortlet extends GenericPortlet {
+    
+    /* The filter manager used for filter processing */
+    private PortletFilterManager filterManager;
+    
+    public void init(PortletConfig config) throws PortletException {
+        
+        /* Delegate to superclass */
+        super.init(config);
+        
+        /* Initialize PortletFilterManager. It will load the filters from
+         * this portlet's initialization parameters obtained from the
+         * PortletConfig */
+        filterManager = new PortletFilterManager(this);
+        
+        /* Delegate to init filters */
+        filterManager.doInitFilters(config);
+        
+    }
+    
+    /**
+     * Redefined render method for delegating to filter manager.
+     */
+    public void render(RenderRequest request, RenderResponse response)
+    throws PortletException, IOException {
+
+        filterManager.doRenderFilters(request, response);
+
+    }
+    
+    /**
+     * Redefined processAction method for delegating to filter manager.
+     */
+    public void processAction(ActionRequest request, ActionResponse response)
+    throws PortletException, IOException {
+        
+        filterManager.doProcessActionFilters(request, response);
+        
+    }
+    
+    /**
+     * The filter manager will call this method for the portlet on a init
+     * request.
+     *
+     * @param config
+     *
+     * @throws PortletException
+     */
+    public abstract void doInit(PortletConfig config) throws PortletException;
+    
+    /**
+     * The filter manager will call this method for the portlet on a render
+     * request.
+     *
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public abstract void doRender(RenderRequest request, 
+            RenderResponse response)
+    throws PortletException, IOException;
+    
+    /**
+     * The filter manager will call this method for the portlet on a 
+     * processAction request.
+     *
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public abstract void doProcessAction(ActionRequest request, 
+            ActionResponse response)
+    throws PortletException, IOException;
+    
+}

Added: portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilter.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilter.java?view=auto&rev=490880
==============================================================================
--- portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilter.java (added)
+++ portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilter.java Thu Dec 28 16:37:01 2006
@@ -0,0 +1,86 @@
+/**
+ * Copyright 2003-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.wsrp4j.commons.consumer.util.portlet;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+
+/**
+ * An abstract representation of a filter applied to a portlet.
+ * Each portlet filter has to provide a default empty constructor. If it needs
+ * to initialize any variables, it can do so on the init() method.
+ *
+ * @version $Id$
+ */
+public interface PortletFilter {
+    
+    /**
+     * The filtering to process on an init request.
+     *
+     * @param filterChain The PortletFilterChain to continue processing
+     * @param config
+     *
+     * @throws PortletException
+     */
+    public void doInit(PortletFilterChain filterChain, PortletConfig config)
+    throws PortletException;
+    
+    /**
+     * The filtering to process on a render request.
+     *
+     * @param filterChain The PortletFilterChain to continue processing
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doRender(PortletFilterChain filterChain, 
+            RenderRequest request, RenderResponse response)
+    throws PortletException, IOException;
+    
+    /**
+     * The filtering to process on a processAction request.
+     *
+     * @param filterChain The PortletFilterChain to continue processing
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doProcessAction(PortletFilterChain filterChain,
+            ActionRequest request, ActionResponse response)
+    throws PortletException, IOException;
+    
+    /**
+     * The initialization method for the filter (not for the portlet).
+     *
+     * @param config The owner portlet PortletConfig
+     *
+     * @throws PortletException
+     */
+    public void init(PortletConfig config)
+    throws PortletException;
+    
+}

Added: portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterChain.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterChain.java?view=auto&rev=490880
==============================================================================
--- portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterChain.java (added)
+++ portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterChain.java Thu Dec 28 16:37:01 2006
@@ -0,0 +1,134 @@
+/**
+ * Copyright 2003-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.wsrp4j.commons.consumer.util.portlet;
+
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+
+/**
+ * The processor class used to implement a classic Intercepting Filter pattern.
+ *
+ * @version $Id$
+ */
+public class PortletFilterChain {
+    
+    /* The ControllerPortlet */
+    private ControllerPortlet controller;
+    
+    /* The List of filters to process */
+    private List filters;
+    
+    /**
+     * The constructor for a new PortletFilterChain.
+     *
+     * @param filters A List of PortletFilter objects
+     * @param controller The ControllerPortlet
+     */
+    public PortletFilterChain(List filters, ControllerPortlet controller) {
+        
+        /* Assign the controller portlet */
+        this.controller = controller;
+        
+        /* Create the filter list */
+        this.filters = new ArrayList();
+        for (Iterator iter=filters.iterator(); iter.hasNext(); ) {
+            PortletFilter filter = (PortletFilter) iter.next();
+            this.filters.add(filter);
+        }
+        
+    }
+    
+    /**
+     * Decides what filter to process next and delegates to it on a init
+     * request.
+     *
+     * @param config
+     *
+     * @throws PortletException
+     */
+    public void doInit(PortletConfig config) throws PortletException {
+        PortletFilter filter = getNextFilter();
+        if (filter != null) {
+            filter.doInit(this, config);
+        } else {
+            controller.doInit(config);
+        }
+    }
+    
+    /**
+     * Decides what filter to process next and delegates to it on a render
+     * request.
+     *
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doRender(RenderRequest request, RenderResponse response)
+    throws PortletException, IOException {
+        PortletFilter filter = getNextFilter();
+        if (filter != null) {
+            filter.doRender(this, request, response);
+        } else {
+            controller.doRender(request, response);
+        }
+    }
+    
+    /**
+     * Decides what filter to process next and delegates to it on a processAction
+     * request.
+     *
+     * @param request
+     * @param response
+     *
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doProcessAction(ActionRequest request, ActionResponse response)
+    throws PortletException, IOException {
+        PortletFilter filter = getNextFilter();
+        if (filter != null) {
+            filter.doProcessAction(this, request, response);
+        } else {
+            controller.doProcessAction(request, response);
+        }
+    }
+    
+    /**
+     * Obtains the next filter to process.
+     */
+    private PortletFilter getNextFilter() {
+        PortletFilter filter = null;
+        if (!filters.isEmpty()) {
+            filter = (PortletFilter) filters.get(0);
+            filters.remove(0);
+        }
+        return filter;
+    }
+    
+}

Added: portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterManager.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterManager.java?view=auto&rev=490880
==============================================================================
--- portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterManager.java (added)
+++ portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletFilterManager.java Thu Dec 28 16:37:01 2006
@@ -0,0 +1,179 @@
+/**
+ * Copyright 2003-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.wsrp4j.commons.consumer.util.portlet;
+
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * This class is the main entrance point of a Intercepting Filter pattern 
+ * provided for portlets.
+ *
+ * @version $Id$
+ */
+public class PortletFilterManager {
+    
+    /* The log instance */
+    private static final Log log = LogFactory.getLog(PortletFilterManager.class);
+    
+    /* The pattern of init params searched for filter implementations */
+    private static final String FILTER_PATTERN = "filter.";
+    
+    /* The Portlet instance that actually serves requests */
+    private ControllerPortlet controller;
+    
+    /* The List of PortletFilter to process */
+    private List filters;
+    
+    /**
+     * The constructor for new PortletFilterManager instances.
+     *
+     * @param controller The instance of the portlet needed for serving
+     *        requests
+     */
+    public PortletFilterManager(ControllerPortlet controller) {
+        
+        this.controller = controller;
+        
+        this.filters = buildFilterList(controller.getPortletConfig());
+        
+    }
+    
+    /**
+     * Processes the configured filter chain for a init request.
+     *
+     * @param config
+     * 
+     * @throws PortletException
+     */
+    public void doInitFilters(PortletConfig config) throws PortletException {
+        
+        PortletFilterChain chain = new PortletFilterChain(filters, controller);
+        chain.doInit(config);
+        
+    }
+    
+    /**
+     * Processes the configured filter chain for a render request.
+     *
+     * @param request
+     * @param response
+     * 
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doRenderFilters(RenderRequest request,
+            RenderResponse response)
+    throws PortletException, IOException {
+        
+        PortletFilterChain chain = new PortletFilterChain(filters, controller);
+        chain.doRender(request, response);
+        
+    }
+    
+    /**
+     * Processes the configured filter chain for a processAction request
+     *
+     * @param request
+     * @param response
+     * 
+     * @throws PortletException
+     * @throws IOException
+     */
+    public void doProcessActionFilters(ActionRequest request,
+            ActionResponse response)
+    throws PortletException, IOException {
+        
+        PortletFilterChain chain = new PortletFilterChain(filters, controller);
+        chain.doProcessAction(request, response);
+        
+    }
+    
+    /**
+     * Programmatic access for adding new filter objects.
+     *
+     * @param filter A PortletFilter to add to the processing
+     */
+    public void addPortletFilter(PortletFilter filter) {
+        filters.add(filter);
+    }
+    
+    /**
+     * Builds a PortletFilter list and initializes each of the filters.
+     * Each property of the form "filter.*" on the initialization parameters
+     * of the portlet is assumed to point to a class implementing a filter.
+     *
+     * @return List A List of PortletFilter instances
+     */
+    private List buildFilterList(PortletConfig config) {
+        
+        List foundFilters = new ArrayList();
+        List foundFilterNames = new ArrayList();
+        
+        /* Search all init params pointing to filters */
+        for (Enumeration e=config.getInitParameterNames(); e.hasMoreElements(); ) {
+            String paramName = (String) e.nextElement();
+            if (paramName.startsWith(FILTER_PATTERN)) {
+                foundFilterNames.add(paramName);
+            }
+        }
+        
+        /* For each filterName found, try to instantiate the corresponding 
+           class */
+        for (Iterator iter=foundFilterNames.iterator(); iter.hasNext(); ) {
+            
+            String filterName = (String) iter.next();
+            String className = config.getInitParameter(filterName);
+            Class theClass = null;
+            
+            try {
+                
+                /* Instantiate the filter */
+                theClass = Class.forName(className);
+                PortletFilter filter = (PortletFilter) theClass.newInstance();
+                
+                /* Initialize the filter */
+                filter.init(config);
+                
+                /* Add filter to filter list */
+                foundFilters.add(filter);
+                
+            } catch (Exception e) {
+                log.error("Error while instantiating filter: " + filterName
+                        + " with class: " + className, e);
+            }
+        }
+        
+        return foundFilters;
+        
+    }
+    
+}

Copied: portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletUtils.java (from r490315, portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/PortletUtils.java)
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletUtils.java?view=diff&rev=490880&p1=portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/PortletUtils.java&r1=490315&p2=portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletUtils.java&r2=490880
==============================================================================
--- portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/PortletUtils.java (original)
+++ portals/wsrp4j/trunk/commons-consumer/src/java/org/apache/wsrp4j/commons/consumer/util/portlet/PortletUtils.java Thu Dec 28 16:37:01 2006
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wsrp4j.commons.consumer.util;
+package org.apache.wsrp4j.commons.consumer.util.portlet;
 
 import java.io.IOException;
 import java.util.Enumeration;
@@ -29,6 +29,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.wsrp4j.commons.consumer.util.*;
 
 import org.apache.wsrp4j.commons.consumer.util.ConsumerConstants;