Clover coverage report - Code Coverage for tapestry release 4.0-beta-2
Coverage timestamp: Sat Jul 9 2005 22:02:17 EDT
file stats: LOC: 141   Methods: 4
NCLOC: 68   Classes: 1
30 day Evaluation License registered to hlship@comcast.net Your 30 day evaluation period has expired. Please visit http://www.cenqua.com to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
LinkSubmit.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.form;
 16   
 17    import org.apache.hivemind.ApplicationRuntimeException;
 18    import org.apache.tapestry.IForm;
 19    import org.apache.tapestry.IMarkupWriter;
 20    import org.apache.tapestry.IRequestCycle;
 21    import org.apache.tapestry.PageRenderSupport;
 22    import org.apache.tapestry.Tapestry;
 23    import org.apache.tapestry.TapestryUtils;
 24   
 25    /**
 26    * Implements a component that submits its enclosing form via a JavaScript link. [ <a
 27    * href="../../../../../ComponentReference/LinkSubmit.html">Component Reference </a>]
 28    *
 29    * @author Richard Lewis-Shell
 30    */
 31   
 32    public abstract class LinkSubmit extends AbstractSubmit
 33    {
 34    /**
 35    * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the current
 36    * submit link is stored. LinkSubmits do not nest.
 37    */
 38   
 39    public static final String ATTRIBUTE_NAME = "org.apache.tapestry.form.LinkSubmit";
 40   
 41    /**
 42    * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the link submit
 43    * component that generates the javascript function is stored. The function is only required
 44    * once per page (containing a form with a non-disabled LinkSubmit)
 45    */
 46    public static final String ATTRIBUTE_FUNCTION_NAME = "org.apache.tapestry.form.LinkSubmit_function";
 47   
 48  0 protected boolean isClicked(IRequestCycle cycle, String name)
 49    {
 50    // How to know which Submit link was actually
 51    // clicked? When submitted, it sets its elementId into a hidden field
 52  0 String value = cycle.getParameter("_linkSubmit");
 53   
 54    // If the value isn't the elementId of this component, then this link wasn't
 55    // selected.
 56  0 return value != null && value.equals(name);
 57    }
 58   
 59    /**
 60    * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
 61    */
 62  0 protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
 63    {
 64  0 boolean disabled = isDisabled();
 65   
 66  0 IMarkupWriter wrappedWriter;
 67   
 68  0 if (!disabled)
 69    {
 70  0 PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(
 71    cycle,
 72    this);
 73   
 74    // make sure the submit function is on the page (once)
 75  0 if (cycle.getAttribute(ATTRIBUTE_FUNCTION_NAME) == null)
 76    {
 77  0 pageRenderSupport
 78    .addBodyScript("function submitLink(form, elementId) { form._linkSubmit.value = elementId; if (form.onsubmit == null || form.onsubmit()) form.submit(); }");
 79  0 cycle.setAttribute(ATTRIBUTE_FUNCTION_NAME, this);
 80    }
 81   
 82  0 IForm form = getForm();
 83  0 String formName = form.getName();
 84   
 85    // one hidden field per form:
 86  0 String formHiddenFieldAttributeName = ATTRIBUTE_FUNCTION_NAME + formName;
 87  0 if (cycle.getAttribute(formHiddenFieldAttributeName) == null)
 88    {
 89  0 writer.beginEmpty("input");
 90  0 writer.attribute("type", "hidden");
 91  0 writer.attribute("name", "_linkSubmit");
 92  0 cycle.setAttribute(formHiddenFieldAttributeName, this);
 93    }
 94   
 95  0 writer.begin("a");
 96  0 writer.attribute("href", "javascript:submitLink(document." + formName + ",\"" + getName()
 97    + "\");");
 98   
 99    // Allow the wrapped components a chance to render.
 100    // Along the way, they may interact with this component
 101    // and cause the name variable to get set.
 102  0 wrappedWriter = writer.getNestedWriter();
 103    }
 104    else
 105  0 wrappedWriter = writer;
 106   
 107  0 renderBody(wrappedWriter, cycle);
 108   
 109  0 if (!disabled)
 110    {
 111    // Generate additional attributes from informal parameters.
 112  0 renderInformalParameters(writer, cycle);
 113   
 114    // Dump in HTML provided by wrapped components
 115  0 wrappedWriter.close();
 116   
 117    // Close the <a> tag
 118  0 writer.end();
 119    }
 120    }
 121   
 122    /**
 123    * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
 124    */
 125  0 protected void prepareForRender(IRequestCycle cycle)
 126    {
 127  0 if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
 128  0 throw new ApplicationRuntimeException(Tapestry.getMessage("LinkSubmit.may-not-nest"),
 129    this, null, null);
 130   
 131  0 cycle.setAttribute(ATTRIBUTE_NAME, this);
 132    }
 133   
 134    /**
 135    * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle)
 136    */
 137  0 protected void cleanupAfterRender(IRequestCycle cycle)
 138    {
 139  0 cycle.removeAttribute(ATTRIBUTE_NAME);
 140    }
 141    }