class KeyTreeMap {

    public void put(final T object) {
        PortablePreconditions.checkNotNull("Object can not be null",
                                           object);

        final UUIDKey uuidKey = UUIDKey.getUUIDKey(object.keys());

        if (keys.contains(uuidKey)) {
            throw new IllegalArgumentException("UUID already already in use. You are trying to add the same object twice.");
        }

        keys.add(uuidKey);

        for (final Key additionalKey : object.keys()) {
            put(additionalKey,
                object);
        }
    }

    public  KeyTreeMap(final KeyDefinition... keyIDs);

}