Coverage report

| %line | %branch
--- | --- | ---
org.apache.commons.jelly.impl.StaticTagScript |
65% |
88% |

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 |  |
     package org.apache.commons.jelly.impl;
17 |  |
18 |  |
     import java.net.URL;
19 |  |
     import java.util.Iterator;
20 |  |
     import java.util.Map;
21 |  |
22 |  |
     import org.apache.commons.jelly.DynaTag;
23 |  |
     import org.apache.commons.jelly.JellyContext;
24 |  |
     import org.apache.commons.jelly.JellyException;
25 |  |
     import org.apache.commons.jelly.JellyTagException;
26 |  |
     import org.apache.commons.jelly.Tag;
27 |  |
     import org.apache.commons.jelly.TagLibrary;
28 |  |
     import org.apache.commons.jelly.XMLOutput;
29 |  |
     import org.apache.commons.jelly.expression.Expression;
30 |  |
     import org.xml.sax.SAXException;
31 |  |
32 |  |
     /**
33 |  |
      * <p><code>StaticTagScript</code> is a script that evaluates a StaticTag, a piece of static XML
34 |  |
      * though its attributes or element content may contain dynamic expressions.
35 |  |
      * The first time this tag evaluates, it may have become a dynamic tag, so it will check that
36 |  |
      * a new dynamic tag has not been generated.</p>
37 |  |
      *
38 |  |
      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
39 |  |
      * @version $Revision: 155420 $
40 |  |
      */
41 |  |
     public class StaticTagScript extends TagScript {
42 |  |
43 | 0 |
         public StaticTagScript() {
44 | 0 |
         }
45 |  |
46 |  |
         public StaticTagScript(TagFactory tagFactory) {
47 | 247 |
             super(tagFactory);
48 | 247 |
         }
49 |  |
50 |  |
51 |  |
         // Script interface
52 |  |
         //-------------------------------------------------------------------------
53 |  |
         public void run(JellyContext context, XMLOutput output) throws JellyTagException {
54 |  |
             try {
55 | 156 |
                 startNamespacePrefixes(output);
56 | 0 |
             } catch (SAXException e) {
57 | 0 |
                 throw new JellyTagException("could not start namespace prefixes",e);
58 | 156 |
             }
59 |  |
60 | 156 |
             Tag tag = null;
61 |  |
             try {
62 | 156 |
                 tag = getTag(context);
63 |  |
64 |  |
                 // lets see if we have a dynamic tag
65 | 156 |
                 if (tag instanceof StaticTag) {
66 | 156 |
                     tag = findDynamicTag(context, (StaticTag) tag);
67 |  |
                 }
68 |  |
69 | 156 |
                 setTag(tag,context);
70 | 0 |
             } catch (JellyException e) {
71 | 0 |
                 throw new JellyTagException(e);
72 | 156 |
             }
73 |  |
74 | 156 |
             URL rootURL = context.getRootURL();
75 | 156 |
             URL currentURL = context.getCurrentURL();
76 |  |
             try {
77 | 156 |
                 if ( tag == null ) {
78 |  |
                     return;
79 |  |
                 }
80 | 156 |
                 tag.setContext(context);
81 | 156 |
                 setContextURLs(context);
82 |  |
83 | 156 |
                 DynaTag dynaTag = (DynaTag) tag;
84 |  |
85 |  |
                 // ### probably compiling this to 2 arrays might be quicker and smaller
86 | 156 |
                 for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
87 | 104 |
                     Map.Entry entry = (Map.Entry) iter.next();
88 | 104 |
                     String name = (String) entry.getKey();
89 | 104 |
                     Expression expression = (Expression) entry.getValue();
90 |  |
91 | 104 |
                     Object value = null;
92 |  |
93 | 156 |
                     if ( Expression.class.isAssignableFrom( dynaTag.getAttributeType(name) ) ) {
94 | 0 |
                         value = expression;
95 | 0 |
                     } else {
96 | 104 |
                         value = expression.evaluate(context);
97 |  |
                     }
98 |  |
99 | 104 |
                     dynaTag.setAttribute(name, value);
100 | 104 |
                 }
101 |  |
102 | 156 |
                 tag.doTag(output);
103 |  |
             }
104 | 0 |
             catch (JellyTagException e) {
105 | 0 |
                 handleException(e);
106 |  |
             }
107 | 0 |
             catch (RuntimeException e) {
108 | 0 |
                 handleException(e);
109 |  |
             } finally {
110 | 156 |
                 context.setCurrentURL(currentURL);
111 | 156 |
                 context.setRootURL(rootURL);
112 | 156 |
             }
113 |  |
114 |  |
             try {
115 | 156 |
                 endNamespacePrefixes(output);
116 | 0 |
             } catch (SAXException e) {
117 | 0 |
                 throw new JellyTagException("could not end namespace prefixes",e);
118 | 156 |
             }
119 | 156 |
         }
120 |  |
121 |  |
         /**
122 |  |
          * Attempts to find a dynamically created tag that has been created since this
123 |  |
          * script was compiled
124 |  |
          */
125 |  |
         protected Tag findDynamicTag(JellyContext context, StaticTag tag) throws JellyException {
126 |  |
             // lets see if there's a tag library for this URI...
127 | 156 |
             TagLibrary taglib = context.getTagLibrary( tag.getUri() );
128 | 156 |
             if ( taglib != null ) {
129 | 0 |
                 Tag newTag = taglib.createTag( tag.getLocalName(), getSaxAttributes() );
130 | 0 |
                 if ( newTag != null ) {
131 | 0 |
                     newTag.setParent( tag.getParent() );
132 | 0 |
                     newTag.setBody( tag.getBody() );
133 | 0 |
                     return newTag;
134 |  |
                 }
135 |  |
             }
136 | 156 |
             return tag;
137 |  |
         }
138 |  |
     }

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