/**********************************************************************
 * This file is part of "Object Teams Development Tooling"-Software
 * 
 * Copyright 2007, 2009 Technical University Berlin, Germany.
 * 
 * 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
 * 
 * Please visit http://www.eclipse.org/objectteams for updates and contact.
 * 
 * Contributors:
 * Fraunhofer FIRST - Initial API and implementation
 * Technical University Berlin - Initial API and implementation
 **********************************************************************/
package org.eclipse.objectteams.otequinox;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.osgi.framework.Bundle;

/**
 * This slice of the IOTEquinoxService provides features to query the
 * registry of aspectBindings.
 * 
 * @author stephan
 * @since OTDT 1.1.4
 */
@NonNullByDefault
public interface IAspectRegistry {

	/** Are we running within the OTDT? */
	public boolean isOTDT();
	
	/** Is `symbolicName' the name of a base plugin for which an adapting team is registered? */
	public boolean isAdaptedBasePlugin(@Nullable String baseBundleName);

	/**
  	 * Get the names of aspect plugins adapting a given base plugin.
	 * @param basePlugin base plugin.
	 * @return non-null array of symbolic names of aspect plugins.
 	 */
	public String[] getAdaptingAspectPlugins(Bundle baseBundle);

	/**
	 *  Get the plugin IDs of all base plugins adapted by this aspect plugin.
	 *  If this plugin is not an aspect plugin return null.
	 *  @param aspectBundle potential aspect plugin
	 *  @return array of base plugin IDs or null.
	 */
	public String @Nullable[] getAdaptedBasePlugins(Bundle aspectBundle);

	/**
	 * Does `bundle' have internal teams, i.e., teams that adapt classes from their
	 * enclosing plug-in only?
	 * @param bundle
	 * @return
	 */
	public boolean hasInternalTeams(Bundle bundle);

	/**
	 * Does the symbolic name refer to an aspect bundle for which some permission was denied?
	 * @param symbolicName
	 * @return
	 */
	public boolean isDeniedAspectPlugin(String symbolicName);
}