001: /*
002: * SalomeTMF is a Test Management Framework
003: * Copyright (C) 2005 France Telecom R&D
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: *
019: * @author Fayçal SOUGRATI, Vincent Pautret, Marche Mikael
020: *
021: * Contact: mikael.marche@rd.francetelecom.com
022: */
023:
024: package org.objectweb.salome_tmf.data;
025:
026: import java.util.HashMap;
027: import java.util.HashSet;
028: import java.util.Iterator;
029:
030: /**
031: * Sous-classe de <code>HashMap</code> utilisée lorsque les valeurs de la table
032: * de hachage sont des collections.<br>
033: * Cette classe surcharge la méthode {@link #put put(clé, valeur)} pour que
034: * celle-ci permette de créer un couple (clé d’accès – liste) si la clé
035: * n’existe pas dans la table de hachage, d’ajouter l’élément dans un
036: * {@link HashSet HashSet} existant si la clé existe.
037: * @author teaml039
038: * @version 0.1
039: */
040: public class HashMapForCollections extends HashMap {
041:
042: /******************************************************************************/
043: /** CONSTRUCTEUR ***/
044: /******************************************************************************/
045:
046: /**
047: * Constructeur d'une table de collections
048: */
049: public HashMapForCollections(int initialCapacity, float loadFactor) {
050: super (initialCapacity, loadFactor);
051: } // Fin du constructeur HashMapforCollections/2
052:
053: /**
054: * Constructeur d'une table de collections
055: */
056: public HashMapForCollections() {
057: super (16, 0.75f);
058: } // Fin du constructeur HashMapforCollections/2
059:
060: /******************************************************************************/
061: /** METHODES PUBLIQUES ***/
062: /******************************************************************************/
063:
064: /**
065: * Cette méthode surcharge celle définie dans {@link HashMap HashMap}.<br>
066: * Si la clé n'existe pas déjà, elle l'ajoute en plaçant l'objet
067: * <code>value</code> dans un {@link HashSet HashSet} qui est créé en même
068: * temps.<br>
069: * Si la clé existe déjà, <code>value</code> est ajoutée dans le
070: * {@link HashSet HashSet} correspondant à la clé <code>key</code>.
071: * @param key clé de la table de hachage
072: * @param value valeur à rajouter
073: * @return l'objet HashSet ajouté si la clé existait déjà, <code>null</code>
074: * si la clé n'existait pas
075: */
076: public Object put(Object key, Object value) {
077:
078: if (this .containsKey(key) && value != null) {
079: ((HashSet) this .get(key)).add(value);
080: return this .get(key);
081: } else {
082: HashSet setValue = new HashSet(5, 1);
083: if (value != null)
084: setValue.add(value);
085: // Attention de bien rappeler le put/2 de la classe HashMap, sinon
086: // ça boucle sur cette méthode put
087: super .put(key, setValue);
088: return null;
089: }
090:
091: } // Fin de la méthode put/2
092:
093: /**
094: * Calcule la taille cumulée de l'ensemble des éléments qui
095: * sont contenus dans les collections valeurs de la HashMap
096: * @return la taille cumulée de l'ensemble des éléments qui
097: * sont contenus dans les collections valeurs de la HashMap
098: */
099: public int spreadedSize() {
100:
101: int spreadedSize = 0;
102: for (Iterator it = values().iterator(); it.hasNext();) {
103: HashSet currentValue = (HashSet) it.next();
104: spreadedSize += currentValue.size();
105: }
106: return spreadedSize;
107: } // Fin de la méthode speadedSize/0
108: } // Fin de la classe HashMapForCollections
|