| /************************************************************************ |
| * |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER |
| * |
| * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved. |
| * |
| * Use is subject to license terms. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy |
| * of the License at http://www.apache.org/licenses/LICENSE-2.0. You can also |
| * obtain a copy of the License at http://odftoolkit.org/docs/license.txt |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ************************************************************************/ |
| //ToDo: Move into tooling package? |
| package org.odftoolkit.odfdom.pkg; |
| |
| import org.odftoolkit.odfdom.dom.OdfContentDom; |
| import org.odftoolkit.odfdom.dom.OdfStylesDom; |
| import org.w3c.dom.DOMException; |
| import org.w3c.dom.Node; |
| |
| /** |
| * Overwriting the DOM methods for element access, whenever a new ODF element was added triggering |
| * <code>onOdfNodeInserted</code> and when removed a <code>onOdfNodeRemoved.</code>. |
| * Yet not overriding all DOM access methods, esp. not the access on key attributes, eg. @style-name. |
| */ |
| abstract public class OdfContainerElementBase extends OdfElement { |
| |
| private static final long serialVersionUID = 6944696143015713668L; |
| // moved to this class as only used for style handling |
| protected OdfPackageDocument mPackageDocument; |
| |
| /** Creates a new instance of OdfElement */ |
| public OdfContainerElementBase(OdfFileDom ownerDocument, |
| String namespaceURI, |
| String qualifiedName) throws DOMException { |
| super(ownerDocument, namespaceURI, qualifiedName); |
| if (ownerDocument instanceof OdfContentDom) { |
| ownerDocument = (OdfContentDom) ownerDocument; |
| } else if (ownerDocument instanceof OdfStylesDom) { |
| ownerDocument = (OdfStylesDom) ownerDocument; |
| } |
| mPackageDocument = ownerDocument.getDocument(); |
| } |
| |
| /** Creates a new instance of OdfElement */ |
| public OdfContainerElementBase(OdfFileDom ownerDocument, |
| OdfName aName) throws DOMException { |
| super(ownerDocument, aName.getUri(), aName.getQName()); |
| } |
| |
| /** override this method to get notified about element insertion |
| */ |
| protected void onOdfNodeInserted(OdfElement node, Node refChild) { |
| throw new UnsupportedOperationException("Not supported yet."); |
| } |
| |
| /** override this method to get notified about element insertion |
| */ |
| protected void onOdfNodeRemoved(OdfElement node) { |
| throw new UnsupportedOperationException("Not supported yet."); |
| } |
| |
| @Override |
| public Node insertBefore(Node newChild, Node refChild) throws DOMException { |
| Node ret = super.insertBefore(newChild, refChild); |
| if (newChild instanceof OdfElement) { |
| onOdfNodeInserted((OdfElement) newChild, refChild); |
| } |
| return ret; |
| } |
| |
| @Override |
| public Node removeChild(Node oldChild) throws DOMException { |
| Node ret = super.removeChild(oldChild); |
| if (oldChild instanceof OdfElement) { |
| onOdfNodeRemoved((OdfElement) oldChild); |
| } |
| return ret; |
| } |
| |
| @Override |
| public Node replaceChild(Node newChild, Node oldChild) throws DOMException { |
| Node ret = super.replaceChild(newChild, oldChild); |
| |
| if (newChild instanceof OdfElement) { |
| onOdfNodeInserted((OdfElement) newChild, oldChild); |
| } |
| if (oldChild instanceof OdfElement) { |
| onOdfNodeRemoved((OdfElement) oldChild); |
| } |
| return ret; |
| } |
| } |