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 }