Index: topia/src/java/org/codelutin/topia/TopiaContext.java diff -u topia/src/java/org/codelutin/topia/TopiaContext.java:1.45 topia/src/java/org/codelutin/topia/TopiaContext.java:1.46 --- topia/src/java/org/codelutin/topia/TopiaContext.java:1.45 Thu Aug 4 20:59:31 2005 +++ topia/src/java/org/codelutin/topia/TopiaContext.java Thu Aug 11 16:42:27 2005 @@ -23,37 +23,32 @@ * * @author Benjamin Poussin * Copyright Code Lutin -* @version $Revision: 1.45 $ +* @version $Revision: 1.46 $ * -* Mise a jour: $Date: 2005/08/04 20:59:31 $ -* par : $Author: bpoussin $ +* Mise a jour: $Date: 2005/08/11 16:42:27 $ +* par : $Author: thimel $ */ package org.codelutin.topia; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + import javax.security.auth.callback.CallbackHandler; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; + import org.codelutin.topia.distribution.DistributionHelper; import org.codelutin.topia.hook.HookHelper; import org.codelutin.topia.persistence.PersistenceHelper; import org.codelutin.topia.persistence.TopiaTransaction; import org.codelutin.topia.persistence.TransactionHelper; -import org.codelutin.topia.security.TopiaGroupPrincipal; -import org.codelutin.topia.security.TopiaPermission; -import org.codelutin.topia.security.TopiaPermissionEvent; -import org.codelutin.topia.security.TopiaPermissionListener; -import org.codelutin.topia.security.TopiaSecurityException; import org.codelutin.topia.security.TopiaSecurityHelper; -import org.codelutin.topia.security.TopiaUserPrincipal; import org.codelutin.util.CategorisedListenerSet; public abstract class TopiaContext implements TopiaEntityListener { // TopiaContext @@ -136,8 +131,8 @@ * Permet de recuperer la liste qui contient les entites pour un certain type * si la liste n'existait pas, elle est creer et ajoutee */ - protected Set getEventEntityList(HashMap> map, Class clazz){ - Set result = map.get(clazz); + protected Set getEventEntityList(HashMap> map, Class clazz){ + Set result = map.get(clazz); if(result == null){ map.put(clazz, result = new HashSet()); } @@ -150,7 +145,7 @@ public void entityAdded(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ Class clazz = e.getClass(); - Set added = getEventEntityList(addedTopiaEntity, clazz); + Set added = getEventEntityList(addedTopiaEntity, clazz); added.add(e); // il a ete ajoute ou remis s'il existait precedement // il faut l'enlever de removed @@ -164,10 +159,10 @@ public void entityModified(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ Class clazz = e.getClass(); - Set added = getEventEntityList(modifiedTopiaEntity, clazz); + Set added = getEventEntityList(modifiedTopiaEntity, clazz); // on ne l'ajoute dans modifier que s'il n'est pas deja dans added if(!added.contains(e)){ - Set modified = getEventEntityList(modifiedTopiaEntity, clazz); + Set modified = getEventEntityList(modifiedTopiaEntity, clazz); modified.add(e); } } @@ -179,11 +174,11 @@ public void entityRemoved(TopiaEntityEvent event){ for(TopiaEntity e:event.getTopiaEntities()){ Class clazz = e.getClass(); - Set removed = getEventEntityList(removedTopiaEntity, clazz); + Set removed = getEventEntityList(removedTopiaEntity, clazz); removed.add(e); // il a ete supprimé il faut l'enlever des autres - Set added = getEventEntityList(modifiedTopiaEntity, clazz); - Set modified = getEventEntityList(modifiedTopiaEntity, clazz); + Set added = getEventEntityList(modifiedTopiaEntity, clazz); + Set modified = getEventEntityList(modifiedTopiaEntity, clazz); added.remove(e); modified.remove(e); } @@ -241,11 +236,11 @@ if(parent != null){ for(Map.Entry> set:addedTopiaEntity.entrySet()){ Class clazz = set.getKey(); - Set entities = set.getValue(); + Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) try{ - getListeners().fire(clazz, "entityAdded", new TopiaEntityEvent(this, entities)); + parent.getListeners().fire(clazz, "entityAdded", new TopiaEntityEvent(this, entities)); }catch(Exception eee){ log.log(Level.WARNING, "Probleme lors de la propagation d'un event", eee); } @@ -253,11 +248,11 @@ } for(Map.Entry> set:modifiedTopiaEntity.entrySet()){ Class clazz = set.getKey(); - Set entities = set.getValue(); + Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) try{ - getListeners().fire(clazz, "entityModified", new TopiaEntityEvent(this, entities)); + parent.getListeners().fire(clazz, "entityModified", new TopiaEntityEvent(this, entities)); }catch(Exception eee){ log.log(Level.WARNING, "Probleme lors de la propagation d'un event", eee); } @@ -265,11 +260,11 @@ } for(Map.Entry> set:removedTopiaEntity.entrySet()){ Class clazz = set.getKey(); - Set entities = set.getValue(); + Set entities = set.getValue(); if(entities.size() > 0){ // on previent les listeners du bon persistence service (clazz) try{ - getListeners().fire(clazz, "entityRemoved", new TopiaEntityEvent(this, entities)); + parent.getListeners().fire(clazz, "entityRemoved", new TopiaEntityEvent(this, entities)); }catch(Exception eee){ log.log(Level.WARNING, "Probleme lors de la propagation d'un event", eee); } @@ -288,7 +283,11 @@ TopiaContext context = TopiaContextFactory.getContext(tt); context.rollbackTransaction(); } - + // TODO il faut prevenir les listeners du context qui a fait le rollback que + // les objets ont rechangé (rollback). Deja fait dans le commit pour + // prevenir les listeners du context pere. Mais il faudrait le faire + // dans le rollback pour ses propres listener + // il faut abondonner tous les events conservé for(Set set:addedTopiaEntity.values()){ set.clear();