Clover coverage report - Code Coverage for tapestry release 4.0-beta-5
Coverage timestamp: Fri Aug 26 2005 21:16:17 EDT
file stats: LOC: 142   Methods: 4
NCLOC: 67   Classes: 1
 
 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    /**
 36    * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the current
 37    * submit link is stored. LinkSubmits do not nest.
 38    */
 39   
 40    public static final String ATTRIBUTE_NAME = "org.apache.tapestry.form.LinkSubmit";
 41   
 42    /**
 43    * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the link submit
 44    * component that generates the javascript function is stored. The function is only required
 45    * once per page (containing a form with a non-disabled LinkSubmit)
 46    */
 47    public static final String ATTRIBUTE_FUNCTION_NAME = "org.apache.tapestry.form.LinkSubmit_function";
 48   
 49  0 protected boolean isClicked(IRequestCycle cycle, String name)
 50    {
 51    // How to know which Submit link was actually
 52    // clicked? When submitted, it sets its elementId into a hidden field
 53  0 String value = cycle.getParameter("_linkSubmit");
 54   
 55    // If the value isn't the elementId of this component, then this link wasn't
 56    // selected.
 57  0 return value != null && value.equals(name);
 58    }
 59   
 60    /**
 61    * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
 62    * org.apache.tapestry.IRequestCycle)
 63    */
 64  0 protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
 65    {
 66  0 boolean disabled = isDisabled();
 67   
 68  0 IMarkupWriter wrappedWriter;
 69   
 70  0 if (!disabled)
 71    {
 72  0 PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, 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 renderIdAttribute(writer, cycle);
 97  0 writer.attribute("href", "javascript:submitLink(Tapestry.find('" + formName + "', '"
 98    + getName() + "');");
 99   
 100    // Allow the wrapped components a chance to render.
 101    // Along the way, they may interact with this component
 102    // and cause the name variable to get set.
 103  0 wrappedWriter = writer.getNestedWriter();
 104    }
 105    else
 106  0 wrappedWriter = writer;
 107   
 108  0 renderBody(wrappedWriter, cycle);
 109   
 110  0 if (!disabled)
 111    {
 112    // Generate additional attributes from informal parameters.
 113  0 renderInformalParameters(writer, cycle);
 114   
 115    // Dump in HTML provided by wrapped components
 116  0 wrappedWriter.close();
 117   
 118    // Close the <a> tag
 119  0 writer.end();
 120    }
 121    }
 122   
 123    /**
 124    * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
 125    */
 126  0 protected void prepareForRender(IRequestCycle cycle)
 127    {
 128  0 if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
 129  0 throw new ApplicationRuntimeException(Tapestry.getMessage("LinkSubmit.may-not-nest"),
 130    this, null, null);
 131   
 132  0 cycle.setAttribute(ATTRIBUTE_NAME, this);
 133    }
 134   
 135    /**
 136    * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle)
 137    */
 138  0 protected void cleanupAfterRender(IRequestCycle cycle)
 139    {
 140  0 cycle.removeAttribute(ATTRIBUTE_NAME);
 141    }
 142    }