View Javadoc

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  }