## Licensed to the Apache Software Foundation (ASF) under one ## or more contributor license agreements. See the NOTICE file ## distributed with this work for additional information ## regarding copyright ownership. The ASF licenses this file ## to you 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. package ${packageBaseObject}; #if ($table.BaseClass == "") #set ($extendsBaseClass = "" ) #else #set ($extendsBaseClass = "extends $table.BaseClass" ) #end import java.math.BigDecimal; import java.sql.Connection; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; #if ($addSaveMethod) import org.apache.commons.lang.ObjectUtils; #end #if ($addIntakeRetrievable) import $retrievableInterface; #end #if (!$complexObjectModel) import org.apache.torque.Torque; #end import org.apache.torque.TorqueException; import org.apache.torque.map.TableMap; import org.apache.torque.om.BaseObject; import org.apache.torque.om.ComboKey; import org.apache.torque.om.DateKey; import org.apache.torque.om.NumberKey; import org.apache.torque.om.ObjectKey; import org.apache.torque.om.SimpleKey; import org.apache.torque.om.StringKey; import org.apache.torque.om.Persistent; import org.apache.torque.util.Criteria; import org.apache.torque.util.Transaction; #if ($packageBaseObject != $packageObject) import ${packageObject}.*; #end #if ($packageBaseObject != $packagePeer) import ${packagePeer}.*; #end #set ($currentPackage = $table.Database.Package) #foreach ($col in $table.Columns) #if ($col.isForeignKey()) #set ($fkPackage = $table.Database.getTable($col.RelatedTableName).getPackage()) #if (!$fkPackage.equals($currentPackage) ) #if ($subpackageObject) #set ($fkPackageObject = "${fkPackage}.${subpackageObject}") #else #set ($fkPackageObject = $fkPackage) #end #if ($subpackagePeer) #set ($fkPackagePeer = "${fkPackage}.${subpackagePeer}") #else #set ($fkPackagePeer = $fkPackage) #end #if (!$fkPackageObject.equals($currentPackage) ) import ${fkPackageObject}.${table.Database.getTable($col.RelatedTableName).JavaName}; #end #if (!$fkPackagePeer.equals($currentPackage) ) import ${fkPackagePeer}.${table.Database.getTable($col.RelatedTableName).JavaName}Peer; #end #if ($subpackageManager) import ${fkPackage}.${subpackageManager}.${table.Database.getTable($col.RelatedTableName).JavaName}Manager; #else import ${fkPackage}.${table.Database.getTable($col.RelatedTableName).JavaName}Manager; #end #end #end #end #if ($packageBaseObject != $packageManager) import ${packageManager}.*; #end #if ($complexObjectModel) #foreach ($col in $table.Columns) #if ($col.isForeignKey()) #set ( $tblFK = $table.Database.getTable($col.RelatedTableName) ) #if ($tblFK.Interface && $tblFK.Interface.indexOf('.') != -1) import $tblFK.Interface; #end #end #end #end #if ($generateBeans) $generator.parse("om/bean/ObjectBeanImports.vm",$path,"child",$child) #end /** #if ($table.description) * $!table.description * #end #if ($addTimeStamp) * This class was autogenerated by Torque on: * * [$now] * #end * You should not use this class directly. It should not even be * extended all references should be to $table.JavaName */ public abstract class $basePrefix$table.JavaName $extendsBaseClass #if ($addIntakeRetrievable) implements $retrievableInterface #end { #if ($addTimeStamp) /** Serial version */ private static final long serialVersionUID = ${now.Time}L; #end /** The Peer class */ private static final ${table.JavaName}Peer peer = new ${table.JavaName}Peer(); #if (!$table.isAlias()) ## member variables #foreach ($col in $table.Columns) #set ( $cjtype = $col.JavaNative ) #set ( $clo=$col.UncapitalisedJavaName ) #set ($defVal = "") #if ($col.DefaultValue && !$col.DefaultValue.equalsIgnoreCase("NULL") ) #set ( $quote = '' ) #if ( $cjtype == "String" ) #set ( $quote = '"' ) #end #set ( $defaultValue = $col.DefaultValue ) #if ( $cjtype == "boolean" || $cjtype == "Boolean" ) #if ( $defaultValue == "1" || $defaultValue == "Y" ) #set ( $defaultValue = "true" ) #elseif ( $defaultValue == "0" || $defaultValue == "N" ) #set ( $defaultValue = "false" ) #end #end #if ($cjtype == "BigDecimal") #set ($defVal = "= new BigDecimal($defaultValue)") #elseif ($cjtype == "NumberKey") #set ( $quote = '"' ) #set ($defVal = "= new NumberKey($quote$defaultValue$quote)") #elseif ($cjtype == "StringKey") #set ( $quote = '"' ) #set ($defVal = "= new StringKey($quote$defaultValue$quote)") #elseif ($cjtype == 'Byte') #set ($defVal = "= new ${cjtype}((byte) $defaultValue)") #elseif ($cjtype == "Short") #set ( $quote = '"' ) #set ($defVal = "= new Short($quote$defaultValue$quote)") #else #if (!$col.isPrimitive() && $cjtype != "String") #set ( $defaultValue = "new ${cjtype}($defaultValue)" ) #end #set ($defVal = " = $quote$defaultValue$quote") #end #end /** The value for the $clo field */ private $cjtype $clo$defVal; #end ## getter and setter methods #foreach ($col in $table.Columns) #set ( $cfc=$col.JavaName ) #set ( $clo=$col.UncapitalisedJavaName ) #set ( $cjtype = $col.JavaNative ) #if ( $col.isProtected() ) #set ( $accessLevel = "protected" ) #else #set ( $accessLevel = "public" ) #end /** * Get the $cfc * * @return $cjtype */ $accessLevel $cjtype ${col.GetterName}() { return $clo; } #set ( $throwsClause = "" ) #if ($complexObjectModel) #if ($col.isForeignKey()) #set ( $throwsClause = "throws TorqueException" ) #end #if ( $col.Referrers.size() > 0 ) #if ($throwsClause == "") #set ( $throwsClause = "throws TorqueException" ) #end #end #end /** * Set the value of $cfc * * @param v new value */ $accessLevel void ${col.SetterName}($cjtype v) $throwsClause { #if (($cjtype == "NumberKey") || ($cjtype == "StringKey") || ($cjtype == "DateKey")) if (v != null && v.getValue() == null) { // If this is an Objectkey than this set method is // probably storing the id of this object or some // associated object. If the objectKey value is null // then we convert the parameter to null so that this // property is consistently null to indicate that no // object is associated or defined. v = null; } #end #if ($addSaveMethod) #if ($col.isPrimitive()) if (this.$clo != v) #else if (!ObjectUtils.equals(this.$clo, v)) #end { this.$clo = v; setModified(true); } #else this.$clo = v; #end #if ($complexObjectModel) #if ($col.isForeignKey()) #set ( $tblFK = $table.Database.getTable($col.RelatedTableName) ) #set ($interfaceName = $tblFK.JavaName) #if ($tblFK.Interface) #set($lastdotpos = $tblFK.Interface.lastIndexOf('.')) #if($lastdotpos != -1) #set ($lastdotpos = $lastdotpos + 1) #set ($interfaceName = $tblFK.Interface.substring($lastdotpos)) #else #set ($interfaceName = $tblFK.Interface) #end #end #set ( $colFK = $tblFK.getColumn($col.RelatedColumnName) ) #if ($col.isMultipleFK() || $col.RelatedTableName.equals($table.Name)) #set ( $relCol = "" ) #foreach ($columnName in $col.foreignKey.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $relCol = "$relCol$column.JavaName" ) #end #if ($relCol != "") #set ( $relCol = "RelatedBy$relCol" ) #end #set ( $varName = "a${interfaceName}$relCol" ) #else #set ( $varName = "a$interfaceName" ) #end #if($colFK.Primitive) if ($varName != null && !(${varName}.${colFK.GetterName}() == v)) #else if ($varName != null && !ObjectUtils.equals(${varName}.${colFK.GetterName}(), v)) #end { $varName = null; } #end #foreach ($fk in $col.Referrers) #set ( $fkColName = $fk.ForeignLocalMapping.get($col.Name) ) #set ( $tblFK = $fk.Table ) #if ( !($tblFK.Name.equals($table.Name)) ) #set ( $colFK = $tblFK.getColumn($fkColName) ) #if ($colFK.isMultipleFK()) #set ( $collName = "coll${tblFK.JavaName}sRelatedBy$colFK.JavaName" ) #else #set ( $collName = "coll${tblFK.JavaName}s" ) #end #if ($objectIsCaching) // update associated $tblFK.JavaName if ($collName != null) { for (int i = 0; i < ${collName}.size(); i++) { ((${tblFK.JavaName}) ${collName}.get(i)) .${colFK.SetterName}(v); } } #end #end #end #end } #end #end ## association code #if ($complexObjectModel) #set($pVars = []) ## Array of object set method names for later reference. #set($aVars = []) ## Array of object field names for later reference. #foreach ($fk in $table.ForeignKeys) #set ( $tblFK = $table.Database.getTable($fk.ForeignTableName) ) #set ( $className = $tblFK.JavaName ) #set ($interfaceName = $tblFK.JavaName) #if ($tblFK.Interface) #set($lastdotpos = $tblFK.Interface.lastIndexOf('.')) #if($lastdotpos != -1) #set ($lastdotpos = $lastdotpos + 1) #set ($interfaceName = $tblFK.Interface.substring($lastdotpos)) #else #set ($interfaceName = $tblFK.Interface) #end #end #set ( $relCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #if ($column.isMultipleFK() || $fk.ForeignTableName.equals($table.Name)) #set ( $relCol = "$relCol$column.JavaName" ) #end #end #if ($relCol != "") #set ( $relCol = "RelatedBy$relCol" ) #end #set ( $pVarName = "$interfaceName$relCol" ) #set ( $varName = "a$pVarName" ) #set ( $retVal = $pVars.add($pVarName) ) #set ( $retVal = $aVars.add($varName) ) private $interfaceName $varName; /** * Declares an association between this object and a $interfaceName object * * @param v $interfaceName * @throws TorqueException */ public void set${pVarName}($interfaceName v) throws TorqueException { #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.LocalForeignMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) #set ( $fktype = $colFK.JavaNative ) #set ( $casttype = "" ) if (v == null) { #if($colFK.Primitive) #if ($fktype == "short") #set ($casttype = "(short)") #elseif($fktype == "byte") #set ($casttype = "(byte)") #end #set ($coldefval = "0") #set ($coldefval = $column.DefaultValue) ${column.SetterName}($casttype $coldefval); #else ${column.SetterName}(($column.JavaNative) null); #end } else { ${column.SetterName}(v.${colFK.GetterName}()); } #end $varName = v; } #set ( $and = "" ) #set ( $comma = "" ) #set ( $conditional = "" ) #set ( $arglist = "" ) #set ( $argsize = 0 ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $cjtype = $column.JavaNative ) #set ( $clo=$column.UncapitalisedJavaName ) #if ($cjtype == "short" || $cjtype == "int" || $cjtype == "long" || $cjtype == "byte" || $cjtype == "float" || $cjtype == "double") #set ( $conditional = "$conditional${and}this.${clo} != 0" ) #else #set ( $conditional = "$conditional${and}!ObjectUtils.equals(this.${clo}, null)" ) #end #set ( $arglist = "$arglist${comma}SimpleKey.keyFor(this.${clo})" ) #set ( $and = " && " ) #set ( $comma = ", " ) #set ( $argsize = $argsize + 1 ) #end /** * Returns the associated $interfaceName object. #if ($silentDbFetch) * If it was not retrieved before, the object is retrieved from * the database #end * * @return the associated $interfaceName object #if ($silentDbFetch) * @throws TorqueException #end */ public $interfaceName get${pVarName}() #if ($silentDbFetch) throws TorqueException #end { #if ($silentDbFetch) if ($varName == null && ($conditional)) { #if ($argsize > 1) SimpleKey[] keys = { $arglist }; $varName = ${interfaceName}Manager.getInstance(new ComboKey(keys)); #else $varName = ${interfaceName}Manager.getInstance($arglist); #end ## /* The following can be used instead of the line above to ## guarantee the related object contains a reference ## to this object, but this level of coupling ## may be undesirable in many circumstances. ## As it can lead to a db query with many results that may ## never be used. ## $className obj = ${className}Peer.retrieveByPK($arglist); ## obj.add${pCollName}(this); ## */ } #end return $varName; } /** * Return the associated $interfaceName object * If it was not retrieved before, the object is retrieved from * the database using the passed connection * * @param connection the connection used to retrieve the associated object * from the database, if it was not retrieved before * @return the associated $interfaceName object * @throws TorqueException */ public $interfaceName get${pVarName}(Connection connection) throws TorqueException { if ($varName == null && ($conditional)) { #if ($argsize > 1) SimpleKey[] keys = { $arglist }; ComboKey comboid = new ComboKey(keys); $varName = ${interfaceName}Manager.getCachedInstance(comboid); if ($varName == null) { #if ($tblFK.isAlias()) $varName = ${className}Peer.retrieve${className}ByPK(comboid, connection); #else $varName = ${className}Peer.retrieveByPK(comboid, connection); #end ${interfaceName}Manager.putInstance($varName); } #else $varName = ${interfaceName}Manager.getCachedInstance($arglist); if ($varName == null) { #if ($tblFK.isAlias()) $varName = ${className}Peer.retrieve${className}ByPK($arglist, connection); #else $varName = ${className}Peer.retrieveByPK($arglist, connection); #end ${interfaceName}Manager.putInstance($varName); } #end ## /* The following can be used instead of the line above to ## guarantee the related object contains a reference ## to this object, but this level of coupling ## may be undesirable in many circumstances. ## As it can lead to a db query with many results that may ## never be used. ## $className obj = ${className}Peer.retrieveByPK($arglist, connection); ## obj.add${pCollName}(this); ## */ } return $varName; } /** * Provides convenient way to set a relationship based on a * ObjectKey, for example * bar.setFooKey(foo.getPrimaryKey()) * #if ($fk.LocalColumns.size() > 1) * Note: It is important that the xml schema used to create this class * maintains consistency in the order of related columns between * $table.Name and ${tblFK.Name}. * If for some reason this is impossible, this method should be * overridden in $table.JavaName. #end */ public void set${pVarName}Key(ObjectKey key) throws TorqueException { #if ($fk.LocalColumns.size() > 1) SimpleKey[] keys = (SimpleKey[]) key.getValue(); #set ($i = 0) #foreach ($colName in $fk.LocalColumns) #set ($col = $table.getColumn($colName) ) #set ($fktype = $col.JavaNative) #if ($fktype == "short") ${col.SetterName}(((NumberKey) keys[$i]).shortValue()); #elseif($fktype == "int") ${col.SetterName}(((NumberKey) keys[$i]).intValue()); #elseif($fktype == "long") ${col.SetterName}(((NumberKey) keys[$i]).longValue()); #elseif($fktype == "BigDecimal") ${col.SetterName}(((NumberKey) keys[$i]).getBigDecimal()); #elseif($fktype == "byte") ${col.SetterName}(((NumberKey) keys[$i]).byteValue()); #elseif($fktype == "float") ${col.SetterName}(((NumberKey) keys[$i]).floatValue()); #elseif($fktype == "double") ${col.SetterName}(((NumberKey) keys[$i]).doubleValue()); #elseif($fktype == "Short") ${col.SetterName}(new Short(((NumberKey) keys[$i]).shortValue())); #elseif($fktype == "Integer") ${col.SetterName}(new Integer(((NumberKey) keys[$i]).intValue())); #elseif($fktype == "Long") ${col.SetterName}(new Long(((NumberKey) keys[$i]).longValue())); #elseif($fktype == "Byte") ${col.SetterName}(new Byte(((NumberKey) keys[$i]).byteValue())); #elseif($fktype == "Float") ${col.SetterName}(new Float(((NumberKey) keys[$i]).floatValue())); #elseif($fktype == "Double") ${col.SetterName}(new Double(((NumberKey) keys[$i]).doubleValue())); #elseif($fktype == "String") ${col.SetterName}(keys[$i].toString()); #elseif($fktype == "Date") ${col.SetterName}(((DateKey)keys[$i]).getDate()); #end #set ( $i = $i + 1 ) #end #else #set ($colName = $fk.LocalColumns.get(0)) #set ($col = $table.getColumn($colName) ) #set ($fktype = $col.JavaNative) #if ($fktype == "short") ${col.SetterName}(((NumberKey) key).shortValue()); #elseif($fktype == "int") ${col.SetterName}(((NumberKey) key).intValue()); #elseif($fktype == "long") ${col.SetterName}(((NumberKey) key).longValue()); #elseif($fktype == "BigDecimal") ${col.SetterName}(((NumberKey) key).getBigDecimal()); #elseif($fktype == "byte") ${col.SetterName}(((NumberKey) key).byteValue()); #elseif($fktype == "float") ${col.SetterName}(((NumberKey) key).floatValue()); #elseif($fktype == "double") ${col.SetterName}(((NumberKey) key).doubleValue()); #elseif($fktype == "Short") ${col.SetterName}(new Short(((NumberKey) key).shortValue())); #elseif($fktype == "Integer") ${col.SetterName}(new Integer(((NumberKey) key).intValue())); #elseif($fktype == "Long") ${col.SetterName}(new Long(((NumberKey) key).longValue())); #elseif($fktype == "Byte") ${col.SetterName}(new Byte(((NumberKey) key).byteValue())); #elseif($fktype == "Float") ${col.SetterName}(new Float(((NumberKey) key).floatValue())); #elseif($fktype == "Double") ${col.SetterName}(new Double(((NumberKey) key).doubleValue())); #elseif($fktype == "String") ${col.SetterName}(key.toString()); #elseif($fktype == "Date") ${col.SetterName}(((DateKey)key).getDate()); #end #end } #end ## end of foreach loop over foreign keys ## ## setup foreign key associations ## #foreach ($fk in $table.Referrers) #set ( $tblFK = $fk.Table ) #if ( !($tblFK.Name.equals($table.Name)) ) #set ( $className = $tblFK.JavaName ) #set ( $relatedByCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ($relatedByCol= "$relatedByCol$column.JavaName") #end #end #if ($relatedByCol == "") #set ( $suffix = "" ) #set ( $relCol = "${className}s" ) #set ( $relColMs = $className ) #else #set ( $suffix = "RelatedBy$relatedByCol" ) #set ( $relCol= "${className}sRelatedBy$relatedByCol" ) #set ( $relColMs= "${className}RelatedBy$relatedByCol" ) #end #set ( $collName = "coll$relCol" ) #if ($objectIsCaching) /** * Collection to store aggregation of $collName */ protected List#if($enableJava5Features)<$className>#end $collName; /** * Temporary storage of $collName to save a possible db hit in * the event objects are add to the collection, but the * complete collection is never requested. */ protected void init${relCol}() { if ($collName == null) { $collName = new ArrayList#if($enableJava5Features)<$className>#end(); } } #set ($interfaceName = $table.JavaName) #if ($table.Interface) #set($lastdotpos = $table.Interface.lastIndexOf('.')) #if($lastdotpos != -1) #set ($lastdotpos = $lastdotpos + 1) #set ($interfaceName = $table.Interface.substring($lastdotpos)) #else #set ($interfaceName = $table.Interface) #end #end /** * Method called to associate a $tblFK.JavaName object to this object * through the $className foreign key attribute * * @param l $className * @throws TorqueException */ public void add${relColMs}($className l) throws TorqueException { get${relCol}().add(l); l.set${interfaceName}${suffix}(($table.JavaName) this); } /** * Method called to associate a $tblFK.JavaName object to this object * through the $className foreign key attribute using connection. * * @param l $className * @throws TorqueException */ public void add${relColMs}($className l, Connection con) throws TorqueException { get${relCol}(con).add(l); l.set${interfaceName}${suffix}(($table.JavaName) this); } /** * The criteria used to select the current contents of $collName */ private Criteria last${relCol}Criteria = null; #end /** #if ($objectIsCaching) #if (!$silentDbFetch) * returns the Collection. #else * If this collection has already been initialized, returns * the collection. Otherwise returns the results of * get${relCol}(new Criteria()) #end #else * A wrapper for get${relCol}(new Criteria()) #end * * @return the collection of associated objects #if ($silentDbFetch) * @throws TorqueException #end */ public List#if($enableJava5Features)<$className>#end get${relCol}() #if ($silentDbFetch) throws TorqueException #end { #if ($objectIsCaching) #if (!$silentDbFetch) if (isNew()) { init${relCol}(); } #else if ($collName == null) { $collName = get${relCol}(new Criteria(10)); } #end return $collName; #else return get${relCol}(new Criteria(10)); #end } /** #if ($objectIsCaching) * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this $table.JavaName has previously #else * If this $table.JavaName has previously #end * been saved, it will retrieve related ${relCol} from storage. * If this $table.JavaName is new, it will return * an empty collection or the current collection, the criteria * is ignored on a new object. * * @throws TorqueException */ public List#if($enableJava5Features)<$className>#end get${relCol}(Criteria criteria) throws TorqueException { #if ($objectIsCaching) if ($collName == null) { if (isNew()) { $collName = new ArrayList#if($enableJava5Features)<$className>#end(); } else { #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}() ); #end $collName = ${className}Peer.doSelect(criteria); } } else { // criteria has no effect for a new object if (!isNew()) { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return the collection. #end #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end #if ($objectIsCaching) if (!last${relCol}Criteria.equals(criteria)) { $collName = ${className}Peer.doSelect(criteria); } } } last${relCol}Criteria = criteria; return $collName; #else return ${className}Peer.doSelect(criteria); #end } /** #if ($objectIsCaching) * If this collection has already been initialized, returns * the collection. Otherwise returns the results of * get${relCol}(new Criteria(),Connection) #else * A wrapper for get${relCol}(new Criteria(),Connection) #end * This method takes in the Connection also as input so that * referenced objects can also be obtained using a Connection * that is taken as input */ public List#if($enableJava5Features)<$className>#end get${relCol}(Connection con) throws TorqueException { #if ($objectIsCaching) if ($collName == null) { $collName = get${relCol}(new Criteria(10), con); } return $collName; #else return get${relCol}(new Criteria(10), con); #end } /** #if ($objectIsCaching) * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this $table.JavaName has previously #else * If this $table.JavaName has previously #end * been saved, it will retrieve related ${relCol} from storage. * If this $table.JavaName is new, it will return * an empty collection or the current collection, the criteria * is ignored on a new object. * This method takes in the Connection also as input so that * referenced objects can also be obtained using a Connection * that is taken as input */ public List#if($enableJava5Features)<$className>#end get${relCol}(Criteria criteria, Connection con) throws TorqueException { #if ($objectIsCaching) if ($collName == null) { if (isNew()) { $collName = new ArrayList#if($enableJava5Features)<$className>#end(); } else { #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end $collName = ${className}Peer.doSelect(criteria, con); } } else { // criteria has no effect for a new object if (!isNew()) { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return the collection. #end #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end #if ($objectIsCaching) if (!last${relCol}Criteria.equals(criteria)) { $collName = ${className}Peer.doSelect(criteria, con); } } } last${relCol}Criteria = criteria; return $collName; #else return ${className}Peer.doSelect(criteria, con); #end } #set ( $countFK = 0 ) #foreach ($dummyFK in $tblFK.ForeignKeys) #set ( $countFK = $countFK + 1 ) #end ## ------------------------------------------------------------ ## #if ($countFK >= 1) #set ( $lastTable = "" ) #foreach ($fk2 in $tblFK.ForeignKeys) ## Add join methods if the fk2 table is not this table or ## the fk2 table references this table multiple times. #set ( $doJoinGet = true ) #if ( $fk2.ForeignTableName.equals($table.Name) ) #set ( $doJoinGet = false ) #end #foreach ($columnName in $fk2.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ( $doJoinGet = true ) #end #end #set ( $tblFK2 = $table.Database.getTable($fk2.ForeignTableName) ) #if ($tblFK2.isForReferenceOnly()) #set ($doJoinGet = false) #else #set ($doJoinGet = true) #end #set ( $relatedByCol2 = "" ) #foreach ($columnName in $fk2.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set($relatedByCol2 = "$relatedByCol2$column.JavaName") #end #end #set ( $fkClassName = $tblFK2.JavaName ) ## do not generate code for self-referencing fk's, it would be ## good to do, but it is just not implemented yet. #if ($className == $fkClassName) #set ( $doJoinGet = false ) #end #if ($relatedByCol2 == "") #set ( $relCol2 = $fkClassName ) #else #set ($relCol2 = "${fkClassName}RelatedBy$relatedByCol2") #end #if ( $relatedByCol == "") #else #if ( $relatedByCol.equals($relatedByCol2) ) #set ( $doJoinGet = false ) #end #end #if ($doJoinGet) /** #if ($objectIsCaching) * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this $table.JavaName is new, it will return #else * If this $table.JavaName is new, this method will return #end * an empty collection; or if this $table.JavaName has previously * been saved, it will retrieve related ${relCol} from storage. * * 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}. */ protected List#if($enableJava5Features)<$className>#end get${relCol}Join${relCol2}(Criteria criteria) throws TorqueException { #if ($objectIsCaching) if ($collName == null) { if (isNew()) { $collName = new ArrayList#if($enableJava5Features)<$className>#end(); } else { #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end $collName = ${className}Peer.doSelectJoin${relCol2}(criteria); } } else { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return the collection. #end #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end #if ($objectIsCaching) if (!last${relCol}Criteria.equals(criteria)) { $collName = ${className}Peer.doSelectJoin${relCol2}(criteria); } } last${relCol}Criteria = criteria; return $collName; #else return ${className}Peer.doSelectJoin${relCol2}(criteria); #end } #end #end #end #end ## =========================================================== #* #if ($countFK > 2) /** #if ($objectIsCaching) * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this $table.JavaName is new, it will return #else * If this $table.JavaName is new, this method will return #end * an empty collection; or if this $table.JavaName has previously * been saved, it will retrieve related ${relCol} from storage. * * 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}. */ protected List#if($enableJava5Features)<$className>#end get${relCol}JoinAllExcept${table.JavaName}(Criteria criteria) throws TorqueException { #if ($objectIsCaching) if ($collName == null) { if (isNew()) { $collName = new ArrayList#if($enableJava5Features)<$className>#end(); } else { #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end $collName = ${className}Peer.doSelectJoinAllExcept${table.JavaName}${suffix}(criteria); } } else { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return the collection. #end #foreach ($columnName in $fk.ForeignColumns) #set ( $column = $table.getColumn($columnName) ) #set ( $colFKName = $fk.ForeignLocalMapping.get($columnName) ) #set ( $colFK = $tblFK.getColumn($colFKName) ) criteria.add(${className}Peer.${colFK.PeerJavaName}, ${column.GetterName}()); #end #if ($objectIsCaching) if (!last${relCol}Criteria.equals(criteria)) { $collName = ${className}Peer.doSelectJoinAllExcept${table.JavaName}${suffix}(criteria); } } last${relCol}Criteria = criteria; return $collName; #else return ${className}Peer.doSelectJoinAllExcept${table.JavaName}${suffix}(criteria); #end } #end *# ## ------------------------------------------------------------ #end ## ends foreach over table.Referrers #end ##ends the if(complexObjectModel) ## ## getByName code ## #if (!$table.isAlias() && $addGetByNameMethod) private static List#if($enableJava5Features)#end fieldNames = null; /** * Generate a list of field names. * * @return a list of field names */ public static synchronized List#if($enableJava5Features)#end getFieldNames() { if (fieldNames == null) { fieldNames = new ArrayList#if($enableJava5Features)#end(); #foreach ($col in $table.Columns) fieldNames.add("${col.JavaName}"); #end fieldNames = Collections.unmodifiableList(fieldNames); } return fieldNames; } /** * Retrieves a field from the object by field (Java) name passed in as a String. * * @param name field name * @return value */ public Object getByName(String name) { #foreach ($col in $table.Columns) #set ( $cjtype = $col.JavaNative ) if (name.equals("${col.JavaName}")) { #if ($cjtype == "int") return new Integer(${col.GetterName}()); #elseif ($cjtype == "long") return new Long(${col.GetterName}()); #elseif ($cjtype == "float") return new Float(${col.GetterName}()); #elseif ($cjtype == "double") return new Double(${col.GetterName}()); #elseif ($cjtype == "boolean") return Boolean.valueOf(${col.GetterName}()); #elseif ($cjtype == "short") return new Short(${col.GetterName}()); #elseif ($cjtype == "byte") return new Byte(${col.GetterName}()); #elseif ($cjtype == "char") return new Character(${col.GetterName}()); #else return ${col.GetterName}(); #end } #end return null; } /** * Set a field in the object by field (Java) name. * * @param name field name * @param value field value * @return True if value was set, false if not (invalid name / protected field). * @throws IllegalArgumentException if object type of value does not match field object type. * @throws TorqueException If a problem occures with the set[Field] method. */ public boolean setByName(String name, Object value ) throws TorqueException, IllegalArgumentException { #foreach ($col in $table.Columns) #set ( $cjtype = $col.JavaNative ) if (name.equals("${col.JavaName}")) { #if ( ${col.isPrimitive()} ) #if ($cjtype == "int") if (value == null || ! (Integer.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not an Integer object."); } ${col.SetterName}(((Integer) value).intValue()); #elseif ($cjtype == "long") if (value == null || ! (Long.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Long object."); } ${col.SetterName}(((Long) value).longValue()); #elseif ($cjtype == "float") if (value == null || ! (Float.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Float object."); } ${col.SetterName}(((Float) value).floatValue()); #elseif ($cjtype == "double") if (value == null || ! (Double.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Double object."); } ${col.SetterName}(((Double) value).doubleValue()); #elseif ($cjtype == "boolean") if (value == null || ! (Boolean.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Boolean object."); } ${col.SetterName}(((Boolean)value).booleanValue()); #elseif ($cjtype == "short") if (value == null || ! (Short.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Short object."); } ${col.SetterName}(((Short)value).shortValue()); #elseif ($cjtype == "byte") if (value == null || ! (Byte.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Byte object."); } ${col.SetterName}(((Byte) value).byteValue()); #elseif ($cjtype == "char") if (value == null || ! (Character.class.isInstance(value))) { throw new IllegalArgumentException("setByName: value parameter was null or not a Character object."); } ${col.SetterName}(((Character) value).charValue()); #end #else #if ( ${col.JavaNative} ) // Object fields can be null if (value != null && ! ${col.JavaNative}.class.isInstance(value)) { throw new IllegalArgumentException("Invalid type of object specified for value in setByName"); } ${col.SetterName}(($cjtype) value); #else // Hmm, using column type that can't be mapped to a Java object class, make this obvious. throw IllegalStateException("Can't determine Java Object type for column, ${col.Name}!"); #end #end return true; } #end return false; } /** * Retrieves a field from the object by name passed in * as a String. The String must be one of the static * Strings defined in this Class' Peer. * * @param name peer name * @return value */ public Object getByPeerName(String name) { #foreach ($col in $table.Columns) #set ( $cjtype = $col.JavaNative ) if (name.equals(${table.JavaName}Peer.${col.PeerJavaName})) { #if ($cjtype == "int") return new Integer(${col.GetterName}()); #elseif ($cjtype == "long") return new Long(${col.GetterName}()); #elseif ($cjtype == "float") return new Float(${col.GetterName}()); #elseif ($cjtype == "double") return new Double(${col.GetterName}()); #elseif ($cjtype == "boolean") return Boolean.valueOf(${col.GetterName}()); #elseif ($cjtype == "short") return new Short(${col.GetterName}()); #elseif ($cjtype == "byte") return new Byte(${col.GetterName}()); #elseif ($cjtype == "char") return new Character(${col.GetterName}()); #else return ${col.GetterName}(); #end } #end return null; } /** * Set field values by Peer Field Name * * @param name field name * @param value field value * @return True if value was set, false if not (invalid name / protected field). * @throws IllegalArgumentException if object type of value does not match field object type. * @throws TorqueException If a problem occures with the set[Field] method. */ public boolean setByPeerName(String name, Object value) throws TorqueException, IllegalArgumentException { #foreach ($col in $table.Columns) if (${table.JavaName}Peer.${col.PeerJavaName}.equals(name)) { return setByName("${col.JavaName}", value); } #end return false; } /** * Retrieves a field from the object by Position as specified * in the xml schema. Zero-based. * * @param pos position in xml schema * @return value */ public Object getByPosition(int pos) { #set ($i = 0) #foreach ($col in $table.Columns) #set ( $cjtype = $col.JavaNative ) if (pos == $i) { #if ($cjtype == "int") return new Integer(${col.GetterName}()); #elseif ($cjtype == "long") return new Long(${col.GetterName}()); #elseif ($cjtype == "float") return new Float(${col.GetterName}()); #elseif ($cjtype == "double") return new Double(${col.GetterName}()); #elseif ($cjtype == "boolean") return Boolean.valueOf(${col.GetterName}()); #elseif ($cjtype == "short") return new Short(${col.GetterName}()); #elseif ($cjtype == "byte") return new Byte(${col.GetterName}()); #elseif ($cjtype == "char") return new Character(${col.GetterName}()); #else return ${col.GetterName}(); #end } #set ($i = $i + 1) #end return null; } /** * Set field values by its position (zero based) in the XML schema. * * @param position The field position * @param value field value * @return True if value was set, false if not (invalid position / protected field). * @throws IllegalArgumentException if object type of value does not match field object type. * @throws TorqueException If a problem occures with the set[Field] method. */ public boolean setByPosition(int position, Object value) throws TorqueException, IllegalArgumentException { #set ($i = 0) #foreach ($col in $table.Columns) if (position == $i) { return setByName("${col.JavaName}", value); } #set ( $i = $i + 1) #end return false; } #end ## ends the if(addGetByNameMethod) #if (!$table.isAlias() && $addSaveMethod) /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. * * @throws $saveException */ public void save() throws $saveException { #if ($complexObjectModel) save(${table.JavaName}Peer.DATABASE_NAME); #else if (isModified()) { if (isNew()) { ${table.JavaName}Peer.doInsert(($table.JavaName) this); setNew(false); } else { ${table.JavaName}Peer.doUpdate(($table.JavaName) this); } } #end } /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. #if ($complexObjectModel) * Note: this code is here because the method body is * auto-generated conditionally and therefore needs to be * in this file instead of in the super class, BaseObject. #end * * @param dbName * @throws TorqueException */ public void save(String dbName) throws TorqueException { Connection con = null; #if ($complexObjectModel) try { con = Transaction.begin(dbName); save(con); Transaction.commit(con); } catch(TorqueException e) { Transaction.safeRollback(con); throw e; } #else if (isModified()) { try { con = Torque.getConnection(dbName); if (isNew()) { ${table.JavaName}Peer .doInsert(($table.JavaName) this, con); setNew(false); } else { ${table.JavaName}Peer .doUpdate(($table.JavaName) this, con); } } finally { Torque.closeConnection(con); } } #end } #if ($complexObjectModel) /** flag to prevent endless save loop, if this object is referenced by another object which falls in this transaction. */ private boolean alreadyInSave = false; #end /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. This method * is meant to be used as part of a transaction, otherwise use * the save() method and the connection details will be handled * internally * * @param con * @throws TorqueException */ public void save(Connection con) throws TorqueException { #if ($complexObjectModel) if (!alreadyInSave) { alreadyInSave = true; #* FIXME! the following code can cause an infinite loop, needs more thought shows the infinite loop: System.out.println("Entering save for " + this); #if ($pVars.size() != 0) // We call the save method on the following object(s) if they // were passed to this object by their coresponding set // method. This object relates to these object(s) by a // foreign key reference. If the object(s) being saved were // new to the database, an insert was performed, then they may // have a new PrimaryKey. We call the coresponding set method // for the given object(s) to set this object's Id reference // to this new Primary key so that it will be saved. #foreach ($aVarName in $aVars) #set($i = $velocityCount - 1) if ($aVarName != null) { ${aVarName}.save(con); set$pVars.get($i)($aVarName); } #end #end *# #end // If this object has been modified, then save it to the database. if (isModified()) { if (isNew()) { ${table.JavaName}Peer.doInsert(($table.JavaName) this, con); setNew(false); } else { ${table.JavaName}Peer.doUpdate(($table.JavaName) this, con); } #if ($table.PrimaryKey.size() > 0) #set ($tableHasPrimaryKey = true) #else #set ($tableHasPrimaryKey = false) #end #if ($tableHasPrimaryKey) #set ($interfaceName = $table.JavaName) #if ($table.Interface) #set($lastdotpos = $table.Interface.lastIndexOf('.')) #if($lastdotpos != -1) #set ($lastdotpos = $lastdotpos + 1) #set ($interfaceName = $table.Interface.substring($lastdotpos)) #else #set ($interfaceName = $table.Interface) #end #end if (isCacheOnSave()) { ${interfaceName}Manager.putInstance(this); } #end } #if ($complexObjectModel) #foreach ($fk in $table.Referrers) #set ( $tblFK = $fk.Table ) #if ( !($tblFK.Name.equals($table.Name)) ) #set ( $className = $tblFK.JavaName ) #set ( $relCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ( $relCol = "$relCol$column.JavaName" ) #end #end #if ($relCol == "") #set ( $relCol = "${className}s" ) #else #set ( $relCol = "${className}sRelatedBy$relCol" ) #end #set ( $collName = "coll$relCol" ) #if ($objectIsCaching) if ($collName != null) { for (int i = 0; i < ${collName}.size(); i++) { ((${className}) ${collName}.get(i)).save(con); } } #end #end #end #end #if ($complexObjectModel) alreadyInSave = false; } #end } #end #if ($tableHasPrimaryKey) /** * Specify whether to cache the object after saving to the db. * This method returns true */ protected boolean isCacheOnSave() { return true; } #end ## PrimaryKey methods #if (!$table.isAlias()) #set ( $throwsClause = "" ) #set ( $argList = "" ) #set ( $argList2 = "" ) #set ( $comma = "" ) #foreach ($col in $table.PrimaryKey) #if ($complexObjectModel) #if ( $col.isForeignKey() || ($col.Referrers.size() > 0) ) #set ( $throwsClause = "throws TorqueException" ) #end #end #set ( $clo=$col.UncapitalisedJavaName ) #set ( $cjtype = $col.JavaNative ) #set ($argList = "${argList}$comma $cjtype $clo") #set ($argList2 = "${argList2}$comma String $clo") #set ( $comma = "," ) #end #if ($table.PrimaryKey.size() == 1) #set ($col = $table.PrimaryKey.get(0) ) #set ( $clo=$col.UncapitalisedJavaName ) #set ( $cjtype= $col.JavaNative ) /** * Set the PrimaryKey using ObjectKey. * * @param key $clo ObjectKey */ public void setPrimaryKey(ObjectKey key) $throwsClause { #if ($cjtype == "short") ${col.SetterName}(((NumberKey) key).shortValue()); #elseif($cjtype == "int") ${col.SetterName}(((NumberKey) key).intValue()); #elseif($cjtype == "long") ${col.SetterName}(((NumberKey) key).longValue()); #elseif($cjtype == "BigDecimal") ${col.SetterName}(((NumberKey) key).getBigDecimal()); #elseif($cjtype == "byte") ${col.SetterName}(((NumberKey) key).byteValue()); #elseif($cjtype == "float") ${col.SetterName}(((NumberKey) key).floatValue()); #elseif($cjtype == "double") ${col.SetterName}(((NumberKey) key).doubleValue()); #elseif($cjtype == "Short") ${col.SetterName}(new Short(((NumberKey) key).shortValue())); #elseif($cjtype == "Integer") ${col.SetterName}(new Integer(((NumberKey) key).intValue())); #elseif($cjtype == "Long") ${col.SetterName}(new Long(((NumberKey) key).longValue())); #elseif($cjtype == "Byte") ${col.SetterName}(new Byte(((NumberKey) key).byteValue())); #elseif($cjtype == "Float") ${col.SetterName}(new Float(((NumberKey) key).floatValue())); #elseif($cjtype == "Double") ${col.SetterName}(new Double(((NumberKey) key).doubleValue())); #elseif($cjtype == "String") ${col.SetterName}(key.toString()); #elseif($cjtype == "Date") ${col.SetterName}(((DateKey) key).getDate()); #else ${col.SetterName}(($cjtype) key); #end } /** * Set the PrimaryKey using a String. * * @param key */ public void setPrimaryKey(String key) $throwsClause { #if ($cjtype == "short") ${col.SetterName}(Short.parseShort(key)); #elseif($cjtype == "int") ${col.SetterName}(Integer.parseInt(key)); #elseif($cjtype == "long") ${col.SetterName}(Long.parseLong(key)); #elseif($cjtype == "BigDecimal") ${col.SetterName}(new BigDecimal(key)); #elseif($cjtype == "byte") ${col.SetterName}(Byte.parseByte(key)); #elseif($cjtype == "float") ${col.SetterName}(Float.parseFloat(key)); #elseif($cjtype == "double") ${col.SetterName}(Double.parseDouble(key)); #elseif($cjtype == "Short") ${col.SetterName}(new Short(key)); #elseif($cjtype == "Integer") ${col.SetterName}(new Integer(key)); #elseif($cjtype == "Long") ${col.SetterName}(new Long(key)); #elseif($cjtype == "Byte") ${col.SetterName}(new Byte(key)); #elseif($cjtype == "Float") ${col.SetterName}(new Float(key)); #elseif($cjtype == "Double") ${col.SetterName}(new Double(key)); #elseif($cjtype == "String") ${col.SetterName}(key); #elseif($cjtype == "Date") ${col.SetterName}(new Date(key)); #else ${col.SetterName}(new ${cjtype}(key)); #end } #elseif ($table.PrimaryKey.size() > 1) private final SimpleKey[] pks = new SimpleKey[$table.PrimaryKey.size()]; private final ComboKey comboPK = new ComboKey(pks); /** * Set the PrimaryKey with an ObjectKey * * @param key */ public void setPrimaryKey(ObjectKey key) throws TorqueException { SimpleKey[] keys = (SimpleKey[]) key.getValue(); #set ($i = 0) #foreach ($pk in $table.PrimaryKey) #set ($pktype = $pk.JavaNative) #if ($pktype == "short") ${pk.SetterName}(((NumberKey)keys[$i]).shortValue()); #elseif($pktype == "int") ${pk.SetterName}(((NumberKey)keys[$i]).intValue()); #elseif($pktype == "long") ${pk.SetterName}(((NumberKey)keys[$i]).longValue()); #elseif($pktype == "BigDecimal") ${pk.SetterName}(((NumberKey)keys[$i]).getBigDecimal()); #elseif($pktype == "byte") ${pk.SetterName}(((NumberKey)keys[$i]).byteValue()); #elseif($pktype == "float") ${pk.SetterName}(((NumberKey)keys[$i]).floatValue()); #elseif($pktype == "double") ${pk.SetterName}(((NumberKey)keys[$i]).doubleValue()); #elseif($pktype == "Short") ${pk.SetterName}(new Short(((NumberKey)keys[$i]).shortValue())); #elseif($pktype == "Integer") ${pk.SetterName}(new Integer(((NumberKey)keys[$i]).intValue())); #elseif($pktype == "Long") ${pk.SetterName}(new Long(((NumberKey)keys[$i]).longValue())); #elseif($pktype == "Byte") ${pk.SetterName}(new Byte(((NumberKey)keys[$i]).byteValue())); #elseif($pktype == "Float") ${pk.SetterName}(new Float(((NumberKey)keys[$i]).floatValue())); #elseif($pktype == "Double") ${pk.SetterName}(new Double(((NumberKey)keys[$i]).doubleValue())); #elseif($pktype == "String") ${pk.SetterName}(keys[$i].toString()); #elseif($pktype == "Date") ${pk.SetterName}(((DateKey)keys[$i]).getDate()); #end #set ( $i = $i + 1 ) #end } /** * Set the PrimaryKey using SimpleKeys. * #foreach ($col in $table.PrimaryKey) #set ( $clo=$col.UncapitalisedJavaName ) #set ( $cjtype= $col.JavaNative ) * @param $clo $cjtype #end */ public void setPrimaryKey($argList) $throwsClause { #foreach ($col in $table.PrimaryKey) ${col.SetterName}($col.UncapitalisedJavaName); #end } /** * Set the PrimaryKey using a String. */ public void setPrimaryKey(String key) throws TorqueException { setPrimaryKey(new ComboKey(key)); } #end /** * returns an id that differentiates this object from others * of its class. */ public ObjectKey getPrimaryKey() { #if ($table.PrimaryKey.size() == 1) return SimpleKey.keyFor(${table.PrimaryKey.get(0).GetterName}()); #elseif ($table.PrimaryKey.size() > 1) #set ($i = 0) #foreach ($pk in $table.PrimaryKey) pks[$i] = SimpleKey.keyFor(${pk.GetterName}()); #set ($i = $i +1) #end return comboPK; #else return null; #end } #end ##ends if(!$table.isAlias()) #if ($addIntakeRetrievable) /** * get an id that differentiates this object from others * of its class. */ public String getQueryKey() { if (getPrimaryKey() == null) { return ""; } else { return getPrimaryKey().toString(); } } /** * set an id that differentiates this object from others * of its class. */ public void setQueryKey(String key) throws TorqueException { ## Work around the fact that BaseObject.setPrimaryKey() declares ## that it throws Exception instead of TorqueException. #if (!$tableHasPrimaryKey) try { #end setPrimaryKey(key); #if (!$tableHasPrimaryKey) } catch (Exception e) { throw new TorqueException("Unable to set query key", e); } #end } #end #if (!$table.isAlias()) /** * Makes a copy of this object. * It creates a new object filling in the simple attributes. #if ($complexObjectModel) * It then fills all the association collections and sets the * related objects to isNew=true. #end */ #if ($table.isAbstract()) public abstract $table.JavaName copy() throws TorqueException; #else public $table.JavaName copy() throws TorqueException { #if ($complexObjectModel) return copy(true); #else return copyInto(new ${table.JavaName}()); #end } #end /** * Makes a copy of this object using connection. * It creates a new object filling in the simple attributes. #if ($complexObjectModel) * It then fills all the association collections and sets the * related objects to isNew=true. #end */ #if ($table.isAbstract()) public abstract $table.JavaName copy(Connection con) throws TorqueException; #else public $table.JavaName copy(Connection con) throws TorqueException { #if ($complexObjectModel) return copy(true, con); #else return copyInto(new ${table.JavaName}(), con); #end } #end #if ($complexObjectModel) #if (!$table.isAbstract()) /** * Makes a copy of this object. * It creates a new object filling in the simple attributes. * If the parameter deepcopy is true, it then fills all the * association collections and sets the related objects to * isNew=true. * * @param deepcopy whether to copy the associated objects. */ public $table.JavaName copy(boolean deepcopy) throws TorqueException { return copyInto(new ${table.JavaName}(), deepcopy); } #end #end #if ($complexObjectModel) #if (!$table.isAbstract()) /** * Makes a copy of this object using connection. * It creates a new object filling in the simple attributes. * If the parameter deepcopy is true, it then fills all the * association collections and sets the related objects to * isNew=true. * * @param deepcopy whether to copy the associated objects. */ public $table.JavaName copy(boolean deepcopy, Connection con) throws TorqueException { return copyInto(new ${table.JavaName}(), deepcopy, con); } #end #end #if ($complexObjectModel) /** * Fills the copyObj with the contents of this object. * The associated objects are also copied and treated as new objects. * @param copyObj the object to fill. */ protected $table.JavaName copyInto($table.JavaName copyObj) throws TorqueException { return copyInto(copyObj, true); } #end #if ($complexObjectModel) /** * Fills the copyObj with the contents of this object using connection. * The associated objects are also copied and treated as new objects. * @param copyObj the object to fill. */ protected $table.JavaName copyInto($table.JavaName copyObj, Connection con) throws TorqueException { return copyInto(copyObj, true, con); } #end /** * Fills the copyObj with the contents of this object. #if ($complexObjectModel) * If deepcopy is true, The associated objects are also copied * and treated as new objects. #end * @param copyObj the object to fill. #if ($complexObjectModel) * @param deepcopy whether the associated objects should be copied. #end */ #if ($complexObjectModel) protected $table.JavaName copyInto($table.JavaName copyObj, boolean deepcopy) throws TorqueException #else protected $table.JavaName copyInto($table.JavaName copyObj) throws TorqueException #end { #foreach ($col in $table.Columns) copyObj.${col.SetterName}($col.UncapitalisedJavaName); #end #foreach ($col in $table.Columns) #if ($col.isPrimaryKey()) #if($col.Primitive) #set ($fktype = $col.JavaNative) #set ($casttype = "") #if ($fktype == "short") #set ($casttype = "(short)") #elseif($fktype == "byte") #set ($casttype = "(byte)") #end #set ($coldefval = "0") #set ($coldefval = $col.DefaultValue) copyObj.${col.SetterName}($casttype $coldefval); #else #set ( $pkid = "null" ) #set ( $cjtype = $col.JavaNative ) copyObj.${col.SetterName}((${cjtype})${pkid}); #end #end #end #if ($complexObjectModel) if (deepcopy) { #foreach ($fk in $table.Referrers) #set ( $tblFK = $fk.Table ) #if ( !($tblFK.Name.equals($table.Name)) ) #set ( $className = $tblFK.JavaName ) #set ( $relCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ( $relCol = "$relCol$column.JavaName" ) #end #end #if ($objectIsCaching) #if ($relCol == "") #set ( $pCollName = "${className}s" ) #set ( $pCollNameNoS = "${className}" ) #else #set ( $pCollName = "${className}sRelatedBy$relCol" ) #set ( $pCollNameNoS = "${className}RelatedBy$relCol" ) #end List#if($enableJava5Features)<$className>#end v${pCollName} = get${pCollName}(); ## v can be null if the generator property ## torque.silentDbFetch is set to false if (v${pCollName} != null) { for (int i = 0; i < v${pCollName}.size(); i++) { ${className} obj = #if(!$enableJava5Features)($className)#end v${pCollName}.get(i); copyObj.add$pCollNameNoS(obj.copy()); } } else { copyObj.coll${pCollName} = null; } #end #end #end } #end return copyObj; } /** * Fills the copyObj with the contents of this object using connection. #if ($complexObjectModel) * If deepcopy is true, The associated objects are also copied * and treated as new objects. #end * @param copyObj the object to fill. #if ($complexObjectModel) * @param deepcopy whether the associated objects should be copied. #end */ #if ($complexObjectModel) protected $table.JavaName copyInto($table.JavaName copyObj, boolean deepcopy, Connection con) throws TorqueException #else protected $table.JavaName copyInto($table.JavaName copyObj, Connection con) throws TorqueException #end { #foreach ($col in $table.Columns) copyObj.${col.SetterName}($col.UncapitalisedJavaName); #end #foreach ($col in $table.Columns) #if ($col.isPrimaryKey()) #if($col.Primitive) #set ($fktype = $col.JavaNative) #set ($casttype = "") #if ($fktype == "short") #set ($casttype = "(short)") #elseif($fktype == "byte") #set ($casttype = "(byte)") #end #set ($coldefval = "0") #set ($coldefval = $col.DefaultValue) copyObj.${col.SetterName}($casttype $coldefval); #else #set ( $pkid = "null" ) #set ( $cjtype = $col.JavaNative ) copyObj.${col.SetterName}((${cjtype})${pkid}); #end #end #end #if ($complexObjectModel) if (deepcopy) { #foreach ($fk in $table.Referrers) #set ( $tblFK = $fk.Table ) #if ( !($tblFK.Name.equals($table.Name)) ) #set ( $className = $tblFK.JavaName ) #set ( $relCol = "" ) #foreach ($columnName in $fk.LocalColumns) #set ( $column = $tblFK.getColumn($columnName) ) #if ($column.isMultipleFK()) #set ( $relCol = "$relCol$column.JavaName" ) #end #end #if ($objectIsCaching) #if ($relCol == "") #set ( $pCollName = "${className}s" ) #set ( $pCollNameNoS = "${className}" ) #else #set ( $pCollName = "${className}sRelatedBy$relCol" ) #set ( $pCollNameNoS = "${className}RelatedBy$relCol" ) #end List#if($enableJava5Features)<$className>#end v${pCollName} = get${pCollName}(con); ## v can be null if the generator property ## torque.silentDbFetch is set to false if (v${pCollName} != null) { for (int i = 0; i < v${pCollName}.size(); i++) { ${className} obj = #if(!$enableJava5Features)($className)#end v${pCollName}.get(i); copyObj.add$pCollNameNoS(obj.copy(con), con); } } else { copyObj.coll${pCollName} = null; } #end #end #end } #end return copyObj; } #end #if (!$table.isAlias()) /** * returns a peer instance associated with this om. Since Peer classes * are not to have any instance attributes, this method returns the * same instance for all member of this class. The method could therefore * be static, but this would prevent one from overriding the behavior. */ public ${table.JavaName}Peer getPeer() { return peer; } #end #if (!$table.isAlias()) /** * Retrieves the TableMap object related to this Table data without * compiler warnings of using getPeer().getTableMap(). * * @return The associated TableMap object. */ public TableMap getTableMap() throws TorqueException { return ${table.JavaName}Peer.getTableMap(); } #end #if ($generateBeans) $generator.parse("om/bean/ObjectBeanMethods.vm",$path,"child",$child) #end public String toString() { StringBuffer str = new StringBuffer(); str.append("$table.JavaName:\n"); #foreach ($col in $table.Columns) str.append("$col.JavaName = ") #set ( $cjtype = $col.JavaNative ) #if ( $cjtype == "byte[]" ) .append("") #else .append(${col.GetterName}()) #end .append("\n"); #end return(str.toString()); } }