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 *     Nuxeo - initial API and implementation
011 * $Id$
012 */
013
014package org.nuxeo.runtime.model;
015
016/**
017 * A component extension point.
018 * <p>
019 * Extension points are described by a name and a list of optional contribution object classes.
020 * <p>
021 * When defined, the contribution object classes are the type of objects accepted by this extension point.
022 * <p>
023 * The extension point is also responsible for extracting contribution objects from the extension data, if any.
024 *
025 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
026 */
027public interface ExtensionPoint {
028
029    /**
030     * Gets the extension point name.
031     *
032     * @return the extension point name
033     */
034    String getName();
035
036    /**
037     * Gets the object types of the contributions accepted by this extension point.
038     *
039     * @return the accepted contribution types
040     */
041    Class[] getContributions();
042
043    /**
044     * Gets the comment attached to this extension point if any.
045     *
046     * @return the comment
047     */
048    String getDocumentation();
049
050    /**
051     * Get the component owning the base extension which this one extends.
052     * <p>
053     * If this method returns null, it means the current extension point is extending another extension point and should
054     * forward any contribution to the base extension. The base extension has the same name as this one but it is
055     * declared in another component.
056     *
057     * @return the base extension point if this extension point is extending another extension point, or null if none
058     */
059    String getSuperComponent();
060
061}