Class BGPluginManagerBase
java.lang.Object
ru.bitel.bgbilling.kernel.plugin.common.BGPluginManagerBase
Общий родительский класс. Весьма кстати - абстрактный по сути. Для чего: его
экземпляр не может быть создан/инициализирован итд. Напротив, в каждый момент
времени может быть в приложении один из его потомков - серверный или
клиентский. Но при этом всегда можно вызвать и базовый, например, когда мы не
знаем, сервер это или клиент, как это выходит у нас в коммон.кэше. Оттуда
можно получить список экстеншенов плагина по переданной точке не задумываясь.
При этом список на самом деле возьмется именно тот, который соответствует
серверному или клиентскому. Его возвращает отнаследуемый абстрактный метод.
Опять же со статическими классами такой фокус не проходит - нельзя ни
абстрактный перегрузить ни вообще назад обратиться по ссылке, потому сделан
синглтон с базовым родителем. Но тоже не всё так просто. Само получение
ссылки на экземпляр в базовом классе не перегружается в наследниках,
ястественно, потому мы тут просто на базовый возвращаем, а там - при
необходимости криэйтим соответствующий экземпляр.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Map<String, List<BGPlugInElement>> Закешированные списки экстеншенов для опретелённой точки: точка-строкой=>лист BGPlugInElement для неё.protected Map<Class<?>, Collection<?>> Закешированные "точки входа": точка-входа=>список инвоков для неё.protected static BGPluginManagerBaseссылка на экземпляр -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetExtension(String pluginId, String point) Список экстеншенов для плагинов.getExtensions(String point, boolean cacheable) Список экстеншенов для плагинов.<T> Collection<T> getInvokeables(Class<T> point, boolean cacheable) Список всех точек входа для вызова их, то есть возвращается итерируемый список объектов, представляющих собой реализации интерфейса указанного у всех плагинов.static BGPluginManagerBaseполучение ссылки в базовом классе.abstract BGPluginBaseТакже абстрактен метод получения плагина по его ид, в обоих менеджерах он должен быть перегружен и возвращать из нужного мэпа объект нужного класса (серверный плагин или клиентский плагин)Список плагинов в системе (ищется именно по файловой системе).abstract <T> Collection<? extends BGPluginBase> getPluginsForInvokeablePoints(Class<T> point) Получение списка плагинов для создания из всех них списка классов-точеквхода для конкретной указанной точки входа.abstract Map<String, ? extends BGPluginBase> Метод должен перегружаться, возвращает все активные на данный момент плагины.
-
Field Details
-
ourInstance
ссылка на экземпляр -
cacheInvokeablePoints
Закешированные "точки входа": точка-входа=>список инвоков для неё. Используется в getInvokeablePoints, если там установлен флаг "cacheable". -
cacheExtensionPoints
Закешированные списки экстеншенов для опретелённой точки: точка-строкой=>лист BGPlugInElement для неё.
-
-
Constructor Details
-
BGPluginManagerBase
public BGPluginManagerBase()
-
-
Method Details
-
getManager
получение ссылки в базовом классе. На самом деле всё это фикция, миф. Нету этого экземпляра, но зато есть ссылка проинициализированная потомком. -
getPlugins
Список плагинов в системе (ищется именно по файловой системе).- Returns:
- список List URL на все описатели (plugin.xml) найденные в класспатхах по всем нужным нам местам.
- Throws:
ru.bitel.bgbilling.common.BGException- любая ошибка поиска и загрузки
-
getExtensions
Список экстеншенов для плагинов. Работает и в клиенте и в сервере.- Parameters:
point- имя точкиcacheable- флаг, нужно ли кешировать список этот по точке входа. Для частовызываемых надо ставить true, для вызываемых редко/однократно (инициализация, например) не надо тратить память и хранить неслабую структуру, ставьте false.- Returns:
- список BGPlugInElement
-
getExtension
Список экстеншенов для плагинов. Работает и в клиенте и в сервере.- Parameters:
pluginId- ID плагинаpoint- имя точки- Returns:
- список BGPlugInElement
-
getPluginsMap
Метод должен перегружаться, возвращает все активные на данный момент плагины. Используем генерик-вилдкарды чтобы успокоить компилятор, весьма удобно всё.- Returns:
- мэп ид=>плагин
-
getPlugin
Также абстрактен метод получения плагина по его ид, в обоих менеджерах он должен быть перегружен и возвращать из нужного мэпа объект нужного класса (серверный плагин или клиентский плагин)- Parameters:
id- строка ид плагина- Returns:
- объект-плугин
-
getPluginsForInvokeablePoints
public abstract <T> Collection<? extends BGPluginBase> getPluginsForInvokeablePoints(Class<T> point) Получение списка плагинов для создания из всех них списка классов-точеквхода для конкретной указанной точки входа. Сделано потому что: для сервера и клиента это разные мэпы, кроме того, для клиента это могут быть разные мэпы, потому что например для инициализации клиента это мэп всех плагинов, а не только текущевключенных, как по умолчанию.- Type Parameters:
T-- Parameters:
point-- Returns:
-
getInvokeables
Список всех точек входа для вызова их, то есть возвращается итерируемый список объектов, представляющих собой реализации интерфейса указанного у всех плагинов. Точка для конкретного плугина добывается по другому, см. в классе "плугин".- Type Parameters:
T-- Parameters:
point- - класс-интерфейс, точка входаcacheable- флаг, нужно ли кешировать список этот по точке входа. Для частовызываемых надо ставить true, для вызываемых редко/однократно (инициализация, например) не надо тратить память и хранить неслабую структуру, ставьте false.- Returns:
- типа список классов-точеквхода, вернее уже объектов конечно созданных.
-