Index: topia/src/java/org/codelutin/topia/persistence/PersistenceHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/PersistenceHelper.java:1.13 topia/src/java/org/codelutin/topia/persistence/PersistenceHelper.java:1.14 --- topia/src/java/org/codelutin/topia/persistence/PersistenceHelper.java:1.13 Thu Aug 11 16:42:27 2005 +++ topia/src/java/org/codelutin/topia/persistence/PersistenceHelper.java Wed Sep 7 15:34:59 2005 @@ -23,10 +23,10 @@ * Created: Aug 1, 2004 * * @author Cédric Pineau - * @version $Revision: 1.13 $ + * @version $Revision: 1.14 $ * - * Last update : $Date: 2005/08/11 16:42:27 $ - * by : $Author: thimel $ + * Last update : $Date: 2005/09/07 15:34:59 $ + * by : $Author: bpoussin $ */ package org.codelutin.topia.persistence; @@ -78,6 +78,17 @@ */ public A update(A entity) throws TopiaException; + /** + * indique si l'update est fait de facon automatique des que l'entity + * est modifie ou s'il faut appeler update explicitement. + * L'utilisation en non automatique permet de modifier plusieurs champs + * de l'entity sans qu'il y ait d'acces a la persistence sous jacente + * ce qui permet de gagner du temps dans certain cas. + */ + public boolean isAutoUpdate(); + + public void setAutoUpdate(boolean autoUpdate); + public void delete(TopiaEntity entity) throws TopiaException; /** @@ -137,6 +148,6 @@ * @throws TopiaException si aucune transaction ouverte pour le thread courant */ public void rollbackTransaction() throws TopiaException; - + public PersistenceStorage getStorage() throws TopiaNotFoundException ; } Index: topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceHelper.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceHelper.java:1.10 topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceHelper.java:1.11 --- topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceHelper.java:1.10 Fri Aug 26 17:53:35 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceHelper.java Wed Sep 7 15:34:59 2005 @@ -23,9 +23,9 @@ * Created: Jul 16, 2005 * * @author Benjamin POUSSIN - * @version $Revision: 1.10 $ + * @version $Revision: 1.11 $ * - * Last update : $Date: 2005/08/26 17:53:35 $ + * Last update : $Date: 2005/09/07 15:34:59 $ * by : $Author: bpoussin $ */ @@ -58,6 +58,7 @@ protected TopiaContext context = null; protected TopiaPersistenceCache cache = null; protected PersistenceStorage storage = null; + protected boolean autoUpdate = false; /** * Les proprietes pour ce AbstractPersistenceHelper @@ -214,6 +215,21 @@ getStorage().store(getContext(), tpo); return entity; + } + + /** + * indique si l'update est fait de facon automatique des que l'entity + * est modifie ou s'il faut appeler update explicitement. + * L'utilisation en non automatique permet de modifier plusieurs champs + * de l'entity sans qu'il y ait d'acces a la persistence sous jacente + * ce qui permet de gagner du temps dans certain cas. + */ + public boolean isAutoUpdate(){ + return autoUpdate; + } + + public void setAutoUpdate(boolean autoUpdate){ + this.autoUpdate = autoUpdate; } public void delete(TopiaEntity entity) throws TopiaException { Index: topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceProxy.java diff -u topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceProxy.java:1.11 topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceProxy.java:1.12 --- topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceProxy.java:1.11 Fri Sep 2 17:18:51 2005 +++ topia/src/java/org/codelutin/topia/persistence/TopiaPersistenceProxy.java Wed Sep 7 15:34:59 2005 @@ -23,9 +23,9 @@ * Created: 16 juillet 2005 23:52:35 CEST * * @author Benjamin POUSSIN -* @version $Revision: 1.11 $ +* @version $Revision: 1.12 $ * -* Last update: $Date: 2005/09/02 17:18:51 $ +* Last update: $Date: 2005/09/07 15:34:59 $ * by : $Author: bpoussin $ */ @@ -76,6 +76,7 @@ protected PersistenceHelper ph = null; protected Class interfacez = null; protected TopiaPersistenceObject o = null; + protected TopiaPersistenceService ps = null; protected TopiaPersistenceProxy(PersistenceHelper ph, Class interfacez, TopiaPersistenceObject o){ this.ph = ph; @@ -83,6 +84,13 @@ this.o = o; } + public TopiaPersistenceService getPersistenceService() throws TopiaException { + if(ps == null){ + this.ps = ph.getContext().getPersistenceService(interfacez); + } + return ps; + } + public TopiaPersistenceObject getObject(){ return o; } @@ -400,6 +408,10 @@ // on ne permet pas la surcharge des methodes utiles au framework if ("getEntityClass".equals(methodName)) { return getObject().getManagement().getEntityClass(); + } else if("getContext".equals(methodName)){ + return ph.getContext(); + } else if("getPersistenceService".equals(methodName)){ + return getPersistenceService(); } else if("get_topiaId_".equals(methodName)){ return getObject().getManagement().getId(); // } else if ("get_topiaVersion_".equals(methodName)) { @@ -483,6 +495,10 @@ // methode pour modifier le champs TopiaEntity value = (TopiaEntity)args[0]; setField(fieldName, value.get_topiaId_()); + if(ph.isAutoUpdate()){ + getPersistenceService().update((TopiaEntity)proxy); + } + getPersistenceService().fireEntityModified((TopiaEntity)proxy); return null; } else { // methode pour acceder au champs @@ -544,6 +560,10 @@ // methode pour modifier le champs Object value = args[0]; setField(fieldName, value); + if(ph.isAutoUpdate()){ + getPersistenceService().update((TopiaEntity)proxy); + } + getPersistenceService().fireEntityModified((TopiaEntity)proxy); return null; } else { // methode pour acceder au champs