/*
 * Redistribution and use of this software and associated documentation ("Software"), with or
 * without modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain copyright statements and notices. Redistributions
 * must also contain a copy of this document.
 *
 * 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 name "Exolab" must not be used to endorse or promote products derived from this Software
 * without prior written permission of Intalio, Inc. For written permission, please contact
 * info@exolab.org.
 *
 * 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in
 * their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of
 * Intalio, Inc.
 *
 * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/).
 *
 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``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 INTALIO, INC. 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.
 *
 * Copyright 2004 (C) Intalio, Inc. All Rights Reserved.
 *
 * $Id: CastorSourceGenTask.java 6410 2006-11-17 12:06:24Z wguttmn $
 */
package org.exolab.castor.tools.ant.taskdefs;

import java.io.File;

import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.FileSet;
import org.castor.anttask.CastorCodeGenTask;

/**
 * An <a href="http://ant.apache.org/">Ant</a> task to call the Castor Source Generator. It can be
 * passed a file, a directory, a Fileset or all three.
 *
 * @author <a href="mailto:joel DOT farquhar AT montage-dmc DOT com">Joel Farquhar</a>
 * @author <a href="mailto:ferret AT frii DOT com">Bruce Snyder</a>
 * @version $Revision: 6543 $ $Date: 2005-03-05 06:42:06 -0700 (Sat, 05 Mar 2005) $
 * @deprecated Please use {@link org.castor.anttask.CastorCodeGenTask} instead.
 */
public final class CastorSourceGenTask extends MatchingTask {

  /** CastorCodeGenTask to delegate all work to. */
  private final CastorCodeGenTask _codeGen = new CastorCodeGenTask();

  /**
   * No-arg constructor.
   */
  public CastorSourceGenTask() {}

  /**
   * Sets the individual schema that will have code generated for it.
   * 
   * @param file One schema file.
   */
  public void setFile(final File file) {
    _codeGen.setFile(file);
  }

  /**
   * Sets the directory such that all schemas in this directory will have code generated for them.
   * 
   * @param dir The directory containing schemas to process.
   */
  public void setDir(final File dir) {
    _codeGen.setDir(dir);
  }

  /**
   * Adds a fileset to process that contains schemas to process.
   * 
   * @param set An individual file set containing schemas.
   */
  public void addFileset(final FileSet set) {
    _codeGen.addFileset(set);
  }

  /**
   * Sets the package that generated code will belong to.
   * 
   * @param pack The package that generated code will belong to.
   */
  public void setPackage(final String pack) {
    _codeGen.setPackage(pack);
  }

  /**
   * Sets the directory into which code will be generated.
   * 
   * @param dest The directory into which code will be generated.
   */
  public void setTodir(final String dest) {
    _codeGen.setTodir(dest);
  }

  /**
   * Sets the binding file to be used for code generation.
   * 
   * @param bindingfile The binding file to be used for code generation.
   */
  public void setBindingfile(final String bindingfile) {
    _codeGen.setBindingfile(bindingfile);
  }

  /**
   * Sets the line seperator to use for code generation.
   * 
   * @param ls The line seperator to use for code generation.
   */
  public void setLineseparator(final String ls) {
    _codeGen.setLineseparator(ls);
  }

  /**
   * Sets the type factory for code generation.
   * 
   * @param tf The type factory to use for code generation.
   */
  public void setTypes(final String tf) {
    _codeGen.setTypes(tf);
  }

  /**
   * Sets whether or not code generation gives extra information about its work.
   * 
   * @param b If true, the code generator will be verbose.
   */
  public void setVerbose(final boolean b) {
    _codeGen.setVerbose(b);
  }

  /**
   * Sets whether or not non-fatal warnings should be suppressed.
   * 
   * @param b If true, non-fatal warnings will be suppressed. This additionally means that existing
   *        source files will be silently overwritten.
   */
  public void setWarnings(final boolean b) {
    _codeGen.setWarnings(b);
  }

  /**
   * Sets whether or not class descriptors are generated.
   * 
   * @param b If true, class descriptors are generated.
   */
  public void setNodesc(final boolean b) {
    _codeGen.setNodesc(b);
  }

  /**
   * Sets whether or not marshaling methods are generated.
   * 
   * @param b If true, marshaling methods are generated.
   * @deprecated For the correct spelling, see {@link #setNomarshal(boolean)}.
   */
  public void setNomarshall(final boolean b) {
    _codeGen.setNomarshal(b);
  }

  /**
   * Sets whether or not marshaling methods are generated.
   * 
   * @param b If true, marshaling methods are generated.
   */
  public void setNomarshal(final boolean b) {
    _codeGen.setNomarshal(b);
  }

  /**
   * Sets whether CTF framework code is generated.
   * 
   * @param b If true, the generated code will be instrumented for the CTF.
   */
  public void setTestable(final boolean b) {
    _codeGen.setTestable(b);
  }

  /**
   * Controls whether to generate code for imported schemas as well.
   * 
   * @param generateImportedSchemas True if code should be generated for imported schemas.
   */
  public void setGenerateImportedSchemas(final boolean generateImportedSchemas) {
    _codeGen.setGenerateImportedSchemas(generateImportedSchemas);
  }

  /**
   * Controls whether to generate SAX-1 compliant code.
   * 
   * @param sax1 True if SAX-1 compliant code should be generated.
   */
  public void setSAX1(final boolean sax1) {
    _codeGen.setSAX1(sax1);
  }

  /**
   * Controls whether enumerated type lookup should be performed in a case insensitive manner.
   * 
   * @param caseInsensitive True if enumerated type lookup should be performed in a case insensitive
   *        manner
   */
  public void setCaseInsensitive(final boolean caseInsensitive) {
    _codeGen.setCaseInsensitive(caseInsensitive);
  }

  /**
   * Sets the file to use for castor builder properties.
   *
   * @param properties The properties to use.
   */
  public void setProperties(final String properties) {
    _codeGen.setProperties(properties);
  }

  /**
   * Public execute method -- entry point for the Ant task. Loops over all schema that need code
   * generated and creates needed code generators, then executes them. If anything goes wrong during
   * execution of the Ant task a BuildException will be thrown.
   * 
   * @see org.apache.tools.ant.Task#execute()
   */
  public void execute() {
    System.out.println("The class org.exolab.castor.tools.ant.taskdefs.CastorSourceGenTask "
        + "has been deprecated. Please use org.castor.anttask.CastorCodeGenTask instead.");
    System.out.println();

    _codeGen.execute();
  }


}
