blob: 8c2f585a7c84e87d3a772541e394cf59435ae469 [file] [log] [blame]
/************************************************************************
*
* 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;
}
}