import uk.me.nxg.lx.reader.LxReader; import uk.me.nxg.lx.helpers.MultiParser; import uk.me.nxg.lx.helpers.LxWriter; import uk.me.nxg.lx.LxException; import java.io.File; import java.io.FileReader; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.Source; import javax.xml.transform.Result; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; /** * Simple converter, which performs the identity transformation. * Usage is simple: *
 *   java identity input.{lx|xml} [output.{lx,xml}]
 * 
*/ public class identity { private static final int XML_FORMAT = 0; private static final int LX_FORMAT = 1; private static final int SD_FORMAT = 2; public static void main(String args[]) { if (args.length == 0) { Usage(); } int status = 1; // error! String inputFile = args[0]; String[] inputFileParts = inputFile.split(":", 2); int inputFormat = -1; if (inputFileParts.length == 2) { inputFile = inputFileParts[0]; inputFormat = getFormat(inputFileParts[1]); } else { inputFormat = getFormat(inputFile); } if (inputFormat < 0) { System.err.println("Unrecognised format in file " + inputFile); System.exit(1); } int outputFormat; String outputFile; if (args.length > 1) { // There is a second argument -- output file name outputFile = args[1]; String[] outputFileParts = outputFile.split(":", 2); if (outputFileParts.length == 2) { outputFile = outputFileParts[0]; outputFormat = getFormat(outputFileParts[1]); } else { outputFormat = getFormat(outputFile); } } else { String outputExtension; if (inputFormat == LX_FORMAT) { outputFormat = XML_FORMAT; outputExtension = ".xml"; } else { outputFormat = LX_FORMAT; outputExtension = ".lx"; } outputFile = inputFile.replaceFirst("\\.[^.]*$", outputExtension); } System.err.println("input file <" + inputFile + ">, format " + inputFormat + "; output file <" + outputFile + ">, format " + outputFormat); try { Source s = new SAXSource (new uk.me.nxg.lx.helpers.MultiParser(), new InputSource(new FileReader(inputFile))); Result r = null; switch (outputFormat) { case XML_FORMAT: r = new StreamResult(new File(outputFile)); break; case LX_FORMAT: r = new SAXResult(new LxWriter(new File(outputFile))); break; case SD_FORMAT: r = new SAXResult(new uk.me.nxg.lx.helpers.SaxDumpWriter (new File(outputFile))); break; default: System.err.println("Unrecognised output format " + outputFormat); System.exit(1); } // assert r != null; Transformer t = TransformerFactory.newInstance().newTransformer(); t.transform(s, r); status = 0; // success! } catch (java.io.FileNotFoundException e) { System.err.println("Can't find file " + e); } catch (java.io.IOException e) { System.err.println("IO Exception: " + e); } catch (javax.xml.transform.TransformerException e) { System.err.println("Exception: " + e); } System.exit(status); } private static void Usage() { System.err.println("Usage: java identity filename.{lx|xml} [output.{lx,xml}]"); System.exit(1); } /** * Check which format the string represents. * @return one of the format integers, or negative on error */ private static int getFormat(String f) { if (f.endsWith("lx")) return LX_FORMAT; if (f.endsWith("xml")) return XML_FORMAT; if (f.endsWith("sd")) return SD_FORMAT; return -1; } }