import {Fatal} from '../lang/Fatal';
import {ObjectBase} from '../lang/ObjectBase';
import {StringBuffer} from '../lang/StringBuffer';
import {ClassUtil} from '../reflect/ClassUtil';
import {XmlNode} from '../xml/XmlNode';
//==========================================================
// 配置文档。
//
// @tool
// @author maocy
// @version 150104
//==========================================================
export class XmlDocument extends ObjectBase {
// @attribute
protected _root: XmlNode = null;
//==========================================================
// 创建一个节点对象。
//
// @method
// @param n:name:String 节点名称
// @param a:attributes:TAttributes 节点属性
// @param v:value:String 节点名称
// @return TXmlNode 节点对象
//==========================================================
public create(n, a, v) {
var r: any = new XmlNode();
r._name = n;
r._attributes = a;
r._value = v;
return r;
}
//==========================================================
// 获得文档的根节点。
//
如果文档的根节点不存在,则创建一个新的根节点。
//
// @method
// @return TXmlNode 根节点
//==========================================================
public root() {
var o = this;
var r: any = o._root;
if (!r) {
r = o._root = new XmlNode();
r._name = 'Configuration';
}
return r;
}
//==========================================================
// 设置文档的根节点。
//
// @method
// @param p:node:TXmlNode 根节点
//==========================================================
public setRoot(p) {
var o = this;
if (!o._root) {
o._root = p;
} else {
throw new Fatal(o, 'Root node is already exists.');
}
}
//==========================================================
// 获得配置字符串。
//
// @method
// @return String 配置字符串
//==========================================================
public xml() {
var xml = new StringBuffer();
xml.append("");
this.root().innerXml(xml, 0);
return xml.flush();
}
//==========================================================
// 获得内部调试信息。
//
// @method
// @return String 调试信息
//==========================================================
public dump() {
var o = this;
var r = new StringBuffer();
r.appendLine(ClassUtil.shortName(o));
o.root().dump(r);
return r.flush();
}
}