@@ -0,0 +1,1514 @@
+package net.sf.kerner.utils.collections.impl;%0A%0Aimport java.util.ArrayList;%0Aimport java.util.LinkedHashMap;%0Aimport java.util.List;%0Aimport java.util.Map;%0Aimport java.util.NoSuchElementException;%0A%0Apublic class ObjectToIndexMapperProxy extends ObjectToIndexMapperImpl %7B%0A%09%0A%09protected Map%3CObject, Object%3E identToIdent;%0A%09%0A%09public ObjectToIndexMapperProxy(Map%3CObject, Object%3E identToIdent) %7B%0A%09%09super(identToIdent.values());%0A%09%09this.identToIdent = new LinkedHashMap%3CObject, Object%3E(identToIdent);%0A%09%7D%0A%0A%09public int get(Object key) %7B%0A%09%09if(super.containsKey(identToIdent.get(key)))%7B%0A%09%09return super.get(identToIdent.get(key));%0A%09%09%7D%0A%09%09List%3CObject%3E keySet = new ArrayList%3CObject%3E(identToIdent.keySet());%0A%09%09for(int i = 0; i %3C keySet.size(); i++)%7B%0A%09%09%09if(keySet.get(i) != null && keySet.get(i).equals(key))%7B%0A%09%09%09%09return i;%0A%09%09%09%7D%0A%09%09%7D%0A%09%09throw new NoSuchElementException();%0A%09%7D%0A%09%0A%09public Object getValue(int index) %7B%0A%09%09Object o = super.getValue(index);%0A%09%09for(Object oo : identToIdent.values())%7B%0A%09%09%09if(o.equals(oo))%7B%0A%09%09%09%09return oo;%0A%09%09%09%7D%0A%09%09%7D%0A%09%09throw new NoSuchElementException();%0A%09%7D%0A%0A%09public boolean containsKey(Object key) %7B%0A%09%09return identToIdent.containsKey(key);%0A%09%7D%0A%0A%09public boolean containsValue(int index) %7B%0A%09%09return identToIdent.containsValue(super.getValue(index));%0A%09%7D%0A%0A%09public List%3CObject%3E keys() %7B%0A%09%09return new ArrayList%3CObject%3E(identToIdent.keySet());%0A%09%7D%0A%09%0A%09public void addMapping(Object key) %7B%0A%09%09throw new IllegalStateException();%09%0A%09%7D%0A%0A%09public void addMapping(Object key, int index) %7B%0A%09%09throw new IllegalStateException();%0A%09%7D%0A%09%0A%09%0A%0A%7D%0A

Introduce ObjectToIndexMapperProxy.