Index: topia/src/java/org/codelutin/topia/TopiaAssociationsManager.java diff -u topia/src/java/org/codelutin/topia/TopiaAssociationsManager.java:1.1 topia/src/java/org/codelutin/topia/TopiaAssociationsManager.java:1.2 --- topia/src/java/org/codelutin/topia/TopiaAssociationsManager.java:1.1 Fri Jun 10 17:16:38 2005 +++ topia/src/java/org/codelutin/topia/TopiaAssociationsManager.java Tue Jun 21 17:00:43 2005 @@ -24,7 +24,7 @@ * Created: 9 juin 2005 * * @author Arnaud Thimel -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ */ @@ -36,49 +36,63 @@ import org.codelutin.util.HashMapMultiKey; - +/** + * Classe gérant les associations entre les entités. + * Chaque association différente est une HashMapMultiKey identifiée dans la + * table associations par un identifiant de l'association. + * Les instances d'associations sont représentées par la présence d'une + * instance de HashMapMultiKey.Key dont les clés sont les deux instances des + * entités concernées. + */ public class TopiaAssociationsManager { - Hashtable associations; + protected static Hashtable associations = new Hashtable();; + //La table associations est constituée de clés String identifiant les + //différentes associations et les valeurs sont des HashMapMultiKey dont + //chaque entrée identifie une instance d'association. - public TopiaAssociationsManager() { - associations = new Hashtable(); - } - - public void createAssociation(String associationName) { + public static void createAssociation(String associationName) { if (associations.get(associationName) == null) associations.put( associationName, new HashMapMultiKey()); } - public HashMapMultiKey getAssociation(String associationName) { + public static HashMapMultiKey getAssociation(String associationName) { return (HashMapMultiKey)associations.get(associationName); } - public List getKeys(String associationName, Object partOfKey) { + public static List getKeys(String associationName, Object partOfKey) { HashMapMultiKey assocMap = (HashMapMultiKey)associations.get(associationName); if (assocMap == null) return null; return assocMap.getKeys(partOfKey); } - public Object getAssociationClass(String associationName, HashMapMultiKey.Key key) { + public static Object getAssociationClass(String associationName, HashMapMultiKey.Key key) { HashMapMultiKey assocMap = (HashMapMultiKey)associations.get(associationName); if (assocMap == null) return null; return assocMap.get(key); } - public List getKeysForPosition(String associationName, Object partOfKey, int pos) { + public static List getKeysForPosition(String associationName, Object partOfKey, int pos) { List keys = getKeys(associationName, partOfKey); for (Iterator it = keys.iterator(); it.hasNext(); ) { HashMapMultiKey.Key key = (HashMapMultiKey.Key)it.next(); if ((pos >= key.size()) || (!key.get(pos).equals(partOfKey))) - keys.remove(key); + keys.remove(key);//FIXME Acces concurrentiel !!! } return keys; } + + public static Object getFirstOppositeObjectForPosition(String associationName, Object partOfKey, int pos) { + Iterator it = getKeys(associationName, partOfKey).iterator(); + if (it.hasNext()) + return ((HashMapMultiKey.Key)it.next()).get(1-pos); + else + return null; + } - public int numberInPosition(String associationName, Object partOfKey, int pos) { + public static int numberInPosition(String associationName, Object partOfKey, int pos) { int number = 0; for (Iterator it = getKeys(associationName, partOfKey).iterator(); it.hasNext(); ) { HashMapMultiKey.Key key = (HashMapMultiKey.Key)it.next();