001: /*
002: * The Apache Software License, Version 1.1
003: *
004: * Copyright (c) 2001-2004 Caucho Technology, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution, if
019: * any, must include the following acknowlegement:
020: * "This product includes software developed by the
021: * Caucho Technology (http://www.caucho.com/)."
022: * Alternately, this acknowlegement may appear in the software itself,
023: * if and wherever such third-party acknowlegements normally appear.
024: *
025: * 4. The names "Hessian", "Resin", and "Caucho" must not be used to
026: * endorse or promote products derived from this software without prior
027: * written permission. For written permission, please contact
028: * info@caucho.com.
029: *
030: * 5. Products derived from this software may not be called "Resin"
031: * nor may "Resin" appear in their names without prior written
032: * permission of Caucho Technology.
033: *
034: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
035: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
036: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
037: * DISCLAIMED. IN NO EVENT SHALL CAUCHO TECHNOLOGY OR ITS CONTRIBUTORS
038: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
039: * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
040: * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
041: * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
042: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
043: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
044: * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
045: *
046: * @author Sam
047: */
048:
049: package com.caucho.portal.generic;
050:
051: import javax.portlet.PortletMode;
052: import javax.portlet.PortletRequest;
053: import javax.portlet.RenderRequest;
054: import javax.portlet.WindowState;
055: import java.io.IOException;
056: import java.io.OutputStream;
057: import java.io.PrintWriter;
058:
059: /**
060: * Classes can implement {@link AbstractRenderer} to protect from API changes.
061: */
062: public interface Renderer {
063: /**
064: * Return true if the WindowState is allowed.
065: * <code>portletRequest.getResponseContentType()</code> can be used
066: * if the allowed portlet modes depends on the mime type of the
067: * response.
068: */
069: public boolean isWindowStateAllowed(PortletRequest request,
070: WindowState windowState);
071:
072: /**
073: * Return true if the PortletMode is allowed.
074: * <code>portletRequest.getResponseContentType()</code> can be used
075: * if the allowed portlet modes depends on the mime type of the
076: * response.
077: */
078: public boolean isPortletModeAllowed(PortletRequest request,
079: PortletMode portletMode);
080:
081: /**
082: * If true the portal will always call getWriter(), even if the portlet does
083: * not call getWriter(), unless getOutputStream() has been called.
084: */
085: public boolean isAlwaysWrite();
086:
087: /**
088: * If true the portal will always call getOutputStream(), even if the portlet
089: * does not call getOutputStream(), unless getWriter() has been called.
090: */
091: public boolean isAlwaysStream();
092:
093: /**
094: * If {@link #isAlwaysWrite()} or {@link #isAlwaysStream()} is true, then a
095: * Writer or OutputStream might be obtained before the content type of the
096: * response has been set. IF that is the case, then this method is called to
097: * detrmine a default content type.
098: */
099: public String getDefaultContentType();
100:
101: public int getBufferSize();
102:
103: /**
104: * Return a Writer that wraps the passed PrintWriter, or null
105: * if there is no specialized writer for this request.
106: *
107: * <code>renderRequest.getResponseContentType()</code> can be used
108: * if the Renderer needs to know the content type.
109: *
110: * renderRequest.getAttribute("javax.portlet.title") may contain a title
111: * for the Window, if the portlet has set one.
112: */
113: public PrintWriter getWriter(PrintWriter out,
114: RenderRequest request, String namespace) throws IOException;
115:
116: /**
117: * Finish with a Writer produced by this factory.
118: * This may be called even if the writer threw an Exception.
119: *
120: * @param isDiscarded true if the portal discarded the output.
121: * Output is discarded when the portal wishes to discard any output
122: * that has been made for the window, with the intention that the
123: * window should not be rendered at all.
124: */
125: public void finish(PrintWriter writer, RenderRequest request,
126: String namespace, boolean isDiscarded) throws IOException;
127:
128: /**
129: * Return an OutputStream that wraps the passed OutputStream, or null
130: * if there is no specialized writer for this request.
131: *
132: * <code>renderRequest.getResponseContentType()</code> can be used
133: * if the Renderer needs to know the content type.
134: *
135: * renderRequest.getAttribute("javax.portlet.title") may contain a title
136: * for the Window, if the portlet has set one.
137: */
138: public OutputStream getOutputStream(OutputStream out,
139: RenderRequest renderRequest, String namespace)
140: throws IOException;
141:
142: /**
143: * Finish with an OutputStream produced by this factory.
144: * This may be called even if the outputStream threw an Exception.
145: *
146: * @param discarded true if the portal discarded the output, may occur
147: * Output is discarded when the portal wishes to discard any output
148: * that has been made for the window, with the intention that the
149: * window should not be rendered at all.
150: */
151: public void finish(OutputStream outputStream,
152: RenderRequest renderRequest, String namespace,
153: boolean isDiscarded) throws IOException;
154: }
|