From 11881228230cf59ad48df9f2a0676e45861e67f7 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sat, 18 Feb 2017 10:37:40 -0500 Subject: [PATCH] Wiki.Dom: Remove wiki dependency from db_mgr --- 400_xowa/src/gplx/xowa/Xowe_wiki.java | 2 +- .../specials/items/bldrs/Xow_wiki_factory.java | 14 ++++++++++++++ .../xowa/bldrs/cmds/Xob_dump_mgr_base.java | 8 +++++++- 400_xowa/src/gplx/xowa/wikis/Xowv_wiki.java | 6 +++--- .../src/gplx/xowa/wikis/data/Xow_db_mgr.java | 18 ++++++++++++------ .../src/gplx/xowa/wikis/dbs/Xodb_mgr_sql.java | 2 +- 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/400_xowa/src/gplx/xowa/Xowe_wiki.java b/400_xowa/src/gplx/xowa/Xowe_wiki.java index f12a7dc47..1871b1494 100644 --- a/400_xowa/src/gplx/xowa/Xowe_wiki.java +++ b/400_xowa/src/gplx/xowa/Xowe_wiki.java @@ -181,7 +181,7 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm { } else { Xodb_mgr_sql db_mgr_sql = this.Db_mgr_create_as_sql(); - db_mgr_sql.Core_data_mgr().Init_by_load(core_db_url); + Xow_db_mgr.Init_by_load(this, core_db_url); file_mgr.Init_file_mgr_by_load(this); db_mgr_sql.Core_data_mgr().Tbl__page().Flds__assert(); // NOTE: must go above html_mgr.Init_by_wiki b/c Page_load will be done via messages diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java index 9eae980de..887700da6 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java @@ -82,5 +82,19 @@ public class Xow_wiki_factory { // verify json Xowdir_wiki_props_mgr core_db_props = Xowdir_wiki_props_mgr_.New_xowa(app, core_db_url); core_db_props.Verify(Bool_.N, String_.new_u8(domain), core_db_url); + + // check for page_ids < 1 +// Xowd_page_tbl page_tbl = new Xowd_page_tbl(core_db_conn, Bool_.N); +// int[] page_ids = page_tbl.Select_invalid(); +// int page_ids_len = page_ids.length; +// if (page_ids_len > 0) { +// int next_id = cfg_tbl.Select_int("db", "page.id_next"); +// for (int i = 0; i < page_ids_len; i++) { +// int old_page_id = page_ids[i]; +// int new_page_id = next_id + i; +// Xopg_db_mgr.Update_page_id(wiki, old_id, new_id); +// } +// cfg_tbl.Upsert_int("db", "page.id_next", next_id + page_ids_len); +// } } } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java index 5757e6887..982d07e43 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/Xob_dump_mgr_base.java @@ -45,7 +45,13 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo ctx = wiki.Parser_mgr().Ctx(); root = ctx.Tkn_mkr().Root(Bry_.Empty); wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql - wiki.Db_mgr_as_sql().Core_data_mgr().Init_by_load(gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(wiki)); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed) + + // assert by calling Db_mgr_as_sql + wiki.Db_mgr_as_sql().Core_data_mgr(); + + // load db_mgr + Xow_db_mgr.Init_by_load(wiki, gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(wiki)); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed) + wiki.File__orig_mgr().Wkrs__del(Xof_orig_wkr_.Tid_wmf_api); db_fsys_mgr = wiki.Db_mgr_as_sql().Core_data_mgr(); db_ary = Xob_dump_mgr_base_.Init_text_files_ary(db_fsys_mgr); diff --git a/400_xowa/src/gplx/xowa/wikis/Xowv_wiki.java b/400_xowa/src/gplx/xowa/wikis/Xowv_wiki.java index 1dfa8bcae..cd71ba407 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xowv_wiki.java +++ b/400_xowa/src/gplx/xowa/wikis/Xowv_wiki.java @@ -94,8 +94,8 @@ public class Xowv_wiki implements Xow_wiki, Xow_ttl_parser, Gfo_invk { if (!init_needed) return; init_needed = false; if (String_.Eq(domain_str, "xowa")) return; // HACK: ignore "xowa" for now; WHEN:converting xowa to sqlitedb - data_mgr__core_mgr = new Xow_db_mgr(this, fsys_mgr.Root_dir()); - data_mgr__core_mgr.Init_by_load(gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(this)); + data_mgr__core_mgr = new Xow_db_mgr(fsys_mgr.Root_dir(), this.domain_str); + Xow_db_mgr.Init_by_load(this, gplx.xowa.wikis.data.Xow_db_file__core_.Find_core_fil_or_null(this)); app.Html__css_installer().Install(this, Xowd_css_core_mgr.Key_mobile); // must init after data_mgr this.db_core_mgr = Fsdb_db_mgr_.new_detect(this, fsys_mgr.Root_dir(), fsys_mgr.File_dir()); if (db_core_mgr == null) // no fsdb; occurs during merge; also, will be null for xowa_db; DATE:2016-05-31 @@ -116,7 +116,7 @@ public class Xowv_wiki implements Xow_wiki, Xow_ttl_parser, Gfo_invk { } public void Init_by_wiki__force() {init_needed = true; Init_by_wiki();} public void Init_by_make(Xowd_core_db_props props, gplx.xowa.bldrs.infos.Xob_info_session info_session) { - data_mgr__core_mgr = new Xow_db_mgr(this, fsys_mgr.Root_dir()); + data_mgr__core_mgr = new Xow_db_mgr(fsys_mgr.Root_dir(), this.domain_str); data_mgr__core_mgr.Init_by_make(props, info_session); html__hdump_mgr.Init_by_db(this); } diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java index 66f7e23ec..1ffb90484 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_db_mgr.java @@ -18,15 +18,14 @@ along with this program. If not, see . package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.core.lists.hashs.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.tbls.*; -import gplx.xowa.wikis.domains.*; import gplx.xowa.bldrs.infos.*; +import gplx.xowa.wikis.domains.*; import gplx.xowa.bldrs.infos.*; import gplx.xowa.wikis.metas.*; public class Xow_db_mgr { private final Ordered_hash hash_by_id = Ordered_hash_.New(); private final Xow_db_file_hash hash_by_tids = new Xow_db_file_hash(); private int db_id_next = 0; - private final Xow_wiki wiki; private final Io_url wiki_root_dir; private final String domain_str; // needed for generating new files; EX: en.wikipedia.org-text.ns.001.xowa - public Xow_db_mgr(Xow_wiki wiki, Io_url wiki_root_dir) { - this.wiki = wiki; + private final Io_url wiki_root_dir; private final String domain_str; // needed for generating new files; EX: en.wikipedia.org-text.ns.001.xowa + public Xow_db_mgr(Io_url wiki_root_dir, String domain_str) { this.wiki_root_dir = wiki_root_dir; - this.domain_str = wiki.Domain_str(); + this.domain_str = domain_str; } public Xowd_core_db_props Props() {return props;} private Xowd_core_db_props props = Xowd_core_db_props.Test; public Db_cfg_tbl Tbl__cfg() {return db__core.Tbl__cfg();} @@ -45,7 +44,6 @@ public class Xow_db_mgr { Db_conn core_conn = Db_conn_bldr.Instance.Get(core_url); props = Xowd_core_db_props.Cfg_load(core_conn); // load props to get layout_text Dbs__set_by_tid(Xow_db_file.Load(props, Xow_db_file_.Uid__core, Xow_db_file__core_.Core_db_tid(props.Layout_text()), core_url, Xob_info_file.Ns_ids_empty, Xob_info_file.Part_id_1st, Guid_adp_.Empty)); - wiki.Props().Init_by_load(wiki.App(), Tbl__cfg()); // load Main_page // load dbs from "xowa_db" tbl Xow_db_file[] ary = db__core.Tbl__db().Select_all(props, core_url.OwnerDir()); @@ -127,6 +125,8 @@ public class Xow_db_mgr { db.Cmd_mode_(Db_cmd_mode.Tid_delete); } db__core.Tbl__db().Commit_all(this); + + // call init again to regen list of dbs this.Init_by_load(db__core.Url()); } public void Create_page(Xowd_page_tbl core_tbl, Xowd_text_tbl text_tbl, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, byte[] text_zip_data, int text_raw_len, int random_int, int text_db_id, int html_db_id) { @@ -170,4 +170,10 @@ public class Xow_db_mgr { } return String_.Format("-{0}{1}.xowa", tid_name, tid_idx_str); // EX: en.wikipedia.org-text-001.sqlite3 } + + // helper method for wikis to (a) init db_mgr; (b) load wiki.props; should probably be moved to more generic "wiki.Init_by_db()" + public static void Init_by_load(Xow_wiki wiki, Io_url core_url) { + wiki.Data__core_mgr().Init_by_load(core_url); + wiki.Props().Init_by_load(wiki.App(), wiki.Data__core_mgr().Tbl__cfg()); // load Main_page + } } diff --git a/400_xowa/src/gplx/xowa/wikis/dbs/Xodb_mgr_sql.java b/400_xowa/src/gplx/xowa/wikis/dbs/Xodb_mgr_sql.java index 7a09cbcee..fc104b0c1 100644 --- a/400_xowa/src/gplx/xowa/wikis/dbs/Xodb_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/wikis/dbs/Xodb_mgr_sql.java @@ -22,7 +22,7 @@ import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; public class Xodb_mgr_sql implements Xodb_mgr, Gfo_invk { public Xodb_mgr_sql(Xowe_wiki wiki) { this.wiki = wiki; - this.core_data_mgr = new Xow_db_mgr(wiki, wiki.Fsys_mgr().Root_dir()); + this.core_data_mgr = new Xow_db_mgr(wiki.Fsys_mgr().Root_dir(), wiki.Domain_str()); this.load_mgr = new Xodb_load_mgr_sql(this); this.save_mgr = new Xodb_save_mgr_sql(this); }