/*
* Copyright (C) 2004 Joe Walnes.
* Copyright (C) 2006, 2007 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 07. March 2004 by Joe Walnes
*/
package com.thoughtworks.xstream.io.xml.xppdom;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Xpp3Dom {
protected String name;
protected String value;
protected Map attributes;
protected List childList;
protected Map childMap;
protected Xpp3Dom parent;
public Xpp3Dom(String name) {
this.name = name;
childList = new ArrayList();
childMap = new HashMap();
}
// ----------------------------------------------------------------------
// Name handling
// ----------------------------------------------------------------------
public String getName() {
return name;
}
// ----------------------------------------------------------------------
// Value handling
// ----------------------------------------------------------------------
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
// ----------------------------------------------------------------------
// Attribute handling
// ----------------------------------------------------------------------
public String[] getAttributeNames() {
if ( null == attributes ) {
return new String[0];
}
else {
return (String[]) attributes.keySet().toArray( new String[0] );
}
}
public String getAttribute(String name) {
return (null != attributes) ? (String) attributes.get(name) : null;
}
public void setAttribute(String name, String value) {
if (null == attributes) {
attributes = new HashMap();
}
attributes.put(name, value);
}
// ----------------------------------------------------------------------
// Child handling
// ----------------------------------------------------------------------
public Xpp3Dom getChild(int i) {
return (Xpp3Dom) childList.get(i);
}
public Xpp3Dom getChild(String name) {
return (Xpp3Dom) childMap.get(name);
}
public void addChild(Xpp3Dom xpp3Dom) {
xpp3Dom.setParent(this);
childList.add(xpp3Dom);
childMap.put(xpp3Dom.getName(), xpp3Dom);
}
public Xpp3Dom[] getChildren() {
if ( null == childList ) {
return new Xpp3Dom[0];
}
else {
return (Xpp3Dom[]) childList.toArray( new Xpp3Dom[0] );
}
}
public Xpp3Dom[] getChildren( String name ) {
if ( null == childList ) {
return new Xpp3Dom[0];
}
else {
ArrayList children = new ArrayList();
int size = this.childList.size();
for ( int i = 0; i < size; i++ ) {
Xpp3Dom configuration = (Xpp3Dom) this.childList.get( i );
if ( name.equals( configuration.getName() ) ) {
children.add( configuration );
}
}
return (Xpp3Dom[]) children.toArray( new Xpp3Dom[0] );
}
}
public int getChildCount() {
if (null == childList) {
return 0;
}
return childList.size();
}
// ----------------------------------------------------------------------
// Parent handling
// ----------------------------------------------------------------------
public Xpp3Dom getParent() {
return parent;
}
public void setParent(Xpp3Dom parent) {
this.parent = parent;
}
}