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
|