/*******************************************************************************
 * Copyright (c) 2004, 2006 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.core.runtime;

import org.osgi.framework.Bundle;

/**
 * Bundle groups represent a logical collection of plug-ins (aka bundles).  Bundle
 * groups do not contain their constituents but rather collect them together under
 * a common label.  The main role of a bundle group is to report to the system
 * (e.g., the About dialog) what bundles have been installed.  They are not intended
 * for use in managing the set of bundles they represent.
 * <p>
 * Since the bulk of the branding related information is specific to the consumer, 
 * bundle groups also carry an arbitrary set of properties.  The valid set of 
 * key-value pairs and their interpretation defined by the consumer in the 
 * target environment.
 * </p><p>
 * The Eclipse UI is the typical consumer of bundle groups and defines various 
 * property keys that it will use, for example, to display About information.  See
 * <code>org.eclipse.ui.branding.IBundleGroupConstants</code>.
 * </p>
 * @see IBundleGroupProvider
 * @since 3.0
 */
public interface IBundleGroup {

	/**
	 * Returns the identifier of this bundle group.  Bundle groups are uniquely identified by the combination of
	 * their identifier and their version.
	 * 
	 * @see #getVersion()
	 * @return the identifier for this bundle group
	 */
	public String getIdentifier();

	/**
	 * Returns the human-readable name of this bundle group.
	 * 
	 * @return the human-readable name
	 */
	public String getName();

	/**
	 * Returns the version of this bundle group. Bundle group version strings have the same format as 
	 * bundle versions (i.e., major.minor.service.qualifier).  Bundle groups are uniquely identified 
	 * by the combination of their identifier and their version.
	 * 
	 * @see #getIdentifier()
	 * @return the string form of this bundle group's version
	 */
	public String getVersion();

	/**
	 * Returns a text description of this bundle group.
	 * 
	 * @return text description of this bundle group
	 */
	public String getDescription();

	/**
	 * Returns the name of the provider of this bundle group.
	 * 
	 * @return the name of the provider or <code>null</code> if none
	 */
	public String getProviderName();

	/**
	 * Returns a list of all bundles supplied by this bundle group.  
	 * 
	 * @return the bundles supplied by this bundle group
	 */
	public Bundle[] getBundles();

	/**
	 * Returns the property of this bundle group with the given key.
	 * <code>null</code> is returned if there is no such key/value pair.
	 * 
	 * @param key the name of the property to return
	 * @return the value associated with the given key or <code>null</code> if none
	 */
	public String getProperty(String key);
}
