Clover coverage report - dom4j - 1.6.1
Coverage timestamp: ma mei 16 2005 14:23:01 GMT+01:00
file stats: LOC: 194   Methods: 16
NCLOC: 93   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
BeanElement.java 70% 64,7% 56,2% 63,3%
coverage coverage
 1    /*
 2    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 3    *
 4    * This software is open source.
 5    * See the bottom of this file for the licence.
 6    */
 7   
 8    package org.dom4j.bean;
 9   
 10    import java.util.List;
 11   
 12    import org.dom4j.Attribute;
 13    import org.dom4j.DocumentFactory;
 14    import org.dom4j.Element;
 15    import org.dom4j.Namespace;
 16    import org.dom4j.QName;
 17    import org.dom4j.tree.DefaultElement;
 18    import org.dom4j.tree.NamespaceStack;
 19   
 20    import org.xml.sax.Attributes;
 21   
 22    /**
 23    * <p>
 24    * <code>BeanElement</code> uses a Java Bean to store its attributes.
 25    * </p>
 26    *
 27    * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
 28    * @version $Revision: 1.15 $
 29    */
 30    public class BeanElement extends DefaultElement {
 31    /** The <code>DocumentFactory</code> instance used by default */
 32    private static final DocumentFactory DOCUMENT_FACTORY = BeanDocumentFactory
 33    .getInstance();
 34   
 35    /** The JavaBean which defines my attributes */
 36    private Object bean;
 37   
 38  0 public BeanElement(String name, Object bean) {
 39  0 this(DOCUMENT_FACTORY.createQName(name), bean);
 40    }
 41   
 42  0 public BeanElement(String name, Namespace namespace, Object bean) {
 43  0 this(DOCUMENT_FACTORY.createQName(name, namespace), bean);
 44    }
 45   
 46  0 public BeanElement(QName qname, Object bean) {
 47  0 super(qname);
 48  0 this.bean = bean;
 49    }
 50   
 51  3 public BeanElement(QName qname) {
 52  3 super(qname);
 53    }
 54   
 55    /**
 56    * DOCUMENT ME!
 57    *
 58    * @return the JavaBean associated with this element
 59    */
 60  4 public Object getData() {
 61  4 return bean;
 62    }
 63   
 64  2 public void setData(Object data) {
 65  2 this.bean = data;
 66   
 67    // force the attributeList to be lazily
 68    // created next time an attribute related
 69    // method is called again.
 70  2 setAttributeList(null);
 71    }
 72   
 73  2 public Attribute attribute(String name) {
 74  2 return getBeanAttributeList().attribute(name);
 75    }
 76   
 77  0 public Attribute attribute(QName qname) {
 78  0 return getBeanAttributeList().attribute(qname);
 79    }
 80   
 81  2 public Element addAttribute(String name, String value) {
 82  2 Attribute attribute = attribute(name);
 83   
 84  2 if (attribute != null) {
 85  2 attribute.setValue(value);
 86    }
 87   
 88  2 return this;
 89    }
 90   
 91  0 public Element addAttribute(QName qName, String value) {
 92  0 Attribute attribute = attribute(qName);
 93   
 94  0 if (attribute != null) {
 95  0 attribute.setValue(value);
 96    }
 97   
 98  0 return this;
 99    }
 100   
 101  0 public void setAttributes(List attributes) {
 102  0 throw new UnsupportedOperationException("Not implemented yet.");
 103    }
 104   
 105    // Method overridden from AbstractElement
 106  3 public void setAttributes(Attributes attributes,
 107    NamespaceStack namespaceStack, boolean noNamespaceAttributes) {
 108  3 String className = attributes.getValue("class");
 109   
 110  3 if (className != null) {
 111  2 try {
 112  2 Class beanClass = Class.forName(className, true,
 113    BeanElement.class.getClassLoader());
 114  2 this.setData(beanClass.newInstance());
 115   
 116  2 for (int i = 0; i < attributes.getLength(); i++) {
 117  4 String attributeName = attributes.getLocalName(i);
 118   
 119  4 if (!"class".equalsIgnoreCase(attributeName)) {
 120  2 addAttribute(attributeName, attributes.getValue(i));
 121    }
 122    }
 123    } catch (Exception ex) {
 124    // What to do here?
 125  0 ((BeanDocumentFactory) this.getDocumentFactory())
 126    .handleException(ex);
 127    }
 128    } else {
 129  1 super.setAttributes(attributes, namespaceStack,
 130    noNamespaceAttributes);
 131    }
 132    }
 133   
 134    // Implementation methods
 135    // -------------------------------------------------------------------------
 136  5 protected DocumentFactory getDocumentFactory() {
 137  5 return DOCUMENT_FACTORY;
 138    }
 139   
 140  2 protected BeanAttributeList getBeanAttributeList() {
 141  2 return (BeanAttributeList) attributeList();
 142    }
 143   
 144    /**
 145    * A Factory Method pattern which lazily creates a List implementation used
 146    * to store content
 147    *
 148    * @return DOCUMENT ME!
 149    */
 150  2 protected List createAttributeList() {
 151  2 return new BeanAttributeList(this);
 152    }
 153   
 154  0 protected List createAttributeList(int size) {
 155  0 return new BeanAttributeList(this);
 156    }
 157    }
 158   
 159    /*
 160    * Redistribution and use of this software and associated documentation
 161    * ("Software"), with or without modification, are permitted provided that the
 162    * following conditions are met:
 163    *
 164    * 1. Redistributions of source code must retain copyright statements and
 165    * notices. Redistributions must also contain a copy of this document.
 166    *
 167    * 2. Redistributions in binary form must reproduce the above copyright notice,
 168    * this list of conditions and the following disclaimer in the documentation
 169    * and/or other materials provided with the distribution.
 170    *
 171    * 3. The name "DOM4J" must not be used to endorse or promote products derived
 172    * from this Software without prior written permission of MetaStuff, Ltd. For
 173    * written permission, please contact dom4j-info@metastuff.com.
 174    *
 175    * 4. Products derived from this Software may not be called "DOM4J" nor may
 176    * "DOM4J" appear in their names without prior written permission of MetaStuff,
 177    * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
 178    *
 179    * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
 180    *
 181    * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
 182    * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 183    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 184    * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
 185    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 186    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 187    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 188    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 189    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 190    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 191    * POSSIBILITY OF SUCH DAMAGE.
 192    *
 193    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 194    */