1 package com.imcode.util; 2 3 import org.apache.commons.collections.MultiMap; 4 5 import java.util.*; 6 7 /*** 8 * @author kreiger 9 */ 10 public class MultiTreeMap extends TreeMap implements MultiMap { 11 12 public MultiTreeMap() { 13 super() ; 14 } 15 16 public MultiTreeMap(Comparator comparator) { 17 super(comparator) ; 18 } 19 20 public Object put( Object key, Object value ) { 21 if ( value instanceof ArrayList ) { 22 super.put( key, value ); 23 } 24 25 Collection previousValue = (Collection)super.get( key ); 26 Collection newValue; 27 if ( null == previousValue ) { 28 newValue = new ArrayList(); 29 super.put( key, newValue ); 30 } else { 31 newValue = new ArrayList( previousValue ); 32 } 33 newValue.add( value ); 34 return previousValue; 35 } 36 37 public boolean containsValue( Object value ) { 38 Set pairs = super.entrySet(); 39 40 if ( pairs == null ) { 41 return false; 42 } 43 44 Iterator pairsIterator = pairs.iterator(); 45 while ( pairsIterator.hasNext() ) { 46 Map.Entry keyValuePair = (Map.Entry)( pairsIterator.next() ); 47 ArrayList list = (ArrayList)( keyValuePair.getValue() ); 48 if ( list.contains( value ) ) { 49 return true; 50 } 51 } 52 return false; 53 } 54 55 public Object remove( Object key, Object item ) { 56 ArrayList valuesForKey = (ArrayList)super.get( key ); 57 58 if ( valuesForKey == null ) { 59 return null; 60 } 61 62 valuesForKey.remove( item ); 63 return item; 64 } 65 66 public void clear() { 67 Set pairs = super.entrySet(); 68 Iterator pairsIterator = pairs.iterator(); 69 while ( pairsIterator.hasNext() ) { 70 Map.Entry keyValuePair = (Map.Entry)( pairsIterator.next() ); 71 ArrayList list = (ArrayList)( keyValuePair.getValue() ); 72 list.clear(); 73 } 74 super.clear(); 75 } 76 77 public Collection values() { 78 ArrayList returnList = new ArrayList( super.size() ); 79 80 Set pairs = super.entrySet(); 81 Iterator pairsIterator = pairs.iterator(); 82 while ( pairsIterator.hasNext() ) { 83 Map.Entry keyValuePair = (Map.Entry)( pairsIterator.next() ); 84 ArrayList list = (ArrayList)( keyValuePair.getValue() ); 85 86 Object[] values = list.toArray(); 87 for ( int ii = 0; ii < values.length; ii++ ) { 88 returnList.add( values[ii] ); 89 } 90 } 91 return returnList; 92 } 93 94 }