From 45934835225f19a616c6a0d9e70bdef026a1c054 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Fri, 17 Feb 2017 09:39:51 -0500 Subject: [PATCH] Personal_wikis: Simplify wiki_import verification code --- .../directorys/dbs/Xowdir_wiki_cfg_.java | 25 +++ .../directorys/dbs/Xowdir_wiki_json.java | 14 +- .../directorys/dbs/Xowdir_wiki_json_.java | 148 ------------------ .../directorys/dbs/Xowdir_wiki_json_mgr.java | 108 ------------- .../dbs/Xowdir_wiki_json_mgr__tst.java | 72 --------- .../directorys/dbs/Xowdir_wiki_props.java | 43 +++++ .../directorys/dbs/Xowdir_wiki_props_mgr.java | 86 ++++++++++ ..._mgr_.java => Xowdir_wiki_props_mgr_.java} | 4 +- .../dbs/Xowdir_wiki_props_mgr__tst.java | 60 +++++++ ....java => Xowdir_wiki_props_mgr__xowa.java} | 4 +- .../wikis/directorys/dbs/Xowdir_wiki_tbl.java | 2 +- .../specials/items/Xowdir_item_doc.java | 12 +- .../specials/items/Xowdir_item_html.java | 2 +- .../specials/items/Xowdir_item_mgr.java | 9 +- .../specials/items/bldrs/Xow_db_mkr.java | 6 +- .../items/bldrs/Xow_wiki_factory.java | 3 +- .../specials/lists/Xowdir_list_svc.java | 13 +- .../bldrs/cmds/texts/sqls/Xob_term_cmd.java | 4 + .../src/gplx/xowa/wikis/Xow_cfg_consts.java | 1 + 19 files changed, 248 insertions(+), 368 deletions(-) create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_cfg_.java delete mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_.java delete mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr.java delete mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__tst.java create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props.java create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr.java rename 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/{Xowdir_wiki_json_mgr_.java => Xowdir_wiki_props_mgr_.java} (83%) create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__tst.java rename 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/{Xowdir_wiki_json_mgr__xowa.java => Xowdir_wiki_props_mgr__xowa.java} (91%) diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_cfg_.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_cfg_.java new file mode 100644 index 000000000..18c43996f --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_cfg_.java @@ -0,0 +1,25 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +public class Xowdir_wiki_cfg_ { + public static final String + Key__domain = "xowa.wiki.core.domain" + , Key__name = "xowa.wiki.core.name" + , Key__main_page = "props.main_page" + ; +} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java index aa371efc4..750c7ae3e 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java @@ -18,21 +18,15 @@ along with this program. If not, see . package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.langs.jsons.*; public class Xowdir_wiki_json { - public Xowdir_wiki_json(String domain, String name, String mainpage) { - this.domain = domain; + public Xowdir_wiki_json(String name) { this.name = name; - this.mainpage = mainpage; } - public String Domain() {return domain;} private String domain; public void Domain_(String v) {domain = v;} public String Name() {return name;} private String name; public void Name_(String v) {name = v;} - public String Mainpage() {return mainpage;} private String mainpage; public void Mainpage_(String v) {mainpage = v;} public String To_str(Json_wtr wtr) { wtr.Doc_nde_bgn(); wtr.Nde_bgn("core"); - wtr.Kv_str("domain", domain); wtr.Kv_str("name", name); - wtr.Kv_str("mainpage", mainpage); wtr.Nde_end(); wtr.Doc_nde_end(); @@ -41,12 +35,10 @@ public class Xowdir_wiki_json { public static Xowdir_wiki_json New_by_json(Json_parser json_parser, String json) { Json_doc jdoc = json_parser.Parse(json); - String domain = jdoc.Get_val_as_str_or(Bry_.Ary("core", "domain"), ""); String name = jdoc.Get_val_as_str_or(Bry_.Ary("core", "name"), ""); - String mainpage = jdoc.Get_val_as_str_or(Bry_.Ary("core", "mainpage"), ""); - return new Xowdir_wiki_json(domain, name, mainpage); + return new Xowdir_wiki_json(name); } public static Xowdir_wiki_json New_empty() { - return new Xowdir_wiki_json("", "", "Main_Page"); + return new Xowdir_wiki_json(""); } } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_.java deleted file mode 100644 index 555556b31..000000000 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_.java +++ /dev/null @@ -1,148 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; -import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.sys.*; -import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*; -import gplx.langs.jsons.*; -public class Xowdir_wiki_json_ { - private static final String Grp__personal = "xowa.personal_wikis", Key__personal__wiki_json = "xowa.personal_wikis.wiki_json"; - public static void Upsert(Xowe_wiki wiki, String wiki_json) { - wiki.Data__core_mgr().Db__core().Tbl__cfg().Upsert_str(Grp__personal, Key__personal__wiki_json, wiki_json); - } - public static Xowdir_wiki_json Select_or_insert(Io_url core_db_url, Db_conn core_db_conn) { - Xowdir_wiki_json rv = null; - - // read from core_db.xowa_cfg - Db_cfg_tbl core_cfg_tbl = new Db_cfg_tbl(core_db_conn, Xowd_cfg_tbl_.Tbl_name); - String wiki_json_str = core_cfg_tbl.Select_str_or(Grp__personal, Key__personal__wiki_json, null); - - // if not in core_db.xowa_cfg - if (wiki_json_str == null) { - // infer new based on url and other cfg_itms - rv = Infer_new(core_db_url, core_cfg_tbl); - core_cfg_tbl.Insert_str(Grp__personal, Key__personal__wiki_json, rv.To_str(new Json_wtr())); - } - else { - rv = Xowdir_wiki_json.New_by_json(new Json_parser(), wiki_json_str); - } - return rv; - } -// public static Xowdir_wiki_json Verify2(Xoae_app app, boolean mode_is_import, String domain_str, Io_url core_db_url, Db_conn core_db_conn) { -// Xowdir_wiki_json rv = null; -// boolean dirty = false; -// -// // read from core_db.xowa_cfg -// Db_cfg_tbl core_cfg_tbl = new Db_cfg_tbl(core_db_conn, Xowd_cfg_tbl_.Tbl_name); -// String wiki_cfg_str = core_cfg_tbl.Select_str_or(Grp__personal, Key__personal__wiki_json, null); -// -// // not in core_db; check user_db.user_wiki -// if (wiki_cfg_str == null) { -// Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db; url=~{0}", core_db_url); -// dirty = true; -// if (!mode_is_import) { -// Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); -// Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str); -// if (user_wiki_row != null) { -// rv = user_wiki_row.Json(); -// } -// } -// } -// else { -// rv = Xowdir_wiki_json.New_by_json(new Json_parser(), wiki_cfg_str); -// } -// -// // not in core_db or user_db; infer -// if (rv == null) { -// Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db or user_db; url=~{0}", core_db_url); -// dirty = true; -// rv = Infer_new(core_db_url, core_cfg_tbl); -// } -// -// // check domain exists -// if (String_.Eq(rv.Domain(), String_.Empty)) { -// Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json does not have domain; url=~{0}", core_db_url); -// dirty = true; -// rv.Domain_(core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__domain, core_db_url.NameOnly())); -// } -// -// // something changed; save it -// if (dirty) { -// String wiki_json_str = rv.To_str(new gplx.langs.jsons.Json_wtr()); -// core_cfg_tbl.Update_str(Grp__personal, Key__personal__wiki_json, wiki_json_str); -// Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); -// -// if (!mode_is_import) { -// Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str); -// user_db_mgr.Tbl__wiki().Upsert(user_wiki_row.Id(), user_wiki_row.Domain(), user_wiki_row.Url(), wiki_json_str); -// } -// } -// return rv; -// } - public static void Verify(Xoae_app app, byte[] domain_bry, Io_url core_db_url, Db_conn core_db_conn) { - String domain_str = String_.new_u8(domain_bry); - boolean dirty = false; - - // read from core_db.xowa_cfg - Db_cfg_tbl core_cfg_tbl = new Db_cfg_tbl(core_db_conn, Xowd_cfg_tbl_.Tbl_name); - String wiki_cfg_str = core_cfg_tbl.Select_str_or(Grp__personal, Key__personal__wiki_json, null); - - // not in core_db; check user_db.user_wiki - Xowdir_wiki_json wiki_json_itm = null; - if (wiki_cfg_str == null) { - Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db; url=~{0}", core_db_url); - dirty = true; - Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); - Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str); - if (user_wiki_row != null) { - wiki_json_itm = user_wiki_row.Json(); - } - } - else { - wiki_json_itm = Xowdir_wiki_json.New_by_json(new Json_parser(), wiki_cfg_str); - } - - // not in core_db or user_db; infer - if (wiki_json_itm == null) { - Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json not found in core_db or user_db; url=~{0}", core_db_url); - dirty = true; - wiki_json_itm = Infer_new(core_db_url, core_cfg_tbl); - } - - // check domain exists - if (String_.Eq(wiki_json_itm.Domain(), String_.Empty)) { - Gfo_usr_dlg_.Instance.Warn_many("", "", "wiki_json does not have domain; url=~{0}", core_db_url); - dirty = true; - wiki_json_itm.Domain_(core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__domain, core_db_url.NameOnly())); - } - - // something changed; save it - if (dirty) { - Xowdir_db_mgr user_db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); - Xowdir_wiki_itm user_wiki_row = user_db_mgr.Tbl__wiki().Select_by_key_or_null(domain_str); - - String wiki_json_str = wiki_json_itm.To_str(new gplx.langs.jsons.Json_wtr()); - core_cfg_tbl.Update_str(Grp__personal, Key__personal__wiki_json, wiki_json_str); - user_db_mgr.Tbl__wiki().Upsert(user_wiki_row.Id(), user_wiki_row.Domain(), user_wiki_row.Url(), wiki_json_str); - } - } - private static Xowdir_wiki_json Infer_new(Io_url core_db_url, Db_cfg_tbl core_cfg_tbl) { - String domain = core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__domain, core_db_url.NameOnly()); - String main_page = core_cfg_tbl.Select_str_or(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, Xoa_page_.Main_page_str); - return new Xowdir_wiki_json(domain, domain, main_page); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr.java deleted file mode 100644 index 37182e3bd..000000000 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr.java +++ /dev/null @@ -1,108 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; -import gplx.langs.jsons.*; -public interface Xowdir_wiki_json_mgr { - void Wiki_cfg__upsert(String key, String val); - String Wiki_cfg__select_or(String key, String or); - void User_reg__upsert(String domain, String val); - String User_reg__select(String domain); - boolean Dirty(); - Xowdir_wiki_json Verify(boolean mode_is_import, String domain_str, Io_url core_db_url); -} -class Xowdir_wiki_cfg_ { - public static final String - Key__wiki_json = "wiki_json" - , Key__domain = "props.domain" - , Key__main_page = "props.main_page" - ; -} -abstract class Xowdir_wiki_json_mgr__base implements Xowdir_wiki_json_mgr { - private final Gfo_usr_dlg usr_dlg; - public Xowdir_wiki_json_mgr__base(Gfo_usr_dlg usr_dlg) { - this.usr_dlg = usr_dlg; - } - public abstract void Wiki_cfg__upsert(String key, String val); - public abstract String Wiki_cfg__select_or(String key, String or); - public abstract void User_reg__upsert(String domain, String val); - public abstract String User_reg__select(String domain); - public boolean Dirty() {return dirty;} private boolean dirty; - public Xowdir_wiki_json Verify(boolean mode_is_import, String domain_str, Io_url core_db_url) { - Xowdir_wiki_json rv = null; - dirty = false; - - // read from core_db.xowa_cfg - String wiki_json_str = Wiki_cfg__select_or(Xowdir_wiki_cfg_.Key__wiki_json, null); - - // not in core_db; check user_db.user_wiki - if (wiki_json_str == null) { - usr_dlg.Warn_many("", "", "wiki_json not found in core_db; url=~{0}", core_db_url); - dirty = true; - if (!mode_is_import) { - wiki_json_str = User_reg__select(domain_str); - } - } - - if (wiki_json_str != null) { - rv = Xowdir_wiki_json.New_by_json(new Json_parser(), wiki_json_str); - } - - // not in core_db or user_db; infer - if (rv == null) { - usr_dlg.Warn_many("", "", "wiki_json not found in core_db or user_db; url=~{0}", core_db_url); - dirty = true; - rv = Infer_new(core_db_url); - } - - // check domain exists - if (String_.Eq(rv.Domain(), String_.Empty)) { - usr_dlg.Warn_many("", "", "wiki_json does not have domain; url=~{0}", core_db_url); - dirty = true; - String domain = Wiki_cfg__select_or(Xowdir_wiki_cfg_.Key__domain, core_db_url.NameOnly()); - rv.Domain_(domain); - } - - // something changed; save it - if (dirty) { - wiki_json_str = rv.To_str(new gplx.langs.jsons.Json_wtr()); - Wiki_cfg__upsert(Xowdir_wiki_cfg_.Key__wiki_json, wiki_json_str); - - if (!mode_is_import) { - User_reg__upsert(domain_str, wiki_json_str); - } - } - return rv; - } - private Xowdir_wiki_json Infer_new(Io_url core_db_url) { - String domain = this.Wiki_cfg__select_or(Xowdir_wiki_cfg_.Key__domain, core_db_url.NameOnly()); - String main_page = this.Wiki_cfg__select_or(Xowdir_wiki_cfg_.Key__main_page, Xoa_page_.Main_page_str); - return new Xowdir_wiki_json(domain, domain, main_page); - } -} -class Xowdir_wiki_json_mgr__mock extends Xowdir_wiki_json_mgr__base { - private final Hash_adp wiki_cfg_hash = Hash_adp_.New(); - private final Hash_adp user_reg_hash = Hash_adp_.New(); - public Xowdir_wiki_json_mgr__mock() {super(Gfo_usr_dlg_.Noop);} - @Override public void Wiki_cfg__upsert(String key, String val) {wiki_cfg_hash.Add_if_dupe_use_nth(key, val);} - @Override public void User_reg__upsert(String domain, String val) {user_reg_hash.Add_if_dupe_use_nth(domain, val);} - @Override public String User_reg__select(String domain) {return (String)user_reg_hash.Get_by(domain);} - @Override public String Wiki_cfg__select_or(String key, String or) { - String rv = (String)wiki_cfg_hash.Get_by(key); - return rv == null ? or : rv; - } -} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__tst.java deleted file mode 100644 index e48608942..000000000 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__tst.java +++ /dev/null @@ -1,72 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; -import org.junit.*; import gplx.core.tests.*; -import gplx.langs.jsons.*; -public class Xowdir_wiki_json_mgr__tst { - private final Xowdir_wiki_json_mgr__fxt fxt = new Xowdir_wiki_json_mgr__fxt(); - - @Test public void Import__wiki__missing_all() { - // handle all imported .xowa wikis pre v4.3 - fxt.Init__wiki_cfg__json(null); - - Xowdir_wiki_json expd = fxt.Make__json("test", "test", "Main_Page"); - fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, expd); - fxt.Test__wiki_cfg(expd); - } - @Test public void Import__wiki__missing_domain() { - // handle personal wikis from v4.2 - fxt.Init__wiki_cfg__json(fxt.Make__json(null, "test", "Main_Page")); - - Xowdir_wiki_json expd = fxt.Make__json("test", "test", "Main_Page"); - fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, expd); - fxt.Test__wiki_cfg(expd); - } - @Test public void Import__wiki__clean() { - // handle clean wiki - fxt.Init__wiki_cfg__json(fxt.Make__json("test", "test", "Main_Page")); - - Xowdir_wiki_json expd = fxt.Make__json("test", "test", "Main_Page"); - fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.N, expd); - fxt.Test__wiki_cfg(expd); - } -} -class Xowdir_wiki_json_mgr__fxt { - private final Xowdir_wiki_json_mgr mgr = new Xowdir_wiki_json_mgr__mock(); - private final Json_wtr json_wtr = new Json_wtr(); - public Xowdir_wiki_json Make__json(String domain, String name, String main_page) { - return new Xowdir_wiki_json(domain, name, main_page); - } - public void Init__wiki_cfg__json(Xowdir_wiki_json itm) { - if (itm != null) - mgr.Wiki_cfg__upsert(Xowdir_wiki_cfg_.Key__wiki_json, itm.To_str(json_wtr)); - } - public void Test__verify(boolean mode_is_import, String url, boolean expd_dirty, Xowdir_wiki_json expd) { - Xowdir_wiki_json actl = mgr.Verify(mode_is_import, "", Io_url_.new_any_(url)); - - String expd_str = expd.To_str(json_wtr); - String actl_str = actl.To_str(json_wtr); - Gftest.Eq__ary__lines(expd_str, actl_str, "expd"); - Gftest.Eq__bool(expd_dirty, mgr.Dirty(), "dirty"); - } - public void Test__wiki_cfg(Xowdir_wiki_json expd) { - String expd_str = expd.To_str(json_wtr); - Gftest.Eq__ary__lines(expd_str, mgr.Wiki_cfg__select_or(Xowdir_wiki_cfg_.Key__wiki_json, null), "wiki_cfg"); - } -// Gftest.Eq__ary__lines(expd_str, mgr.User_reg__select(actl.Domain()), "user_reg"); -} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props.java new file mode 100644 index 000000000..99a2e67a3 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props.java @@ -0,0 +1,43 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +public class Xowdir_wiki_props { + public Xowdir_wiki_props() {} + public Xowdir_wiki_props(String domain, String name, String main_page) { + this.domain = domain; + this.name = name; + this.main_page = main_page; + } + public boolean Dirty() {return dirty;} private boolean dirty; + public String Domain() {return domain;} private String domain; + public String Name() {return name;} private String name; + public String Main_page() {return main_page;} private String main_page; + + public void Dirty_y_() { + dirty = true; + } + + public void Set(String key, String val) { + if (String_.Eq(key, Xowdir_wiki_cfg_.Key__domain)) this.domain = val; + else if (String_.Eq(key, Xowdir_wiki_cfg_.Key__name)) this.name = val; + else if (String_.Eq(key, Xowdir_wiki_cfg_.Key__main_page)) this.main_page = val; + else throw Err_.new_unhandled_default(key); + } + + public String To_str() {return String_.Concat(domain, "|", name, "|", main_page );} +} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr.java new file mode 100644 index 000000000..e338f22fd --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr.java @@ -0,0 +1,86 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +import gplx.langs.jsons.*; +public interface Xowdir_wiki_props_mgr { + void Wiki_cfg__upsert(String key, String val); + String Wiki_cfg__select_or(String key, String or); + void User_reg__upsert(String domain, String val); + String User_reg__select(String domain); + Xowdir_wiki_props Verify(boolean mode_is_import, String domain_str, Io_url core_db_url); +} +abstract class Xowdir_wiki_props_mgr__base implements Xowdir_wiki_props_mgr { + private final Gfo_usr_dlg usr_dlg; + public Xowdir_wiki_props_mgr__base(Gfo_usr_dlg usr_dlg) { + this.usr_dlg = usr_dlg; + } + public abstract void Wiki_cfg__upsert(String key, String val); + public abstract String Wiki_cfg__select_or(String key, String or); + public abstract void User_reg__upsert(String domain, String val); + public abstract String User_reg__select(String domain); + public Xowdir_wiki_props Verify(boolean mode_is_import, String domain_str, Io_url core_db_url) { + Xowdir_wiki_props rv = new Xowdir_wiki_props(); + + Verify_or_fix(rv, core_db_url, Xowdir_wiki_cfg_.Key__domain); + Verify_or_fix(rv, core_db_url, Xowdir_wiki_cfg_.Key__main_page); + Verify_or_fix(rv, core_db_url, Xowdir_wiki_cfg_.Key__name); + + return rv; + } + private String Verify_or_fix(Xowdir_wiki_props props, Io_url core_db_url, String key) { + String val = Wiki_cfg__select_or(key, null); + if (val == null) { + props.Dirty_y_(); + usr_dlg.Warn_many("", "", "xowdir: core_db.xowa_cfg does not have val; url=~{0} key=~{1}", core_db_url, key); + val = Fix(props, core_db_url, key); + Wiki_cfg__upsert(key, val); + } + props.Set(key, val); + return val; + } + private static String Fix(Xowdir_wiki_props props, Io_url core_db_url, String key) { + if (String_.Eq(key, Xowdir_wiki_cfg_.Key__domain)) { + String rv = core_db_url.NameOnly(); + if (String_.Has_at_end(rv, "-core")) + rv = String_.Mid(rv, 0, String_.Len(rv) - 5); + return rv; + } + else if (String_.Eq(key, Xowdir_wiki_cfg_.Key__name)) { + return props.Domain(); // NOTE: must be called after domain + } + else if (String_.Eq(key, Xowdir_wiki_cfg_.Key__main_page)) { + return Xoa_page_.Main_page_str; + } + else throw Err_.new_unhandled_default(key); + } +} +class Xowdir_wiki_props_mgr__mock extends Xowdir_wiki_props_mgr__base { + private final Hash_adp wiki_cfg_hash = Hash_adp_.New(); + private final Hash_adp user_reg_hash = Hash_adp_.New(); + public Xowdir_wiki_props_mgr__mock() {super(Gfo_usr_dlg_.Noop);} + @Override public void Wiki_cfg__upsert(String key, String val) { + if (val != null) + wiki_cfg_hash.Add_if_dupe_use_nth(key, val); + } + @Override public String Wiki_cfg__select_or(String key, String or) { + String rv = (String)wiki_cfg_hash.Get_by(key); + return rv == null ? or : rv; + } + @Override public void User_reg__upsert(String domain, String val) {user_reg_hash.Add_if_dupe_use_nth(domain, val);} + @Override public String User_reg__select(String domain) {return (String)user_reg_hash.Get_by(domain);} +} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr_.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr_.java similarity index 83% rename from 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr_.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr_.java index f77d40e32..7389b9a15 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr_.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr_.java @@ -16,6 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; -public class Xowdir_wiki_json_mgr_ { - public static Xowdir_wiki_json_mgr New_xowa(Xoa_app app, Io_url core_db_url) {return new Xowdir_wiki_json_mgr__xowa(app, core_db_url);} +public class Xowdir_wiki_props_mgr_ { + public static Xowdir_wiki_props_mgr New_xowa(Xoa_app app, Io_url core_db_url) {return new Xowdir_wiki_props_mgr__xowa(app, core_db_url);} } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__tst.java new file mode 100644 index 000000000..48c938a32 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__tst.java @@ -0,0 +1,60 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +import org.junit.*; import gplx.core.tests.*; +public class Xowdir_wiki_props_mgr__tst { + private final Xowdir_wiki_props_mgr__fxt fxt = new Xowdir_wiki_props_mgr__fxt(); + + @Test public void Import__wiki__missing_all() { + // handle all imported .xowa wikis pre v4.3 + fxt.Init__props(null, null, null); + fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page")); + } + @Test public void Import__wiki__missing_domain() { + // handle personal wikis from v4.2 + fxt.Init__props(null, null, "Main_Page"); + fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page")); + } + @Test public void Import__wiki__wmf_domain() { + // handle wmf wikis with a core-file of "test-core.xowa" + fxt.Init__props(null, null, "Main_Page"); + fxt.Test__verify(Bool_.Y, "/dir/test-core.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page")); + } + @Test public void Import__wiki__clean() { + // handle clean wiki + fxt.Init__props("test", "test", "Main_Page"); + fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.N, fxt.Make__json("test", "test", "Main_Page")); + } +} +class Xowdir_wiki_props_mgr__fxt { + private final Xowdir_wiki_props_mgr mgr = new Xowdir_wiki_props_mgr__mock(); + public Xowdir_wiki_props Make__json(String domain, String name, String main_page) { + return new Xowdir_wiki_props(domain, name, main_page); + } + public void Init__props(String domain, String name, String main_page) { + mgr.Wiki_cfg__upsert(Xowdir_wiki_cfg_.Key__domain, domain); + mgr.Wiki_cfg__upsert(Xowdir_wiki_cfg_.Key__name, name); + mgr.Wiki_cfg__upsert(Xowdir_wiki_cfg_.Key__main_page, main_page); + } + public void Test__verify(boolean mode_is_import, String url, boolean expd_dirty, Xowdir_wiki_props expd) { + Xowdir_wiki_props actl = mgr.Verify(mode_is_import, "", Io_url_.new_any_(url)); + + Gftest.Eq__ary__lines(expd.To_str(), actl.To_str(), "expd"); + Gftest.Eq__bool(expd_dirty, actl.Dirty(), "dirty"); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__xowa.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__xowa.java similarity index 91% rename from 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__xowa.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__xowa.java index 6f8366b40..6095689af 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json_mgr__xowa.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_props_mgr__xowa.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.langs.jsons.*; -class Xowdir_wiki_json_mgr__xowa extends Xowdir_wiki_json_mgr__base { +class Xowdir_wiki_props_mgr__xowa extends Xowdir_wiki_props_mgr__base { private final Xoa_app app; private final Io_url core_db_url; private Db_cfg_tbl wiki_cfg_tbl; private Xowdir_wiki_tbl user_reg_tbl; - public Xowdir_wiki_json_mgr__xowa(Xoa_app app, Io_url core_db_url) {super(Gfo_usr_dlg_.Instance); + public Xowdir_wiki_props_mgr__xowa(Xoa_app app, Io_url core_db_url) {super(Gfo_usr_dlg_.Instance); this.app = app; this.core_db_url = core_db_url; } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java index ae0314dfa..3804debc7 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.dbs.*; import gplx.dbs.utls.*; import gplx.langs.jsons.*; -public class Xowdir_wiki_tbl implements Db_tbl { +public class Xowdir_wiki_tbl implements Db_tbl { // for domain and user-specific data only (name, url); don't replicate wiki-specific info here (like main_page) private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld__wiki_id, fld__wiki_domain, fld__wiki_core_url, fld__wiki_json; private final Db_conn conn; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java index 35866dd22..29baaba1c 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java @@ -20,21 +20,21 @@ import gplx.langs.mustaches.*; import gplx.xowa.addons.wikis.directorys.dbs.*; public class Xowdir_item_doc implements Mustache_doc_itm { private final boolean mode_is_new; private final int id; - private final String domain, name, dir, mainpage; - public Xowdir_item_doc(int id, String domain, String name, String dir, String mainpage) { + private final String domain, name, dir, main_page; + public Xowdir_item_doc(int id, String domain, String name, String dir, String main_page) { this.mode_is_new = id == -1; this.id = id; this.domain = domain; this.name = name; this.dir = dir; - this.mainpage = mainpage; + this.main_page = main_page; } public boolean Mustache__write(String key, Mustache_bfr bfr) { if (String_.Eq(key, "id")) bfr.Add_int(id); else if (String_.Eq(key, "domain")) bfr.Add_str_u8(domain); else if (String_.Eq(key, "name")) bfr.Add_str_u8(name); else if (String_.Eq(key, "dir")) bfr.Add_str_u8(dir); - else if (String_.Eq(key, "mainpage")) bfr.Add_str_u8(mainpage); + else if (String_.Eq(key, "mainpage")) bfr.Add_str_u8(main_page); else return false; return true; } @@ -44,12 +44,12 @@ public class Xowdir_item_doc implements Mustache_doc_itm { } public static final Xowdir_item_doc[] Ary_empty = new Xowdir_item_doc[0]; - public static Xowdir_item_doc New(Xowdir_wiki_itm itm) {return new Xowdir_item_doc(itm.Id(), itm.Domain(), itm.Json().Name(), itm.Url().OwnerDir().Xto_api(), itm.Json().Mainpage());} + public static Xowdir_item_doc New(Xowdir_wiki_itm itm, String main_page) {return new Xowdir_item_doc(itm.Id(), itm.Domain(), itm.Json().Name(), itm.Url().OwnerDir().Xto_api(), main_page);} public static Xowdir_item_doc[] New_ary(Xowdir_wiki_itm[] itms_ary) { int len = itms_ary.length; Xowdir_item_doc[] rv = new Xowdir_item_doc[itms_ary.length]; for (int i = 0; i < len; i++) { - rv[i] = New(itms_ary[i]); + rv[i] = New(itms_ary[i], ""); // NOTE: main_page empty b/c not shown on list page } return rv; } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java index 17defaac6..5075405ea 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java @@ -31,7 +31,7 @@ class Xowdir_item_html extends Xow_special_wtr__base { Xowdir_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(domain); if (itm == null) itm = new Xowdir_wiki_itm(-1, "", Io_url_.Empty, Xowdir_wiki_json.New_empty()); - return Xowdir_item_doc.New(itm); + return Xowdir_item_doc.New(itm, itm.Json().Name()); } @Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) { Xopg_tag_mgr head_tags = page_data.Head_tags(); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java index e83b768e7..a2749e061 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java @@ -51,22 +51,17 @@ class Xowdir_item_mgr { // upsert into user_db.wiki_list Io_url fil_url = dir_url.GenSubFil(domain + ".xowa"); Xowdir_wiki_json json = Xowdir_wiki_json.New_empty(); - json.Domain_(domain); json.Name_(name); - json.Mainpage_(mainpage_name); String wiki_json = json.To_str(json_wtr); db_mgr.Tbl__wiki().Upsert(id, domain, fil_url, wiki_json); if (itm_is_new) { // create the actual wiki byte[] mainpage_text = Io_mgr.Instance.LoadFilBryOr(Xowdir_item_html.Addon_dir(app).GenSubFil_nest("res", "page", "Main_Page.txt"), Bry_.Empty); - Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url), Bry_.new_u8(mainpage_name), mainpage_text); + Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url), name, Bry_.new_u8(mainpage_name), mainpage_text); // load it - Xowe_wiki wiki = Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), dir_url); - - // upsert json into cfg for import - Xowdir_wiki_json_.Upsert(wiki, wiki_json); + Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), dir_url); // navigate to it app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage_name); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java index 0f66e0285..bf91838f7 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java @@ -23,7 +23,7 @@ import gplx.xowa.langs.cases.*; import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.origs.*; import gplx.xowa.addons.wikis.directorys.dbs.*; public class Xow_db_mkr { - public static Xodb_wiki_mgr Create_wiki(Xodb_wiki_data data, byte[] mainpage_name, byte[] mainpage_text) { + public static Xodb_wiki_mgr Create_wiki(Xodb_wiki_data data, String wiki_name, byte[] mainpage_name, byte[] mainpage_text) { // create db Xodb_wiki_mgr wiki_mgr = new Xodb_wiki_mgr(data.Domain()); wiki_mgr.Dbs__add(Xodb_wiki_db.Make(Xodb_wiki_db_tid.Tid__core, data.Core_url())); @@ -56,9 +56,11 @@ public class Xow_db_mkr { Xowd_core_db_props props = new Xowd_core_db_props(2, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Xow_db_layout.Itm_all, Io_stream_tid_.Tid__raw, Io_stream_tid_.Tid__raw, Bool_.N, Bool_.N); props.Cfg_save(cfg_tbl); cfg_tbl.Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__modified_latest, Datetime_now.Get().XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); + cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, mainpage_name); + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__empty, Xowdir_wiki_cfg_.Key__domain , data.Domain()); + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__empty, Xowdir_wiki_cfg_.Key__name , wiki_name); // insert data: page - cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, mainpage_name); Xopg_db_mgr.Create ( Xowd_page_tbl.Get_by_key(core_db) , Xowd_text_tbl.Get_by_key(core_db) 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 b3abc3663..9eae980de 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 @@ -80,6 +80,7 @@ public class Xow_wiki_factory { } // verify json - Xowdir_wiki_json_.Verify(app, domain, core_db_url, core_db_conn); + 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); } } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_svc.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_svc.java index d2d737f41..6908ef67b 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_svc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_svc.java @@ -41,11 +41,10 @@ class Xowdir_list_svc { return; } - // get wiki_json from core_db.cfg - Xowdir_wiki_json_mgr wiki_json_mgr = Xowdir_wiki_json_mgr_.New_xowa(app, core_db_url); - Xowdir_wiki_json wiki_json = wiki_json_mgr.Verify(Bool_.Y, core_db_url.NameOnly(), core_db_url); - String domain = wiki_json.Domain(); - String mainpage = wiki_json.Mainpage(); + // get wiki_props from core_db.xowa_cfg + Xowdir_wiki_props_mgr wiki_props_mgr = Xowdir_wiki_props_mgr_.New_xowa(app, core_db_url); + Xowdir_wiki_props wiki_props = wiki_props_mgr.Verify(Bool_.Y, core_db_url.NameOnly(), core_db_url); + String domain = wiki_props.Domain(); // if same domain exists; return Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); @@ -56,12 +55,12 @@ class Xowdir_list_svc { // add it to user_wiki int id = Xowdir_db_utl.Wiki_id__next(app); - db_mgr.Tbl__wiki().Upsert(id, domain, core_db_url, wiki_json.To_str(new Json_wtr())); + db_mgr.Tbl__wiki().Upsert(id, domain, core_db_url, new Xowdir_wiki_json(wiki_props.Name()).To_str(new Json_wtr())); // add it to personal wikis gplx.xowa.addons.wikis.directorys.specials.items.bldrs.Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), core_db_url.OwnerDir()); // navigate to it - app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage); + app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/wiki/" + String_.new_u8(cbk_trg.Page_ttl())); } } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java index bc1a60dc3..8b420de08 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java @@ -27,6 +27,10 @@ public class Xob_term_cmd extends Xob_term_base { cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, wiki.Props().Main_page()); cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc()); cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage()); + + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__empty, gplx.xowa.addons.wikis.directorys.dbs.Xowdir_wiki_cfg_.Key__domain , wiki.Domain_str()); + cfg_tbl.Insert_str(Xow_cfg_consts.Grp__empty, gplx.xowa.addons.wikis.directorys.dbs.Xowdir_wiki_cfg_.Key__name , wiki.Domain_str()); + gplx.fsdb.Fsdb_db_mgr__v2_bldr.Get_or_make(wiki, false);// always build file.user db; DATE:2015-05-12 if (wiki.App().Cfg().Get_bool_wiki_or(wiki, gplx.xowa.bldrs.filters.dansguardians.Dg_match_mgr.Cfg__enabled, false)) new Xob_page_delete_cmd(wiki.Appe().Bldr(), wiki).Cmd_run(); diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java b/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java index 6faf36889..67a97eaba 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_cfg_consts.java @@ -24,6 +24,7 @@ public class Xow_cfg_consts { , Grp__bldr_db = "xowa.bldr.db" , Grp__bldr_fsdb = "xowa.bldr.fsdb" , Grp__wiki_init = "wiki.init" + , Grp__empty = "" , Key__init__main_page = "props.main_page" , Key__init__bldr_version = "props.bldr_version" , Key__init__modified_latest = "props.modified_latest"