#set ($db = $table.Database) #if ($db.Package) #set ($package = $db.Package) #else #set ($package = $targetPackage) #end package ${package}; import java.math.BigDecimal; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.torque.Torque; import org.apache.torque.TorqueException; import org.apache.torque.map.MapBuilder; import org.apache.torque.map.TableMap; import org.apache.torque.om.DateKey; import org.apache.torque.om.NumberKey; import org.apache.torque.om.StringKey; import org.apache.torque.om.ObjectKey; import org.apache.torque.om.SimpleKey; import org.apache.torque.util.BasePeer; import org.apache.torque.util.Criteria; import com.workingdogs.village.DataSetException; import com.workingdogs.village.QueryDataSet; import com.workingdogs.village.Record; // Local classes import ${package}.map.*; #foreach ($fk in $table.ForeignKeys) #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) ) #if ($tblFK.Package != $package) import ${tblFK.Package}.${tblFK.JavaName}; import ${tblFK.Package}.${tblFK.JavaName}Peer; #end #end /** #if ($addTimeStamp) * This class was autogenerated by Torque on: * * [$now] * #end */ public abstract class $basePrefix${table.JavaName}Peer extends $table.BasePeer { #if (!$table.isAlias()) /** the default database name for this class */ public static final String DATABASE_NAME = "$table.Database.Name"; /** the table name for this class */ public static final String TABLE_NAME = "$table.Name"; /** * @return the map builder for this peer * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static MapBuilder getMapBuilder() throws TorqueException { return getMapBuilder(${table.JavaName}MapBuilder.CLASS_NAME); } #foreach ($col in $table.Columns) #set ( $tfc=$table.JavaName ) #set ( $cfc=$col.JavaName ) #set ( $cup=$col.Name.toUpperCase() ) /** the column name for the $cup field */ public static final String $cup; #end static { #foreach ($col in $table.Columns) #set ( $tfc=$table.JavaName ) #set ( $cfc=$col.JavaName ) #set ( $cup=$col.Name.toUpperCase() ) $cup = "${table.Name}.$cup"; #end if (Torque.isInit()) { try { getMapBuilder(); } catch (Exception e) { category.error("Could not initialize Peer", e); } } else { Torque.registerMapBuilder(${table.JavaName}MapBuilder.CLASS_NAME); } } #end ## ends if (!$table.isAlias()) /** number of columns for this peer */ public static final int numColumns = $table.NumColumns; /** A class that can be returned by this peer. */ protected static final String CLASSNAME_DEFAULT = "${package}.$table.JavaName"; /** A class that can be returned by this peer. */ protected static final Class CLASS_DEFAULT = initClass(CLASSNAME_DEFAULT); /** * Class object initialization method. * * @param className name of the class to initialize * @return the initialized class */ private static Class initClass(String className) { Class c = null; try { c = Class.forName(className); } catch (Throwable t) { category.error("A FATAL ERROR has occurred which should not " + "have happened under any circumstance. Please notify " + "the Torque developers " + "and give as many details as possible (including the error " + "stack trace).", t); // Error objects should always be propogated. if (t instanceof Error) { throw (Error) t.fillInStackTrace(); } } return c; } #if (!$table.isAlias()) /** * Get the list of objects for a ResultSet. Please not that your * resultset MUST return columns in the right order. You can use * getFieldNames() in BaseObject to get the correct sequence. * * @param results the ResultSet * @return the list of objects * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List resultSet2Objects(java.sql.ResultSet results) throws TorqueException { try { QueryDataSet qds = null; List rows = null; try { qds = new QueryDataSet(results); rows = getSelectResults(qds); } finally { if (qds != null) { qds.close(); } } return populateObjects(rows); } catch (SQLException e) { throw new TorqueException(e); } catch (DataSetException e) { throw new TorqueException(e); } } #if ($table.ChildrenColumn) #set ($col = $table.ChildrenColumn) #set ( $tfc=$table.JavaName ) #set ( $cfc=$col.JavaName ) #set ( $cup=$col.Name.toUpperCase() ) #if ($col.isEnumeratedClasses()) ## NOTE: this hack requires a class type definition column to ## be a primitive type or a String. Should not be a bad assumption #if ($col.isPrimitive()) #set ($quote = "") #else #set ($quote = '"') #end #foreach ($child in $col.Children) /** A key representing a particular subclass */ public static final $col.JavaNative CLASSKEY_$child.Key.toUpperCase() = $quote$child.Key$quote; /** A class that can be returned by this peer. */ public static final String CLASSNAME_$child.Key.toUpperCase() = "${package}.$child.ClassName"; /** A class that can be returned by this peer. */ public static final Class CLASS_$child.Key.toUpperCase() = initClass(CLASSNAME_$child.Key.toUpperCase()); #end #end #end /** * Method to do inserts. * * @param criteria object used to create the INSERT statement. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static ObjectKey doInsert(Criteria criteria) throws TorqueException { return $basePrefix${table.JavaName}Peer .doInsert(criteria, (Connection) null); } /** * Method to do inserts. This method is to be used during a transaction, * otherwise use the doInsert(Criteria) method. It will take care of * the connection details internally. * * @param criteria object used to create the INSERT statement. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static ObjectKey doInsert(Criteria criteria, Connection con) throws TorqueException { #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, 1); } else { criteria.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to Y/N if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, "Y"); } else { criteria.add($cup, "N"); } } } #end #end // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { return BasePeer.doInsert(criteria); } else { return BasePeer.doInsert(criteria, con); } } /** * Add all the columns needed to create a new object. * * @param criteria object containing the columns to add. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void addSelectColumns(Criteria criteria) throws TorqueException { #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) criteria.addSelectColumn($cup); #end } /** * Create a new object of type cls from a resultset row starting * from a specified offset. This is done so that you can select * other rows than just those needed for this object. You may * for example want to create two objects from the same row. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static $table.JavaName row2Object(Record row, int offset, Class cls) throws TorqueException { try { $table.JavaName obj = ($table.JavaName) cls.newInstance(); populateObject(row, offset, obj); #if ($addSaveMethod) obj.setModified(false); #end obj.setNew(false); return obj; } catch (InstantiationException e) { throw new TorqueException(e); } catch (IllegalAccessException e) { throw new TorqueException(e); } } /** * Populates an object from a resultset row starting * from a specified offset. This is done so that you can select * other rows than just those needed for this object. You may * for example want to create two objects from the same row. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void populateObject(Record row, int offset, $table.JavaName obj) throws TorqueException { try { #set ( $n=0 ) #foreach ($col in $table.Columns) obj.set${col.JavaName}(row.getValue(offset + $n).$col.VillageMethod); #set ( $n = $n + 1 ) #end } catch (DataSetException e) { throw new TorqueException(e); } } /** * Method to do selects. * * @param criteria object used to create the SELECT statement. * @return List of selected Objects * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List doSelect(Criteria criteria) throws TorqueException { return populateObjects(doSelectVillageRecords(criteria)); } /** * Method to do selects within a transaction. * * @param criteria object used to create the SELECT statement. * @param con the connection to use * @return List of selected Objects * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List doSelect(Criteria criteria, Connection con) throws TorqueException { return populateObjects(doSelectVillageRecords(criteria, con)); } /** * Grabs the raw Village records to be formed into objects. * This method handles connections internally. The Record objects * returned by this method should be considered readonly. Do not * alter the data and call save(), your results may vary, but are * certainly likely to result in hard to track MT bugs. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List doSelectVillageRecords(Criteria criteria) throws TorqueException { return $basePrefix${table.JavaName}Peer .doSelectVillageRecords(criteria, (Connection) null); } /** * Grabs the raw Village records to be formed into objects. * This method should be used for transactions * * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List doSelectVillageRecords(Criteria criteria, Connection con) throws TorqueException { #if ($targetDatabase == "postgresql" && $table.requiresTransactionInPostgres()) // stuff for postgresql problem..... criteria.setBlobFlag(true); #end if (criteria.getSelectColumns().size() == 0) { addSelectColumns(criteria); } #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, 1); } else { criteria.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to Y/N if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, "Y"); } else { criteria.add($cup, "N"); } } } #end #end // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } // BasePeer returns a List of Value (Village) arrays. The array // order follows the order columns were placed in the Select clause. if (con == null) { return BasePeer.doSelect(criteria); } else { return BasePeer.doSelect(criteria, con); } } /** * The returned List will contain objects of the default type or * objects that inherit from the default. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List populateObjects(List records) throws TorqueException { List results = new ArrayList(records.size()); // populate the object(s) for (int i = 0; i < records.size(); i++) { Record row = (Record) records.get(i); #if ($table.ChildrenColumn) results.add(${table.JavaName}Peer.row2Object(row, 1, ${table.JavaName}Peer.getOMClass(row, 1))); #else results.add(${table.JavaName}Peer.row2Object(row, 1, ${table.JavaName}Peer.getOMClass())); #end } return results; } #end ## ends if(!$table.isAlias()) #if ($table.ChildrenColumn) #set ($col = $table.ChildrenColumn) /** * The returned Class will contain objects of the default type or * objects that inherit from the default. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static Class getOMClass(Record record, int offset) throws TorqueException { Class c = null; try { #if ($col.isEnumeratedClasses()) Class omClass = null; $col.JavaNative classKey = record.getValue(offset - 1 + $col.Position) .$col.VillageMethod; #set ($if = "if") #foreach ($child in $col.Children) #if ($col.isPrimitive()) $if (classKey == CLASSKEY_$child.Key.toUpperCase()) #else $if (CLASSKEY_${child.Key.toUpperCase()}.equals(classKey)) #end { omClass = CLASS_$child.Key.toUpperCase(); } #set ($if = "else if") #end else { omClass = getOMClass(); } c = omClass; #else c = Class.forName( record.getValue(offset - 1 + $col.Position).asString()); #end } catch (Exception e) { throw new TorqueException(e); } return c; } #end /** * The class that the Peer will make instances of. * If the BO is abstract then you must implement this method * in the BO. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static Class getOMClass() throws TorqueException { #if ($table.isAbstract()) String error = "You must implement the getOMClass method in your"; error += " Peer object in order for things to work properly."; error += " This method should return the proper Class that"; error += " represents the Peer's Business Object."; throw new TorqueException (error); #else return CLASS_DEFAULT; #end } #if (!$table.isAlias()) /** * Method to do updates. * * @param criteria object containing data that is used to create the UPDATE * statement. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doUpdate(Criteria criteria) throws TorqueException { $basePrefix${table.JavaName}Peer .doUpdate(criteria, (Connection) null); } /** * Method to do updates. This method is to be used during a transaction, * otherwise use the doUpdate(Criteria) method. It will take care of * the connection details internally. * * @param criteria object containing data that is used to create the UPDATE * statement. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doUpdate(Criteria criteria, Connection con) throws TorqueException { Criteria selectCriteria = new Criteria(DATABASE_NAME, 2); #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, 1); } else { criteria.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to int if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, "Y"); } else { criteria.add($cup, "N"); } } } #end #if($col.isPrimaryKey()) selectCriteria.put($cup, criteria.remove($cup)); #end #end // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { BasePeer.doUpdate(selectCriteria, criteria); } else { BasePeer.doUpdate(selectCriteria, criteria, con); } } /** * Method to do deletes. * * @param criteria object containing data that is used DELETE from database. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete(Criteria criteria) throws TorqueException { $basePrefix${table.JavaName}Peer .doDelete(criteria, (Connection) null); } /** * Method to do deletes. This method is to be used during a transaction, * otherwise use the doDelete(Criteria) method. It will take care of * the connection details internally. * * @param criteria object containing data that is used DELETE from database. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete(Criteria criteria, Connection con) throws TorqueException { #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, 1); } else { criteria.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to Y/N if (criteria.containsKey($cup)) { Object possibleBoolean = criteria.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { criteria.add($cup, "Y"); } else { criteria.add($cup, "N"); } } } #end #end // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { BasePeer.doDelete(criteria); } else { BasePeer.doDelete(criteria, con); } } /** * Method to do selects * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List doSelect($table.JavaName obj) throws TorqueException { return doSelect(buildCriteria(obj)); } /** * Method to do inserts * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doInsert($table.JavaName obj) throws TorqueException { #if ($table.IdMethod.equals("none") || $table.PrimaryKey.size() == 0) doInsert(buildCriteria(obj)); #else obj.setPrimaryKey(doInsert(buildCriteria(obj))); #end obj.setNew(false); obj.setModified(false); } /** * @param obj the data object to update in the database. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doUpdate($table.JavaName obj) throws TorqueException { doUpdate(buildCriteria(obj)); obj.setModified(false); } /** * @param obj the data object to delete in the database. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete($table.JavaName obj) throws TorqueException { doDelete(buildCriteria(obj)); } /** * Method to do inserts. This method is to be used during a transaction, * otherwise use the doInsert($table.JavaName) method. It will take * care of the connection details internally. * * @param obj the data object to insert into the database. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doInsert($table.JavaName obj, Connection con) throws TorqueException { #if ($table.IdMethod.equals("none") || $table.PrimaryKey.size() == 0) doInsert(buildCriteria(obj), con); #else obj.setPrimaryKey(doInsert(buildCriteria(obj), con)); #end obj.setNew(false); obj.setModified(false); } /** * Method to do update. This method is to be used during a transaction, * otherwise use the doUpdate($table.JavaName) method. It will take * care of the connection details internally. * * @param obj the data object to update in the database. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doUpdate($table.JavaName obj, Connection con) throws TorqueException { doUpdate(buildCriteria(obj), con); obj.setModified(false); } /** * Method to delete. This method is to be used during a transaction, * otherwise use the doDelete($table.JavaName) method. It will take * care of the connection details internally. * * @param obj the data object to delete in the database. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete($table.JavaName obj, Connection con) throws TorqueException { doDelete(buildCriteria(obj), con); } /** * Method to do deletes. * * @param pk ObjectKey that is used DELETE from database. * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete(ObjectKey pk) throws TorqueException { $basePrefix${table.JavaName}Peer .doDelete(pk, (Connection) null); } /** * Method to delete. This method is to be used during a transaction, * otherwise use the doDelete(ObjectKey) method. It will take * care of the connection details internally. * * @param pk the primary key for the object to delete in the database. * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static void doDelete(ObjectKey pk, Connection con) throws TorqueException { doDelete(buildCriteria(pk), con); } /** Build a Criteria object from an ObjectKey */ public static Criteria buildCriteria( ObjectKey pk ) { Criteria criteria = new Criteria(); #if ($table.PrimaryKey.size() == 1) criteria.add($table.PrimaryKey.get(0).Name.toUpperCase(), pk); #else SimpleKey[] keys = (SimpleKey[])pk.getValue(); #set ( $i = 0 ) #foreach ($col in $table.PrimaryKey) #set ( $cup=$col.Name.toUpperCase() ) criteria.add($cup, keys[$i]); #set ( $i = $i + 1 ) #end #end return criteria; } /** Build a Criteria object from the data object for this peer */ public static Criteria buildCriteria( $table.JavaName obj ) { Criteria criteria = new Criteria(DATABASE_NAME); #foreach ($col in $table.Columns) #set ( $cfc=$col.JavaName ) #set ( $cup=$col.Name.toUpperCase() ) #if ($col.isPrimaryKey() && !$table.IdMethod.equals("none")) if (!obj.isNew()) #end criteria.add($cup, obj.get${cfc}()); #end return criteria; } #end ## ends if (!$table.isAlias()) #if ($table.PrimaryKey.size() > 0) #if ($table.isAlias()) #set ($retrieveMethod = "retrieve${table.JavaName}ByPK") #else #set ($retrieveMethod = "retrieveByPK") #end #set ($pks = $table.PrimaryKey) #if ($pks.size() == 1) #set ($pk = $pks.get(0)) /** * Retrieve a single object by pk * * @param pk the primary key * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static $table.JavaName ${retrieveMethod}($pk.JavaNative pk) throws TorqueException { return ${retrieveMethod}(SimpleKey.keyFor(pk)); } #end /** * Retrieve a single object by pk * * @param pk the primary key * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static $table.JavaName ${retrieveMethod}(ObjectKey pk) throws TorqueException { Connection db = null; $table.JavaName retVal = null; try { db = Torque.getConnection(DATABASE_NAME); retVal = ${retrieveMethod}(pk, db); } finally { Torque.closeConnection(db); } return(retVal); } /** * Retrieve a single object by pk * * @param pk the primary key * @param con the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static $table.JavaName ${retrieveMethod}(ObjectKey pk, Connection con) throws TorqueException { Criteria criteria = buildCriteria(pk); List v = doSelect(criteria, con); if (v.size() != 1) { throw new TorqueException("Failed to select one and only one row."); } else { return ($table.JavaName)v.get(0); } } /** * Retrieve a multiple objects by pk * * @param pks List of primary keys * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List ${retrieveMethod}s(List pks) throws TorqueException { Connection db = null; List retVal = null; try { db = Torque.getConnection(DATABASE_NAME); retVal = ${retrieveMethod}s(pks, db); } finally { Torque.closeConnection(db); } return(retVal); } /** * Retrieve a multiple objects by pk * * @param pks List of primary keys * @param dbcon the connection to use * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ public static List ${retrieveMethod}s( List pks, Connection dbcon ) throws TorqueException { List objs = null; if (pks == null || pks.size() == 0) { objs = new LinkedList(); } else { Criteria criteria = new Criteria(); #if ($table.PrimaryKey.size() == 1) criteria.addIn( $table.PrimaryKey.get(0).Name.toUpperCase(), pks ); #else Iterator iter = pks.iterator(); while (iter.hasNext()) { ObjectKey pk = (ObjectKey)iter.next(); SimpleKey[] keys = (SimpleKey[])pk.getValue(); #set ( $i = 0 ) #foreach ($col in $table.PrimaryKey) #set ( $cup=$col.Name.toUpperCase() ) Criteria.Criterion c$i = criteria.getNewCriterion( $cup, keys[$i], Criteria.EQUAL); #set ( $j = $i - 1 ) #if ($i > 0) c${j}.and(c${i}); #end #set ( $i = $i + 1 ) #end criteria.or(c0); } #end objs = doSelect(criteria, dbcon); } return objs; } #end ## ends if($table.PrimaryKey.size() > 0) #if ($table.PrimaryKey.size() > 1) #set ( $comma = false ) /** * retrieve object using using pk values. * #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.Name.toLowerCase() ) #set ( $cjtype= $col.JavaNative ) * @param $clo $cjtype #end */ public static $table.JavaName ${retrieveMethod}( #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.Name.toLowerCase() ) #set ( $cjtype = $col.JavaNative ) #if ($comma),#end $cjtype $clo #set ( $comma = true ) #end ) throws TorqueException { Connection db = null; $table.JavaName retVal = null; try { db = Torque.getConnection(DATABASE_NAME); retVal = retrieveByPK( #set ( $comma = false ) #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.Name.toLowerCase() ) #if ($comma),#end $clo #set ( $comma = true ) #end , db); } finally { Torque.closeConnection(db); } return(retVal); } #set ( $comma = false ) /** * retrieve object using using pk values. * #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.Name.toLowerCase() ) #set ( $cjtype= $col.JavaNative ) * @param $clo $cjtype #end * @param Connection con */ public static $table.JavaName ${retrieveMethod}( #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.Name.toLowerCase() ) #set ( $cjtype = $col.JavaNative ) #if ($comma),#end $cjtype $clo #set ( $comma = true ) #end ,Connection con) throws TorqueException { Criteria criteria = new Criteria(5); #foreach ($col in $table.PrimaryKey) #set ( $cup=$col.Name.toUpperCase() ) #set ( $clo=$col.Name.toLowerCase() ) criteria.add($cup, $clo); #end List v = doSelect(criteria, con); if (v.size() != 1) { throw new TorqueException("Failed to select one and only one row."); } else { return ($table.JavaName) v.get(0); } } #end #if ($complexObjectModel) ## ## setup joins ## #set ( $className = $table.JavaName ) #set ( $countFK = 0 ) #foreach ($dummyFK in $table.ForeignKeys) #set ( $countFK = $countFK + 1 ) #end #if ($countFK >= 1) #foreach ($fk in $table.ForeignKeys) #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) ) #if (!$tblFK.isForReferenceOnly()) ## want to cover this case, but the code is not there yet. #if ( !($fk.ForeignTableName.equals($table.Name)) ) #set ( $partJoinName = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #if ($column.isMultipleFK() || $fk.ForeignTableName.equals($table.Name)) #set ( $partJoinName = "$partJoinName$column.JavaName" ) #end #end #set ( $joinTable = $table.Database.getTable($fk.ForeignTableName) ) #set ( $joinClassName = $joinTable.JavaName ) #set ($interfaceName = $joinTable.JavaName) #if ($joinTable.Interface) #set ($interfaceName = $joinTable.Interface) #end #if ($partJoinName == "") #set ( $joinColumnId = $joinClassName ) #set ( $joinInterface = $interfaceName ) #set ( $collThisTable = "${className}s" ) #set ( $collThisTableMs = $className ) #else #set ( $joinColumnId= "${joinClassName}RelatedBy$partJoinName" ) #set ( $joinInterface= "${interfaceName}RelatedBy$partJoinName" ) #set ( $collThisTable="${className}sRelatedBy$partJoinName" ) #set ( $collThisTableMs="${className}RelatedBy$partJoinName" ) #end ## ------------------------------------------------------------ /** * selects a collection of $className objects pre-filled with their * $joinClassName objects. * * This method is protected by default in order to keep the public * api reasonable. You can provide public methods for those you * actually need in ${table.JavaName}Peer. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ protected static List doSelectJoin${joinColumnId}(Criteria c) throws TorqueException { #if ($targetDatabase == "postgresql" && $table.requiresTransactionInPostgres()) // stuff for postgresql problem..... c.setBlobFlag(true); #end // Set the correct dbName if it has not been overridden // c.getDbName will return the same object if not set to // another value so == check is okay and faster if (c.getDbName() == Torque.getDefaultDB()) { c.setDbName(DATABASE_NAME); } ${table.JavaName}Peer.addSelectColumns(c); int offset = numColumns + 1; ${joinClassName}Peer.addSelectColumns(c); #set ( $lfMap = $fk.LocalForeignMapping ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $columnFk = $joinTable.getColumn( $lfMap.get($columnName) ) ) c.addJoin(${table.JavaName}Peer.$column.Name.toUpperCase(), ${joinClassName}Peer.$columnFk.Name.toUpperCase()); #end #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (c.containsKey($cup)) { Object possibleBoolean = c.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { c.add($cup, 1); } else { c.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to Y/N if ( c.containsKey($cup) ) { Object possibleBoolean = c.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { c.add($cup, "Y"); } else { c.add($cup, "N"); } } } #end #end List rows = BasePeer.doSelect(c); List results = new ArrayList(); for (int i = 0; i < rows.size(); i++) { Record row = (Record) rows.get(i); #set ($classDecl = "Class") #if ($table.ChildrenColumn) $classDecl omClass = ${table.JavaName}Peer.getOMClass(row, 1); #else $classDecl omClass = ${table.JavaName}Peer.getOMClass(); #end #set ($classDecl = "") $className obj1 = ($className) ${table.JavaName}Peer .row2Object(row, 1, omClass); #if ($joinTable.ChildrenColumn) $classDecl omClass = ${joinClassName}Peer.getOMClass(row, offset); #else $classDecl omClass = ${joinClassName}Peer.getOMClass(); #end #set ($classDecl = "") $joinClassName obj2 = ($joinClassName)${joinClassName}Peer .row2Object(row, offset, omClass); boolean newObject = true; for (int j = 0; j < results.size(); j++) { $className temp_obj1 = ($className)results.get(j); $joinClassName temp_obj2 = ($joinClassName)temp_obj1.get${joinInterface}(); if (temp_obj2.getPrimaryKey().equals(obj2.getPrimaryKey())) { newObject = false; temp_obj2.add${collThisTableMs}(obj1); break; } } if (newObject) { obj2.init${collThisTable}(); obj2.add${collThisTableMs}(obj1); } results.add(obj1); } return results; } #end #end #end #end ## =========================================================== #if ($countFK > 2) #set ($includeJoinAll = true) #foreach ($fk in $table.ForeignKeys) #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) ) #if ($tblFK.isForReferenceOnly()) #set ($includeJoinAll = false) #end #end #if ($includeJoinAll) #foreach ($fk in $table.ForeignKeys) #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) ) #set ( $excludeTable = $table.Database.getTable($fk.ForeignTableName) ) #set ( $excludeClassName = $excludeTable.JavaName ) #set ( $relatedByCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ($relatedByCol = "$relatedByCol$column.JavaName") #end #end #if ($relatedByCol == "") #set ( $excludeString = $excludeClassName ) #set ( $collThisTable = "${className}s" ) #set ( $collThisTableMs = $className ) #else #set ( $excludeString="${excludeClassName}RelatedBy$relatedByCol" ) #set ( $collThisTable="${className}sRelatedBy$relatedByCol" ) #set ( $collThisTableMs="${className}RelatedBy$relatedByCol" ) #end /** * selects a collection of $className objects pre-filled with * all related objects. * * This method is protected by default in order to keep the public * api reasonable. You can provide public methods for those you * actually need in ${table.JavaName}Peer. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ protected static List doSelectJoinAllExcept${excludeString}(Criteria c) throws TorqueException { #if ($targetDatabase == "postgresql" && $table.requiresTransactionInPostgres()) // stuff for postgresql problem..... c.setBlobFlag(true); #end // Set the correct dbName if it has not been overridden // c.getDbName will return the same object if not set to another value // so == check is okay and faster if (c.getDbName() == Torque.getDefaultDB()) { c.setDbName(DATABASE_NAME); } addSelectColumns(c); int offset2 = numColumns + 1; #set ( $index = 2 ) #foreach ($fk in $table.ForeignKeys) ## want to cover this case, but the code is not there yet. #if ( !($fk.ForeignTableName.equals($table.Name)) ) #set ( $joinTable = $table.Database.getTable($fk.ForeignTableName) ) #set ( $joinClassName = $joinTable.JavaName ) #if (!$joinClassName.equals($excludeClassName)) #set ( $new_index = $index + 1 ) ${joinClassName}Peer.addSelectColumns(c); int offset$new_index = offset$index + ${joinClassName}Peer.numColumns; #set ( $index = $new_index ) #end #end #end #foreach ($col in $table.Columns) #set ( $cup=$col.Name.toUpperCase() ) #if($col.isBooleanInt()) // check for conversion from boolean to int if (c.containsKey($cup)) { Object possibleBoolean = c.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { c.add($cup, 1); } else { c.add($cup, 0); } } } #elseif ($col.isBooleanChar()) // check for conversion from boolean to Y/N if ( c.containsKey($cup) ) { Object possibleBoolean = c.get($cup); if (possibleBoolean instanceof Boolean) { if (((Boolean) possibleBoolean).booleanValue()) { c.add($cup, "Y"); } else { c.add($cup, "N"); } } } #end #end List rows = BasePeer.doSelect(c); List results = new ArrayList(); for (int i = 0; i < rows.size(); i++) { Record row = (Record)rows.get(i); #set ($classDecl = "Class") #if ($table.ChildrenColumn) $classDecl omClass = ${table.JavaName}Peer.getOMClass(row, 1); #else $classDecl omClass = ${table.JavaName}Peer.getOMClass(); #end #set ($classDecl = "") $className obj1 = ($className)${table.JavaName}Peer .row2Object(row, 1, omClass); #set ( $index = 1 ) #foreach ($fk in $table.ForeignKeys) ## want to cover this case, but the code is not there yet. #if ( !($fk.ForeignTableName.equals($table.Name)) ) #set ( $joinTable = $table.Database.getTable($fk.ForeignTableName) ) #set ( $joinClassName = $joinTable.JavaName ) #set ($interfaceName = $joinTable.JavaName) #if ($joinTable.Interface) #set ($interfaceName = $joinTable.Interface) #end #if (!$joinClassName.equals($excludeClassName)) #set ( $partJoinName = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ( $partJoinName = "$partJoinName$column.JavaName" ) #end #end #if ($partJoinName == "") #set ( $joinString = $interfaceName ) #set ( $collThisTable = "${className}s" ) #set ( $collThisTableMs = $className ) #else #set ( $joinString="${interfaceName}RelatedBy$partJoinName" ) #set ( $collThisTable="${className}sRelatedBy$partJoinName" ) #set ( $collThisTableMs="${className}RelatedBy$partJoinName" ) #end #set ( $index = $index + 1 ) #if ($joinTable.ChildrenColumn) $classDecl omClass = ${joinClassName}Peer.getOMClass(row, offset$index); #else $classDecl omClass = ${joinClassName}Peer.getOMClass(); #end #set ($classDecl = "") $joinClassName obj$index = ($joinClassName)${joinClassName}Peer .row2Object( row, offset$index, omClass); #if ($index == 2) boolean #end newObject = true; for (int j = 0; j < results.size(); j++) { $className temp_obj1 = ($className)results.get(j); $joinClassName temp_obj$index = ($joinClassName)temp_obj1.get${joinString}(); if (temp_obj${index}.getPrimaryKey().equals(obj${index}.getPrimaryKey())) { newObject = false; temp_obj${index}.add${collThisTableMs}(obj1); break; } } if (newObject) { obj${index}.init${collThisTable}(); obj${index}.add${collThisTableMs}(obj1); } #end #end #end results.add(obj1); } return results; } #end #end #end #end ## ------------------------------------------------------------ #if (!$table.isAlias()) /** * Returns the TableMap related to this peer. This method is not * needed for general use but a specific application could have a need. * * @throws TorqueException Any exceptions caught during processing will be * rethrown wrapped into a TorqueException. */ protected static TableMap getTableMap() throws TorqueException { return Torque.getDatabaseMap(DATABASE_NAME).getTable(TABLE_NAME); } #end ## ends if (!$table.isAlias()) }