001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     bstefanescu
011 */
012package org.nuxeo.ecm.automation.core.impl;
013
014import java.lang.reflect.Proxy;
015import java.util.ArrayList;
016import java.util.List;
017
018/**
019 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
020 */
021public class ClassKeyedRegistry<V> extends SuperKeyedRegistry<Class<?>, V> {
022
023    @Override
024    protected boolean isRoot(Class<?> key) {
025        return key == Object.class;
026    }
027
028    @Override
029    protected List<Class<?>> getSuperKeys(Class<?> key) {
030        List<Class<?>> result = new ArrayList<Class<?>>();
031        Class<?> cl = key.getSuperclass();
032        if (cl != null) {
033            result.add(cl);
034        }
035        for (Class<?> itf : key.getInterfaces()) {
036            result.add(itf);
037        }
038        return result;
039    }
040
041    @Override
042    protected boolean isCachingEnabled(Class<?> key) {
043        return !Proxy.isProxyClass(key);
044    }
045
046}