Coverage report

| %line | %branch
--- | --- | ---
org.apache.commons.jelly.impl.DynamicDynaBeanTag |
0% |
0% |

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.util.HashSet;
19 |  |
     import java.util.Iterator;
20 |  |
     import java.util.Map;
21 |  |
     import java.util.Set;
22 |  |
23 |  |
     import org.apache.commons.beanutils.DynaClass;
24 |  |
     import org.apache.commons.jelly.DynaBeanTagSupport;
25 |  |
     import org.apache.commons.jelly.JellyTagException;
26 |  |
     import org.apache.commons.jelly.MissingAttributeException;
27 |  |
     import org.apache.commons.jelly.XMLOutput;
28 |  |
     import org.apache.commons.jelly.expression.Expression;
29 |  |
30 |  |
     /**
31 |  |
      * This tag is bound onto a {@link DynaClass} instance.
32 |  |
      * When the tag is invoked a {@link DynaBean will be created using the tags attributes.
33 |  |
      * So this class is like a {@link DynaBean} implemenation of {@link DynamicBeanTag}
34 |  |
      *
35 |  |
      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
36 |  |
      * @version $Revision: 155420 $
37 |  |
      */
38 |  |
     public class DynamicDynaBeanTag extends DynaBeanTagSupport implements BeanSource {
39 |  |
40 |  |
         /** the bean class */
41 |  |
         private DynaClass beanClass;
42 |  |
43 |  |
         /**
44 |  |
          * the tag attribute name that is used to declare the name
45 |  |
          * of the variable to export after running this tag
46 |  |
          */
47 |  |
         private String variableNameAttribute;
48 |  |
49 |  |
         /** the current variable name that the bean should be exported as */
50 |  |
         private String var;
51 |  |
52 |  |
         /** the set of attribute names we've already set */
53 | 0 |
         private Set setAttributesSet = new HashSet();
54 |  |
55 |  |
         /** the attribute definitions */
56 |  |
         private Map attributes;
57 |  |
58 | 0 |
         public DynamicDynaBeanTag(DynaClass beanClass, Map attributes, String variableNameAttribute) {
59 | 0 |
             this.beanClass = beanClass;
60 | 0 |
             this.attributes = attributes;
61 | 0 |
             this.variableNameAttribute = variableNameAttribute;
62 | 0 |
         }
63 |  |
64 |  |
         public void beforeSetAttributes() throws JellyTagException {
65 |  |
             // create a new dynabean before the attributes are set
66 |  |
             try {
67 | 0 |
                 setDynaBean( beanClass.newInstance() );
68 | 0 |
             } catch (IllegalAccessException e) {
69 | 0 |
                 throw new JellyTagException("Could not instantiate dynabean",e);
70 | 0 |
             } catch (InstantiationException e) {
71 | 0 |
                 throw new JellyTagException("Could not instantiate dynabean",e);
72 | 0 |
             }
73 |  |
74 | 0 |
             setAttributesSet.clear();
75 | 0 |
         }
76 |  |
77 |  |
         public void setAttribute(String name, Object value) throws JellyTagException {
78 | 0 |
             boolean isVariableName = false;
79 | 0 |
             if (variableNameAttribute != null ) {
80 | 0 |
                 if ( variableNameAttribute.equals( name ) ) {
81 | 0 |
                     if (value == null) {
82 | 0 |
                         var = null;
83 | 0 |
                     }
84 |  |
                     else {
85 | 0 |
                         var = value.toString();
86 |  |
                     }
87 | 0 |
                     isVariableName = true;
88 |  |
                 }
89 |  |
             }
90 | 0 |
             if (! isVariableName) {
91 |  |
92 |  |
                 // #### strictly speaking we could
93 |  |
                 // know what attributes are specified at compile time
94 |  |
                 // so this dynamic set is unnecessary
95 | 0 |
                 setAttributesSet.add(name);
96 |  |
97 |  |
                 // we could maybe implement attribute specific validation here
98 |  |
99 | 0 |
                 super.setAttribute(name, value);
100 |  |
             }
101 | 0 |
         }
102 |  |
103 |  |
         // Tag interface
104 |  |
         //-------------------------------------------------------------------------
105 |  |
         public void doTag(XMLOutput output) throws JellyTagException {
106 |  |
107 |  |
             // lets find any attributes that are not set and
108 | 0 |
             for ( Iterator iter = attributes.values().iterator(); iter.hasNext(); ) {
109 | 0 |
                 Attribute attribute = (Attribute) iter.next();
110 | 0 |
                 String name = attribute.getName();
111 | 0 |
                 if ( ! setAttributesSet.contains( name ) ) {
112 | 0 |
                     if ( attribute.isRequired() ) {
113 | 0 |
                         throw new MissingAttributeException(name);
114 |  |
                     }
115 |  |
                     // lets get the default value
116 | 0 |
                     Object value = null;
117 | 0 |
                     Expression expression = attribute.getDefaultValue();
118 | 0 |
                     if ( expression != null ) {
119 | 0 |
                         value = expression.evaluate(context);
120 |  |
                     }
121 |  |
122 |  |
                     // only set non-null values?
123 | 0 |
                     if ( value != null ) {
124 | 0 |
                         super.setAttribute(name, value);
125 |  |
                     }
126 |  |
                 }
127 | 0 |
             }
128 |  |
129 | 0 |
             invokeBody(output);
130 |  |
131 |  |
             // export the bean if required
132 | 0 |
             if ( var != null ) {
133 | 0 |
                 context.setVariable(var, getDynaBean());
134 |  |
             }
135 | 0 |
         }
136 |  |
137 |  |
         // Properties
138 |  |
         //-------------------------------------------------------------------------
139 |  |
         /**
140 |  |
          * @return the bean that has just been created
141 |  |
          */
142 |  |
         public Object getBean() {
143 | 0 |
             return getDynaBean();
144 |  |
         }
145 |  |
     }

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