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