Clover coverage report - Code Coverage for tapestry release 4.0.1
Coverage timestamp: Fri Mar 31 2006 09:12:14 EST
file stats: LOC: 194   Methods: 9
NCLOC: 66   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Body.java - 86.4% 66.7% 80.6%
coverage coverage
 1    // Copyright 2004, 2005 The Apache Software Foundation
 2    //
 3    // Licensed under the Apache License, Version 2.0 (the "License");
 4    // you may not use this file except in compliance with the License.
 5    // You may obtain a copy of the License at
 6    //
 7    // http://www.apache.org/licenses/LICENSE-2.0
 8    //
 9    // Unless required by applicable law or agreed to in writing, software
 10    // distributed under the License is distributed on an "AS IS" BASIS,
 11    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12    // See the License for the specific language governing permissions and
 13    // limitations under the License.
 14   
 15    package org.apache.tapestry.html;
 16   
 17    import org.apache.hivemind.Resource;
 18    import org.apache.tapestry.AbstractComponent;
 19    import org.apache.tapestry.IMarkupWriter;
 20    import org.apache.tapestry.IRequestCycle;
 21    import org.apache.tapestry.PageRenderSupport;
 22    import org.apache.tapestry.TapestryUtils;
 23    import org.apache.tapestry.asset.AssetFactory;
 24    import org.apache.tapestry.util.PageRenderSupportImpl;
 25    import org.apache.tapestry.web.WebResponse;
 26   
 27    /**
 28    * The body of a Tapestry page. This is used since it allows components on the page access to an
 29    * initialization script (that is written the start, just inside the <body> tag). This is
 30    * currently used by {@link Rollover}and {@link Script}components. [ <a
 31    * href="../../../../../ComponentReference/Body.html">Component Reference </a>]
 32    *
 33    * @author Howard Lewis Ship
 34    */
 35   
 36    public abstract class Body extends AbstractComponent implements PageRenderSupport
 37    {
 38    private PageRenderSupportImpl _pageRenderSupport;
 39   
 40    /**
 41    * Adds to the script an initialization for the named variable as an Image(), to the given URL.
 42    * <p>
 43    * Returns a reference, a string that can be used to represent the preloaded image in a
 44    * JavaScript function.
 45    *
 46    * @since 1.0.2
 47    */
 48   
 49  0 public String getPreloadedImageReference(String URL)
 50    {
 51  0 return _pageRenderSupport.getPreloadedImageReference(URL);
 52    }
 53   
 54    /**
 55    * Adds other initialization, in the form of additional JavaScript code to execute from the
 56    * &lt;body&gt;'s <code>onLoad</code> event handler. The caller is responsible for adding a
 57    * semicolon (statement terminator). This method will add a newline after the script.
 58    */
 59   
 60  94 public void addInitializationScript(String script)
 61    {
 62  94 _pageRenderSupport.addInitializationScript(script);
 63    }
 64   
 65    /**
 66    * Adds additional scripting code to the page. This code will be added to a large block of
 67    * scripting code at the top of the page (i.e., the before the &lt;body&gt; tag).
 68    * <p>
 69    * This is typically used to add some form of JavaScript event handler to a page. For example,
 70    * the {@link Rollover}component makes use of this.
 71    * <p>
 72    * Another way this is invoked is by using the {@link Script}component.
 73    * <p>
 74    * The string will be added, as-is, within the &lt;script&gt; block generated by this
 75    * <code>Body</code> component. The script should <em>not</em> contain HTML comments, those
 76    * will be supplied by this Body component.
 77    * <p>
 78    * A frequent use is to add an initialization function using this method, then cause it to be
 79    * executed using {@link #addInitializationScript(String)}.
 80    */
 81   
 82  0 public void addBodyScript(String script)
 83    {
 84  0 _pageRenderSupport.addBodyScript(script);
 85    }
 86   
 87    /**
 88    * Used to include a script from an outside URL (the scriptLocation is a URL, probably obtained
 89    * from an asset. This adds an &lt;script src="..."&gt; tag before the main &lt;script&gt; tag.
 90    * The Body component ensures that each URL is included only once.
 91    *
 92    * @since 1.0.5
 93    */
 94   
 95  78 public void addExternalScript(Resource scriptLocation)
 96    {
 97  78 _pageRenderSupport.addExternalScript(scriptLocation);
 98    }
 99   
 100    /**
 101    * Retrieves the <code>Body</code> that was stored into the request cycle. This allows
 102    * components wrapped by the <code>Body</code> to locate it and access the services it
 103    * provides.
 104    *
 105    * @deprecated To be removed in 4.1. Use
 106    * {@link org.apache.tapestry.TapestryUtils#getPageRenderSupport(IRequestCycle)}
 107    * instead.
 108    */
 109   
 110  4 public static Body get(IRequestCycle cycle)
 111    {
 112  4 return (Body) TapestryUtils.getOptionalPageRenderSupport(cycle);
 113    }
 114   
 115  138 protected void prepareForRender(IRequestCycle cycle)
 116    {
 117  138 super.prepareForRender(cycle);
 118   
 119  138 _pageRenderSupport = new PageRenderSupportImpl(getAssetFactory(), getResponse()
 120    .getNamespace(), getLocation());
 121    }
 122   
 123  138 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
 124    {
 125  138 TapestryUtils.storePageRenderSupport(cycle, this);
 126   
 127  138 IMarkupWriter nested = writer.getNestedWriter();
 128   
 129  138 renderBody(nested, cycle);
 130   
 131    // Start the body tag.
 132  126 writer.println();
 133  126 writer.begin(getElement());
 134  126 renderInformalParameters(writer, cycle);
 135   
 136  126 writer.println();
 137   
 138    // Write the page's scripting. This is included scripts
 139    // and dynamic JavaScript.
 140   
 141  126 _pageRenderSupport.writeBodyScript(writer, cycle);
 142   
 143    // Close the nested writer, which dumps its buffered content
 144    // into its parent.
 145   
 146  126 nested.close();
 147   
 148    // Any initialization should go at the very end of the document
 149    // just before the close body tag. Older version of Tapestry
 150    // would create a window.onload event handler, but this is better
 151    // (it doesn't have to wait for external images to load).
 152   
 153  126 _pageRenderSupport.writeInitializationScript(writer);
 154   
 155  126 writer.end(); // <body>
 156    }
 157   
 158  138 protected void cleanupAfterRender(IRequestCycle cycle)
 159    {
 160  138 super.cleanupAfterRender(cycle);
 161   
 162  138 _pageRenderSupport = null;
 163   
 164  138 TapestryUtils.removePageRenderSupport(cycle);
 165    }
 166   
 167    /**
 168    * Parameter.
 169    */
 170    public abstract String getElement();
 171   
 172    /**
 173    * Injected
 174    *
 175    * @since 4.0
 176    */
 177    public abstract AssetFactory getAssetFactory();
 178   
 179    /**
 180    * Injected
 181    *
 182    * @since 4.0
 183    */
 184   
 185    public abstract WebResponse getResponse();
 186   
 187    /** @since 3.0 */
 188   
 189  0 public String getUniqueString(String baseValue)
 190    {
 191  0 return _pageRenderSupport.getUniqueString(baseValue);
 192    }
 193   
 194    }