001: /* Copyright 2001 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal;
007:
008: import org.apache.commons.logging.Log;
009: import org.apache.commons.logging.LogFactory;
010:
011: /**
012: * Conveys runtime properties from channel to framework.
013: *
014: * <p>In general, the IChannel API contract consists of one-way calls.
015: * The framework instantiates the channel and provisions it with state via
016: * setStaticData() and setRuntimeData(); these are one-way calls from framework
017: * to channel. The channel can fail with an exception, but otherwise the method has
018: * no return value. (As of uPortal 2.6, channels can persist parameters back to the
019: * StaticChannelData object).
020: *
021: * Then there's the renderXML() call, by which the channel writes back to
022: * a content handler to produce output.</p>
023: *
024: * <p>The getRuntimeProperties() IChannel method, and this ChannelRuntimeProperties
025: * object, provides a way for the channel to communicate back to the framework
026: * data other than the content it desires to write out to the end user.
027: * ChannelRuntimeProperties was originally envisioned as a mechanism whereby
028: * an IChannel would convey whether it wishes to render at all, and it was
029: * envisioned that its place in the sequence of IChannel calls would be after
030: * setRuntimeData() but before renderXML(). However, this was not implemented.
031: * Through uPortal 2.5.0, no framework code called getRuntimeProperties() on
032: * IChannels.</p>
033: *
034: * <p>For uPortal 2.5.1, ChannelRuntimeProperties were recruited for use in
035: * implementing dynamic channel titles. Channels returning ChannelRuntimeProperties
036: * which implement the optional interface IChannelTitle convey a desired dynamic title
037: * for rendering by the framework in place of the title defined at channel
038: * publication. In support of this change, the channel rendering framework
039: * was modified to actually get the ChannelRuntimeProperties from channels for
040: * inspection as to whether it implements this interface. This method call was
041: * added <b>after renderXML()</p>, not before as originally envisioned. This
042: * order was selected because many channels are not prepared to know their dynamic
043: * title until after they have rendered - particularly CPortletAdapter, as the
044: * JSR-168 mechanism for portlets to set their titles is part of their
045: * configuration of the RenderResponse.</p>
046: *
047: * <p>Note that this does not foreclose the possibility of using
048: * ChannelRuntimeProperties to allow a channel to convey that it does not wish
049: * to be rendered at all at this time. Such a channel could write no content
050: * to the contentHandler, and return a ChannelRuntimeProperties conveying its
051: * wish not to be rendered at all. Similarly to the way dynamic channel titles
052: * are supported, dropping the channel from the output entirely could be supported.</p>
053: *
054: * <p>Warning: The willRender() feature of ChannelRuntimeProperties is not
055: * implemented. No framework code will currently check for this property.
056: * Setting willRender one way or the other currently doesn't have any effect.</p>
057: *
058: * Current version gathers the following information
059: * <ul>
060: * <li> willRender - a boolean flag signaling if the channel will render at all in the current state.
061: * This flag could be checked after the ChannelRuntimeData has been passed to a channel,
062: * but prior to the renderXML() call.
063: * However, no framework code currently checks the willRender property of ChannelRuntimeData.</li>
064: * </ul>
065: * @version $Revision: 36690 $ $Date: 2006-08-25 14:03:25 -0700 (Fri, 25 Aug 2006) $
066: * @author Peter Kharchenko {@link <a href="mailto:pkharchenko@interactivebusiness.com"">pkharchenko@interactivebusiness.com"</a>}
067: */
068: public class ChannelRuntimeProperties {
069: protected final Log log = LogFactory.getLog(getClass());
070:
071: private boolean bool_willRender;
072:
073: /**
074: * Default constructor.
075: * willRender property is initialized to <code>true</code>.
076: *
077: */
078: public ChannelRuntimeProperties() {
079: // set the default values here
080: bool_willRender = true;
081: }
082:
083: /**
084: * Set whether the channel will render if asked to do so (if renderXML() is called).
085: *
086: * Warning: no known code currently accesses this property of ChannelRuntimeProperties
087: * and so setting this property will have no effect.
088: *
089: * @param value a <code>boolean</code> value
090: */
091: public void setWillRender(boolean value) {
092: bool_willRender = value;
093: }
094:
095: /**
096: * Getter method for willRender property.
097: *
098: * @return a <code>boolean</code> value
099: */
100: public boolean willRender() {
101: return bool_willRender;
102: }
103: }
|