Package net.sf.jportlet.portlets

Source Code of net.sf.jportlet.portlets.AbstractXslPortlet

/*
* Created on 12-May-2003
*/
package net.sf.jportlet.portlets;

import java.io.IOException;
import java.io.InputStream;

import java.net.URL;

import java.util.Iterator;
import java.util.Map;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import net.sf.jportlet.portlet.PortletAdapter;
import net.sf.jportlet.portlet.PortletConfig;
import net.sf.jportlet.portlet.PortletException;
import net.sf.jportlet.portlet.PortletLog;
import net.sf.jportlet.portlet.PortletRequest;
import net.sf.jportlet.portlet.PortletResponse;


/**
* @author <a href="mailto:tchbansi@sourceforge.net">Herve Tchepannou</a>
*/
public abstract class AbstractXslPortlet
    extends PortletAdapter
{
    //~ Methods ----------------------------------------------------------------

    /**
     * @see net.sf.jportlet.portlet.PortletAdapter#doView(net.sf.jportlet.portlet.PortletRequest, net.sf.jportlet.portlet.PortletResponse)
     */
    protected void doView( PortletRequest  request,
                           PortletResponse response )
        throws PortletException,
                   IOException
    {
        InputStream xmlstream = null;
        InputStream xslstream = null;
        try
        {
            TransformerFactory factory = TransformerFactory.newInstance(  );

            /* XSL */
            xslstream = openXslInputStream( request );
            if ( xslstream == null )
            {
                throw new PortletException( "No XSL" );
            }

            StreamSource xsl = new StreamSource( xslstream );

            /* XML */
            xmlstream = openXmlInputStream( request );
            if ( xslstream == null )
            {
                throw new PortletException( "No XML" );
            }

            StreamSource xml = new StreamSource( xmlstream );

            /* Transform */
            StreamResult output = new StreamResult( response.getWriter(  ) );
            Transformer  transformer = factory.newTransformer( xsl );
            Map          params = getXslParameters( request, response );
            if ( params != null )
            {
                Iterator it = params.keySet(  ).iterator(  );
                while ( it.hasNext(  ) )
                {
                    String key = ( String ) it.next(  );
                    transformer.setParameter( key, params.get( key ) );
                }
            }

            transformer.transform( xml, output );
        }
        catch ( TransformerConfigurationException t )
        {
            throw new PortletException( t );
        }
        catch ( TransformerException t )
        {
            throw new PortletException( t );
        }
        finally
        {
            if ( xmlstream != null )
            {
                xmlstream.close(  );
            }

            if ( xslstream != null )
            {
                xslstream.close(  );
            }
        }
    }

    protected abstract InputStream openXmlInputStream( PortletRequest request )
        throws PortletException,
                   IOException;

    protected abstract InputStream openXslInputStream( PortletRequest request )
        throws PortletException,
                   IOException;

    protected Map getXslParameters( PortletRequest  request,
  PortletResponse response )
    {
        return null;
    }

    protected InputStream findInputStream( String         prefix,
                                           PortletRequest request )
        throws IOException
    {
        String        name;
        String        value;
        PortletLog    log = getLog(  );
        boolean       debug = log.isDebugEnabled(  );
        PortletConfig portletConfig = getPortletConfig(  );

        /* URL */
        name  = prefix + ".url";
        value = portletConfig.getInitParameter( name );
        if ( debug )
        {
            log.debug( name + "=" + value );
        }

        if ( value != null )
        {
            return new URL( value ).openStream(  );
        }
        else
        {
            /* Path */
            name  = prefix + ".path";
            value = portletConfig.getInitParameter( name );
            if ( debug )
            {
                log.debug( name + "=" + value );
            }

            if ( value != null )
            {
                return portletConfig.getPortletContext(  ).getResourceAsStream( value, request.getClient(  ), request.getLocale(  ) );
            }
        }

        return null;
    }
}
TOP

Related Classes of net.sf.jportlet.portlets.AbstractXslPortlet

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.