blob: cfd2d4e79077ec8f4173b08228115869725738db [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.api.tools.internal.provisional.model;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.osgi.service.resolver.ResolverError;
import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
import org.eclipse.pde.api.tools.internal.search.IReferenceCollection;
/**
* Describes the API of a software component. An API component is composed of a
* set of {@link IApiTypeRoot}s owned by the component and a description
* (manifest) of the component's API.
*
* @since 1.0.0
*/
public interface IApiComponent extends IApiTypeContainer {
/**
* Returns this component's symbolic name. This is a handle-only method -
* the component may not exist or may be disposed.
*
* @return component's symbolic name
*/
public String getSymbolicName();
/**
* Returns this component's API description.
*
* @return API description for this component
* @throws CoreException if there was a problem creating the API description
* for this component
* @throws CoreException if its baseline is disposed
*/
public IApiDescription getApiDescription() throws CoreException;
/**
* Returns whether this component has an underlying API description. Even if
* a component has no underlying description it will return one from
* {@link #getApiDescription()}, but it will be empty. This method allows
* clients to know if there was any thing used to populate the description.
*
* @return whether this component has an underlying API description
*/
public boolean hasApiDescription();
/**
* Returns this component's version identifier.
*
* @return component version
*/
public String getVersion();
/**
* Returns the execution environments required by this component for
* building and running. An execution environment is represented by a unique
* identifier as defined by OSGi - for example "J2SE-1.4" or
* "CDC-1.0/Foundation-1.0". Any of the environments will allow this
* component to be resolved.
*
* @return execution environment identifier
* @throws CoreException if its baseline is disposed
*/
public String[] getExecutionEnvironments() throws CoreException;
/**
* Returns {@link IApiTypeContainer}s containing the {@link IApiTypeRoot}s
* associated with this component in the order they would appear on the
* build path or class path.
*
* @return {@link IApiTypeContainer}s
*/
public IApiTypeContainer[] getApiTypeContainers() throws CoreException;
/**
* Returns {@link IApiTypeContainer}s containing the {@link IApiTypeRoot}s
* associated with this component that comes from the given component id in
* the order they would appear on the build path or class path.
*
* This is used to filter out the {@link IApiTypeContainer}s coming from a
* fragment
*
* @param id the given component id
* @return {@link IApiTypeContainer}s
* @throws CoreException if its baseline is disposed
*/
public IApiTypeContainer[] getApiTypeContainers(String id) throws CoreException;
/**
* Returns a collection of descriptions of components required by this
* component or an empty collection if none.
*
* @return required component descriptions, possibly empty
* @throws CoreException if its baseline is disposed
*/
public IRequiredComponentDescription[] getRequiredComponents() throws CoreException;
/**
* Returns the location of this API component.
*
* @return location
*/
public String getLocation();
/**
* Returns if the component is a system component (a JRE definition for
* example) or not. System components are not persisted with baselines, as
* they are recreated dynamically by the framework
*
* @return true if the component is a system component, false otherwise
*/
public boolean isSystemComponent();
/**
* Returns if the component is a source component or not. A source component
* is not persisted with profiles, as they don't contain any binaries.
*
* <p>
* A component is a source component if and only if one of the following
* conditions is true:
* </p>
* <ul>
* <li>its manifest contains an entry called
* <code>Eclipse-SourceBundle</code></li>
* <li>its <code>plugin.xml</code> file contains an extension for the
* extension point if the component is not a fragment.
* <li>its <code>fragment.xml</code> file contains an extension for the
* extension point if the component is a fragment.
* <code>org.eclipse.pde.core.source</code></li>
* </ul>
*
* @return true if the component is a source component, false otherwise
* @throws CoreException if its baseline is disposed
*/
public boolean isSourceComponent() throws CoreException;
/**
* Disposes this API component. Clients must call this method when done with
* an API component. Note that disposing an {@link IApiBaseline} will
* dispose all of its components.
*/
public void dispose();
/**
* Returns the {@link IApiBaseline} this component is contained in.
*
* @return the parent {@link IApiBaseline}
* @throws CoreException if its baseline is disposed
*/
public IApiBaseline getBaseline() throws CoreException;
/**
* Returns a store of problem filters defined for this component or
* <code>null</code> if none.
*
* @return filter store or <code>null</code>
* @throws CoreException if its baseline is disposed
*/
public IApiFilterStore getFilterStore() throws CoreException;
/**
* Returns whether this API component is a fragment.
*
* @return whether this API component is a fragment
* @throws CoreException if its baseline is disposed
*/
public boolean isFragment() throws CoreException;
/**
* Returns the host {@link IApiComponent} for this component iff this
* component is a fragment. Otherwise <code>null</code> is returned.
*
* @return the host {@link IApiComponent} for this component or
* <code>null</code>.
* @throws CoreException if the baseline is disposed
*/
public IApiComponent getHost() throws CoreException;
/**
* Returns whether this API component is the host of one or more fragments.
*
* @return whether this API component is the host of one or more fragments
* @throws CoreException if its baseline is disposed
*/
public boolean hasFragments() throws CoreException;
/**
* Returns the lowest execution environments required by this component for
* building and running. An execution environment is represented by a unique
* identifier as defined by OSGi - for example "J2SE-1.4" or
* "CDC-1.0/Foundation-1.0".
*
* <p>
* The result will be more than one execution environment when the
* corresponding api component has a mixed of execution environments in the
* JRE family (JRE-1.1, J2SE-1.2,...) and in OSGi minimums or cdc/foundation
* families.
* </p>
* <p>
* Since the latter ones are not exact subsets of the ones from the JREs
* family, we need to return all the incompatible ones.
* </p>
*
* @return execution environment identifiers
* @throws CoreException if its baseline is disposed
*/
public String[] getLowestEEs() throws CoreException;
/**
* Returns the list of errors found during the component resolution.
*
* @return the list of errors or <code>null</code> if none
* @throws CoreException if its baseline is disposed
*/
public ResolverError[] getErrors() throws CoreException;
/**
* Returns the associated element descriptor for this member.
*
* @return element descriptor
*/
public IElementDescriptor getHandle();
/**
* Returns all references to this component as registered by API use scans
* with the Use Scan Manager.
*
* @return the collection of reference descriptors
*/
public IReferenceCollection getExternalDependencies();
/**
* @return true if the current component is disposed
*/
public boolean isDisposed();
}