1*d127360fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d127360fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d127360fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d127360fSAndrew Rist  * distributed with this work for additional information
6*d127360fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d127360fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d127360fSAndrew Rist  * "License"); you may not use this file except in compliance
9*d127360fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d127360fSAndrew Rist  *
11*d127360fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d127360fSAndrew Rist  *
13*d127360fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d127360fSAndrew Rist  * software distributed under the License is distributed on an
15*d127360fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d127360fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*d127360fSAndrew Rist  * specific language governing permissions and limitations
18*d127360fSAndrew Rist  * under the License.
19*d127360fSAndrew Rist  *
20*d127360fSAndrew Rist  *************************************************************/
21*d127360fSAndrew Rist 
22*d127360fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import java.util.*;
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // LinkedHashMap implrementation
28cdf0e10cSrcweir public class OrderedHashMap
29cdf0e10cSrcweir {
30cdf0e10cSrcweir     private HashMap hm = new HashMap();
31cdf0e10cSrcweir     private LinkedList list  = new LinkedList();
32cdf0e10cSrcweir 
iterator()33cdf0e10cSrcweir     public Iterator    iterator()   { return list.iterator(); }
34cdf0e10cSrcweir 
isEmpty()35cdf0e10cSrcweir     public boolean isEmpty()        { return hm.isEmpty(); }
get( Object key )36cdf0e10cSrcweir     public Object get( Object key ) { return hm.get( key ); }
get( int index )37cdf0e10cSrcweir     public Object get( int index )  { return hm.get( list.get( index ) ); }
keys()38cdf0e10cSrcweir     public Iterator keys()       { return list.iterator(); }
add( Object key , Object value )39cdf0e10cSrcweir     public Object add( Object key , Object value )
40cdf0e10cSrcweir     {
41cdf0e10cSrcweir         list.add( key );
42cdf0e10cSrcweir         return hm.put( key, value );
43cdf0e10cSrcweir     }
add( int index , Object key , Object value )44cdf0e10cSrcweir     public Object add( int index , Object key , Object value )
45cdf0e10cSrcweir     {
46cdf0e10cSrcweir         list.add( index , key );
47cdf0e10cSrcweir         return hm.put( key, value );
48cdf0e10cSrcweir     }
remove( Object key )49cdf0e10cSrcweir     public Object remove( Object key )
50cdf0e10cSrcweir     {
51cdf0e10cSrcweir         list.remove( list.indexOf( key ) );
52cdf0e10cSrcweir         return hm.remove( key );
53cdf0e10cSrcweir     }
move( int idxFrom , int idxTo )54cdf0e10cSrcweir     public void move( int idxFrom , int idxTo )
55cdf0e10cSrcweir     {
56cdf0e10cSrcweir         Object key = list.get( idxFrom );
57cdf0e10cSrcweir         list.remove( idxFrom );
58cdf0e10cSrcweir         list.add( idxTo , key );
59cdf0e10cSrcweir     }
move( Object key , int idxTo )60cdf0e10cSrcweir     public void move( Object key , int idxTo )
61cdf0e10cSrcweir     {
62cdf0e10cSrcweir        move( list.indexOf( key ) , idxTo );
63cdf0e10cSrcweir     }
size()64cdf0e10cSrcweir     public int size()
65cdf0e10cSrcweir     {
66cdf0e10cSrcweir         return hm.size();
67cdf0e10cSrcweir     }
elements()68cdf0e10cSrcweir     public Enumeration elements()
69cdf0e10cSrcweir     {
70cdf0e10cSrcweir         return new OHMenum( this );
71cdf0e10cSrcweir     }
72cdf0e10cSrcweir }
73cdf0e10cSrcweir 
74cdf0e10cSrcweir final class OHMenum implements Enumeration
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     OrderedHashMap ohm;
77cdf0e10cSrcweir     int index = 0;
78cdf0e10cSrcweir 
OHMenum()79cdf0e10cSrcweir     private OHMenum(){};
OHMenum( OrderedHashMap ohm )80cdf0e10cSrcweir     public OHMenum( OrderedHashMap ohm ){
81cdf0e10cSrcweir         this.ohm = ohm ;
82cdf0e10cSrcweir     }
83cdf0e10cSrcweir 
hasMoreElements()84cdf0e10cSrcweir     public boolean hasMoreElements()
85cdf0e10cSrcweir     {
86cdf0e10cSrcweir         return index < ohm.size();
87cdf0e10cSrcweir     }
nextElement()88cdf0e10cSrcweir     public Object nextElement()
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir         return ohm.get( index++ );
91cdf0e10cSrcweir     }
92cdf0e10cSrcweir }
93