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.parser.Entity;
- import com.ms.xml.util.Atom;
- 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.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;
- Document doc;
- protected Attributes attrlist;
- static Atom nameXML = Atom.create("xml");
- static Name nameXMLSPACE = Name.create("xml-space", "xml");
- static Name nameXMLAS = Name.create("prefix", "xml");
- static Name nameXMLHREF = Name.create("src", "xml");
- static Name nameXMLNS = Name.create("ns", "xml");
-
- 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 Name getTagName() {
- return this.tag;
- }
-
- 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;
- }
-
- public Name qualifyName(String var1) {
- int var2 = var1.indexOf(":");
- if (var2 != -1) {
- int var3 = 1;
- if (var2 + 1 < var1.length() && var1.charAt(var2 + 1) == ':') {
- ++var3;
- }
-
- String var4 = var1.substring(0, var2);
- Atom var5 = this.getNamespace(var4);
- String var6 = var1.substring(var2 + var3);
- return Name.create(var6, var5);
- } else {
- return this.tag != null ? Name.create(var1, this.tag.getNameSpace()) : Name.create(var1);
- }
- }
-
- public ElementCollection getChildren() {
- return new ElementCollection(this);
- }
-
- public Element toSchema() {
- return this;
- }
-
- 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 void save(XMLOutputStream var1) throws IOException {
- if (this.getType() != 12) {
- var1.writeIndent();
- }
-
- int var2 = this.getType();
- switch (var2) {
- case 0:
- case 7:
- int var8 = -1;
- boolean var9 = var1.mixed;
- if (this.tag != null) {
- var1.writeChars("<");
- this.writeTagName(var1);
- this.saveAttributes(this.getTagName().getNameSpace(), var1);
- Object var11 = this.getAttribute(nameXMLSPACE);
- String var16 = null;
- if (var11 != null) {
- var16 = var11.toString();
- }
-
- if (var16 != null) {
- var8 = var1.getOutputStyle();
- boolean var7 = var16.equalsIgnoreCase("preserve");
- var1.setOutputStyle(var7 ? XMLOutputStream.COMPACT : XMLOutputStream.PRETTY);
- }
-
- if (this.numElements() > 0) {
- var1.write(62);
- } else {
- var1.writeChars("/>");
- }
- }
-
- Object var12 = null;
- var1.mixed = false;
- ElementEnumeration var13 = new ElementEnumeration(this);
-
- while(var13.hasMoreElements()) {
- Element var17 = (Element)var13.nextElement();
- if (var17.getType() == 1 || var17.getType() == 11) {
- var1.mixed = true;
- break;
- }
- }
-
- var1.writeNewLine();
- var1.addIndent(1);
- var1.nameSpaceContext.push();
- var13 = new ElementEnumeration(this);
-
- while(var13.hasMoreElements()) {
- Element var18 = (Element)var13.nextElement();
- var18.save(var1);
- }
-
- var1.nameSpaceContext.pop();
- var1.addIndent(-1);
- if (this.tag != null && this.numElements() > 0) {
- var1.writeIndent();
- var1.writeChars("</");
- this.writeTagName(var1);
- var1.writeChars(">");
- if (var8 != -1) {
- var1.setOutputStyle(var8);
- }
-
- var1.mixed = var9;
- var1.writeNewLine();
- }
- break;
- case 1:
- var1.writeChars(this.getText());
- var1.writeNewLine();
- break;
- case 2:
- var1.writeChars("<!--" + this.getText() + "-->");
- var1.writeNewLine();
- case 3:
- case 4:
- case 8:
- case 9:
- default:
- break;
- case 5:
- var1.writeChars("<?");
- var1.writeQualifiedName(this.getTagName(), (Atom)null);
- this.saveAttributes(this.getTagName().getNameSpace(), var1);
- 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();
- Atom var3 = Atom.create(this.getAttribute(nameXMLAS).toString());
- Atom var4 = Atom.create(this.getAttribute(nameXMLNS).toString());
- var1.nameSpaceContext.addNameSpace(var4, var3);
- break;
- case 11:
- if (var1.savingDTD) {
- var1.write(37);
- } else {
- var1.write(38);
- }
-
- var1.writeQualifiedName(this.getTagName(), this.getParent().getTagName().getNameSpace());
- var1.writeChars(";");
- if (var1.savingDTD) {
- var1.writeNewLine();
- }
- break;
- case 12:
- if (var1.getOutputStyle() == XMLOutputStream.DEFAULT) {
- var1.writeChars(this.getText());
- }
- break;
- case 13:
- if (this.tag == null) {
- var1.writeChars("<![INCLUDE[");
- } else {
- var1.writeChars("<![%");
- var1.writeChars(this.tag.toString());
- var1.writeChars(";[");
- }
-
- ElementEnumeration var10 = new ElementEnumeration(this);
-
- while(var10.hasMoreElements()) {
- Element var15 = (Element)var10.nextElement();
- var15.save(var1);
- }
-
- var1.writeChars("]]>");
- break;
- case 14:
- if (this.tag == null) {
- var1.writeChars("<![IGNORE[");
- } else {
- var1.writeChars("<![%");
- var1.writeChars(this.tag.toString());
- var1.writeChars(";[");
- }
-
- ElementEnumeration var5 = new ElementEnumeration(this);
-
- while(var5.hasMoreElements()) {
- Element var6 = (Element)var5.nextElement();
- var6.save(var1);
- }
- }
-
- var1.flush();
- }
-
- public int getType() {
- return this.type;
- }
-
- 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;
- this.doc = null;
- }
-
- public ElementImpl() {
- this((Name)null, 0);
- }
-
- public ElementImpl(Name var1, int var2) {
- this.tag = var1;
- this.type = var2;
- }
-
- Document getDocument() {
- if (this.doc == null) {
- Object var1;
- for(var1 = this; ((Element)var1).getParent() != null; var1 = ((Element)var1).getParent()) {
- }
-
- if (var1 instanceof Document) {
- this.doc = (Document)var1;
- }
- }
-
- return this.doc;
- }
-
- 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 void saveAttributes(Atom var1, XMLOutputStream var2) throws IOException {
- Enumeration var3 = this.getAttributes();
-
- while(var3.hasMoreElements()) {
- Attribute var4 = (Attribute)var3.nextElement();
- Name var5 = var4.getName();
- var2.write(32);
- if (var5 == nameXMLSPACE) {
- var2.writeChars(var5.getName());
- } else {
- 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);
- }
- }
-
- }
-
- void writeTagName(XMLOutputStream var1) throws IOException {
- Element var2 = this.getParent();
- Name var3 = this.getTagName();
- if (var2 != null && var2.getTagName() != null && var2.getTagName().getNameSpace() != null) {
- var1.writeQualifiedName(var3, var2.getTagName().getNameSpace());
- } else if (var3.getNameSpace() != null) {
- var1.writeQualifiedName(var3, Atom.create(""));
- } else {
- var1.writeChars(var3.getName());
- }
- }
-
- Atom getNamespace(String var1) {
- Atom var2 = Atom.create(var1);
- Document var3 = this.getDocument();
- if (var3 != null) {
- DTD var4 = var3.getDTD();
- if (var4 != null) {
- Atom var5 = var4.findLongNameSpace(var2);
- if (var5 != null) {
- return var5;
- }
- }
- }
-
- 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 void setText(String var1) {
- this.text = var1;
- }
-
- public String getText() {
- if (this.type == 11) {
- Document var4 = this.getDocument();
- if (var4 != null) {
- DTD var5 = var4.getDTD();
- if (var5 != null) {
- Entity var3 = var5.findEntity(this.getTagName());
- if (var3 != null) {
- return var3.getText();
- }
- }
- }
- } else {
- if (this.children == null || this.type == 6 || this.type == 1 || this.type == 12) {
- if (this.text == null) {
- return new String("");
- }
-
- return this.text;
- }
-
- if (this.children != null) {
- StringBuffer var1 = new StringBuffer();
- Enumeration var2 = this.children.elements();
-
- while(var2.hasMoreElements()) {
- var1.append(((Element)var2.nextElement()).getText());
- }
-
- return var1.toString();
- }
- }
-
- return "";
- }
- }
-