package test; import junit.framework.*; import java.sql.*; import java.io.File; import net.ivoa.SkyNode.*; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class TestXSLT extends TestCase { // Test finding and using the XSLT stylesheet public void testXSLT() { ncsa.nvo.skynode.Configure config = new ncsa.nvo.skynode.Configure("/Configure.xml"); String xsltPath = config.getConfigParam("XSLTPath")[0]; String xsltFile = config.getConfigParam("XSLTFile")[0]; // Check for the existence and readability of the XSLT stylesheet java.io.File xslFile = new File(xsltPath, xsltFile); if (!xslFile.exists()) { System.out.print( "Cannot find XSLT Stylesheet: " + xsltPath + "/" + xsltFile + "\n" + "Check the XSLTPath and XSLTFile tags in Configure.xml\n" ); Assert.assertEquals(xslFile.exists(), true); } if (!xslFile.canRead()) { System.out.print( "Cannot read XSLT Stylesheet: " + xsltPath + "/" + xsltFile + "\n" + "Check the permissions on this file\n" ); Assert.assertEquals(xslFile.canRead(), true); } //Load an ADQL query java.lang.String xmlFileName = "xml/simple.xml"; java.lang.String xml = loadXML(xmlFileName); java.io.StringWriter writer = new java.io.StringWriter(); java.lang.String origdir = System.getProperty("user.dir"); // Move to the directory where the xsl resides to do the translation System.setProperty("user.dir", xsltPath); try { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(new StreamSource(xsltFile)); transformer.transform (new StreamSource(new java.io.StringReader(xml)), new StreamResult(writer)); // Change directory back System.setProperty("user.dir", origdir); } catch (TransformerException e) { throw new InternalError("trouble with XSL Transformer\n"); } // Read the Transform String sql = writer.toString(); // String test = "SELECT * FROM Tab a" ; String test = "SELECT * FROM Tab a LIMIT 5" ; System.out.println("Input: "+test +"\n"); System.out.println("Output from transform: " + sql + "\n"); Assert.assertEquals(test.replaceAll(" ",""),sql.replaceAll(" ","")); System.out.println("Successfully transformed an ADQL Query: \n" ); } private java.lang.String loadXML(java.lang.String in) { java.lang.StringBuffer tmp = null; try { java.io.InputStream inStream = TestXSLT.class.getResourceAsStream(in); java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(inStream)); tmp = new java.lang.StringBuffer(); for (;;) { java.lang.String s = br.readLine(); if ( s == null ) break; tmp.append(s + "\n"); } } catch ( java.io.IOException e ) { System.out.println( "Error reading XML file\n" ); } return tmp.toString(); } }