Package org.jasig.portal.portlet.container.services

Source Code of org.jasig.portal.portlet.container.services.AdministrativeRequestListenerController

/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig licenses this file to you 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.jasig.portal.portlet.container.services;

import java.util.HashMap;
import java.util.Map;

import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pluto.spi.optional.AdministrativeRequestListener;

/**
* AdministrativeRequestListener that delegates to another AdministrativeRequestListener based on
* a request attribute.
*
* <br>
* Configuration:
* <table border="1">
*     <tr>
*         <th align="left">Property</th>
*         <th align="left">Description</th>
*         <th align="left">Required</th>
*         <th align="left">Default</th>
*     </tr>
*     <tr>
*         <td align="right" valign="top">listenerKeyAttribute</td>
*         <td>
*             The PortletRequest attribute to get the key for the {@link AdministrativeRequestListener} from.
*         </td>
*         <td valign="top">No</td>
*         <td valign="top">org.jasig.portal.portlet.common.AdministrativeRequestListenerControler.LISTENER_KEY</td>
*     </tr>
*     <tr>
*         <td align="right" valign="top">listeners</td>
*         <td>
*             The {@link Map} of {@link String} keys to {@link AdministrativeRequestListener}s.
*         </td>
*         <td valign="top">No</td>
*         <td valign="top">{@link new HashMap()}</td>
*     </tr>
*     <tr>
*         <td align="right" valign="top">failOnKeyNotFound</td>
*         <td>
*             If an exception should be thrown if a <code>listenerKeyAttribute</code> request attribute is not
*             found. If false a warning will be logged and the method will return.
*         </td>
*         <td valign="top">No</td>
*         <td valign="top">false</td>
*     </tr>
*     <tr>
*         <td align="right" valign="top">failOnListenerNotFound</td>
*         <td>
*             If an exception should be thrown if a {@link AdministrativeRequestListener} isn't found for the request
*             attribute key. If false a warning will be logged and the method will return.
*         </td>
*         <td valign="top">No</td>
*         <td valign="top">false</td>
*     </tr>
* </table>
*
* @author Eric Dalquist
* @version $Revision$
*/
public class AdministrativeRequestListenerController implements AdministrativeRequestListener {
    public static final String DEFAULT_LISTENER_KEY_ATTRIBUTE = AdministrativeRequestListenerController.class.getName() + ".LISTENER_KEY";
   
    protected final Log logger = LogFactory.getLog(this.getClass());
   
    private String listenerKeyAttribute = DEFAULT_LISTENER_KEY_ATTRIBUTE;
    private Map<String, AdministrativeRequestListener> listeners = new HashMap<String, AdministrativeRequestListener>();
    private boolean failOnKeyNotFound = false;
    private boolean failOnListenerNotFound = false;

   
    /**
     * @return the failOnKeyNotFound
     */
    public boolean isFailOnKeyNotFound() {
        return this.failOnKeyNotFound;
    }
    /**
     * @param failOnKeyNotFound the failOnKeyNotFound to set
     */
    public void setFailOnKeyNotFound(boolean failOnKeyNotFound) {
        this.failOnKeyNotFound = failOnKeyNotFound;
    }
    /**
     * @return the failOnListenerNotFound
     */
    public boolean isFailOnListenerNotFound() {
        return this.failOnListenerNotFound;
    }
    /**
     * @param failOnListenerNotFound the failOnListenerNotFound to set
     */
    public void setFailOnListenerNotFound(boolean failOnListenerNotFound) {
        this.failOnListenerNotFound = failOnListenerNotFound;
    }
    /**
     * @return the listenerKeyAttribute
     */
    public String getListenerKeyAttribute() {
        return this.listenerKeyAttribute;
    }
    /**
     * @param listenerKeyAttribute the listenerKeyAttribute to set
     */
    public void setListenerKeyAttribute(String listenerKeyAttribute) {
        this.listenerKeyAttribute = listenerKeyAttribute;
    }
    /**
     * @return the listeners
     */
    public Map<String, AdministrativeRequestListener> getListeners() {
        return this.listeners;
    }
    /**
     * @param listeners the listeners to set
     */
    public void setListeners(Map<String, AdministrativeRequestListener> listeners) {
        this.listeners = listeners;
    }


    /**
     * @see org.apache.pluto.spi.optional.AdministrativeRequestListener#administer(javax.portlet.PortletRequest, javax.portlet.PortletResponse)
     */
    public void administer(PortletRequest request, PortletResponse response) {
        final String listenerKey = (String)request.getAttribute(this.listenerKeyAttribute);
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Found key '" + listenerKey + "' from PortletRequest attribute '" + this.listenerKeyAttribute + "'");
        }
       
        if (listenerKey == null) {
            if (this.failOnKeyNotFound) {
                this.logger.error("Failed to find PortletRequest attribute '" + this.listenerKeyAttribute + "'");
                throw new IllegalArgumentException("Failed to find PortletRequest attribute '" + this.listenerKeyAttribute + "'");
            }

            this.logger.warn("Failed to find PortletRequest attribute '" + this.listenerKeyAttribute + "'");
            return;
        }
       
       
        final AdministrativeRequestListener administrativeRequestListener = this.listeners.get(listenerKey);
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Found AdministrativeRequestListener '" + administrativeRequestListener + "' for key '" + listenerKey + "'");
        }
       
        if (administrativeRequestListener == null) {
            if (this.failOnListenerNotFound) {
                this.logger.error("Failed to find AdministrativeRequestListener for key '" + listenerKey + "'");
                throw new IllegalArgumentException("Failed to find AdministrativeRequestListener for key '" + listenerKey + "'");
            }

            this.logger.warn("Failed to find AdministrativeRequestListener for key '" + listenerKey + "'");
            return;
        }
       
        administrativeRequestListener.administer(request, response);
    }
}
TOP

Related Classes of org.jasig.portal.portlet.container.services.AdministrativeRequestListenerController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.