You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by jv...@apache.org on 2001/10/10 16:00:45 UTC

cvs commit: jakarta-turbine-2/src/java/org/apache/turbine/torque TorqueDataModelTask.java

jvanzyl     01/10/10 07:00:45

  Added:       src/java/org/apache/turbine/torque TorqueDataModelTask.java
  Log:
  - adding a base datamodel task that is now the basis for many of the
    torque tasks (and could be made the base of a couple more).
  
  Revision  Changes    Path
  1.1                  jakarta-turbine-2/src/java/org/apache/turbine/torque/TorqueDataModelTask.java
  
  Index: TorqueDataModelTask.java
  ===================================================================
  package org.apache.turbine.torque;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  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. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Turbine" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``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 APACHE SOFTWARE FOUNDATION 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 Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.io.File;
  import java.util.Hashtable;
  import java.util.Iterator;
  import java.util.Vector;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.DirectoryScanner;
  import org.apache.tools.ant.types.FileSet;
  import org.apache.velocity.context.Context;
  import org.apache.velocity.VelocityContext;
  import org.apache.velocity.texen.ant.TexenTask;
  import org.apache.turbine.torque.engine.database.model.AppData;
  import org.apache.turbine.torque.engine.database.model.Database;
  import org.apache.turbine.torque.engine.database.transform.XmlToAppData;
  
  /**
   * A base torque task that uses either a single XML schema
   * representing a data model, or a <fileset> of XML schemas.
   * We are making the assumption that an XML schema representing
   * a data model contains tables for a <strong>single</strong>
   * database.
   *
   * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
   */
  public class TorqueDataModelTask
      extends TexenTask
  {
      /**
       *  XML that describes the database model, this is transformed
       *  into the application model object.
       */
      protected String xmlFile;
  
      /**
       * Fileset of XML schemas which represent our data models.
       */
      protected Vector filesets = new Vector();
      
      /**
       * Data models that we collect. One from each XML schema file.
       */
      protected Vector dataModels = new Vector();
  
      /**
       * Velocity context which exposes our objects
       * in the templates.
       */
      protected Context context;
  
      /**
       * Map of data model name to database name.
       * Should probably stick to the convention
       * of them being the same but I know right now
       * in a lot of cases they won't be.
       */
      protected Hashtable dataModelDbMap;
      protected Hashtable databaseNames;
  
      protected String sqldbmap;
  
      public void setSqlDbMap(String sqldbmap)
      {
          this.sqldbmap = sqldbmap;
      }
      
      public String getSqlDbMap()
      {
          return sqldbmap;
      }        
  
      /**
       * Return the data models that have been
       * processed.
       *
       * @return Vector data models
       */
      public Vector getDataModels()
      {
          return dataModels;
      }        
  
      /**
       * Return the data model to database name map.
       *
       * @return Hashtable data model name to database name map.
       */
      public Hashtable getDataModelDbMap()
      {
          return dataModelDbMap;
      }        
  
      /**
       *  Get the xml schema describing the application
       *  model.
       *
       * @return  String xml schema file.
       */
      public String getXmlFile()
      {
          return xmlFile;
      }
  
      /**
       *  Set the xml schema describing the application
       *  model.
       *
       * @param  v The new XmlFile value
       */
      public void setXmlFile(String v)
      {
          xmlFile = v;
      }
  
      /**
       * Adds a set of files (nested fileset attribute).
       */
      public void addFileset(FileSet set) 
      {
          filesets.addElement(set);
      }
  
      /**
       *  Set up the initialial context for generating the
       *  SQL from the XML schema.
       *
       * @return  Description of the Returned Value
       */
      public Context initControlContext()
          throws Exception
      {
          XmlToAppData xmlParser;
      
          if (xmlFile == null && filesets.isEmpty())
          {
              throw new BuildException("You must specify an XML schema or " +
                  "fileset of XML schemas!");
          }            
  
          if (xmlFile != null)
          {
              // Transform the XML database schema into
              // data model object.
              xmlParser = new XmlToAppData();
              AppData ad = xmlParser.parseFile(xmlFile);
              ad.setName(xmlFile.substring(0,xmlFile.indexOf(".")));
              dataModels.addElement(ad);
          } 
          else 
          { 
              // Deal with the filesets.
              for (int i=0; i < filesets.size(); i++) 
              {
                  FileSet fs = (FileSet) filesets.elementAt(i);
                  DirectoryScanner ds = fs.getDirectoryScanner(project);
                  File srcDir = fs.getDir(project);
  
                  String[] dataModelFiles = ds.getIncludedFiles();
  
                  // Make a transaction for each file
                  for ( int j = 0 ; j < dataModelFiles.length ; j++ ) 
                  {
                      xmlParser = new XmlToAppData();
                      AppData ad = xmlParser.parseFile(
                          new File(srcDir, dataModelFiles[j]).toString());
                      
                      ad.setName(dataModelFiles[j].substring(0,dataModelFiles[j].indexOf(".")));
                      dataModels.addElement(ad);
                  }
              }
          }
          
          Iterator i = dataModels.iterator();
          databaseNames = new Hashtable();
          dataModelDbMap = new Hashtable();        
          
          // Different datamodels may state the same database
          // names, we just want the unique names of databases.
          while (i.hasNext())
          {
              AppData ad = (AppData) i.next();
              Database database = ad.getDatabase();
              databaseNames.put(database.getName(), database.getName());
              dataModelDbMap.put(ad.getName(), database.getName());
          }
  
          // Create a new Velocity context.
          context = new VelocityContext();
          
          // Place our set of data models into the context along
          // with the names of the databases as a convenience for
          // now. 
          context.put("dataModels", dataModels);
          context.put("databaseNames", databaseNames);
      
          return context;
      }
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org