(no commit message)
[utils] / support / spring / src / main / java / org / wamblee / persistence / hibernate / HibernateSupport.java
index ef0ac40af32811ef8d7b8bf6c2e640a6a1a2f86b..8eb7790bbf3e0d02fb607983945c7ad5c4a6375d 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * Copyright 2005 the original author or authors.
- *
+ * Copyright 2005-2010 the original author or authors.
+ * 
  * Licensed 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.
  */
 package org.wamblee.persistence.hibernate;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-
-import org.wamblee.persistence.Persistent;
-
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
+import java.util.logging.Logger;
+
+import org.springframework.orm.hibernate3.HibernateTemplate;
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
+import org.wamblee.persistence.Persistent;
 
 /**
  * Extension of
@@ -38,7 +35,7 @@ import java.util.Set;
  * @author Erik Brakkee
  */
 public class HibernateSupport extends HibernateDaoSupport {
-    private static final Log LOG = LogFactory.getLog(HibernateSupport.class);
+    private static final Logger LOG = Logger.getLogger(HibernateSupport.class.getName());
 
     /**
      * Constructs the object.
@@ -113,11 +110,11 @@ public class HibernateSupport extends HibernateDaoSupport {
 
         aProcessed.add(elem);
 
-        LOG.debug("Setting pk/version on " + aPersistent + " from " + aMerged);
+        LOG.fine("Setting pk/version on " + aPersistent + " from " + aMerged);
 
         if ((aPersistent.getPrimaryKey() != null) &&
             !aMerged.getPrimaryKey().equals(aPersistent.getPrimaryKey())) {
-            LOG.error("Mismatch between primary key values: " + aPersistent +
+            LOG.warning("Mismatch between primary key values: " + aPersistent +
                 " " + aMerged);
         } else {
             aPersistent.setPersistedVersion(aMerged.getPersistedVersion());
@@ -243,21 +240,22 @@ public class HibernateSupport extends HibernateDaoSupport {
      *            List of processed persistent objects.
      * 
      */
-    public static void processMap(Map aPersistent, Map aMerged,
+    public static <Key,Value> void processMap(Map<Key,Value> aPersistent, Map<Key,Value> aMerged,
         List<ObjectElem> aProcessed) {
         if (aMerged.size() != aPersistent.size()) {
             throw new RuntimeException("Sizes differ " + aMerged.size() + " " +
                 aPersistent.size());
         }
 
-        Set keys = aMerged.keySet();
+        Set<Entry<Key,Value>> entries = aMerged.entrySet();
 
-        for (Object key : keys) {
+        for (Entry<Key,Value> entry : entries) {
+            Key key = entry.getKey();
             if (!aPersistent.containsKey(key)) {
                 throw new RuntimeException("Key '" + key + "' not found");
             }
 
-            Object mergedValue = aMerged.get(key);
+            Value mergedValue = entry.getValue();
             Object persistentValue = aPersistent.get(key);
 
             if (mergedValue instanceof Persistent) {
@@ -287,6 +285,12 @@ public class HibernateSupport extends HibernateDaoSupport {
         }
 
         public boolean equals(Object aObj) {
+            if (aObj == null) {
+                return false;
+            }
+            if (!(aObj instanceof ObjectElem)) {
+                return false;
+            }
             return ((ObjectElem) aObj).object == object;
         }