Clover coverage report - dom4j - 1.6.1
Coverage timestamp: ma mei 16 2005 14:23:01 GMT+01:00
file stats: LOC: 144   Methods: 4
NCLOC: 53   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
SAXModifyElementHandler.java 0% 0% 0% 0%
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.io;
 9   
 10    import org.dom4j.Document;
 11    import org.dom4j.Element;
 12    import org.dom4j.ElementHandler;
 13    import org.dom4j.ElementPath;
 14   
 15    /**
 16    * This {@link org.dom4j.ElementHandler}is used to trigger {@link
 17    * ElementModifier} objects in order to modify (parts of) the Document on the
 18    * fly.
 19    *
 20    * <p>
 21    * When an element is completely parsed, a copy is handed to the associated (if
 22    * any) {@link ElementModifier}that on his turn returns the modified element
 23    * that has to come in the tree.
 24    * </p>
 25    *
 26    * @author Wonne Keysers (Realsoftware.be)
 27    */
 28    class SAXModifyElementHandler implements ElementHandler {
 29    private ElementModifier elemModifier;
 30   
 31    private Element modifiedElement;
 32   
 33  0 public SAXModifyElementHandler(ElementModifier elemModifier) {
 34  0 this.elemModifier = elemModifier;
 35    }
 36   
 37  0 public void onStart(ElementPath elementPath) {
 38  0 this.modifiedElement = elementPath.getCurrent();
 39    }
 40   
 41  0 public void onEnd(ElementPath elementPath) {
 42  0 try {
 43  0 Element origElement = elementPath.getCurrent();
 44  0 Element currentParent = origElement.getParent();
 45   
 46  0 if (currentParent != null) {
 47    // Clone sets parent + document to null
 48  0 Element clonedElem = (Element) origElement.clone();
 49   
 50    // Ask for modified element
 51  0 modifiedElement = elemModifier.modifyElement(clonedElem);
 52   
 53  0 if (modifiedElement != null) {
 54    // Restore parent + document
 55  0 modifiedElement.setParent(origElement.getParent());
 56  0 modifiedElement.setDocument(origElement.getDocument());
 57   
 58    // Replace old with new element in parent
 59  0 int contentIndex = currentParent.indexOf(origElement);
 60  0 currentParent.content().set(contentIndex, modifiedElement);
 61    }
 62   
 63    // Remove the old element
 64  0 origElement.detach();
 65    } else {
 66  0 if (origElement.isRootElement()) {
 67    // Clone sets parent + document to null
 68  0 Element clonedElem = (Element) origElement.clone();
 69   
 70    // Ask for modified element
 71  0 modifiedElement = elemModifier.modifyElement(clonedElem);
 72   
 73  0 if (modifiedElement != null) {
 74    // Restore parent + document
 75  0 modifiedElement.setDocument(origElement.getDocument());
 76   
 77    // Replace old with new element in parent
 78  0 Document doc = origElement.getDocument();
 79  0 doc.setRootElement(modifiedElement);
 80    }
 81   
 82    // Remove the old element
 83  0 origElement.detach();
 84    }
 85    }
 86   
 87    // Put the new element on the ElementStack, it might get pruned by
 88    // the PruningDispatchHandler
 89  0 if (elementPath instanceof ElementStack) {
 90  0 ElementStack elementStack = ((ElementStack) elementPath);
 91  0 elementStack.popElement();
 92  0 elementStack.pushElement(modifiedElement);
 93    }
 94    } catch (Exception ex) {
 95  0 throw new SAXModifyException(ex);
 96    }
 97    }
 98   
 99    /**
 100    * DOCUMENT ME!
 101    *
 102    * @return Returns the modified Element.
 103    */
 104  0 protected Element getModifiedElement() {
 105  0 return modifiedElement;
 106    }
 107    }
 108   
 109    /*
 110    * Redistribution and use of this software and associated documentation
 111    * ("Software"), with or without modification, are permitted provided that the
 112    * following conditions are met:
 113    *
 114    * 1. Redistributions of source code must retain copyright statements and
 115    * notices. Redistributions must also contain a copy of this document.
 116    *
 117    * 2. Redistributions in binary form must reproduce the above copyright notice,
 118    * this list of conditions and the following disclaimer in the documentation
 119    * and/or other materials provided with the distribution.
 120    *
 121    * 3. The name "DOM4J" must not be used to endorse or promote products derived
 122    * from this Software without prior written permission of MetaStuff, Ltd. For
 123    * written permission, please contact dom4j-info@metastuff.com.
 124    *
 125    * 4. Products derived from this Software may not be called "DOM4J" nor may
 126    * "DOM4J" appear in their names without prior written permission of MetaStuff,
 127    * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
 128    *
 129    * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
 130    *
 131    * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
 132    * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 133    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 134    * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
 135    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 136    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 137    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 138    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 139    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 140    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 141    * POSSIBILITY OF SUCH DAMAGE.
 142    *
 143    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 144    */