[Jserv-devel] CVS update: turbine/src/java/org/apache/turbine/torque/ant JDBCToXMLSchema.java SqlToXml.java VTorqueTask.java XMLSchemaToHTML.java

Java Apache CVS Development mailto:Java-Apache%20Development"%20<[email protected]
Tue, 7 Nov 2000 15:38:15 -0800 (PST)


  User: jvanzyl 
  Date: 00/11/07 15:38:15

  Added:       src/java/org/apache/turbine/torque/ant JDBCToXMLSchema.java
                        SqlToXml.java VTorqueTask.java XMLSchemaToHTML.java
  Log:
  - adding new torque files.
  
  Revision  Changes    Path
  1.1                  turbine/src/java/org/apache/turbine/torque/ant/JDBCToXMLSchema.java
  
  Index: JDBCToXMLSchema.java
  ===================================================================
  package org.apache.turbine.torque.ant;
  
  /*
   * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
   *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
   *    "Java Apache Project" must not be used to endorse or promote products
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  // Java stuff.
  import java.sql.*;
  import java.io.*;
  import java.util.*;
  
  // W3C stuff.
  import org.w3c.dom.*;
  
  // XML stuff.
  import org.apache.xerces.dom.*;
  import org.apache.xml.serialize.*;
  
  /**
   * This class generates an XML schema of an existing database from
   * JDBC metadata.
   *
   *  @author <a href="mailto:[email protected]">Jason van Zyl</a>
   *  @version $Id: JDBCToXMLSchema.java,v 1.1 2000/11/07 23:38:11 jvanzyl Exp $
   */
  public class JDBCToXMLSchema
  {
      /** Torque properties. */
      protected Properties props;
  
      /** Name of XML database schema produced. */
      protected String xmlSchema;
  
      /** JDBC URL. */
      protected String dbUrl;
  
      /** JDBC driver. */
      protected String dbDriver;
  
      /** JDBC user name. */
      protected String dbUser;
  
      /** JDBC password. */
      protected String dbPassword;
  
      /** DOM document produced. */
      protected DocumentImpl doc;
  
      /** Database Node to start things off. */
      protected Node database;
  
      /** Hashtable of columns that have primary keys. */
      protected Hashtable primaryKeys;
  
      /** Hashtable to track what table a column belongs to. */
      protected Hashtable columnTableMap;
  
      /** Map of java.sql.Types: integer -> string representation. */
      protected Properties sqlTypes;
  
      XMLSerializer xmlSerializer;
  
      /**
       * Default constructor.
       */
      public JDBCToXMLSchema()
      {
          //props = Utils.loadProps("config/torque.props");
          //sqlTypes = Utils.loadProps("config/torque.types");
          
          // This is just to get this thing to compile.
          // This has to be turned into an Ant task proper.
          props = new Properties();
          sqlTypes = new Properties();
          
          xmlSchema = props.getProperty("jdbcXMLSchema");
          dbUrl = props.getProperty("dbUrl");
          dbDriver = props.getProperty("dbDriver");
          dbUser = props.getProperty("dbUser");
          dbPassword = props.getProperty("dbPassword");
  
          System.err.println("Torque - JDBCToXMLSchema starting\n");
          System.err.println("Your DB settings are:");
          System.err.println("driver : "+dbDriver);
          System.err.println("URL : "+dbUrl);
          System.err.println("user : "+dbUser);
          System.err.println("password : "+dbPassword);
  
          doc = new DocumentImpl();
          doc.appendChild(doc.createComment(" Autogenerated by JDBCToXMLSchema! "));
  
          try
          {
              generateXML();
              xmlSerializer = new XMLSerializer(
                  new PrintWriter(
                  new FileOutputStream(xmlSchema)),
                  new OutputFormat(Method.XML,null,true));
              xmlSerializer.serialize(doc);
          }
          catch (Exception e)
          {
              System.err.println(e);
              e.printStackTrace();
          }
  
          System.err.println("\nTorque - JDBCToXMLSchema finished");
      }
  
      /**
       * Generates an XML database schema from JDBC metadata.
       *
       * @exception Exception, a generic exception.
       */
      public void generateXML()
          throws Exception
      {
          // Load the Interbase Driver.
          Class.forName(dbDriver);
          System.err.println("DB driver sucessfuly instantiated");
  
          // Attemtp to connect to a database.
          Connection con = DriverManager.getConnection(dbUrl,
                                                       dbUser,
                                                       dbPassword);
          System.err.println("DB connection established");
  
          // Get the database Metadata.
          DatabaseMetaData dbMetaData = con.getMetaData();
  
          // The database map.
          Vector tableList = getTableNames(dbMetaData);
  
          database = doc.createElement("database");
  
          // Build a database-wide column -> table map.
          columnTableMap = new Hashtable();
  
          for (int i = 0; i < tableList.size(); i++)
          {
              String curTable = (String) tableList.elementAt(i);
              Vector columns = getColumns(dbMetaData, curTable);
  
              for (int j = 0; j < columns.size(); j++)
              {
                  Vector v = (Vector) columns.elementAt(j);
                  String name = (String) v.elementAt(0);
  
                  columnTableMap.put(name, curTable);
              }
          }
  
          for (int i = 0; i < tableList.size(); i++)
          {
              // Add Table.
              String curTable = (String) tableList.elementAt(i);
              // dbMap.addTable(curTable);
  
              Element table = doc.createElement("table");
              table.setAttribute("name", curTable);
  
              // Add Columns.
              // TableMap tblMap = dbMap.getTable(curTable);
  
              Vector columns = getColumns(dbMetaData, curTable);
              Vector primKeys = getPrimaryKeys(dbMetaData, curTable);
              Vector forgnKeys = getForeignKeys(dbMetaData, curTable);
  
              // Set the primary keys.
              primaryKeys = new Hashtable();
  
              for (int k = 0; k < primKeys.size(); k++)
              {
                  String curPrimaryKey = (String) primKeys.elementAt(k);
                  primaryKeys.put(curPrimaryKey, curPrimaryKey);
              }
  
              // Foreign keys for this table.
              for (int l = 0; l < forgnKeys.size(); l++)
              {
                  String curForeignKey = (String) forgnKeys.elementAt(l);
                  String foreignKeyTable =
                          (String) columnTableMap.get(curForeignKey);
                  System.out.println(curForeignKey + " => " +
                          foreignKeyTable);
              }
  
              for (int j = 0; j < columns.size(); j++)
              {
                  Vector v = (Vector) columns.elementAt(j);
                  String name = (String) v.elementAt(0);
                  int type = ((Integer) v.elementAt(1)).intValue();
                  int size = ((Integer) v.elementAt(2)).intValue();
  
                  // From DatabaseMetaData.java
                  //
                  // Indicates column might not allow NULL values.  Huh?
                  // Might? Boy, that's a definitive answer.
                  /* int columnNoNulls = 0; */
  
                  // Indicates column definitely allows NULL values.
                  /* int columnNullable = 1; */
  
                  // Indicates NULLABILITY of column is unknown.
                  /* int columnNullableUnknown = 2; */
  
                  Integer nullType = (Integer) v.elementAt(3);
  
                  Element column = doc.createElement("column");
                  column.setAttribute("name", name);
                  column.setAttribute("type",
                          (String) sqlTypes.get(
                          new Integer(type).toString()));
  
                  if (size > 0 &&
                      (type == Types.CHAR ||
                       type == Types.VARCHAR ||
                       type == Types.LONGVARCHAR))
                  {
                      column.setAttribute("size",
                              new Integer(size).toString());
                  }
  
                  if (nullType.intValue() == 0)
                  {
                      column.setAttribute("null", "false");
                  }
  
                  if (primaryKeys.containsKey(name))
                  {
                      column.setAttribute("primaryKey", "true");
                  }
  
                  table.appendChild(column);
              }
              database.appendChild(table);
          }
          doc.appendChild(database);
      }
  
      /**
       * Get all the table names in the current database that are not
       * system tables.
       *
       * @param dbMeta JDBC database metadata.
       * @return A Vector with all the tables in a database.
       * @exception SQLException.
       */
      public Vector getTableNames(DatabaseMetaData dbMeta)
          throws SQLException
      {
          ResultSet tableNames = dbMeta.getTables("",null, "%",null);
          Vector tables = new Vector();
          while (tableNames.next())
          {
              String name = tableNames.getString(3);
              String type = tableNames.getString(4);
              if (type.equals("TABLE"))
              {
                  tables.addElement(name);
              }
          }
          return tables;
      }
  
      /**
       * Retrieves all the column names and types for a given table from
       * JDBC metadata.  It returns a vector of vectors.  Each element
       * of the returned vector is a vector with:
       *
       * element 0 => a String object for the column name.
       * element 1 => an Integer object for the column type.
       * element 2 => size of the column.
       * element 3 => null type.
       *
       * @param dbMeta JDBC metadata.
       * @param tableName Table from which to retrieve column
       * information.
       * @return A Vector with the list of columns in tableName.
       */
      public Vector getColumns(DatabaseMetaData dbMeta,
                               String tableName)
          throws SQLException
      {
          ResultSet columnSet = dbMeta.getColumns("",null, tableName, null);
          Vector columns = new Vector();
          while (columnSet.next())
          {
              String name = columnSet.getString(4);
              Integer sqlType = new Integer(columnSet.getString(5));
              Integer size = new Integer(columnSet.getInt(7));
              Integer nullType = new Integer(columnSet.getInt(11));
  
              Vector v = new Vector();
              v.addElement (name);
              v.addElement (sqlType);
              v.addElement (size);
              v.addElement (nullType);
              columns.addElement (v);
          }
          return columns;
      }
  
      /**
       * Retrieves a list of primary key columns for a given table.
       *
       * @param dbMeta JDBC metadata.
       * @param tableName Table from which to retrieve PK information.
       * @return A Vector with a list of PKs for tableName.
       */
      public Vector getPrimaryKeys(DatabaseMetaData dbMeta,
                                   String tableName)
          throws SQLException
      {
          ResultSet primaryKeys = dbMeta.getPrimaryKeys("",null, tableName);
          Vector keys = new Vector();
          while (primaryKeys.next())
          {
              keys.addElement(primaryKeys.getString(4));
          }
          return keys;
      }
  
      /**
       * Retrieves a list of foreign key columns for a given table.
       *
       * @param dbMeta JDBC metadata.
       * @param tableName Table from which to retrieve FK information.
       * @return A Vector with a list of foreign keys in tableName.
       */
      public Vector getForeignKeys(DatabaseMetaData dbMeta,
                                   String tableName)
          throws SQLException
      {
          ResultSet foreignKeys = dbMeta.getImportedKeys("",null, tableName);
          Vector keys = new Vector();
          while (foreignKeys.next())
          {
              keys.addElement(foreignKeys.getString(8));
          }
          return keys;
      }
  
      /**
       * Main function.
       *
       * @param args A String[] with the command line arguments.
       * @exception Exception, a generic exception.
       */
      static public void main (String[] args)
          throws Exception
      {
          new JDBCToXMLSchema();
      }
  }
  
  
  
  1.1                  turbine/src/java/org/apache/turbine/torque/ant/SqlToXml.java
  
  Index: SqlToXml.java
  ===================================================================
  package org.apache.turbine.torque.ant;
  
  /*
   * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
   *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
   *    "Java Apache Project" must not be used to endorse or promote products
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  
  // JDK Stuff
  import java.io.*;
  
  // Ant Stuff
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.Task;
  
  import org.apache.turbine.torque.model.AppData;
  import org.apache.turbine.torque.transform.SQLToAppData;
  
  /**
   * An ant task for creating an xml schema from an sql schema
   *
   * @author <a href="mailto:[email protected]>Leon Messerschmidt</a>
   * @version $Id: SqlToXml.java,v 1.1 2000/11/07 23:38:12 jvanzyl Exp $
   */
  
  public class SqlToXml
  {
  
      private String inputFile;
      private String outputFile;
  
      /**
       * Get the current input file
       */
      public String getInputFile ()
      {
          return inputFile;
      }
  
      /**
       * Set the sql input file.  This file must exist
       */
      public void setInputFile (String v)
      {
          inputFile = v;
      }
  
  
      /**
       * Get the current output file.
       */
      public String getOutputFile ()
      {
          return outputFile;
      }
  
      /**
       * Set the current output file.  If the file does not
       * exist it will be created.  If the file exists all
       * it's contents will be replaced.
       */
      public void setOutputFile (String v)
      {
          outputFile = v;
      }
  
  
  
      /**
       * Execute the input script with WM
       */
      public void execute () throws Exception
      {
          try
          {
              System.out.println ("Parsing SQL Schema");
  
              SQLToAppData sqlParser = new SQLToAppData(inputFile);
              AppData app = sqlParser.execute();
  
              System.out.println ("Preparing to write xml schema");
              FileWriter fr = new FileWriter (outputFile);
              BufferedWriter br = new BufferedWriter (fr);
  
              br.write (app.toString());
  
              System.out.println ("Writing xml schema");
  
              br.flush();
              br.close();
          }
          catch (Throwable e)
          {
              e.printStackTrace ();
          }
      }
  }
  
  
  
  1.1                  turbine/src/java/org/apache/turbine/torque/ant/VTorqueTask.java
  
  Index: VTorqueTask.java
  ===================================================================
  package org.apache.turbine.torque.ant;
  
  /*
   * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
   *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
   *    "Java Apache Project" must not be used to endorse or promote products
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  import java.util.Date;
  
  // Velocity Stuff
  import org.apache.velocity.Context;
  import org.apache.velocity.texen.ant.TexenTask;
  
  // Turbine Stuff
  import org.apache.turbine.torque.model.AppData;
  import org.apache.turbine.torque.transform.XmlToAppData;
  
  import org.apache.turbine.torque.util.TorqueStringUtil;
  
  /**
   * An ant task for generating output by using Velocity
   *
   * @author <a href="mailto:[email protected]">Jason van Zyl</a>
   * @version $Id: VTorqueTask.java,v 1.1 2000/11/07 23:38:13 jvanzyl Exp $
   */
  
  public class VTorqueTask extends TexenTask
  {
      private AppData app;
  
      private String xmlFile;
      private String targetPackage;
  
      /**
       * Get the current xml file
       */
      public String getXmlFile ()
      {
          return xmlFile;
      }
  
      /**
       * Set the xml file
       */
      public void setXmlFile(String v)
      {
          xmlFile = v;
      }
  
      /**
       * Get the current target package
       */
      public String getTargetPackage ()
      {
          return targetPackage;
      }
  
      /**
       * Set the current target package.  This is where
       * generated java classes will live.
       */
      public void setTargetPackage (String v)
      {
          targetPackage = v;
      }
  
      public Context initControlContext()
      {
          Context context = new Context();
          app = new AppData();
          XmlToAppData xmlParser = new XmlToAppData();
          app = xmlParser.parseFile(xmlFile);
          
          context.put("database", app);
          context.put("package", targetPackage);
          context.put("tstrings", new TorqueStringUtil());
          context.put("now", new Date().toString());
          
          return context;
      }
  }
  
  
  
  1.1                  turbine/src/java/org/apache/turbine/torque/ant/XMLSchemaToHTML.java
  
  Index: XMLSchemaToHTML.java
  ===================================================================
  package org.apache.turbine.torque.ant;
  
  /*
   * Copyright (c) 1997-2000 The Java Apache Project.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine", "Turbine",
   *    "Apache Turbine", "Turbine Project", "Apache Turbine Project" and
   *    "Java Apache Project" must not be used to endorse or promote products
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  // Java stuff.
  import java.io.*;
  
  // SAX stuff.
  import org.xml.sax.SAXException;
  
  // Xalan stuff.
  import org.apache.xalan.xslt.XSLTProcessorFactory;
  import org.apache.xalan.xslt.XSLTInputSource;
  import org.apache.xalan.xslt.XSLTResultTarget;
  import org.apache.xalan.xslt.XSLTProcessor;
  
  /**
   * Simple sample code to show how to run the XSL processor from the
   * API.
   *
   * @author <a href="mailto:[email protected]">Jason van Zyl</a>
   * @version $Id: XMLSchemaToHTML.java,v 1.1 2000/11/07 23:38:14 jvanzyl Exp $
   */
  public class XMLSchemaToHTML
  {
      /**
       * Main function.
       *
       * @param args A String[] with the command line arguments.
       * @exception java.io.IOException.
       * @exception java.net.MalformedURLException.
       * @exception org.xml.sax.SAXException.
       */
      public static void main(String[] args)
          throws java.io.IOException,
                 java.net.MalformedURLException,
                 org.xml.sax.SAXException
      {
          // Have the XSLTProcessorFactory obtain a interface to a new
          // XSLTProcessor object.
          XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
  
          // Have the XSLTProcessor processor object transform "foo.xml"
          // to System.out, using the XSLT instructions found in
          // "foo.xsl".
          XSLTInputSource xmlSchema = new XSLTInputSource(args[0]);
          XSLTInputSource transform = new XSLTInputSource(args[1]);
  
          FileOutputStream fos = null;
  
          try
          {
              fos = new FileOutputStream(args[2]);
          }
          catch (IOException ioe)
          {
              System.out.println(ioe);
              ioe.printStackTrace();
          }
  
          XSLTResultTarget target = new  XSLTResultTarget(fos);
  
          processor.process(xmlSchema, transform, target);
      }
  }