Class BGPluginManagerBase

java.lang.Object
ru.bitel.bgbilling.kernel.plugin.common.BGPluginManagerBase

public abstract class BGPluginManagerBase extends Object
Общий родительский класс. Весьма кстати - абстрактный по сути. Для чего: его экземпляр не может быть создан/инициализирован итд. Напротив, в каждый момент времени может быть в приложении один из его потомков - серверный или клиентский. Но при этом всегда можно вызвать и базовый, например, когда мы не знаем, сервер это или клиент, как это выходит у нас в коммон.кэше. Оттуда можно получить список экстеншенов плагина по переданной точке не задумываясь. При этом список на самом деле возьмется именно тот, который соответствует серверному или клиентскому. Его возвращает отнаследуемый абстрактный метод. Опять же со статическими классами такой фокус не проходит - нельзя ни абстрактный перегрузить ни вообще назад обратиться по ссылке, потому сделан синглтон с базовым родителем. Но тоже не всё так просто. Само получение ссылки на экземпляр в базовом классе не перегружается в наследниках, ястественно, потому мы тут просто на базовый возвращаем, а там - при необходимости криэйтим соответствующий экземпляр.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    Закешированные списки экстеншенов для опретелённой точки: точка-строкой=>лист BGPlugInElement для неё.
    protected Map<Class<?>,Collection<?>>
    Закешированные "точки входа": точка-входа=>список инвоков для неё.
    protected static BGPluginManagerBase
    ссылка на экземпляр
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    getExtension(String pluginId, String point)
    Список экстеншенов для плагинов.
    getExtensions(String point, boolean cacheable)
    Список экстеншенов для плагинов.
    <T> Collection<T>
    getInvokeables(Class<T> point, boolean cacheable)
    Список всех точек входа для вызова их, то есть возвращается итерируемый список объектов, представляющих собой реализации интерфейса указанного у всех плагинов.
    получение ссылки в базовом классе.
    abstract BGPluginBase
    Также абстрактен метод получения плагина по его ид, в обоих менеджерах он должен быть перегружен и возвращать из нужного мэпа объект нужного класса (серверный плагин или клиентский плагин)
    protected static final List<URL>
    Список плагинов в системе (ищется именно по файловой системе).
    abstract <T> Collection<? extends BGPluginBase>
    Получение списка плагинов для создания из всех них списка классов-точеквхода для конкретной указанной точки входа.
    abstract Map<String,? extends BGPluginBase>
    Метод должен перегружаться, возвращает все активные на данный момент плагины.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • ourInstance

      protected static BGPluginManagerBase ourInstance
      ссылка на экземпляр
    • cacheInvokeablePoints

      protected Map<Class<?>,Collection<?>> cacheInvokeablePoints
      Закешированные "точки входа": точка-входа=>список инвоков для неё. Используется в getInvokeablePoints, если там установлен флаг "cacheable".
    • cacheExtensionPoints

      protected Map<String,List<BGPlugInElement>> cacheExtensionPoints
      Закешированные списки экстеншенов для опретелённой точки: точка-строкой=>лист BGPlugInElement для неё.
  • Constructor Details

    • BGPluginManagerBase

      public BGPluginManagerBase()
  • Method Details

    • getManager

      public static BGPluginManagerBase getManager()
      получение ссылки в базовом классе. На самом деле всё это фикция, миф. Нету этого экземпляра, но зато есть ссылка проинициализированная потомком.
    • getPlugins

      protected static final List<URL> getPlugins() throws ru.bitel.bgbilling.common.BGException
      Список плагинов в системе (ищется именно по файловой системе).
      Returns:
      список List URL на все описатели (plugin.xml) найденные в класспатхах по всем нужным нам местам.
      Throws:
      ru.bitel.bgbilling.common.BGException - любая ошибка поиска и загрузки
    • getExtensions

      public List<BGPlugInElement> getExtensions(String point, boolean cacheable)
      Список экстеншенов для плагинов. Работает и в клиенте и в сервере.
      Parameters:
      point - имя точки
      cacheable - флаг, нужно ли кешировать список этот по точке входа. Для частовызываемых надо ставить true, для вызываемых редко/однократно (инициализация, например) не надо тратить память и хранить неслабую структуру, ставьте false.
      Returns:
      список BGPlugInElement
    • getExtension

      public BGPlugInElement getExtension(String pluginId, String point)
      Список экстеншенов для плагинов. Работает и в клиенте и в сервере.
      Parameters:
      pluginId - ID плагина
      point - имя точки
      Returns:
      список BGPlugInElement
    • getPluginsMap

      public abstract Map<String,? extends BGPluginBase> getPluginsMap()
      Метод должен перегружаться, возвращает все активные на данный момент плагины. Используем генерик-вилдкарды чтобы успокоить компилятор, весьма удобно всё.
      Returns:
      мэп ид=>плагин
    • getPlugin

      public abstract BGPluginBase getPlugin(String id)
      Также абстрактен метод получения плагина по его ид, в обоих менеджерах он должен быть перегружен и возвращать из нужного мэпа объект нужного класса (серверный плагин или клиентский плагин)
      Parameters:
      id - строка ид плагина
      Returns:
      объект-плугин
    • getPluginsForInvokeablePoints

      public abstract <T> Collection<? extends BGPluginBase> getPluginsForInvokeablePoints(Class<T> point)
      Получение списка плагинов для создания из всех них списка классов-точеквхода для конкретной указанной точки входа. Сделано потому что: для сервера и клиента это разные мэпы, кроме того, для клиента это могут быть разные мэпы, потому что например для инициализации клиента это мэп всех плагинов, а не только текущевключенных, как по умолчанию.
      Type Parameters:
      T -
      Parameters:
      point -
      Returns:
    • getInvokeables

      public <T> Collection<T> getInvokeables(Class<T> point, boolean cacheable)
      Список всех точек входа для вызова их, то есть возвращается итерируемый список объектов, представляющих собой реализации интерфейса указанного у всех плагинов. Точка для конкретного плугина добывается по другому, см. в классе "плугин".
      Type Parameters:
      T -
      Parameters:
      point - - класс-интерфейс, точка входа
      cacheable - флаг, нужно ли кешировать список этот по точке входа. Для частовызываемых надо ставить true, для вызываемых редко/однократно (инициализация, например) не надо тратить память и хранить неслабую структуру, ставьте false.
      Returns:
      типа список классов-точеквхода, вернее уже объектов конечно созданных.