## Copyright 2001-2005 The Apache Software Foundation.
##
## Licensed under the Apache License, Version 2.0 (the "License")
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
##     http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
/**
 * Copyright (c) 2006, yher.net
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * * Redistributions of source code must retain the above copyright notice, 
 *   this list of conditions and the following disclaimer.
 * * 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.
 * * Neither the name of the nor the names of its contributors may be used to endorse or 
 *   promote products derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
 * ANY EXPRESS 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 COPYRIGHT OWNER OR 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.
 */
package ${packageMap};

import java.util.Date;
import java.math.BigDecimal;

import org.apache.torque.Torque;
import org.apache.torque.TorqueException;
import org.apache.torque.map.MapBuilder;
import org.apache.torque.map.DatabaseMap;
import org.apache.torque.map.TableMap;

/**
#if ($addTimeStamp)
  *  This class was autogenerated by Torque on:
  *
  * [$now]
  *
#end
  */
@SuppressWarnings("unused")
public class ${table.JavaName}MapBuilder implements MapBuilder
{
    /**
     * The name of this class
     */
    public static final String CLASS_NAME =
        "${package}.map.${table.JavaName}MapBuilder";

    /**
     * The database map.
     */
    private DatabaseMap dbMap = null;

    /**
     * Tells us if this DatabaseMapBuilder is built so that we
     * don't have to re-build it every time.
     *
     * @return true if this DatabaseMapBuilder is built
     */
    public boolean isBuilt()
    {
        return (dbMap != null);
    }

    /**
     * Gets the databasemap this map builder built.
     *
     * @return the databasemap
     */
    public DatabaseMap getDatabaseMap()
    {
        return this.dbMap;
    }

    /**
     * The doBuild() method builds the DatabaseMap
     *
     * @throws TorqueException
     */
    public void doBuild() throws TorqueException
    {
        dbMap = Torque.getDatabaseMap("$table.Database.Name");

        dbMap.addTable("$table.Name");
        TableMap tMap = dbMap.getTable("$table.Name");

#if ($table.IdMethod == "native")
        tMap.setPrimaryKeyMethod(TableMap.NATIVE);
#elseif ($table.IdMethod == "idbroker")
        tMap.setPrimaryKeyMethod(TableMap.ID_BROKER);
#else
        tMap.setPrimaryKeyMethod("$table.IdMethod");
#end

#if ($table.IdMethodParameters)
        // this might need upgrading based on what all the databases
        // need, but for now assume one parameter.
  #set ($imp = $table.IdMethodParameters.get(0) )
        tMap.setPrimaryKeyMethodInfo("$imp.Value");
#elseif ($table.IdMethod == "idbroker")
        tMap.setPrimaryKeyMethodInfo(tMap.getName());
#elseif ($table.IdMethod == "native" && $table.Database.Platform.NativeIdMethod == "sequence")
        tMap.setPrimaryKeyMethodInfo("$table.SequenceName");
#elseif ($table.IdMethod == "native" && $table.Database.Platform.NativeIdMethod == "identity")
        tMap.setPrimaryKeyMethodInfo("$table.Name");
#end

#foreach ($col in $table.Columns)
  #set ( $tfc=$table.JavaName )
  #set ( $cfc=$col.JavaName )
  #set ( $cup=$col.Name.toUpperCase() )
  #if($col.isPrimaryKey())
    #if($col.isForeignKey())
        tMap.addForeignPrimaryKey(
                "${table.Name}.$cup", $col.JavaObject , "$col.RelatedTableName" ,
                "$col.RelatedColumnName");
    #else
        tMap.addPrimaryKey("${table.Name}.$cup", $col.JavaObject );
    #end
  #else
    #if($col.isForeignKey())
        tMap.addForeignKey(
                "${table.Name}.$cup", $col.JavaObject , "$col.RelatedTableName" ,
                "$col.RelatedColumnName");
    #else
      #if( $col.Precision )
      	#if( $col.Scale )
          tMap.addColumn("${table.Name}.$cup", $col.JavaObject, $col.Precision, $col.Scale );
        #else
          tMap.addColumn("${table.Name}.$cup", $col.JavaObject, $col.Precision );
        #end
      #else
        tMap.addColumn("${table.Name}.$cup", $col.JavaObject );
      #end
    #end
  #end
#end
    }
}
