Index: topia/src/java/org/codelutin/topia/jdo/AbstractTopiaJDOPersistenceService.java diff -u topia/src/java/org/codelutin/topia/jdo/AbstractTopiaJDOPersistenceService.java:1.7 topia/src/java/org/codelutin/topia/jdo/AbstractTopiaJDOPersistenceService.java:1.8 --- topia/src/java/org/codelutin/topia/jdo/AbstractTopiaJDOPersistenceService.java:1.7 Wed Jun 16 09:41:26 2004 +++ topia/src/java/org/codelutin/topia/jdo/AbstractTopiaJDOPersistenceService.java Fri Jun 18 18:29:20 2004 @@ -23,9 +23,9 @@ * * @author Cédric Pineau * Copyright Code Lutin -* @version $Revision: 1.7 $ +* @version $Revision: 1.8 $ * -* Last update : $Date: 2004/06/16 09:41:26 $ +* Last update : $Date: 2004/06/18 18:29:20 $ * by : $Author: bpoussin $ */ package org.codelutin.topia.jdo; @@ -45,6 +45,7 @@ import org.codelutin.topia.TopiaQuery; import org.codelutin.topia.Util; import org.codelutin.util.ListenerSet; +import java.util.HashSet; /** * This abstract class propose a partial default TopiaPersistenceService implementation. @@ -58,32 +59,38 @@ * The change is commited to the data store * @param topiaEntityTO - the TopiaEntity TransferObject whose DataObject * is wanted. + * @param done list of allready converted object * @see topiaEntityTO * @see topiaEntityDO * * @return the corresponding TopiaEntity DataObject. */ - protected TopiaEntityDO toDO(TopiaEntityTO _to) throws TopiaException { - if (_to == null) return null; + public TopiaEntityDO toDO(TopiaEntityTO _to, HashSet done) throws TopiaException { + if (_to == null){ + return null; + } TopiaEntityDO _do; Object objectTopiaId = _to.get_topiaId_(); //TODO mettre a jour les info lastModificationDate, ... PersistenceManager persistenceManager = ((TopiaJDOPersistenceHelper) getContext().getPersistenceHelper()).getPersistenceManager(); - Transaction transaction = persistenceManager.currentTransaction(); - transaction.begin(); +// Transaction transaction = persistenceManager.currentTransaction(); +// transaction.begin(); try{ if (objectTopiaId != null) { _do = findDOByTopiaId(objectTopiaId); - _do.set_allProperties_(_to); } else { _do = getContext().createEntityDO(getEntityClass()); - _do.set_allProperties_(_to); persistenceManager.makePersistent(_do); } - transaction.commit(); + if(!done.contains(_to)){ + // si on ne la pas encore convertie on le fait + done.add(_to); + _do.set_allProperties_(_to, done); + } +// transaction.commit(); } catch (Throwable eee) { - transaction.rollback(); +// transaction.rollback(); throw (new TopiaException("Cannot make persistent !", eee)); } @@ -102,17 +109,17 @@ throw new TopiaException("Can't persist "+topiaEntity+" has it seems to exist, please use update instead !"); } TopiaEntityTO _to = (TopiaEntityTO) Util.toTO(topiaEntity); -// PersistenceManager persistenceManager = ((TopiaJDOPersistenceHelper) getContext().getPersistenceHelper()).getPersistenceManager(); -// Transaction transaction = persistenceManager.currentTransaction(); -// transaction.begin(); -// try { - _to = toTO(toDO(_to)); + PersistenceManager persistenceManager = ((TopiaJDOPersistenceHelper) getContext().getPersistenceHelper()).getPersistenceManager(); + Transaction transaction = persistenceManager.currentTransaction(); + transaction.begin(); + try { + _to = toTO(toDO(_to, new HashSet())); getContext().getListeners().addCategory(this, _to); -// transaction.commit(); -// } catch (TopiaException eee) { -// transaction.rollback(); -// throw eee; -// } + transaction.commit(); + } catch (TopiaException eee) { + transaction.rollback(); + throw eee; + } return _to; } @@ -125,16 +132,16 @@ throw new TopiaException("Can't update "+topiaEntity+" has it seems not to exist, please use makePersistent instead !"); } TopiaEntityTO _to = (TopiaEntityTO) Util.toTO(topiaEntity); -// PersistenceManager persistenceManager = ((TopiaJDOPersistenceHelper) getContext().getPersistenceHelper()).getPersistenceManager(); -// Transaction transaction = persistenceManager.currentTransaction(); -// transaction.begin(); -// try { - toDO(_to); -// transaction.commit(); -// } catch (TopiaException eee) { -// transaction.rollback(); -// throw eee; -// } + PersistenceManager persistenceManager = ((TopiaJDOPersistenceHelper) getContext().getPersistenceHelper()).getPersistenceManager(); + Transaction transaction = persistenceManager.currentTransaction(); + transaction.begin(); + try { + toDO(_to, new HashSet()); + transaction.commit(); + } catch (TopiaException eee) { + transaction.rollback(); + throw eee; + } return _to; }