/* XOWA: the XOWA Offline Wiki Application Copyright (C) 2012-2017 gnosygnu@gmail.com XOWA is licensed under the terms of the General Public License (GPL) Version 3, or alternatively under the terms of the Apache License Version 2.0. You may use XOWA according to either of these licenses as is most appropriate for your project on a case-by-case basis. The terms of each license can be found in the source code repository: GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ package gplx.xowa.addons; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.wikis.searchs.gui.urlbars.*; import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*; import gplx.xowa.addons.wikis.searchs.specials.*; public class Xoax_addon_mgr { private final Ordered_hash hash = Ordered_hash_.New(); // LOCK: must synchronized else two search tabs will fail on startup public Xoax_addon_itm Itms__get_or_null(String key) {synchronized (hash) {return (Xoax_addon_itm)hash.Get_by(key);}} public void Itms__add_many(Xoax_addon_itm... ary) { for (Xoax_addon_itm itm : ary) Itms__add(itm); } public void Itms__add(Xoax_addon_itm itm) { synchronized (hash) { String addon_key = itm.Addon__key(); hash.Add(addon_key, itm); // Xoa_app_.Usr_dlg().Log_many("", "", "addons.init: ~{0}", addon_key); } } // HACK: should make separate generic app-level container public Srch_urlbar_mgr Itms__search__urlbar() {return itms__search__urlbar;} private final Srch_urlbar_mgr itms__search__urlbar = new Srch_urlbar_mgr(); public Srch_htmlbar_mgr Itms__search__htmlbar() {return itms__search__htmlbar;} private final Srch_htmlbar_mgr itms__search__htmlbar = new Srch_htmlbar_mgr(); public Srch_special_cfg Itms__search__special() {return itms__search__special;} private final Srch_special_cfg itms__search__special = new Srch_special_cfg(); public void Init_by_kit(Xoae_app app, gplx.gfui.kits.core.Gfui_kit kit) { itms__search__urlbar.Init_by_kit(app, kit); itms__search__htmlbar.Init_by_kit(app, kit); itms__search__special.Init_by_kit(app, kit); } public Xoax_addon_mgr Add_dflts_by_app(Xoa_app app) { app.Bldr().Cmd_regy().Add_many ( gplx.xowa.bldrs.cmds.utils.Xob_alert_cmd.Prototype ); app.Addon_mgr().Itms__add_many // bldrs ( new gplx.xowa.addons.bldrs.files .Xoax_builds_files_addon() , new gplx.xowa.addons.bldrs.wmdumps.pagelinks .Xoax_builds_pagelinks_addon() , new gplx.xowa.addons.bldrs.wmdumps.imglinks .Imglnk_addon() , new gplx.xowa.addons.bldrs.utils_rankings .Xoax_builds_utils_rankings_addon() , new gplx.xowa.addons.wikis.searchs .Xoax_builds_search_addon() , new gplx.xowa.addons.bldrs.updates.files .Xodel_addon() , new gplx.xowa.addons.bldrs.htmls .Html__dump_to_fsys__addon() , new gplx.xowa.addons.bldrs.exports .Export_addon() , new gplx.xowa.addons.wikis.pages.randoms .Rndm_addon() , new gplx.xowa.addons.bldrs.hdumps.diffs .Dumpdiff_addon() , new gplx.xowa.addons.wikis.ctgs.bldrs .Xoax_ctg_bldr_addon() , new gplx.xowa.xtns.wbases.imports .Xowb_bldr_addon() // xtns , new gplx.xowa.xtns.math .Xomath_addon() // specials , new gplx.xowa.addons.wikis.registrys .Wiki_registry_addon() , new gplx.xowa.addons.wikis.imports .Xow_import_addon() , new gplx.xowa.addons.bldrs.xodirs .Xobc_xodir_addon() , new gplx.xowa.addons.bldrs.centrals .Xobc_task_addon() , new gplx.xowa.addons.apps.helps.logs .Xolog_addon() , new gplx.xowa.addons.wikis.pages.syncs .Xosync_addon() , new gplx.xowa.addons.wikis.directorys .Xowdir_addon() , new gplx.xowa.addons.apps.cfgs .Xoa_cfg_addon() , new gplx.xowa.addons.apps.updates .Xoa_update_addon() , new gplx.xowa.addons.apps.maints.sql_execs .Xosql_exec_addon() , new gplx.xowa.addons.wikis.fulltexts .Xosearch_fulltext_addon() // jsons ); if (app.Mode().Tid_is_http()) { app.Addon_mgr().Itms__add_many(new gplx.xowa.addons.servers.https.Xoax_long_poll_addon()); } return this; } public void Run_by_app(Xoa_app app) { int len = hash.Len(); for (int i = 0; i < len; ++i) { Xoax_addon_itm addon = (Xoax_addon_itm)hash.Get_at(i); // init if (Type_adp_.Implements_intf_obj(addon, Xoax_addon_itm__init.class)) { Xoax_addon_itm__init addon_init = (Xoax_addon_itm__init)addon; addon_init.Init_addon_by_app(app); init_list.Add(addon_init); } // add bldr cmds if (Type_adp_.Implements_intf_obj(addon, Xoax_addon_itm__bldr.class)) { Xoax_addon_itm__bldr addon_bldr = (Xoax_addon_itm__bldr)addon; app.Bldr().Cmd_regy().Add_many(addon_bldr.Bldr_cmds()); } // add special pages if (Type_adp_.Implements_intf_obj(addon, Xoax_addon_itm__special.class)) { Xoax_addon_itm__special addon_sp = (Xoax_addon_itm__special)addon; app.Special_regy().Add_many(addon_sp.Special_pages()); } // add json mgrs if (Type_adp_.Implements_intf_obj(addon, Xoax_addon_itm__json.class)) { Xoax_addon_itm__json addon_json = (Xoax_addon_itm__json)addon; gplx.xowa.htmls.bridges.Bridge_cmd_itm[] json_cmds = addon_json.Json_cmds(); for (gplx.xowa.htmls.bridges.Bridge_cmd_itm json_cmd : json_cmds) { json_cmd.Init_by_app(app); app.Html__bridge_mgr().Cmd_mgr().Add(json_cmd); } } } } private boolean init_cfg = true; // WORKAROUND:move cfg to separate proc instead of lazy-loading on 1st wiki public void Load_by_wiki(Xow_wiki wiki) { if (init_cfg) { init_cfg = false; gplx.xowa.bldrs.filters.dansguardians.Dg_match_mgr.Cfg__reg(wiki.App()); } int len = init_list.Len(); for (int i = 0; i < len; ++i) { Xoax_addon_itm__init itm = (Xoax_addon_itm__init)init_list.Get_at(i); itm.Init_addon_by_wiki(wiki); } } private final List_adp init_list = List_adp_.New(); }