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
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs