Clover coverage report - Code Coverage for tapestry-contrib release 4.0-beta-6
Coverage timestamp: Wed Sep 7 2005 18:46:47 EDT
file stats: LOC: 139   Methods: 8
NCLOC: 74   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
PopupLinkRenderer.java 0% 0% 0% 0%
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.contrib.link;
 16   
 17    import org.apache.hivemind.HiveMind;
 18    import org.apache.hivemind.service.BodyBuilder;
 19    import org.apache.tapestry.IRequestCycle;
 20    import org.apache.tapestry.PageRenderSupport;
 21    import org.apache.tapestry.TapestryUtils;
 22    import org.apache.tapestry.engine.ILink;
 23    import org.apache.tapestry.link.DefaultLinkRenderer;
 24   
 25    /**
 26    * This renderer emits javascript to launch the link in a window.
 27    *
 28    * @author David Solis
 29    * @since 3.0.1
 30    */
 31    public class PopupLinkRenderer extends DefaultLinkRenderer
 32    {
 33   
 34    private String _windowName;
 35   
 36    private String _features;
 37   
 38  0 public PopupLinkRenderer()
 39    {
 40    }
 41   
 42    /**
 43    * Initializes the name and features for javascript window.open function.
 44    *
 45    * @param windowName
 46    * the window name
 47    * @param features
 48    * the window features
 49    */
 50  0 public PopupLinkRenderer(String windowName, String features)
 51    {
 52  0 _windowName = windowName;
 53  0 _features = features;
 54    }
 55   
 56    /**
 57    * @see DefaultLinkRenderer#constructURL(org.apache.tapestry.engine.ILink, String,
 58    * org.apache.tapestry.IRequestCycle)
 59    */
 60  0 protected String constructURL(ILink link, String anchor, IRequestCycle cycle)
 61    {
 62  0 String url = link.getURL(anchor, true);
 63   
 64  0 PageRenderSupport support = (PageRenderSupport) cycle
 65    .getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE);
 66   
 67    // TODO: Error if no Body!
 68   
 69  0 String functionName = support.getUniqueString("popup_window");
 70   
 71  0 BodyBuilder builder = new BodyBuilder();
 72   
 73  0 builder.addln("function {0}()", functionName);
 74  0 builder.begin();
 75  0 builder.addln(
 76    "var newWindow = window.open({0}, {1}, {2});",
 77    normalizeString(url),
 78    normalizeString(getWindowName()),
 79    normalizeString(getFeatures()));
 80  0 builder.addln("newWindow.focus();");
 81  0 builder.end();
 82   
 83  0 support.addBodyScript(builder.toString());
 84   
 85  0 return "javascript:" + functionName + "();";
 86    }
 87   
 88    private static final String QUOTE = "\"";
 89   
 90  0 static String normalizeString(String str)
 91    {
 92  0 if (HiveMind.isBlank(str))
 93  0 return QUOTE + QUOTE;
 94   
 95  0 int length = str.length();
 96   
 97    // Doing this char by char is inefficient but Good Enough
 98   
 99  0 StringBuffer buffer = new StringBuffer(length + 2);
 100   
 101  0 buffer.append(QUOTE);
 102   
 103  0 for (int i = 0; i < length; i++)
 104    {
 105  0 char ch = str.charAt(i);
 106   
 107    // Embedded quotes and backslashes are escaped with a backslash.
 108   
 109  0 if (ch == '"' || ch == '\\')
 110  0 buffer.append('\\');
 111   
 112  0 buffer.append(ch);
 113    }
 114   
 115  0 buffer.append(QUOTE);
 116   
 117  0 return buffer.toString();
 118    }
 119   
 120  0 public String getWindowName()
 121    {
 122  0 return _windowName;
 123    }
 124   
 125  0 public void setWindowName(String windowName)
 126    {
 127  0 _windowName = windowName;
 128    }
 129   
 130  0 public String getFeatures()
 131    {
 132  0 return _features;
 133    }
 134   
 135  0 public void setFeatures(String features)
 136    {
 137  0 _features = features;
 138    }
 139    }