Update of /var/cvs/src/org/mmbase/module/core
In directory james.mmbase.org:/tmp/cvs-serv25461

Modified Files:
        TransactionResolver.java 
Log Message:
only split upt the one method up in some (private) methods. This make the scope 
of variables clearer, and the methods can be documented seperately


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/module/core


Index: TransactionResolver.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/module/core/TransactionResolver.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- TransactionResolver.java    9 Jan 2008 12:26:51 -0000       1.30
+++ TransactionResolver.java    2 Dec 2008 16:32:23 -0000       1.31
@@ -18,7 +18,7 @@
  * @javadoc
  *
  * @author Rico Jansen
- * @version $Id: TransactionResolver.java,v 1.30 2008/01/09 12:26:51 michiel 
Exp $
+ * @version $Id: TransactionResolver.java,v 1.31 2008/12/02 16:32:23 michiel 
Exp $
  */
 class TransactionResolver {
     private static final Logger log = 
Logging.getLoggerInstance(TransactionResolver.class);
@@ -28,8 +28,75 @@
         this.mmbase = mmbase;
     }
 
+
+
+    /**
+     * Given a map where the keys are temporary identifiers, sets the values 
to actual new node
+     * numbers, unless this was already done.
+     */
+    private void getNewNumbers(Map<String, Integer> numbers) {
+        // Get the numbers
+        for (Map.Entry<String, Integer> numberEntry : numbers.entrySet()) {
+            Integer num = numberEntry.getValue();
+            if (num == null || num.intValue() == -1) {
+                int newNumber = mmbase.getStorageManager().createKey();
+                log.info("" + numberEntry.getKey() + " -> " + newNumber);
+                numberEntry.setValue(newNumber);
+            }
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("TransactionResolver -  numbers: " + numbers);
+        }
+    }
+
+    private void setNewNumbers(Map<MMObjectNode, Collection<String>> nnodes, 
Map<String, Integer> numbers) {
+        // put numbers in the right place
+        for (Map.Entry<MMObjectNode, Collection<String>> nnodeEntry : 
nnodes.entrySet()) {
+            MMObjectNode node = nnodeEntry.getKey();
+            Collection<String> changedFields = nnodeEntry.getValue();
+            for (String field : changedFields) {
+                String tmpField = "_" + field;
+                String key = node.getStringValue(tmpField);
+                int number = numbers.get(key);
+                node.setValue(field, number);
+            }
+        }
+    }
+
     /**
-     * Result a transaction. ie. resolves all 'node' fields to actual number 
was will be committed
+     * Checks whether all NODE field are indeed filled now, which would mean 
that this transaction
+     * was indeed sucessfully resolved now.
+     */
+    private void check(final Collection<MMObjectNode> nodes) throws 
TransactionManagerException {
+
+        // Check now whether resolving was completely successfull
+        for (MMObjectNode node : nodes) {
+            MMObjectBuilder bul = mmbase.getMMObject(node.getName());
+            for (CoreField fd : bul.getFields()) {
+                int dbtype = fd.getType();
+                if ((dbtype == Field.TYPE_INTEGER)||
+                    (dbtype == Field.TYPE_NODE)) {
+
+                    String field = fd.getName();
+                    String tmpField = "_" + field;
+                    if (node.getDBState(tmpField) == Field.STATE_VIRTUAL) {
+                        int number = node.getIntValue(field);
+                        if (number == -1) {
+                            String key = node.getStringValue(tmpField);
+                            if (key != null && key.length() > 0) {
+                                throw new TransactionManagerException("For 
node " + node + " and field " + field + ". Found value for " + tmpField + ": " 
+ key + ". Should be empty.");
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Result a transaction. ie. resolves all 'node' fields to actual number 
wich will be committed
      * to the database
      *
      * @throws TransactionManagerException if the transactiosn could not be 
successfully completely resolved.
@@ -38,6 +105,8 @@
         Map<String, Integer> numbers = new HashMap<String, Integer>(); /* Temp 
key -> Real node number */
         Map<MMObjectNode, Collection<String>> nnodes  = new 
HashMap<MMObjectNode, Collection<String>>(); /* MMObjectNode --> List of 
changed fields */
 
+
+
         // Find all unique keys and store them in a map to remap them later
         // Also store the nodes with which fields uses them.
         for (MMObjectNode node : nodes) {
@@ -110,53 +179,11 @@
             log.debug("TransactionResolver - nnodes " + nnodes);
         }
 
-        // Get the numbers
-        for (Map.Entry<String, Integer> numberEntry : numbers.entrySet()) {
-            Integer num = numberEntry.getValue();
-            if (num == null || num.intValue() == -1) {
-                numberEntry.setValue(mmbase.getStorageManager().createKey());
-            }
-        }
 
-        if (log.isDebugEnabled()) {
-            log.debug("TransactionResolver -  numbers: " + numbers);
-        }
+        getNewNumbers(numbers);
 
+        setNewNumbers(nnodes, numbers);
 
-        // put numbers in the right place
-        for (Map.Entry<MMObjectNode, Collection<String>> nnodeEntry : 
nnodes.entrySet()) {
-            MMObjectNode node = nnodeEntry.getKey();
-            Collection<String> changedFields = nnodeEntry.getValue();
-            for (String field : changedFields) {
-                String tmpField = "_" + field;
-                String key = node.getStringValue(tmpField);
-                int number = numbers.get(key);
-                node.setValue(field, number);
-            }
-        }
-
-        // Check now whether resolving was completely successfull
-
-        for (MMObjectNode node : nodes) {
-            MMObjectBuilder bul = mmbase.getMMObject(node.getName());
-            for (CoreField fd : bul.getFields()) {
-                int dbtype = fd.getType();
-                if ((dbtype == Field.TYPE_INTEGER)||
-                    (dbtype == Field.TYPE_NODE)) {
-
-                    String field = fd.getName();
-                    String tmpField = "_" + field;
-                    if (node.getDBState(tmpField) == Field.STATE_VIRTUAL) {
-                        int number = node.getIntValue(field);
-                        if (number == -1) {
-                            String key = node.getStringValue(tmpField);
-                            if (key != null && key.length() > 0) {
-                                throw new TransactionManagerException("For 
node " + node + " and field " + field + ". Found value for " + tmpField + ": " 
+ key + ". Should be empty.");
-                            }
-                        }
-                    }
-                }
-            }
-        }
+        check(nodes);
     }
 }
_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to