电话中心管理软件代码.docx
《电话中心管理软件代码.docx》由会员分享,可在线阅读,更多相关《电话中心管理软件代码.docx(85页珍藏版)》请在冰豆网上搜索。
电话中心管理软件代码
packageorg.Telephone.Administration;
importjava.util.regex.Pattern;
importorg.Telephone.nodes.Document;
importorg.Telephone.nodes.Document.OutputSettings;
importorg.Telephone.nodes.Element;
importorg.Telephone.parser.Parser;
importorg.Telephone.select.Elements;
packageorg.Telephone.nodes;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.LinkedList;
importjava.util.List;
importorg.Telephone.Administration.StringUtil;
importorg.Telephone.Administration.Validate;
importorg.Telephone.parser.Parser;
importorg.Telephone.select.NodeTraversor;
importorg.Telephone.select.NodeVisitor;
publicabstractclassNode
implementsCloneable
{
privatestaticfinalListEMPTY_NODES=Collections.emptyList();
NodeparentNode;
ListchildNodes;
Attributesattributes;
StringbaseUri;
intsiblingIndex;
protectedNode(StringbaseUri,Attributesattributes)
{
Validate.notNull(baseUri);
Validate.notNull(attributes);
this.childNodes=EMPTY_NODES;
this.baseUri=baseUri.trim();
this.attributes=attributes;
}
protectedNode(StringbaseUri){
this(baseUri,newAttributes());
}
protectedNode()
{
this.childNodes=EMPTY_NODES;
this.attributes=null;
}
publicabstractStringnodeName();
publicStringattr(StringattributeKey)
{
Validate.notNull(attributeKey);
if(this.attributes.hasKey(attributeKey))
returnthis.attributes.get(attributeKey);
if(attributeKey.toLower().startsWith("abs:
"))
returnabsUrl(attributeKey.substring("abs:
".length()));
return"";
}
publicAttributesattributes()
{
returnthis.attributes;
}
publicNodeattr(StringattributeKey,StringattributeValue)
{
this.attributes.put(attributeKey,attributeValue);
returnthis;
}
publicbooleanhasAttr(StringattributeKey)
{
Validate.notNull(attributeKey);
if(attributeKey.startsWith("abs:
")){
Stringkey=attributeKey.substring("abs:
".length());
if((this.attributes.hasKey(key))&&(!
absUrl(key).equals("")))
returntrue;
}
returnthis.attributes.hasKey(attributeKey);
}
publicNoderemoveAttr(StringattributeKey)
{
Validate.notNull(attributeKey);
this.attributes.remove(attributeKey);
returnthis;
}
publicStringbaseUri()
{
returnthis.baseUri;
}
publicvoidsetBaseUri(finalStringbaseUri)
{
Validate.notNull(baseUri);
traverse(newNodeVisitor(){
publicvoidhead(Nodenode,intdepth){
node.baseUri=baseUri;
}
publicvoidtail(Nodenode,intdepth)
{
}
});
}
publicStringabsUrl(StringattributeKey)
{
Validate.notEmpty(attributeKey);
if(!
hasAttr(attributeKey)){
return"";
}
returnStringUtil.resolve(this.baseUri,attr(attributeKey));
}
publicNodechildNode(intindex)
{
return(Node)this.childNodes.get(index);
}
publicListchildNodes()
{
returnCollections.unmodifiableList(this.childNodes);
}
publicListchildNodesCopy()
{
Listchildren=newArrayList(this.childNodes.size());
for(Nodenode:
this.childNodes){
children.add(node.clone());
}
returnchildren;
}
publicfinalintchildNodeSize()
{
returnthis.childNodes.size();
}
protectedNode[]childNodesAsArray(){
return(Node[])this.childNodes.toArray(newNode[childNodeSize()]);
}
publicNodeparent()
{
returnthis.parentNode;
}
publicfinalNodeparentNode()
{
returnthis.parentNode;
}
publicDocumentownerDocument()
{
if((thisinstanceofDocument))
return(Document)this;
if(this.parentNode==null){
returnnull;
}
returnthis.parentNode.ownerDocument();
}
publicvoidremove()
{
Validate.notNull(this.parentNode);
this.parentNode.removeChild(this);
}
publicNodebefore(Stringhtml)
{
addSiblingHtml(this.siblingIndex,html);
returnthis;
}
publicNodebefore(Nodenode)
{
Validate.notNull(node);
Validate.notNull(this.parentNode);
this.parentNode.addChildren(this.siblingIndex,newNode[]{node});
returnthis;
}
publicNodeafter(Stringhtml)
{
addSiblingHtml(this.siblingIndex+1,html);
returnthis;
}
publicNodeafter(Nodenode)
{
Validate.notNull(node);
Validate.notNull(this.parentNode);
this.parentNode.addChildren(this.siblingIndex+1,newNode[]{node});
returnthis;
}
privatevoidaddSiblingHtml(intindex,Stringhtml){
Validate.notNull(html);
Validate.notNull(this.parentNode);
Elementcontext=(parent()instanceofElement)?
(Element)parent():
null;
Listnodes=Parser.parseFragment(html,context,baseUri());
this.parentNode.addChildren(index,(Node[])nodes.toArray(newNode[nodes.size()]));
}
publicNodewrap(Stringhtml)
{
Validate.notEmpty(html);
Elementcontext=(parent()instanceofElement)?
(Element)parent():
null;
ListwrapChildren=Parser.parseFragment(html,context,baseUri());
NodewrapNode=(Node)wrapChildren.get(0);
if((wrapNode==null)||(!
(wrapNodeinstanceofElement))){
returnnull;
}
Elementwrap=(Element)wrapNode;
Elementdeepest=getDeepChild(wrap);
this.parentNode.replaceChild(this,wrap);
deepest.addChildren(newNode[]{this});
if(wrapChildren.size()>0){
for(inti=0;iNoderemainder=(Node)wrapChildren.get(i);
remainder.parentNode.removeChild(remainder);
wrap.appendChild(remainder);
}
}
returnthis;
}
publicNodeunwrap()
{
Validate.notNull(this.parentNode);
NodefirstChild=this.childNodes.size()>0?
(Node)this.childNodes.get(0):
null;
this.parentNode.addChildren(this.siblingIndex,childNodesAsArray());
remove();
returnfirstChild;
}
privateElementgetDeepChild(Elementel){
Listchildren=el.children();
if(children.size()>0){
returngetDeepChild((Element)children.get(0));
}
returnel;
}
publicvoidreplaceWith(Nodein)
{
Validate.notNull(in);
Validate.notNull(this.parentNode);
this.parentNode.replaceChild(this,in);
}
protectedvoidsetParentNode(NodeparentNode){
if(this.parentNode!
=null)
this.parentNode.removeChild(this);
this.parentNode=parentNode;
}
protectedvoidreplaceChild(Nodeout,Nodein){
Validate.isTrue(out.parentNode==this);
Validate.notNull(in);
if(in.parentNode!
=null){
in.parentNode.removeChild(in);
}
intindex=out.siblingIndex;
this.childNodes.set(index,in);
in.parentNode=this;
in.setSiblingIndex(index);
out.parentNode=null;
}
protectedvoidremoveChild(Nodeout){
Validate.isTrue(out.parentNode==this);
intindex=out.siblingIndex;
this.childNodes.remove(index);
reindexChildren(index);
out.parentNode=null;
}
protectedvoidaddChildren(Node[]children)
{
for(Nodechild:
children){
reparentChild(child);
ensureChildNodes();
this.childNodes.add(child);
child.setSiblingIndex(this.childNodes.size()-1);
}
}
protectedvoidaddChildren(intindex,Node[]children){
Validate.noNullElements(children);
for(inti=children.length-1;i>=0;i--){
Nodein=children[i];
reparentChild(in);
ensureChildNodes();
this.childNodes.add(index,in);
}
reindexChildren(index);
}
protectedvoidensureChildNodes(){
if(this.childNodes==EMPTY_NODES)
this.childNodes=newArrayList(4);
}
protectedvoidreparentChild(Nodechild)
{
if(child.parentNode!
=null)
child.parentNode.removeChild(child);
child.setParentNode(this);
}
privatevoidreindexChildren(intstart){
for(inti=start;i((Node)this.childNodes.get(i)).setSiblingIndex(i);
}
publicListsiblingNodes()
{
if(this.parentNode==null){
returnCollections.emptyList();
}
Listnodes=this.parentNode.childNodes;
Listsiblings=newArrayList(nodes.size()-1);
for(Nodenode:
nodes)
if(node!
=this)
siblings.add(node);
returnsiblings;
}
publicNodenextSibling()
{
if(this.parentNode==null){
returnnull;
}
Listsiblings=this.parentNode.childNodes;
intindex=this.siblingIndex+1;
if(siblings.size()>index){
return(Node)siblings.get(index);
}
returnnull;
}
publicNodepreviousSibling()
{
if(this.parentNode==null){
returnnull;
}
if(this.siblingIndex>0){
return(Node)this.parentNode.childNodes.get(this.siblingIndex-1);
}
returnnull;
}
publicintsiblingIndex()
{
returnthis.siblingIndex;
}
protectedvoidsetSiblingIndex(intsiblingIndex){
this.siblingIndex=siblingIndex;
}
publicNodetraverse(NodeVisitornodeVisitor)
{
Validate.notNull(nodeVisitor);
NodeTraversortraversor=newNodeTraversor(nodeVisitor);
traversor.traverse(this);
returnthis;
}
publicStringouterHtml()
{
StringBuilderaccum=newStringBuilder(128);
outerHtml(accum);
returnaccum.toString();
}
protectedvoidouterHtml(StringBuilderaccum){
newNodeTraversor(newOuterHtmlVisitor(accum,getOutputSettings())).traverse(this);
}
Document.OutputSettingsgetOutputSettings()
{
returnownerDocument()!
=null?
ownerDocument().outputSettings():
newDocument("").outputSettings();
}
abstractvoidouterHtmlHead(StringBuilderparamStringBuilder,intparamInt,Document.OutputSettingsparamOutputSettings);
abstractvoidouterHtmlTail(StringBuilderparamStringBuilder,intparamInt,Document.OutputSettingsparamOutputSettings);
publicStringtoString()
{
returnouterHtml();
}
protectedvoidindent(StringBuilderaccum,intdepth,Document.OutputSettingsout){
accum.append("\n").append(StringUtil.padding(depth*out.indentAmount()));
}
publicbooleanequals(Objecto)
{
if(this==o)returntrue;
if((o==null)||(getClass()!
=o.getClass()))returnfalse;
Nodenode=(Node)o;
if(this.childNodes!
=null?
!
this.childNodes.equals(node.childNodes):
node.childNodes!
=null)returnfalse;
returnthis.attributes!
=null?
this.attributes.equals(node.attributes):
node.attribut