Index: topia-service/src/java/org/codelutin/topia/migration/kernel/ConfigurationAdapter.java diff -u topia-service/src/java/org/codelutin/topia/migration/kernel/ConfigurationAdapter.java:1.3 topia-service/src/java/org/codelutin/topia/migration/kernel/ConfigurationAdapter.java:1.4 --- topia-service/src/java/org/codelutin/topia/migration/kernel/ConfigurationAdapter.java:1.3 Wed Nov 14 17:36:11 2007 +++ topia-service/src/java/org/codelutin/topia/migration/kernel/ConfigurationAdapter.java Tue Nov 20 15:45:18 2007 @@ -19,7 +19,6 @@ package org.codelutin.topia.migration.kernel; import java.io.Serializable; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -42,6 +41,7 @@ import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; +import org.hibernate.collection.AbstractPersistentCollection; import org.hibernate.collection.PersistentBag; import org.hibernate.collection.PersistentList; import org.hibernate.collection.PersistentSet; @@ -58,9 +58,9 @@ * @author Chevallereau Benjamin * @author Eon Sébastien * @author Trève Vincent - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ * - * Last update : $Date: 2007-11-14 17:36:11 $ + * Last update : $Date: 2007-11-20 15:45:18 $ */ public class ConfigurationAdapter { @@ -329,41 +329,34 @@ private void deletePersistentCollection(Map mapData) { Map m = new HashMap(); for (Object key : mapData.keySet()) { - if (mapData.get(key) instanceof PersistentSet) { - Collection c = (Collection) mapData - .get(key); - for (Iterator iter = c.iterator(); iter.hasNext();) { - Object element = (Object) iter.next(); - if (element instanceof Map) { - deletePersistentCollection((Map) element); - } - } - m.put((String) key, new HashSet(c)); - } else if (mapData.get(key) instanceof PersistentBag) { - Collection c = (Collection) mapData - .get(key); - for (Iterator iter = c.iterator(); iter.hasNext();) { - Object element = (Object) iter.next(); - if (element instanceof Map) { - deletePersistentCollection((Map) element); - } - } - // HashBag ajoute une dependance au projet - // hibernate utilise des List - // m.put((String) key, new HashBag(c)); - m.put((String) key, new ArrayList(c)); - } else if (mapData.get(key) instanceof PersistentList) { - Collection c = (Collection) mapData - .get(key); - for (Iterator iter = c.iterator(); iter.hasNext();) { - Object element = (Object) iter.next(); - if (element instanceof Map) { - deletePersistentCollection((Map) element); - } - } - m.put((String) key, new LinkedList(c)); - } + + if(mapData.get(key) instanceof AbstractPersistentCollection) { + + // remove collections + Collection c = (Collection) mapData + .get(key); + for (Iterator iter = c.iterator(); iter.hasNext();) { + Object element = iter.next(); + if (element instanceof Map) { + deletePersistentCollection((Map) element); + } + } + + // copy current map without proxy + if (mapData.get(key) instanceof PersistentSet) { + m.put((String) key, new HashSet(c)); + } else if (mapData.get(key) instanceof PersistentBag) { + m.put((String) key, new LinkedList(c)); + } else if (mapData.get(key) instanceof PersistentList) { + m.put((String) key, new LinkedList(c)); + } + else { + logger.error("Unknow collection type : " + mapData.get(key)); + } + } } + + // copy map for return for (Object key : m.keySet()) { mapData.put(key.toString(), m.get(key)); }