blob: 66f6ab5ae458c6b042256db2d9ae0d31f2c2c2e0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.services.core;
import java.lang.reflect.InvocationTargetException;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
public interface IServiceModelManager extends IAdaptable {
/**
* Associate the service configuration with a project. A project can have multiple
* service configurations. The service configuration will become the active
* configuration for the project.
*
* @param project the project
* @param conf the configuration
*
* @throws NullPointerException if project or conf is null
*/
public void addConfiguration(IProject project, IServiceConfiguration conf);
/**
* Adds the given service configuration to the model without explicitly
* associating it with a particular project. It may be associated with a project
* later using the addConfiguration(IProject, IServiceConfiguration) method.
*
* @param project the project
* @param conf the configuration
*
* @throws NullPointerException if conf is null
*/
public void addConfiguration(IServiceConfiguration conf);
/**
* Adds the given listener for service model events. Has no effect if an
* identical listener is already registered.
* <p>
* Listeners can listen for several types of event as defined in
* <code>IServiceModelEvent</code>. Clients are free to register for
* any number of event types. Clients are guaranteed to only receive
* event types for which they are registered.
* </p>
*
* @param listener the listener
* @param eventMask the bit-wise OR of all event types of interest to the
* listener
* @see IServiceModelEventListener
* @see IServiceModelEvent
* @see #removeEventListener(IServiceModelEventListener)
*/
public void addEventListener(IServiceModelEventListener listener, int type);
/**
* Export a set of service configurations to a file.
*
* @param file file name used to save the configuration
* @return service configurations to export
* @throws InvocationTargetException wraps any exceptions thrown during export
*/
public boolean exportConfigurations(String filename, IServiceConfiguration[] configs) throws InvocationTargetException;
/**
* Get the global "active" service configuration. The "active" configuration is an
* arbitrary configuration can be used by tools that do not operate on a project basis.
*
* @return active service configuration, or null if no active configuration has been set
*/
public IServiceConfiguration getActiveConfiguration();
/**
* Get the configuration that is currently active for the project. Each project has
* exactly one active configuration, which describes the mapping from services to
* service providers. By default, the first configuration created for a project will
* be the active configuration for that project.
*
* @param project project for which the configuration will be obtained
* @return the service configuration for this project
*
* @throws NullPointerException if project is null
* @throws ProjectNotConfiguredException if the project has not been configured
*/
public IServiceConfiguration getActiveConfiguration(IProject project);
/**
* Returns all the service categories that have been registered with
* the system.
* @return
*/
public Set<IServiceCategory> getCategories();
/**
* Get the named configuration for this project.
*
* @param project project for which the configuration will be obtained
* @param name name of the configuration
* @return the service configuration or null if no configurations with the supplied name exist
*
* @throws NullPointerException if project is null
* @throws ProjectNotConfiguredException if the project has not been configured
*/
public IServiceConfiguration getConfiguration(IProject project, String name);
/**
* Get the configuration with the specified ID.
*
* @param id ID of the configuration
* @return the service configuration or null if no configurations with the supplied ID exist
*/
public IServiceConfiguration getConfiguration(String id);
/**
* Get all configurations available in the workspace.
*
* @return all configurations that could be found, or an empty set
*/
public Set<IServiceConfiguration> getConfigurations();
/**
* Get all the configurations that are known by the project
*
* @param project project containing the configurations
* @return set of configurations known by the project
*
* @throws NullPointerException if project is null
* @throws ProjectNotConfiguredException if the project has not been configured
*/
public Set<IServiceConfiguration> getConfigurations(IProject project);
/**
* Get the set of projects which use the specified service configuration
*
* @param serviceConfiguration Service configuration to query set of projects using it
* @return Set of projects using the service configuration
*/
public Set<IProject> getProjectsForConfiguration(IServiceConfiguration serviceConfiguration);
/**
* Retrieves the service corresponding to a given id.
*
* @param id The unique id of the service to retrieve.
* @return IService or null
*/
public IService getService(String id);
/**
* Return a new instance of a service provider based on the descriptor.
*
* @param desc extension description
* @return service provider
*/
public IServiceProvider getServiceProvider(IServiceProviderDescriptor desc);
/**
* Get all the services that have been registered with the system.
*
* @return a set of all the services
*/
public Set<IService> getServices();
/**
* Get all the services that are used by a particular project.
*
* @param project project using the services
* @return set of services
*
* @throws NullPointerException if project is null
* @throws ProjectNotConfiguredException if the project has not been configured
*/
public Set<IService> getServices(IProject project);
/**
* Get all the services that are associated with a project nature.
*
* @param nature project nature
* @return set of services or null
*/
public Set<IService> getServices(String natureID);
/**
* Import a set of service configurations from a file. The configurations
* must be added to the model using {@link #addConfiguration(IServiceConfiguration)}
* before they can be used. No model events will be generated while loading
* the configurations.
*
* @param file file name containing the configuration
* @return imported service configurations
* @throws InvocationTargetException wraps any exceptions thrown during import
*/
public IServiceConfiguration[] importConfigurations(String filename) throws InvocationTargetException;
/**
* Returns true if the given project has a configuration.
*
*/
public boolean isConfigured(IProject project);
/**
* Validate a set of service configurations in a file
*
* @param file file name of the file containing the configurations
* @return true if valid, false otherwise
*/
public boolean isValidConfigurationFile(String filename);
/**
* Obtain a new service configuration with name 'name'. The name
* does not need to be unique. This service configuration will not
* become part of the service model until it is passed to
* one of the addConfiguration() methods.
*
* @param name name of service configuration
* @return new service configuration
*/
public IServiceConfiguration newServiceConfiguration(String name);
/**
* Removes all the configurations and services associated to the given project.
* If the project has not been configured then this method does nothing.
*
* @throws NullPointerException if project is null
*/
public void remove(IProject project);
/**
* Removes the service configuration.
*
* @param conf the configuration
*/
public void remove(IServiceConfiguration conf);
/**
* TODO What happens if you try to remove the active configuration?
* TODO What happens if there are no configurations left after removing the given configuration?
*
* Remove the service configuration from a project.
* If the configuration was not set up on the project then this method
* does nothing.
*
* @param project the project
* @param conf the configuration
*
* @throws NullPointerException if project or conf is null
* @throws ProjectNotConfiguredException if the project has not been configured
*/
public void removeConfiguration(IProject project, IServiceConfiguration conf);
/**
* Removes the given listener for service model events. Has no effect if the
* listener is not registered.
* <p>
* @param listener the listener
* @see IServiceModelEventListener
* @see IServiceModelEvent
* @see #addEventListener(IServiceModelEventListener)
*/
public void removeEventListener(IServiceModelEventListener listener);
/**
* Set the active configuration for a project. By default, the first configuration created
* for a project will be the active configuration for that project.
*
* @param project project for which the configuration will be obtained
* @param configuration configuration to set as active for this project
*
* @throws NullPointerException if project or configuration is null
* @throws ProjectNotConfiguredException if the project has not been configured yet
* @throws IllegalArgumentException if the configuration was not part of the project
*/
public void setActiveConfiguration(IProject project, IServiceConfiguration configuration);
/**
* Set the global "active" service configuration. The "active" configuration is an
* arbitrary configuration can be used by tools that do not operate on a project basis.
*
* @param config the service configuration to select as active
*/
public void setActiveConfiguration(IServiceConfiguration config);
}