Coverage report

  %line %branch
org.apache.commons.jelly.tags.jsl.TemplateTag$1
80% 
100% 

 1  
 /*
 2  
  * Copyright 2002,2004 The Apache Software Foundation.
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *      http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 
 17  
 package org.apache.commons.jelly.tags.jsl;
 18  
 
 19  
 import org.apache.commons.jelly.JellyTagException;
 20  
 import org.apache.commons.jelly.TagSupport;
 21  
 import org.apache.commons.jelly.XMLOutput;
 22  
 import org.apache.commons.jelly.xpath.XPathSource;
 23  
 import org.apache.commons.logging.Log;
 24  
 import org.apache.commons.logging.LogFactory;
 25  
 import org.dom4j.Node;
 26  
 import org.dom4j.rule.Action;
 27  
 import org.dom4j.rule.Pattern;
 28  
 import org.dom4j.rule.Rule;
 29  
 
 30  
 /**
 31  
  * This tag represents a declarative matching rule, similar to the template tag in XSLT.
 32  
  *
 33  
  * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
 34  
  * @version $Revision: 155420 $
 35  
  */
 36  
 public class TemplateTag extends TagSupport implements XPathSource {
 37  
 
 38  
     /** The Log to which logging calls will be made. */
 39  
     private Log log = LogFactory.getLog(TemplateTag.class);
 40  
 
 41  
 
 42  
     /** Holds value of property name. */
 43  
     private String name;
 44  
 
 45  
     /** Holds value of property mode. */
 46  
     private String mode;
 47  
 
 48  
     /** Holds value of property priority. */
 49  
     private double priority;
 50  
 
 51  
     /** The pattern to match */
 52  
     private Pattern match;
 53  
 
 54  
     /** The source XPath context for any child tags */
 55  
     private Object xpathSource;
 56  
 
 57  
 
 58  
     public TemplateTag() {
 59  
     }
 60  
 
 61  
 
 62  
     // Tag interface
 63  
     //-------------------------------------------------------------------------
 64  
     public void doTag(XMLOutput output) throws JellyTagException {
 65  
         StylesheetTag tag = (StylesheetTag) findAncestorWithClass( StylesheetTag.class );
 66  
         if (tag == null) {
 67  
             throw new JellyTagException( "This <template> tag must be used inside a <stylesheet> tag" );
 68  
         }
 69  
 
 70  
         if ( log.isDebugEnabled() ) {
 71  
             log.debug( "adding template rule for match: " + match );
 72  
         }
 73  
 
 74  
         Rule rule = createRule(tag, output);
 75  
         if ( rule != null && tag != class="keyword">null) {
 76  
             rule.setMode( mode );
 77  
             tag.addTemplate( rule );
 78  
         }
 79  
     }
 80  
 
 81  
     // XPathSource interface
 82  
     //-------------------------------------------------------------------------
 83  
 
 84  
     /**
 85  
      * @return the current XPath value on which relative paths are evaluated
 86  
      */
 87  
     public Object getXPathSource() {
 88  
         return xpathSource;
 89  
     }
 90  
 
 91  
 
 92  
     // Properties
 93  
     //-------------------------------------------------------------------------
 94  
 
 95  
     public void setMatch(Pattern match) {
 96  
         this.match = match;
 97  
     }
 98  
 
 99  
     /** Getter for property priority.
 100  
      * @return Value of property priority.
 101  
      */
 102  
     public double getPriority() {
 103  
         return priority;
 104  
     }
 105  
 
 106  
     /** Sets the priority.
 107  
      * @param priority New value of property priority.
 108  
      */
 109  
     public void setPriority(double priority) {
 110  
         this.priority = priority;
 111  
     }
 112  
 
 113  
     /** Getter for property name.
 114  
      * @return Value of property name.
 115  
      */
 116  
     public String getName() {
 117  
         return name;
 118  
     }
 119  
 
 120  
     /** Sets the name.
 121  
      * @param name New value of property name.
 122  
      */
 123  
     public void setName(String name) {
 124  
         this.name = name;
 125  
     }
 126  
 
 127  
 
 128  
     /** Sets the mode.
 129  
      * @param mode New value of property mode.
 130  
      */
 131  
     public void setMode(String mode) {
 132  
         this.mode = mode;
 133  
     }
 134  
 
 135  
 
 136  
     // Implementation methods
 137  
     //-------------------------------------------------------------------------
 138  
     protected Rule createRule(StylesheetTag tag, XMLOutput output) {
 139  
         return new Rule( match, createAction(tag, output) );
 140  
     }
 141  
 
 142  
     protected Action createAction(final StylesheetTag tag, class="keyword">final XMLOutput output) {
 143  
         return new Action() {
 144  72
             public void run(Node node) throws Exception {
 145  
 
 146  
                 // store the context for use by applyTemplates tag
 147  51
                 tag.setXPathSource( node );
 148  
 
 149  51
                 xpathSource = node;
 150  
 
 151  51
                 if (log.isDebugEnabled()) {
 152  0
                     log.debug( "Firing template body for match: " + match + " and node: " + node );
 153  
                 }
 154  
 
 155  51
                 XMLOutput actualOutput = tag.getStylesheetOutput();
 156  51
                 if (actualOutput == null) {
 157  0
                     actualOutput = output;
 158  
                 }
 159  
 
 160  51
                 invokeBody(actualOutput);
 161  48
             }
 162  
         };
 163  
     }
 164  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.