You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2011/06/25 20:36:04 UTC

svn commit: r1139579 [2/2] - in /db/torque/torque4/trunk/torque-templates/src/main: java/org/apache/torque/templates/ java/org/apache/torque/templates/transformer/om/ resources/org/apache/torque/templates/om/conf/ resources/org/apache/torque/templates/...

Added: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillReferencingObjects.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillReferencingObjects.vm?rev=1139579&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillReferencingObjects.vm (added)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillReferencingObjects.vm Sat Jun 25 18:36:03 2011
@@ -0,0 +1,228 @@
+## 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.
+##
+######
+##
+## version $Id: MultiExtendBean.vm 240328 2005-08-26 22:02:48 +0200 (Fr, 26 Aug 2005) tfischer $
+##
+## Creates the fillXXX methods for referencing Objects for the base peer
+## implementation.
+## 
+## This template expects the current source element to be a "foreign-field" 
+## element from the schema, processed by the OMTransformer.
+## The options and the attributes of the current source element must be set
+## as velocity variables.  
+##
+#set ( $foreignKeyElement = $torqueGen.getParent() )
+#set ( $foreignKeyGetter = $foreignKeyElement.getAttribute("foreignKeyGetter") )
+#set ( $referencesPrimaryKey = $foreignKeyElement.getAttribute("referencesPrimaryKey") )
+#set ( $foreignKeyReferences = $foreignKeyElement.getChildren("reference") )
+#set ( $localTableElement = $foreignKeyElement.getChild("table") )
+#set ( $localTableField = $localTableElement.getAttribute("field") )
+#set ( $localDbObjectClassName = $localTableElement.getAttribute("dbObjectClassName") )
+#set ( $localPeerClassName = $localTableElement.getAttribute("peerClassName") )
+#set ( $primaryKeyColumnElements = $localTableElement.getChild("primary-keys").getChildren("column"))
+#set ( $foreignTableElement = $foreignKeyElement.getParent() )
+#set ( $foreignTablePeerClassName = $foreignTableElement.getAttribute("peerClassName") )
+    /** 
+     * Fills the referenced ${fieldContainedType} objects in the ${field} fields
+     * of the objects in <code>toFill</code> by reading the database.
+     *
+     * @param toFill Contains the objects to fill, not null,
+     *        may not contain null.
+     *
+     * @return all read ${fieldType} objects.
+     *
+     * @throws TorqueException if an error querying the database occurs.
+     * @throws NullPointerException if toFill is null or contains null elements.
+     */
+    public List<${fieldContainedType}> ${filler}(
+            Collection<${localDbObjectClassName}> toFill)
+        throws TorqueException
+    {
+        Connection connection = null;
+        try
+        {
+            connection = Transaction.beginOptional(
+                    ${localPeerClassName}.DATABASE_NAME,
+                    true);
+            List<${fieldContainedType}> result = ${filler}(toFill, connection);
+            Transaction.commit(connection);
+            connection = null;
+            return result;
+        }
+        finally
+        {
+            if (connection != null)
+            {
+                Transaction.safeRollback(connection);
+            }
+        }
+    }
+
+    /** 
+     * Fills the referenced ${fieldContainedType} objects in the ${field} fields
+     * of the objects in <code>toFill</code> by reading the database.
+     *
+     * @param toFill Contains the objects to fill, not null,
+     *        may not contain null.
+     * @param connection the database connection to use, not null.
+     *
+     * @return all read ${fieldType} objects.
+     *
+     * @throws TorqueException if an error querying the database occurs.
+     * @throws NullPointerException if toFill is null or contains null elements.
+     */
+    public List<${fieldContainedType}> ${filler}(
+            Collection<${localDbObjectClassName}> toFill,
+            Connection connection)
+        throws TorqueException
+    {
+        Set<ObjectKey> localKeySet = new HashSet<ObjectKey>();
+        for (${localDbObjectClassName} current${localDbObjectClassName} : toFill)
+        {
+#if ($referencesPrimaryKey)
+            ObjectKey localKey = current${localDbObjectClassName}.getPrimaryKey();
+#else
+  #if ($foreignKeyReferences.size() == 1)
+    #set ( $localReferenceColumnElement = $foreignKeyReferences.get(0).getChild("foreign-column").getChild("column") )
+    #set ( $localFieldGetter = $localReferenceColumnElement.getAttribute("getter") )
+            ObjectKey localKey = SimpleKey.keyFor(current${localDbObjectClassName}.${localFieldGetter}());
+  #else
+            SimpleKey[] keyElementArray = new SimpleKey[$foreignKeyReferences.size()];
+    #set ($i = 0)
+    #foreach ($referenceElement in $foreignKeyReferences)
+      #set ( $localReferenceColumnElement = $referenceElement.getChild("foreign-column").getChild("column") )
+      #set ( $localFieldGetter = $localReferenceColumnElement.getAttribute("getter") )
+            keyElementArray[$i] = SimpleKey.keyFor(
+                    current${localDbObjectClassName}.${localFieldGetter}());
+      #set ($i = $i + 1)
+    #end
+            ObjectKey localKey = new ComboKey(keyElementArray);
+  #end
+#end
+            localKeySet.add(localKey);
+        }
+
+        int fillerChunkSize = getFillerChunkSize();
+        Iterator<ObjectKey> localKeyIt = localKeySet.iterator();
+        List<ObjectKey> localKeyListChunk
+                = new ArrayList<ObjectKey>(fillerChunkSize);
+        Map<ObjectKey, List<${fieldContainedType}>> fkTo${fieldContainedType}Map
+                = new HashMap<ObjectKey, List<${fieldContainedType}>>();
+        while (localKeyIt.hasNext())
+        {
+            ObjectKey currentKey = localKeyIt.next();
+            localKeyListChunk.add(currentKey);
+            if (localKeyListChunk.size() < fillerChunkSize
+                && localKeyIt.hasNext())
+            {
+                continue;
+            }
+
+            Criteria criteria = new Criteria();
+#if ($foreignKeyReferences.size() == 1)
+  #set ( $columnElement = $foreignKeyReferences.get(0).getChild("local-column").getChild("column") )
+  #set ( $peerColumnName = $columnElement.getAttribute("peerColumnName"))
+            criteria.addIn(${foreignTablePeerClassName}.${peerColumnName}, localKeyListChunk);
+#else
+            for (ObjectKey localKey : localKeyListChunk)
+            {
+                SimpleKey[] keys = (SimpleKey[]) localKey.getValue();
+  #set ( $i = 0 )
+  #foreach ($referenceElement in $foreignKeyReferences)
+  #set ( $columnElement = $referenceElement.getChild("local-column").getChild("column") )
+    #set ( $peerColumnName = $columnElement.getAttribute("peerColumnName"))
+                    Criteria.Criterion c$i = criteria.getNewCriterion(
+                        ${foreignTablePeerClassName}.${peerColumnName}, 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
+            List<${fieldContainedType}> referenced${fieldContainedType}List
+                 = ${foreignTablePeerClassName}.doSelect(
+                     criteria,
+                     connection);
+            for (${fieldContainedType} referencedObject : referenced${fieldContainedType}List)
+            {
+                ObjectKey foreignKey = referencedObject.${foreignKeyGetter}();
+                List<${fieldContainedType}> objectsWithForeignKey 
+                    = fkTo${fieldContainedType}Map.get(foreignKey);
+                if (objectsWithForeignKey == null)
+                {
+                    objectsWithForeignKey = new ArrayList<${fieldContainedType}>();
+                    fkTo${fieldContainedType}Map.put(
+                        foreignKey,
+                        objectsWithForeignKey);
+                }
+                objectsWithForeignKey.add(referencedObject);
+            }
+            localKeyListChunk.clear();
+        }
+
+        List<${fieldContainedType}> result = new ArrayList<${fieldContainedType}>();
+        for (${localDbObjectClassName} objectToFill : toFill)
+        {
+            objectToFill.${initializer}();
+            objectToFill.${getter}().clear();
+#if ($referencesPrimaryKey)
+            ObjectKey localKey = objectToFill.getPrimaryKey();
+#else
+  #if ($foreignKeyReferences.size() == 1)
+    #set ( $localReferenceColumnElement = $foreignKeyReferences.get(0).getChild("foreign-column").getChild("column") )
+    #set ( $localFieldGetter = $localReferenceColumnElement.getAttribute("getter") )
+            ObjectKey localKey = SimpleKey.keyFor(objectToFill.${localFieldGetter}());
+  #else
+            SimpleKey[] keyElementArray = new SimpleKey[$foreignKeyReferences.size()];
+    #set ($i = 0)
+    #foreach ($referenceElement in $foreignKeyReferences)
+      #set ( $localReferenceColumnElement = $referenceElement.getChild("foreign-column").getChild("column") )
+      #set ( $localFieldGetter = $localReferenceColumnElement.getAttribute("getter") )
+            keyElementArray[$i] = SimpleKey.keyFor(
+                    objectToFill.${localFieldGetter}());
+      #set ($i = $i + 1)
+    #end
+            ObjectKey localKey = new ComboKey(keyElementArray);
+  #end
+#end
+            List<${fieldContainedType}> referencingList
+                = fkTo${fieldContainedType}Map.get(localKey);
+            if (referencingList == null)
+            {
+                continue;
+            }
+            for (${fieldContainedType} referencing : referencingList)
+            {
+                // copy the referencing object for the case that more than one
+                // toFill object references the same object; in this case
+                // every toFillObject should have its own instance 
+                // of the referencing object to remain consistent
+                // with other Torque referencing object treatment
+                ${fieldContainedType} referencingCopy = referencing.copy(false);
+                // copy does not set primary key
+                referencingCopy.setPrimaryKey(referencing.getPrimaryKey());
+                objectToFill.${adder}(referencingCopy);
+                result.add(referencingCopy);
+            }
+        }
+        return result;
+    }

Added: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillerChunkSizeGetter.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillerChunkSizeGetter.vm?rev=1139579&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillerChunkSizeGetter.vm (added)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/fillerChunkSizeGetter.vm Sat Jun 25 18:36:03 2011
@@ -0,0 +1,37 @@
+## 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.
+##
+######
+##
+## version $Id: MultiExtendBean.vm 240328 2005-08-26 22:02:48 +0200 (Fr, 26 Aug 2005) tfischer $
+##
+## Creates the fillXXX methods for the base peer implementation.
+## 
+## This template expects the current source element to be a "foreign-field" 
+## element from the schema, processed by the OMTransformer.
+## The options and the attributes of the current source element must be set
+## as velocity variables.  
+##
+    /** 
+     * Returns the chunk size for the filler methods.
+     *
+     * @return the chunk size for the filler methods.
+     */
+    protected int getFillerChunkSize()
+    {
+        return $torqueGen.option("torque.om.complexObjectModel.defaultFillerChunkSize");
+    }

Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/imports.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/imports.vm?rev=1139579&r1=1139578&r2=1139579&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/imports.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/imports.vm Sat Jun 25 18:36:03 2011
@@ -42,10 +42,15 @@ import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -63,6 +68,7 @@ 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.om.ComboKey;
 import org.apache.torque.util.BasePeer;
 import org.apache.torque.util.Criteria;
 import org.apache.torque.util.Transaction;

Modified: db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/retrieveByPKs.vm
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/retrieveByPKs.vm?rev=1139579&r1=1139578&r2=1139579&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/retrieveByPKs.vm (original)
+++ db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/impl/base/retrieveByPKs.vm Sat Jun 25 18:36:03 2011
@@ -36,7 +36,7 @@
      * @throws TorqueException Any exceptions caught during processing will be
      *         rethrown wrapped into a TorqueException.
      */
-    public List<${dbObjectClassName}> retrieveByPKs(List<ObjectKey> pks)
+    public List<${dbObjectClassName}> retrieveByPKs(Collection<ObjectKey> pks)
         throws TorqueException
     {
         Connection db = null;
@@ -61,7 +61,7 @@
      * @throws TorqueException Any exceptions caught during processing will be
      *         rethrown wrapped into a TorqueException.
      */
-    public List<${dbObjectClassName}> retrieveByPKs(List<ObjectKey> pks, Connection dbcon)
+    public List<${dbObjectClassName}> retrieveByPKs(Collection<ObjectKey> pks, Connection dbcon)
         throws TorqueException
     {
         List<${dbObjectClassName}> objs = null;
@@ -72,18 +72,17 @@
         else
         {
             Criteria criteria = new Criteria();
-  #set ( $columnElement = $primaryKeyColumnElements.get(0) )
-  #set ( $peerColumnName = $columnElement.getAttribute("peerColumnName"))
   #if ($primaryKeyColumnElements.size() == 1)
+    #set ( $columnElement = $primaryKeyColumnElements.get(0) )
+    #set ( $peerColumnName = $columnElement.getAttribute("peerColumnName"))
             criteria.addIn(${peerClassName}.$peerColumnName, pks);
   #else
-            Iterator<ObjectKey> iter = pks.iterator();
-            while (iter.hasNext())
+            for (ObjectKey pk : pks)
             {
-                ObjectKey pk = iter.next();
                 SimpleKey[] keys = (SimpleKey[])pk.getValue();
     #set ( $i = 0 )
     #foreach ($primaryKeyColumnElement in $primaryKeyColumnElements)
+      #set ( $peerColumnName = $primaryKeyColumnElement.getAttribute("peerColumnName"))
                     Criteria.Criterion c$i = criteria.getNewCriterion(
                         ${peerClassName}.$peerColumnName, keys[$i], Criteria.EQUAL);
       #set ( $j = $i - 1 )



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