home *** CD-ROM | disk | FTP | other *** search
- package com.ms.xml.om;
-
- import com.ms.xml.parser.AttDef;
- import com.ms.xml.parser.DTD;
- import com.ms.xml.parser.ElementDecl;
- import com.ms.xml.util.Attribute;
- import com.ms.xml.util.Attributes;
- import com.ms.xml.util.EnumWrapper;
- import com.ms.xml.util.Name;
- import com.ms.xml.util.QualifiedName;
- import com.ms.xml.util.XMLOutputStream;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public class ElementImpl implements Element {
- Name tag;
- int type;
- String text;
- Element parent;
- Vector children;
- protected Attributes attrlist;
- static Name nameXML = Name.create("XML");
- static Name nameXMLSPACE = Name.create("XML-SPACE");
- static Name nameXMLAS = QualifiedName.create(Name.create("AS"), Name.create("XML"));
- static Name nameXMLHREF = QualifiedName.create(Name.create("HREF"), Name.create("XML"));
-
- public void setText(String var1) {
- this.text = var1;
- }
-
- public Element getChild(int var1) {
- if (this.children != null && var1 >= 0 && var1 < this.children.size()) {
- try {
- return (Element)this.children.elementAt(var1);
- } catch (Exception var2) {
- }
- }
-
- return null;
- }
-
- public void saveText(String var1, XMLOutputStream var2) throws IOException {
- int var3 = var1.length();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- char var5 = var1.charAt(var4);
- switch (var5) {
- case '"':
- var2.writeChars(""");
- break;
- case '&':
- var2.writeChars("&");
- break;
- case '\'':
- var2.writeChars("'");
- break;
- case '<':
- var2.writeChars("<");
- break;
- case '>':
- var2.writeChars(">");
- break;
- case ' ':
- var2.writeChars(" ");
- break;
- default:
- var2.write(var5);
- }
- }
-
- }
-
- public Object getAttribute(String var1) {
- return this.getAttribute(this.qualifyName(var1));
- }
-
- public Object getAttribute(Name var1) {
- Object var2 = null;
- if (this.attrlist != null) {
- var2 = this.attrlist.get(var1);
- }
-
- return var2;
- }
-
- public void setAttribute(String var1, Object var2) {
- this.setAttribute(this.qualifyName(var1), var2);
- }
-
- public void setAttribute(Name var1, Object var2) {
- if (this.attrlist == null) {
- this.attrlist = new Attributes();
- }
-
- this.attrlist.put(var1, var2);
- }
-
- public String toString() {
- return this.getClass().getName() + "[tag=" + this.tag + ",type=" + this.type + ",text=" + this.text + "]";
- }
-
- public Element getParent() {
- return this.parent;
- }
-
- public void removeAttribute(String var1) {
- this.removeAttribute(this.qualifyName(var1));
- }
-
- public void removeAttribute(Name var1) {
- if (this.attrlist != null) {
- this.attrlist.remove(var1);
- }
-
- }
-
- public void setParent(Element var1) {
- this.parent = var1;
- }
-
- public boolean isAttributeQualified(Name var1, DTD var2) {
- if (var2 != null) {
- ElementDecl var3 = var2.findElementDecl(this.tag);
- if (var3 != null) {
- AttDef var4 = var3.findAttDef(var1);
- if (var4 != null) {
- int var5 = var4.getType();
- if (var5 == 4 || var5 == 5 || var5 == 8) {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- Name qualifyName(String var1) {
- int var2 = var1.indexOf("::");
- if (var2 != -1) {
- String var6 = var1.substring(0, var2);
- Name var7 = this.getNamespace(var6);
- String var5 = var1.substring(var2 + 2);
- return QualifiedName.create(Name.create(var5.toUpperCase()), var7);
- } else {
- Name var3 = Name.create(var1.toUpperCase());
- if (this.tag instanceof QualifiedName) {
- QualifiedName var4 = (QualifiedName)this.tag;
- return QualifiedName.create(var3, var4.getNameSpace());
- } else {
- return var3;
- }
- }
- }
-
- public void removeChild(Element var1) {
- if (this.children != null) {
- var1.setParent((Element)null);
- this.children.removeElement(var1);
- }
-
- }
-
- public Enumeration getElements() {
- return (Enumeration)(this.children == null ? EnumWrapper.emptyEnumeration : this.children.elements());
- }
-
- public int numElements() {
- return this.children == null ? 0 : this.children.size();
- }
-
- public Enumeration getAttributes() {
- return (Enumeration)(this.attrlist == null ? EnumWrapper.emptyEnumeration : this.attrlist.attributes());
- }
-
- public int numAttributes() {
- return this.attrlist == null ? 0 : this.attrlist.size();
- }
-
- public ElementImpl() {
- this((Name)null, 0);
- }
-
- public ElementImpl(Name var1, int var2) {
- this.tag = var1;
- this.type = var2;
- }
-
- public void saveAttributes(Name var1, XMLOutputStream var2) throws IOException {
- Enumeration var3 = this.getAttributes();
-
- while(var3.hasMoreElements()) {
- Attribute var4 = (Attribute)var3.nextElement();
- Name var5 = var4.getName();
- var2.write(32);
- var2.writeQualifiedName(var5, var1);
- var2.write(61);
- boolean var6 = this.isAttributeQualified(var5, var2.dtd);
- Object var7 = var4.getValue();
- if (var7 instanceof Name) {
- var2.write(34);
- if (var6) {
- var2.writeQualifiedName((Name)var7, var1);
- } else {
- var2.writeChars(var7.toString());
- }
-
- var2.write(34);
- } else if (!(var7 instanceof Vector)) {
- var2.writeQuotedString(var7.toString());
- } else {
- Vector var8 = (Vector)var7;
- var2.write(34);
- Enumeration var9 = var8.elements();
-
- while(var9.hasMoreElements()) {
- Name var10 = (Name)var9.nextElement();
- if (var6) {
- var2.writeQualifiedName(var10, var1);
- } else {
- var2.writeChars(var10.toString());
- }
-
- if (var9.hasMoreElements()) {
- var2.write(32);
- }
- }
-
- var2.write(34);
- }
- }
-
- }
-
- public ElementCollection getChildren() {
- return new ElementCollection(this);
- }
-
- public void save(XMLOutputStream var1) throws IOException {
- boolean var2 = this.getType() == 1 || this.getType() == 11;
- if (!var2 || var1.savingDTD) {
- var1.writeIndent();
- }
-
- int var3 = this.getType();
- switch (var3) {
- case 0:
- int var11 = -1;
- if (this.tag != null) {
- var1.writeChars("<");
- var1.writeQualifiedName(this.tag, QualifiedName.getNameSpace(this.getParent().getTagName()));
- this.saveAttributes(QualifiedName.getNameSpace(this.tag), var1);
- Object var12 = this.getAttribute(nameXMLSPACE);
- String var6 = null;
- if (var12 != null) {
- var6 = var12.toString();
- }
-
- if (var6 == null && var1.dtd != null) {
- ElementDecl var7 = var1.dtd.findElementDecl(this.tag);
- if (var7 != null) {
- AttDef var8 = var7.findAttDef(nameXMLSPACE);
- if (var8 != null) {
- Object var9 = var8.getDefault();
- if (var9 != null) {
- var6 = (String)var9;
- }
- }
- }
- }
-
- if (var6 != null) {
- var11 = var1.getOutputStyle();
- boolean var15 = var6.equalsIgnoreCase("preserve");
- var1.setOutputStyle(var15 ? XMLOutputStream.COMPACT : XMLOutputStream.PRETTY);
- }
-
- if (this.numElements() <= 0) {
- var1.writeChars("/>");
- var1.writeNewLine();
- } else {
- var1.write(62);
- boolean var16 = true;
- ElementEnumeration var18 = new ElementEnumeration(this);
-
- while(var18.hasMoreElements()) {
- Element var19 = (Element)var18.nextElement();
- if (var19.getType() != 1 && var19.getType() != 11) {
- var16 = false;
- break;
- }
- }
-
- if (var16) {
- if (var11 == -1) {
- var11 = var1.getOutputStyle();
- }
-
- var1.setOutputStyle(XMLOutputStream.COMPACT);
- }
-
- var1.writeNewLine();
- }
- }
-
- var1.addIndent(1);
- var1.nameSpaceContext.push();
- boolean var13 = true;
- ElementEnumeration var14 = new ElementEnumeration(this);
-
- while(var14.hasMoreElements()) {
- Element var17 = (Element)var14.nextElement();
- var2 = var17.getType() == 1 || var17.getType() == 11;
- if (var2 && var13) {
- var1.writeIndent();
- } else if (!var2 && !var13) {
- var1.writeNewLine();
- }
-
- var17.save(var1);
- if (var2 && !var14.hasMoreElements()) {
- var1.writeNewLine();
- }
-
- if (!var2) {
- var13 = true;
- } else {
- var13 = false;
- }
- }
-
- var1.nameSpaceContext.pop();
- var1.addIndent(-1);
- if (this.tag != null && this.numElements() > 0) {
- var1.writeIndent();
- var1.writeChars("</>");
- if (var11 != -1) {
- var1.setOutputStyle(var11);
- }
-
- var1.writeNewLine();
- }
- break;
- case 1:
- this.saveText(this.getText(), var1);
- if (var1.savingDTD) {
- var1.writeNewLine();
- }
- break;
- case 2:
- var1.writeChars("<!--" + this.getText() + "-->");
- var1.writeNewLine();
- break;
- case 5:
- var1.writeChars("<?");
- var1.writeQualifiedName(this.getTagName(), (Name)null);
- var1.writeChars(this.getText() + "?>");
- var1.writeNewLine();
- break;
- case 6:
- var1.writeChars("<![CDATA[" + this.getText() + "]]>");
- var1.writeNewLine();
- break;
- case 10:
- var1.writeChars("<?XML::NAMESPACE");
- this.saveAttributes(nameXML, var1);
- var1.writeChars("?>");
- var1.writeNewLine();
- Name var4 = Name.create(this.getAttribute(nameXMLAS).toString().toUpperCase());
- Name var5 = Name.create(this.getAttribute(nameXMLHREF).toString().toUpperCase());
- var1.nameSpaceContext.addNameSpace(var5, var4);
- break;
- case 11:
- if (var1.savingDTD) {
- var1.write(37);
- } else {
- var1.write(38);
- }
-
- var1.writeQualifiedName(this.getTagName(), QualifiedName.getNameSpace(this.getParent().getTagName()));
- var1.writeChars(";");
- if (var1.savingDTD) {
- var1.writeNewLine();
- }
- }
-
- var1.flush();
- }
-
- public void addChild(Element var1, Element var2) {
- if (this.children == null) {
- this.children = new Vector(4);
- }
-
- if (var2 == null) {
- this.children.addElement(var1);
- } else if (var2 == this) {
- this.children.insertElementAt(var1, 0);
- } else {
- this.children.insertElementAt(var1, this.children.indexOf(var2) + 1);
- }
-
- var1.setParent(this);
- }
-
- public void addChild(Element var1, int var2, int var3) {
- if (var2 == 0) {
- this.addChild(var1, this);
- } else if (var2 >= 0 && var2 <= this.numElements() - 1) {
- this.addChild(var1, this.getChild(var2 - 1));
- } else {
- this.addChild(var1, (Element)null);
- }
- }
-
- public int getType() {
- return this.type;
- }
-
- Name getNamespace(String var1) {
- Name var2 = Name.create(var1.toUpperCase());
-
- Object var3;
- for(var3 = this; var3 != null && !(var3 instanceof Document); var3 = ((Element)var3).getParent()) {
- }
-
- if (var3 != null) {
- Document var4 = (Document)var3;
- DTD var5 = var4.getDTD();
- if (var5 != null) {
- Name var6 = var5.findLongNameSpace(var2);
- if (var6 != null) {
- return var6;
- }
- }
- }
-
- return var2;
- }
-
- void clear() {
- if (this.children != null) {
- this.children.removeAllElements();
- }
-
- this.text = null;
- this.parent = null;
- if (this.attrlist != null) {
- this.attrlist.removeAll();
- }
-
- }
-
- public String getText() {
- if (this.type != 6 && this.type != 1) {
- if (this.children != null) {
- StringBuffer var1 = new StringBuffer();
-
- for(Enumeration var2 = this.children.elements(); var2.hasMoreElements(); var1.append(((Element)var2.nextElement()).getText())) {
- if (var1.length() > 0) {
- var1.append(' ');
- }
- }
-
- return var1.toString();
- } else {
- return new String("");
- }
- } else {
- return this.text == null ? new String("") : this.text;
- }
- }
-
- public Name getTagName() {
- return this.tag;
- }
- }
-