/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.editors.xml;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.List;
import org.jboss.tools.smooks.configuration.editors.IXMLStructuredObject;
import org.w3c.dom.Element;
/**
* @author Dart Peng
* @Date Jul 25, 2008
*/
public class AbstractXMLObject implements IXMLStructuredObject {
protected PropertyChangeSupport support = new PropertyChangeSupport(this);
protected Element referenceElement = null;
protected boolean canEdit = false;
private String namespaceURI = null;
private String namespacePrefix = null;
public boolean isCanEdit() {
return canEdit;
}
public boolean isAttribute() {
return false;
}
public void setCanEdit(boolean canEdit) {
this.canEdit = canEdit;
}
protected AbstractXMLObject parent;
protected String name;
public String getNamespaceURI() {
Element element = this.getReferenceElement();
if (element != null) {
return element.getNamespaceURI();
}
return namespaceURI;
}
public void setNamespaceURI(String namespaceURL) {
Element element = this.getReferenceElement();
if (element != null) {
// Namespace ns = element.getNamespace();
// Namespace nns = new Namespace(ns.getPrefix(), namespaceURL);
// element.setQName(new QName(name, nns));
}
this.namespaceURI = namespaceURL;
}
/**
* @return the nameSpacePrefix
*/
public String getNameSpacePrefix() {
Element element = this.getReferenceElement();
if (element != null) {
return element.getPrefix();
}
return namespacePrefix;
}
/**
* @param nameSpacePrefix
* the nameSpacePrefix to set
*/
public void setNameSpacePrefix(String nameSpacePrefix) {
Element element = this.getReferenceElement();
if (element != null) {
// Namespace ns = element.getNamespace();
// Namespace nns = new Namespace(nameSpacePrefix, ns.getURI());
// element.setQName(new QName(name, nns));
}
this.namespacePrefix = nameSpacePrefix;
}
protected List<AbstractXMLObject> children = new ArrayList<AbstractXMLObject>();
public String getName() {
return name;
}
public PropertyChangeListener[] getPropertyChangeListeners() {
return support.getPropertyChangeListeners();
}
public void setName(String name) {
this.name = name;
Element element = this.getReferenceElement();
if (element != null) {
// element.setQName(new QName(name, element.getNamespace()));
}
}
// public void setQName(QName name) {
// this.name = name.getName();
// Element element = this.getReferenceElement();
// if (element != null) {
// element.setQName(name);
// }
// }
public List<AbstractXMLObject> getXMLNodeChildren() {
return children;
}
public void setChildren(List<AbstractXMLObject> children) {
this.children = children;
}
public Element getReferenceElement() {
return referenceElement;
}
public void setReferenceElement(Element referenceElement) {
this.referenceElement = referenceElement;
}
/**
* @return the parent
*/
public AbstractXMLObject getParent() {
return parent;
}
/**
* @param parent
* the parent to set
*/
public void setParent(AbstractXMLObject parent) {
this.parent = parent;
}
public void addNodePropetyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}
public void removeNodePropetyChangeListener(PropertyChangeListener listener) {
support.removePropertyChangeListener(listener);
}
public void cleanAllNodePropertyChangeListeners() {
PropertyChangeListener[] ps = support.getPropertyChangeListeners();
for (int i = 0; i < ps.length; i++) {
PropertyChangeListener p = ps[i];
support.removePropertyChangeListener(p);
}
}
public List<IXMLStructuredObject> getChildren() {
List children = getXMLNodeChildren();
return children;
}
public Object getID() {
return getName();
}
public String getNodeName() {
return getName();
}
public boolean isRootNode() {
return false;
}
}