// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:09:05
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.xmlpull.v1.wrapper.classic;
import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import org.xmlpull.v1.wrapper.XmlPullParserWrapper;
import org.xmlpull.v1.wrapper.XmlPullWrapperFactory;
import org.xmlpull.v1.wrapper.XmlSerializerWrapper;
import org.xmlpull.v1.wrapper.classic.XmlSerializerDelegate;
public class StaticXmlSerializerWrapper extends XmlSerializerDelegate implements XmlSerializerWrapper {
private static final String PROPERTY_XMLDECL_STANDALONE = "http://xmlpull.org/v1/doc/features.html#xmldecl-standalone";
private static final boolean TRACE_SIZING = false;
protected String currentNs;
protected XmlPullWrapperFactory wf;
protected XmlPullParserWrapper fragmentParser;
protected int namespaceEnd = 0;
protected String[] namespacePrefix = new String[8];
protected String[] namespaceUri;
protected int[] namespaceDepth;
public StaticXmlSerializerWrapper(XmlSerializer var1, XmlPullWrapperFactory var2) {
super(var1);
this.namespaceUri = new String[this.namespacePrefix.length];
this.namespaceDepth = new int[this.namespacePrefix.length];
this.wf = var2;
}
public String getCurrentNamespaceForElements() {
return this.currentNs;
}
public String setCurrentNamespaceForElements(String var1) {
String var2 = this.currentNs;
this.currentNs = var1;
return var2;
}
public XmlSerializerWrapper attribute(String var1, String var2) throws IOException, IllegalArgumentException, IllegalStateException {
this.xs.attribute((String)null, var1, var2);
return this;
}
public XmlSerializerWrapper startTag(String var1) throws IOException, IllegalArgumentException, IllegalStateException {
this.xs.startTag(this.currentNs, var1);
return this;
}
public XmlSerializerWrapper endTag(String var1) throws IOException, IllegalArgumentException, IllegalStateException {
this.endTag(this.currentNs, var1);
return this;
}
public XmlSerializerWrapper element(String var1, String var2) throws IOException, XmlPullParserException {
return this.element(this.currentNs, var1, var2);
}
public XmlSerializerWrapper element(String var1, String var2, String var3) throws IOException, XmlPullParserException {
if(var2 == null) {
throw new XmlPullParserException("name for element can not be null");
} else {
this.xs.startTag(var1, var2);
if(var3 == null) {
this.xs.attribute("http://www.w3.org/2001/XMLSchema-instance", "nil", "true");
} else {
this.xs.text(var3);
}
this.xs.endTag(var1, var2);
return this;
}
}
private void ensureNamespacesCapacity() {
int var1 = this.namespaceEnd > 7?2 * this.namespaceEnd:8;
String[] var2 = new String[var1];
String[] var3 = new String[var1];
int[] var4 = new int[var1];
if(this.namespacePrefix != null) {
System.arraycopy(this.namespacePrefix, 0, var2, 0, this.namespaceEnd);
System.arraycopy(this.namespaceUri, 0, var3, 0, this.namespaceEnd);
System.arraycopy(this.namespaceDepth, 0, var4, 0, this.namespaceEnd);
}
this.namespacePrefix = var2;
this.namespaceUri = var3;
this.namespaceDepth = var4;
}
public void setPrefix(String var1, String var2) throws IOException, IllegalArgumentException, IllegalStateException {
this.xs.setPrefix(var1, var2);
int var3 = this.getDepth();
for(int var4 = this.namespaceEnd - 1; var4 >= 0 && this.namespaceDepth[var4] > var3; --var4) {
--this.namespaceEnd;
}
if(this.namespaceEnd >= this.namespacePrefix.length) {
this.ensureNamespacesCapacity();
}
this.namespacePrefix[this.namespaceEnd] = var1;
this.namespaceUri[this.namespaceEnd] = var2;
++this.namespaceEnd;
}
public void fragment(String var1) throws IOException, IllegalArgumentException, IllegalStateException, XmlPullParserException {
StringBuffer var2 = new StringBuffer(var1.length() + this.namespaceEnd * 30);
var2.append("<fragment");
int var3 = this.namespaceEnd - 1;
while(var3 >= 0) {
String var4 = this.namespacePrefix[var3];
int var5 = this.namespaceEnd - 1;
while(true) {
if(var5 > var3) {
if(!var4.equals(this.namespacePrefix[var5])) {
--var5;
continue;
}
} else {
var2.append(" xmlns");
if(var4.length() > 0) {
var2.append(':').append(var4);
}
var2.append("=\'");
var2.append(this.escapeAttributeValue(this.namespaceUri[var3]));
var2.append("\'");
}
--var3;
break;
}
}
var2.append(">");
var2.append(var1);
var2.append("</fragment>");
if(this.fragmentParser == null) {
this.fragmentParser = this.wf.newPullParserWrapper();
}
String var6 = var2.toString();
this.fragmentParser.setInput(new StringReader(var6));
this.fragmentParser.nextTag();
this.fragmentParser.require(2, (String)null, "fragment");
while(true) {
this.fragmentParser.nextToken();
if(this.fragmentParser.getDepth() == 1 && this.fragmentParser.getEventType() == 3) {
this.fragmentParser.require(3, (String)null, "fragment");
return;
}
this.event(this.fragmentParser);
}
}
public void event(XmlPullParser var1) throws XmlPullParserException, IOException {
int var2 = var1.getEventType();
switch(var2) {
case 0:
Boolean var3 = (Boolean)var1.getProperty("http://xmlpull.org/v1/doc/features.html#xmldecl-standalone");
this.startDocument(var1.getInputEncoding(), var3);
break;
case 1:
this.endDocument();
break;
case 2:
this.writeStartTag(var1);
break;
case 3:
this.endTag(var1.getNamespace(), var1.getName());
break;
case 4:
if(var1.getDepth() > 0) {
this.text(var1.getText());
} else {
this.ignorableWhitespace(var1.getText());
}
break;
case 5:
this.cdsect(var1.getText());
break;
case 6:
this.entityRef(var1.getName());
break;
case 7:
String var4 = var1.getText();
this.ignorableWhitespace(var4);
break;
case 8:
this.processingInstruction(var1.getText());
break;
case 9:
this.comment(var1.getText());
break;
case 10:
this.docdecl(var1.getText());
}
}
private void writeStartTag(XmlPullParser var1) throws XmlPullParserException, IOException {
int var2;
if(!var1.getFeature("http://xmlpull.org/v1/doc/features.html#report-namespace-prefixes")) {
var2 = var1.getNamespaceCount(var1.getDepth() - 1);
int var3 = var1.getNamespaceCount(var1.getDepth());
for(int var4 = var2; var4 < var3; ++var4) {
String var5 = var1.getNamespacePrefix(var4);
String var6 = var1.getNamespaceUri(var4);
this.setPrefix(var5, var6);
}
}
this.startTag(var1.getNamespace(), var1.getName());
for(var2 = 0; var2 < var1.getAttributeCount(); ++var2) {
this.attribute(var1.getAttributeNamespace(var2), var1.getAttributeName(var2), var1.getAttributeValue(var2));
}
}
public String escapeAttributeValue(String var1) {
int var2 = var1.indexOf(60);
int var3 = var1.indexOf(38);
int var4 = var1.indexOf(34);
int var5 = var1.indexOf(39);
if(var2 == -1 && var3 == -1 && var4 == -1 && var5 == -1) {
return var1;
} else {
StringBuffer var6 = new StringBuffer(var1.length() + 10);
int var7 = 0;
for(int var8 = var1.length(); var7 < var8; ++var7) {
char var9 = var1.charAt(var7);
switch(var9) {
case 34:
var6.append(""");
break;
case 38:
var6.append("&");
break;
case 39:
var6.append("'");
break;
case 60:
var6.append("<");
break;
default:
var6.append(var9);
}
}
return var6.toString();
}
}
public String escapeText(String var1) {
int var2 = var1.indexOf(60);
int var3 = var1.indexOf(38);
if(var2 == -1 && var3 == -1) {
return var1;
} else {
StringBuffer var4 = new StringBuffer(var1.length() + 10);
int var5 = 0;
while(true) {
while(var2 != -1 || var3 != -1) {
if(var2 != -1 && (var2 == -1 || var3 == -1 || var3 >= var2)) {
if(var3 != -1 && (var2 == -1 || var3 == -1 || var2 >= var3)) {
throw new IllegalStateException("wrong state posLt=" + var2 + " posAmp=" + var3 + " for " + var1);
}
if(var5 < var2) {
var4.append(var1.substring(var5, var2));
}
var4.append("<");
var5 = var2 + 1;
var2 = var1.indexOf(60, var5);
} else {
if(var5 < var3) {
var4.append(var1.substring(var5, var3));
}
var4.append("&");
var5 = var3 + 1;
var3 = var1.indexOf(38, var5);
}
}
var4.append(var1.substring(var5));
return var4.toString();
}
}
}
public void writeDouble(double var1) throws XmlPullParserException, IOException, IllegalArgumentException {
if(var1 == Double.POSITIVE_INFINITY) {
this.xs.text("INF");
} else if(var1 == Double.NEGATIVE_INFINITY) {
this.xs.text("-INF");
} else {
this.xs.text(Double.toString(var1));
}
}
public void writeFloat(float var1) throws XmlPullParserException, IOException, IllegalArgumentException {
if(var1 == Float.POSITIVE_INFINITY) {
this.xs.text("INF");
} else if(var1 == Float.NEGATIVE_INFINITY) {
this.xs.text("-INF");
} else {
this.xs.text(Float.toString(var1));
}
}
public void writeInt(int var1) throws XmlPullParserException, IOException, IllegalArgumentException {
this.xs.text(Integer.toString(var1));
}
public void writeString(String var1) throws XmlPullParserException, IOException, IllegalArgumentException {
if(var1 == null) {
throw new IllegalArgumentException("null string can not be written");
} else {
this.xs.text(var1);
}
}
public void writeDoubleElement(String var1, String var2, double var3) throws XmlPullParserException, IOException, IllegalArgumentException {
this.xs.startTag(var1, var2);
this.writeDouble(var3);
this.xs.endTag(var1, var2);
}
public void writeFloatElement(String var1, String var2, float var3) throws XmlPullParserException, IOException, IllegalArgumentException {
this.xs.startTag(var1, var2);
this.writeFloat(var3);
this.xs.endTag(var1, var2);
}
public void writeIntElement(String var1, String var2, int var3) throws XmlPullParserException, IOException, IllegalArgumentException {
this.xs.startTag(var1, var2);
this.writeInt(var3);
this.xs.endTag(var1, var2);
}
public void writeStringElement(String var1, String var2, String var3) throws XmlPullParserException, IOException, IllegalArgumentException {
this.xs.startTag(var1, var2);
if(var3 == null) {
this.xs.attribute("http://www.w3.org/2001/XMLSchema", "nil", "true");
} else {
this.writeString(var3);
}
this.xs.endTag(var1, var2);
}
}