/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.service.exporter.support; import org.eclipse.gemini.blueprint.util.internal.ClassUtils; import org.springframework.core.enums.StaticLabeledEnum; /** * Enum-like class indicatin class exporters available to {@link OsgiServiceFactoryBean} for registering object as OSGi * services. * * @author Costin Leau * @deprecated as of 2.0, replaced by {@link InterfaceDetector} */ public abstract class AutoExport extends StaticLabeledEnum implements InterfaceDetector { /** Do not export anything */ public static final AutoExport DISABLED = new AutoExport(0, "DISABLED") { private static final long serialVersionUID = -8297270116184239840L; private final Class<?>[] clazz = new Class[0]; Class<?>[] getExportedClasses(Class<?> targetClass) { return clazz; } }; /** * Export all interfaces (and their hierarchy) implemented by the given class */ public static final AutoExport INTERFACES = new AutoExport(1, "INTERFACES") { private static final long serialVersionUID = -8336152449611885031L; public Class<?>[] getExportedClasses(Class<?> targetClass) { return ClassUtils.getClassHierarchy(targetClass, ClassUtils.ClassSet.INTERFACES); } }; /** * Export the class hierarchy (all classes inherited by the given target excluding Object.class) */ public static final AutoExport CLASS_HIERARCHY = new AutoExport(2, "CLASS_HIERARCHY") { private static final long serialVersionUID = 6464782616822538297L; public Class<?>[] getExportedClasses(Class<?> targetClass) { return ClassUtils.getClassHierarchy(targetClass, ClassUtils.ClassSet.CLASS_HIERARCHY); } }; /** * Export every class, inherited or implemented by the given target. Similar to {@link #CLASS_HIERARCHY} + * {@link #INTERFACES} */ public static final AutoExport ALL_CLASSES = new AutoExport(3, "ALL_CLASSES") { private static final long serialVersionUID = -6628398711158262852L; public Class<?>[] getExportedClasses(Class<?> targetClass) { return ClassUtils.getClassHierarchy(targetClass, ClassUtils.ClassSet.ALL_CLASSES); } }; /** * Determines the exported classes given a certain target class. * * @param targetClass class to be exported into OSGi * @return array of classes that will be published for the OSGi service. */ abstract Class<?>[] getExportedClasses(Class<?> targetClass); public final Class<?>[] detect(Class<?> targetClass) { return getExportedClasses(targetClass); } /** * Constructs a new <code>AutoExport</code> instance. * * @param code * @param label */ private AutoExport(int code, String label) { super(code, label); } }