content: package alien4cloud.plugin;
  
  import alien4cloud.plugin.model.PluginUsage;
  
  import java.util.List;
  
  /**
   * A plugin linker is able to link some classes out of a plugin application context into alien's internal mechanisms.
   *
   * @author luc boutier
   *
   * @param <T> The type of implementation that the plugin linker supports.
   */
  public interface IPluginLinker<T> {
      /**
       * Link an instance of a linkable class from a plugin
       *
       * @param pluginId The id of the plugin.
       * @param instanceId The id of the instance to actually link.
       * @param instance The instance to link.
       */
      void link(String pluginId, String instanceId, T instance);
  
      /**
       * Unlink all instance of a given plugin.
       *
       * @param pluginId The id of the plugin to unlink.
       */
      void unlink(String pluginId);
  
      /**
       * Get usage for a given plugin.
       *
       * @param pluginId The id of the used plugin.
       * @return a list of all plugin usages.
       */
      List<PluginUsage> usage(String pluginId);
  }
  