Index: topia/src/java/org/codelutin/topia/TopiaAssociationManager.java
diff -u topia/src/java/org/codelutin/topia/TopiaAssociationManager.java:1.1 topia/src/java/org/codelutin/topia/TopiaAssociationManager.java:1.2
--- topia/src/java/org/codelutin/topia/TopiaAssociationManager.java:1.1 Fri Jul 22 22:01:33 2005
+++ topia/src/java/org/codelutin/topia/TopiaAssociationManager.java Tue Jul 26 14:02:57 2005
@@ -30,6 +30,7 @@
package org.codelutin.topia;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -40,7 +41,7 @@
/**
* 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.
+ * Map associations par un identifiant de l'association.
* Les instances d'associations sont représentées par la présence d'une
* instance de Key dont les clés sont les deux instances des
* entités concernées.
@@ -78,7 +79,33 @@
return null;
return assocMap.get(key);
}
-
+
+ public Object getAssociationClass(String associationName, Object partOfKey, int pos) {
+ Key key = getFirstKeyForPosition(associationName, partOfKey, pos);
+ return getAssociationClass(associationName, key);
+ }
+
+ public List getAssociationClasses(String associationName, Object partOfKey, int pos) {
+ List associationClasses = new ArrayList();
+ for (Key key : getKeys(associationName, partOfKey)) {
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)))
+ associationClasses.add(getAssociationClass(associationName, key));
+ }
+ return associationClasses;
+ }
+
+ public Object getAssociationClassForIndex(String associationName, Object partOfKey, int pos, int index) {
+ int i = 0;
+ for (Key key : getKeys(associationName, partOfKey)) {
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)))
+ if (i < index)
+ i++;
+ else
+ return getAssociationClass(associationName, key);
+ }
+ return null;
+ }
+
public List getKeysForPosition(String associationName, Object partOfKey, int pos) {
List keys = getKeys(associationName, partOfKey);
for (Key key : keys) {
@@ -87,7 +114,23 @@
}
return keys;
}
-
+
+ public Key getFirstKeyForPosition(String associationName, Object partOfKey, int pos) {
+ for (Key key : getKeys(associationName, partOfKey)) {
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)))
+ return key;
+ }
+ return null;
+ }
+
+ public Key getFirstKeyWithOpposite(String associationName, Object partOfKey, int pos, Object value) {
+ for (Key key : getKeys(associationName, partOfKey)) {
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)) && (key.get(pos).equals(value)))
+ return key;
+ }
+ return null;
+ }
+
public Object getFirstOppositeObjectForPosition(String associationName, Object partOfKey, int pos) {
Iterator it = getKeys(associationName, partOfKey).iterator();
if (it.hasNext())
@@ -99,9 +142,50 @@
public int numberInPosition(String associationName, Object partOfKey, int pos) {
int number = 0;
for (Key key : getKeys(associationName, partOfKey)) {
- if ((pos < key.size()) || (key.get(pos).equals(partOfKey)))
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)))
number++;
}
return number;
+ }
+
+ public void removeAssociationClass(String associationName, Key key) {
+ HashMapMultiKey assocMap = associations.get(associationName);
+ if (assocMap == null)
+ return;
+ assocMap.remove(key);
+ }
+
+ public void removeAssociationClass(String associationName, Object partOfKey, int pos) {
+ Key key = getFirstKeyForPosition(associationName, partOfKey, pos);
+ removeAssociationClass(associationName, key);
+ }
+
+ public void removeAssociationClass(String associationName, Object partOfKey, int pos, Object value) {
+ Key key = getFirstKeyWithOpposite(associationName, partOfKey, pos, value);
+ removeAssociationClass(associationName, key);
+ }
+
+ public void removeAllAssociationClass(String associationName, Object partOfKey, int pos) {
+ for (Key key : getKeysForPosition(associationName, partOfKey, pos))
+ if ((pos < key.size()) && (key.get(pos).equals(partOfKey)))
+ removeAssociationClass(associationName, key);
+ }
+
+ public void addAssociationClass(String associationName, Key key, Object assocClass) {
+ HashMapMultiKey assocMap = associations.get(associationName);
+ if (assocMap == null) {
+ assocMap = new HashMapMultiKey();
+ associations.put(associationName, assocMap);
+ }
+ assocMap.put(key, assocClass);
+ }
+
+ public void addAssociationClass(String associationName, Object partOfKey, int pos, Object assocClass, Object value) {
+ Key key = new Key();
+ if (pos == 0)
+ key = key.add(partOfKey).add(value);
+ else
+ key = key.add(value).add(partOfKey);
+ addAssociationClass(associationName, key, assocClass);
}
}