package aQute.bnd.service;

import java.util.*;

/**
 * An interface to allow bnd to provide commands on elements. This interface can
 * provide information about the implementer but it can also provide information
 * about its elements. These elements are identified by a <i>target</i>. A
 * target is one or more objects that uniquely identify a child in the
 * container. The exact protocol for the target is left to the implementers,
 * this interface is just a conduit between the bnd world (no Eclipse etc) and
 * the GUI world, using only bnd and java interfaces.
 */
public interface Actionable {
	/**
	 * Return a map with command names (potentially localized) and a Runnable.
	 * The caller can execute the caller at will.
	 * 
	 * @param target
	 *            the target object, null if commands for the encompassing
	 *            entity is sought (e.g. the repo itself).
	 * @return A Map with the actions or null if no actions are available.
	 * @throws Exception
	 */
	Map<String,Runnable> actions(Object... target) throws Exception;

	/**
	 * Return a tooltip for the given target or the encompassing entity if null
	 * is passed.
	 * 
	 * @param target
	 *            the target, any number of parameters to identify
	 * @return the tooltip or null
	 * @throws Exception
	 */
	String tooltip(Object... target) throws Exception;

	/**
	 * Provide a title for an element.
	 * 
	 * @param target
	 *            the target, any number of parameters to identify
	 * @return the text for this element
	 * @throws Exception
	 */

	String title(Object... target) throws Exception;
}
