Package org.apache.jetspeed.aggregator.impl

Source Code of org.apache.jetspeed.aggregator.impl.BasicAggregator

/*
* Copyright 2000-2004 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.jetspeed.aggregator.impl;

import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jetspeed.aggregator.Aggregator;
import org.apache.jetspeed.components.portletregistry.PortletRegistry;
import org.apache.jetspeed.container.window.PortletWindowAccessor;
import org.apache.jetspeed.exception.JetspeedException;
import org.apache.jetspeed.om.page.ContentFragment;
import org.apache.jetspeed.om.page.ContentPage;
import org.apache.jetspeed.request.RequestContext;
import org.apache.pluto.PortletContainer;
import org.apache.pluto.om.portlet.PortletDefinition;
import org.apache.pluto.om.window.PortletWindow;

/**
* Basic Aggregator, nothing complicated.
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: BasicAggregator.java 188558 2005-04-29 14:02:35Z weaver $
*/
public class BasicAggregator implements Aggregator
{
    private final static Log log = LogFactory.getLog(BasicAggregator.class);

    public final static int STRATEGY_SEQUENTIAL = 0;
    public final static int STRATEGY_PARALLEL = 1;
    private int strategy = STRATEGY_SEQUENTIAL;
   
    private PortletRegistry registry;
    private PortletWindowAccessor windowAccessor;
    private PortletContainer portletContainer;

    public BasicAggregator(PortletRegistry registry,
                           PortletWindowAccessor windowAccessor,
                           PortletContainer portletContainer,
                           int strategy)
    {
        this.registry = registry;
        this.windowAccessor = windowAccessor;
        this.strategy = strategy;
        this.portletContainer = portletContainer;
    }
   
    public BasicAggregator(PortletRegistry registry,
                           PortletWindowAccessor windowAccessor,
                           PortletContainer portletContainer)           
    {
        this(registry, windowAccessor, portletContainer, STRATEGY_SEQUENTIAL);
    }
   
    public void start()
    {
    }
   
    public void stop()
    {
       
    }
   
    /**
     * Builds the portlet set defined in the context into a portlet tree.
     *
     * @return Unique Portlet Entity ID
     */
    public void build(RequestContext request) throws JetspeedException
    {
        ContentPage page = request.getPage();
        if (null == page)
        {
            throw new JetspeedException("Failed to find PSML Pin BasicAggregator.build");
        }

        ContentFragment root = page.getRootContentFragment();
        render(portletContainer, root, request);
       
        for (Iterator fit = root.getFragments().iterator(); fit.hasNext();)
        {
            ContentFragment fragment = (ContentFragment)fit.next();
           
            if (fragment.getType().equals(ContentFragment.LAYOUT))
            {
                // skip layouts for now
                // continue;
            }
            render(portletContainer, fragment, request);
        }
    }

    /**
     * Render a portlet by calling the container's renderPortlet.
     *
     * @param container
     * @param fragment
     * @param request
     */
    private void render(PortletContainer container, ContentFragment fragment, RequestContext request)
    {

        //
        // create the portlet window and render the portlet
        //
        try
        {
            //
            // Load Portlet from registry
            //
            System.out.println("*** Getting portlet from registry: " + fragment.getName());
            PortletDefinition portletDefinition = registry.getPortletDefinitionByUniqueName(fragment.getName());
            if (portletDefinition == null)
            {
                throw new JetspeedException("Failed to load: " + fragment.getName() + " from registry");
            }
                       
            PortletWindow portletWindow = windowAccessor.getPortletWindow(fragment);

            HttpServletRequest servletRequest = request.getRequestForWindow(portletWindow);
            HttpServletResponse servletResponse = request.getResponseForWindow(portletWindow);

            container.renderPortlet(portletWindow, servletRequest, servletResponse);
        }
        catch (Throwable t)
        {
            t.printStackTrace();
            log.error("Failed to service portlet, portlet exception: " + t);
        }
       
    }
}
TOP

Related Classes of org.apache.jetspeed.aggregator.impl.BasicAggregator

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.