class IndexedKeyTreeMap extends KeyTreeMap<T> {

    public void put(final T object,
                    final int index) {
        final ArrayList<Key> keys = new ArrayList<>();
        for (final Key additionalKey : object.keys()) {
            keys.add(additionalKey);
        }

        doForAll(index,
                 new Callback<T>() {
                     @Override
                     public void callback(final T t) {
                         t.setIndex(t.getIndex() + 1);
                     }
                 });

        object.setIndex(index);

        super.put(object);
    }

    public  IndexedKeyTreeMap(final KeyDefinition... keyIDs);

}