import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class RunIt {

  public static void main(String[] args) throws Exception {
    Source xmlSource = new StreamSource(new StringReader(INPXML));
    Source xsltSource = new StreamSource(new StringReader(args.length > 0 && args[0].equals("bug") ? XSLT1 : XSLT2));
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer tr = tf.newTransformer(xsltSource);

    StringWriter sw = new StringWriter();
    StreamResult result = new StreamResult(sw);

    tr.transform(xmlSource, result);
    System.out.println("java.version property: " + System.getProperty("java.version"));
    System.out.println("Transformer class: " + tr.getClass().getName());
    System.out.println("XSLT transformation result:\n" + sw.toString());
  }

  private static final String XSLT1 =
    "<?xml version='1.0' encoding='UTF-8'?>\n" +
    "<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n" +
    "<xsl:template match='/'>\n" +
    "<r><xsl:apply-templates select='@*|node()'/></r>\n" +
    "</xsl:template>\n" +
    "<xsl:template match='//a[1 > 0 or 10 > 20][not(1 > 0)]'>\n" +
    "<x><xsl:value-of select='. + 1'/></x>\n" +
    "</xsl:template>\n" +
    "</xsl:stylesheet>";

  private static final String XSLT2 =
    "<?xml version='1.0' encoding='UTF-8'?>\n" +
    "<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n" +
    "<xsl:template match='/'>\n" +
    "<r><xsl:apply-templates select='@*|node()'/></r>\n" +
    "</xsl:template>\n" +
    "<xsl:template match='//a[1 > 0][not(1 > 0)]'>\n" +
    "<x><xsl:value-of select='. + 1'/></x>\n" +
    "</xsl:template>\n" +
    "</xsl:stylesheet>";

  private static final String INPXML =
    "<k>\n" +
    "<a>1</a>\n" +
    "<a>2</a>\n" +
    "</k>";
}
