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.