You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by jm...@apache.org on 2001/12/04 05:45:59 UTC
cvs commit: jakarta-turbine-3/src/java/org/apache/turbine/pipeline DirectClassicPipeline.java DirectRenderer.java
jmcnally 01/12/03 20:45:59
Added: src/java/org/apache/turbine/pipeline
DirectClassicPipeline.java DirectRenderer.java
Log:
added a new pipeline and renderer that work together to serve turbine's output
directly to the writer associated with the response.
Revision Changes Path
1.1 jakarta-turbine-3/src/java/org/apache/turbine/pipeline/DirectClassicPipeline.java
Index: DirectClassicPipeline.java
===================================================================
package org.apache.turbine.pipeline;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Turbine" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import org.apache.turbine.Turbine;
import org.apache.turbine.TemplateContext;
import org.apache.turbine.RunData;
import org.apache.turbine.modules.Module;
import org.apache.turbine.Log;
/*
import java.util.Enumeration;
import org.apache.turbine.TurbineConstants; // for convenience right now
import org.apache.turbine.Pipeline;
import org.apache.turbine.Resolver;
import org.apache.turbine.modules.ModuleLoader;
import org.apache.turbine.DynamicURI;
import org.apache.turbine.modules.actions.SessionValidator;
import org.apache.turbine.modules.actions.AccessController;
import org.apache.fulcrum.security.util.AccessControlList;
*/
/**
* This pipeline overrides the execute method of ClassicPipeline, so that
* the response is written as the template is rendered. In the ClassicPipeline
* the results of template rendering are built up a a String and output
* after all rendering is completed.
*
* @author <a href="mailto:jmcnally@apache.org">John McNally</a>
* @version $Id: DirectClassicPipeline.java,v 1.1 2001/12/04 04:45:59 jmcnally Exp $
*/
public class DirectClassicPipeline extends ClassicPipeline
{
public void execute(RunData data)
throws Exception
{
data.getResponse().setLocale(data.getLocale());
data.getResponse().setContentType(data.getContentType());
// run the module chain
// Need to execute the module that matches the template
// if it exists.
// As long as data.getTarget() changes during execution,
// the new target is run , and so on
runner.run(targetModuleType, data);
// The execution of the module that corresponds to the requested
// template may result in the target template being changed.
// This happens for example when a user isn't logged in. The
// template requested is '/Index.vm', but executing an Index
// module might result in the target template being changed
// to '/Login.vm'. We want to reset the target template value
// here in case it has changed.
String target = data.getTarget();
// With this target template we start by rendering
// the appropriate layout template and everything
// goes from there.
// Now I think we have to find a page template based
// on the content type. What other criterion could
// we use. Maybe you might want to change it if
// you were branding ...
Renderer r = new DirectRenderer(data.getOut());
TemplateContext context = Module.getTemplateContext(data);
context.put("renderer", r);
context.put("template", target);
context.put("runner", runner);
// now we can use the renderer here
// use the renderer to start the whole shabang
String layoutTemplate = Turbine.getResolver()
.getTemplate("layouts", target);
String out = r.render(data, layoutTemplate);
if ( out != null && out.length() > 0 )
{
data.getOut().print(out);
}
}
}
1.1 jakarta-turbine-3/src/java/org/apache/turbine/pipeline/DirectRenderer.java
Index: DirectRenderer.java
===================================================================
package org.apache.turbine.pipeline;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Turbine" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.Writer;
import org.apache.turbine.Turbine;
import org.apache.turbine.RunData;
import org.apache.turbine.modules.Module;
import org.apache.turbine.TemplateContext;
import org.apache.turbine.TurbineException;
import org.apache.turbine.Log;
/**
* This class is used in the context to render templates.
*
* @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
* @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
* @version $Id: DirectRenderer.java,v 1.1 2001/12/04 04:45:59 jmcnally Exp $
*/
public class DirectRenderer extends Renderer
{
private static final String EMPTY = "";
private Writer writer;
public DirectRenderer(Writer writer)
{
this.writer = writer;
}
/**
* @see org.apache.turbine.pipeline.Renderer#render(TemplateContext,String)
* @return zero length String
*/
public String render(TemplateContext context, String target)
throws TurbineException,Exception
{
try
{
Log.debug("[DirectClassicPipeline] render target => " + target);
Module.handleRequest(context, target, writer);
}
catch (Exception e) {
Log.error(e);
Module.handleRequest(context, "screens/Error.vm", writer);
}
return EMPTY;
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>