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