From fd79415b5339da9faf85d21063de2d9ac726bc42 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Thu, 8 Dec 2016 12:24:15 -0500 Subject: [PATCH] Cfg: Split db into app and usr and overhaul db objects --- .../gplx/dbs/engines/Db_engine_sql_base.java | 4 +- 400_xowa/src/gplx/langs/gfs/Gfs_nde.java | 2 +- 400_xowa/src/gplx/langs/jsons/Json_wtr.java | 7 +- 400_xowa/src/gplx/xowa/Xoae_app.java | 2 +- .../gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java | 6 +- .../addons/apps/cfgs/dbs/Xocfg_db_app.java | 42 ++++++ .../addons/apps/cfgs/dbs/Xocfg_db_mgr.java | 53 ------- .../addons/apps/cfgs/dbs/Xocfg_db_usr.java | 43 ++++++ .../addons/apps/cfgs/dbs/Xocfg_itm_bldr.java | 53 ------- .../addons/apps/cfgs/dbs/Xoitm_gui_tid.java | 34 ----- .../Xocfg_grp_row.java} | 6 +- .../Xocfg_grp_tbl.java} | 16 +-- .../Xocfg_itm_row.java} | 6 +- .../Xocfg_itm_tbl.java} | 14 +- .../Xocfg_map_tbl.java} | 8 +- .../Xocfg_txt_itm.java} | 6 +- .../Xocfg_txt_tbl.java} | 14 +- .../Xocfg_val_row.java} | 10 +- .../Xocfg_val_tbl.java} | 38 ++--- .../addons/apps/cfgs/enums/Xoitm_db_tid.java | 29 ++++ .../addons/apps/cfgs/enums/Xoitm_gui_tid.java | 53 +++++++ .../Xoitm_lang_tid.java} | 7 +- .../cfgs/{dbs => enums}/Xoitm_scope_tid.java | 2 +- .../addons/apps/cfgs/gui/Xogui_nde_hash.java | 95 ------------- .../apps/cfgs/mgrs/Xocfg_cache_grp.java | 2 +- .../apps/cfgs/mgrs/Xocfg_cache_mgr.java | 24 ++-- .../apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java | 18 ++- .../edits/objs/Xoedit_grp.java} | 14 +- .../edits/objs/Xoedit_itm.java} | 10 +- .../edits/objs/Xoedit_itm_html.java} | 6 +- .../edits/objs/Xoedit_nav_itm.java} | 6 +- .../edits/objs/Xoedit_nav_mgr.java} | 8 +- .../cfgs/specials/edits/objs/Xoedit_nde.java | 23 ++++ .../specials/edits/objs/Xoedit_nde_hash.java | 78 +++++++++++ .../edits/objs/Xoedit_root.java} | 14 +- .../specials/edits/objs/Xogui_nde_iter.java | 58 ++++++++ .../specials/edits/pages/Xocfg_edit_html.java | 6 +- .../edits/services/Xocfg_edit_bridge.java | 4 +- .../edits/services/Xocfg_edit_loader.java} | 130 ++++++++++-------- ..._edit_service.java => Xocfg_edit_svc.java} | 13 +- .../maints/pages/Xocfg_maint_html.java | 4 +- .../maints/services/Xocfg_maint_bridge.java | 4 +- .../maints/services/Xocfg_maint_nde.java | 58 ++++++++ .../maints/services/Xocfg_maint_parser.java | 78 +++++++++++ .../services/Xocfg_maint_parser__tst.java | 45 ++++++ .../maints/services/Xocfg_maint_service.java | 40 ------ .../maints/services/Xocfg_maint_svc.java | 77 +++++++++++ 400_xowa/src/gplx/xowa/apps/Xoav_app.java | 2 +- 48 files changed, 800 insertions(+), 472 deletions(-) create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_app.java delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_mgr.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_usr.java delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_itm_bldr.java delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_gui_tid.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xogrp_meta_itm.java => tbls/Xocfg_grp_row.java} (75%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xogrp_meta_tbl.java => tbls/Xocfg_grp_tbl.java} (76%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xoitm_meta_itm.java => tbls/Xocfg_itm_row.java} (78%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xoitm_meta_tbl.java => tbls/Xocfg_itm_tbl.java} (83%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xogrp_map_tbl.java => tbls/Xocfg_map_tbl.java} (85%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xonde_i18n_itm.java => tbls/Xocfg_txt_itm.java} (76%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xonde_i18n_tbl.java => tbls/Xocfg_txt_tbl.java} (80%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xoitm_data_itm.java => tbls/Xocfg_val_row.java} (70%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/{Xoitm_data_tbl.java => tbls/Xocfg_val_tbl.java} (54%) create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_db_tid.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_nde.java => enums/Xoitm_lang_tid.java} (72%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{dbs => enums}/Xoitm_scope_tid.java (84%) delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde_hash.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_grp.java => specials/edits/objs/Xoedit_grp.java} (77%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_itm.java => specials/edits/objs/Xoedit_itm.java} (86%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_itm_html.java => specials/edits/objs/Xoedit_itm_html.java} (85%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_nav_itm.java => specials/edits/objs/Xoedit_nav_itm.java} (74%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_nav_mgr.java => specials/edits/objs/Xoedit_nav_mgr.java} (66%) create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde_hash.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_root.java => specials/edits/objs/Xoedit_root.java} (67%) create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xogui_nde_iter.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/{gui/Xogui_mgr.java => specials/edits/services/Xocfg_edit_loader.java} (54%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/{Xocfg_edit_service.java => Xocfg_edit_svc.java} (84%) create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_nde.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser__tst.java delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_service.java create mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java index fff6102b2..fd7f39ddf 100644 --- a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java +++ b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java @@ -116,7 +116,9 @@ public abstract class Db_engine_sql_base implements Db_engine { @Override public Object Stmt_by_sql(String sql) { if (connection == null) Conn_assert(); try {return connection.prepareStatement(sql);} - catch (Exception e) {throw Err_.new_exc(e, "db", "New_stmt_prep failed", "sql", sql);} + catch (Exception e) { + throw Err_.new_exc(e, "db", "New_stmt_prep failed", "sql", sql); + } } private Statement New_stmt_exec(String sql) { if (connection == null) Conn_assert(); diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_nde.java b/400_xowa/src/gplx/langs/gfs/Gfs_nde.java index 17c2ac170..4ba763dbf 100644 --- a/400_xowa/src/gplx/langs/gfs/Gfs_nde.java +++ b/400_xowa/src/gplx/langs/gfs/Gfs_nde.java @@ -80,6 +80,6 @@ public class Gfs_nde { rv[i] = args[i]; return rv; } - public static final Gfs_nde[] Ary_empty = new Gfs_nde[0]; + public static final Gfs_nde[] Ary_empty = new Gfs_nde[0]; public static final byte Op_tid_null = 0, Op_tid_assign = 1; } diff --git a/400_xowa/src/gplx/langs/jsons/Json_wtr.java b/400_xowa/src/gplx/langs/jsons/Json_wtr.java index fb0be204d..8f1ee2d2c 100644 --- a/400_xowa/src/gplx/langs/jsons/Json_wtr.java +++ b/400_xowa/src/gplx/langs/jsons/Json_wtr.java @@ -262,8 +262,13 @@ public class Json_wtr { switch (b) { case Byte_ascii.Backslash: bfr.Add_byte_repeat(Byte_ascii.Backslash, backslash_count).Add_byte(b); break; // "\" -> "\\"; needed else js will usurp \ as escape; EX: "\&" -> "&"; DATE:2014-06-24 case Byte_ascii.Quote: bfr.Add_byte_repeat(Byte_ascii.Backslash, backslash_count).Add_byte(b); break; + case Byte_ascii.Apos: // // "'" -> "'''"; needed else xocfg fails; DATE:2016-12-07 + if (opt_backslash_2x) + bfr.Add_byte_repeat(Byte_ascii.Backslash, 1).Add_byte(b); + else + bfr.Add_byte(b); + break; case Byte_ascii.Nl: bfr.Add_byte_repeat(Byte_ascii.Backslash, 2).Add_byte(Byte_ascii.Ltr_n); break; // "\n" -> "\\n" - case Byte_ascii.Apos: bfr.Add_byte(b); break; case Byte_ascii.Cr: break;// skip default: bfr.Add_byte(b); break; } diff --git a/400_xowa/src/gplx/xowa/Xoae_app.java b/400_xowa/src/gplx/xowa/Xoae_app.java index 7f5887146..be1d4f315 100644 --- a/400_xowa/src/gplx/xowa/Xoae_app.java +++ b/400_xowa/src/gplx/xowa/Xoae_app.java @@ -147,7 +147,7 @@ public class Xoae_app implements Xoa_app, Gfo_invk { public void Init_by_app() { stage = Xoa_stage_.Tid_init; user.Init_by_app(this); - cfg.Init_by_app(user.User_db_mgr().Conn()); + cfg.Init_by_app(this); prog_mgr.Init_by_app(url_cmd_eval); xtn_mgr.Init_by_app(this); gui_mgr.Init_by_app(); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java index 7e4286352..870dd6df3 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java @@ -19,8 +19,10 @@ package gplx.xowa.addons.apps.cfgs; import gplx.*; import gplx.xowa.*; import gp import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*; public class Xocfg_mgr { private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr(); - public void Init_by_app(Db_conn conn) { - cache_mgr.Init_by_app(conn); // SECTION_EDIT + public void Init_by_app(Xoa_app app) { + cache_mgr.Init_by_app // SECTION_EDIT + ( gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_app.New_conn(app) + , app.User().User_db_mgr().Conn()); } public void Clear() { cache_mgr.Clear(); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_app.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_app.java new file mode 100644 index 000000000..14092a795 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_app.java @@ -0,0 +1,42 @@ +/* +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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; +public class Xocfg_db_app { + public Xocfg_db_app(Db_conn conn) { + this.conn = conn; + this.tbl__grp = new Xocfg_grp_tbl(conn); + this.tbl__map = new Xocfg_map_tbl(conn); + this.tbl__itm = new Xocfg_itm_tbl(conn); + this.tbl__txt = new Xocfg_txt_tbl(conn); + conn.Meta_tbl_assert(tbl__grp, tbl__map, tbl__itm, tbl__txt); + } + public Db_conn Conn() {return conn;} private final Db_conn conn; + public Xocfg_grp_tbl Tbl__grp() {return tbl__grp;} private final Xocfg_grp_tbl tbl__grp; + public Xocfg_map_tbl Tbl__map() {return tbl__map;} private final Xocfg_map_tbl tbl__map; + public Xocfg_itm_tbl Tbl__itm() {return tbl__itm;} private final Xocfg_itm_tbl tbl__itm; + public Xocfg_txt_tbl Tbl__txt() {return tbl__txt;} private final Xocfg_txt_tbl tbl__txt; + + public static Db_conn New_conn(Xoa_app app) { + Io_url url = app.Fsys_mgr().Bin_addon_dir().GenSubFil_nest("app", "cfg", "xo.cfg.sqlite3"); + return Db_conn_bldr.Instance.Get_or_autocreate(true, url); + } + public static Xocfg_db_app New(Xoa_app app) { + return new Xocfg_db_app(New_conn(app)); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_mgr.java deleted file mode 100644 index 167520869..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_mgr.java +++ /dev/null @@ -1,53 +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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xocfg_db_mgr { - public Xocfg_db_mgr(Db_conn conn) { - this.conn = conn; - this.tbl__grp_meta = new Xogrp_meta_tbl(conn); - this.tbl__grp_map = new Xogrp_map_tbl(conn); - this.tbl__itm_meta = new Xoitm_meta_tbl(conn); - this.tbl__itm_data = new Xoitm_data_tbl(conn); - this.tbl__nde_i18n = new Xonde_i18n_tbl(conn); - conn.Meta_tbl_assert(tbl__grp_meta, tbl__grp_map, tbl__itm_meta, tbl__itm_data, tbl__nde_i18n); - } - public Db_conn Conn() {return conn;} private final Db_conn conn; - public Xogrp_meta_tbl Tbl__grp_meta() {return tbl__grp_meta;} private final Xogrp_meta_tbl tbl__grp_meta; - public Xogrp_map_tbl Tbl__grp_map() {return tbl__grp_map ;} private final Xogrp_map_tbl tbl__grp_map; - public Xoitm_meta_tbl Tbl__itm_meta() {return tbl__itm_meta;} private final Xoitm_meta_tbl tbl__itm_meta; - public Xoitm_data_tbl Tbl__itm_data() {return tbl__itm_data;} private final Xoitm_data_tbl tbl__itm_data; - public Xonde_i18n_tbl Tbl__nde_i18n() {return tbl__nde_i18n;} private final Xonde_i18n_tbl tbl__nde_i18n; - - public String Get_str(String ctx, String key) { - Xoitm_meta_itm meta_itm = tbl__itm_meta.Select_by_key_or_null(key); - if (meta_itm == null) throw Err_.new_wo_type("cfg not defined", "ctx", ctx, "key", key); - Xoitm_data_itm data_itm = tbl__itm_data.Select_one_by_id_or_null(meta_itm.Id(), ctx); - return data_itm == null ? meta_itm.Dflt() : data_itm.Val(); - } - public void Set_str(String ctx, String key, String val) { - Xoitm_meta_itm meta_itm = tbl__itm_meta.Select_by_key_or_null(key); - if (meta_itm == null) throw Err_.new_wo_type("cfg not defined", "ctx", ctx, "key", key); - tbl__itm_data.Upsert(meta_itm.Id(), ctx, val, Datetime_now.Get().XtoUtc().XtoStr_fmt_iso_8561()); - } - public void Del(String ctx, String key) { - Xoitm_meta_itm meta_itm = tbl__itm_meta.Select_by_key_or_null(key); - if (meta_itm == null) throw Err_.new_wo_type("cfg not defined", "ctx", ctx, "key", key); - tbl__itm_data.Delete(meta_itm.Id(), ctx); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_usr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_usr.java new file mode 100644 index 000000000..429ad0363 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_db_usr.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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +import gplx.dbs.*; +import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; +public class Xocfg_db_usr { + private final Xocfg_itm_tbl tbl__itm; + public Xocfg_db_usr(Xocfg_db_app db_app, Db_conn conn) { + this.conn = conn; + this.tbl__val = new Xocfg_val_tbl(conn); + conn.Meta_tbl_assert(tbl__val); + this.tbl__itm = db_app.Tbl__itm(); + } + public Db_conn Conn() {return conn;} private final Db_conn conn; + public Xocfg_val_tbl Tbl__val() {return tbl__val;} private final Xocfg_val_tbl tbl__val; + public String Get_str(String ctx, String key) { + Xocfg_itm_row itm_row = tbl__itm.Select_by_key_or_null(key); + if (itm_row == null) throw Err_.new_wo_type("cfg not defined", "ctx", ctx, "key", key); + Xocfg_val_row val_row = tbl__val.Select_one_or_null(ctx, key); + return val_row == null ? itm_row.Dflt() : val_row.Val(); + } + public void Set_str(String ctx, String key, String val) { + tbl__val.Upsert(ctx, key, val, Datetime_now.Get().XtoUtc().XtoStr_fmt_iso_8561()); + } + public void Del(String ctx, String key) { + tbl__val.Delete(ctx, key); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_itm_bldr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_itm_bldr.java deleted file mode 100644 index cdc86ee11..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xocfg_itm_bldr.java +++ /dev/null @@ -1,53 +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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xocfg_itm_bldr { - private final Xocfg_db_mgr db_mgr; - private final String Lang__dflt = "en"; - public Xocfg_itm_bldr(Xocfg_db_mgr db_mgr) { - this.db_mgr = db_mgr; - } - public void Create_grp(String owner_key, String grp_key, String grp_name, String grp_help) { - // insert grp_meta - int grp_id = db_mgr.Conn().Sys_mgr().Autonum_next("cfg_grp_meta.grp_id"); - db_mgr.Tbl__grp_meta().Upsert(grp_id, grp_key); - - // insert grp_map - int owner_id = String_.Len_eq_0(owner_key) ? Xogrp_meta_itm.Id__root : db_mgr.Tbl__grp_meta().Select_id_by_key_or_fail(owner_key); - int map_sort = db_mgr.Tbl__grp_map().Select_next_sort(owner_id); - db_mgr.Tbl__grp_map().Upsert(owner_id, grp_id, map_sort); - - // insert nde_i18n - db_mgr.Tbl__nde_i18n().Upsert(grp_id, Lang__dflt, grp_name, grp_help); - } - public void Create_itm(String grp_key, String itm_key, String scope_id_str, int db_type_id, String gui_type, String gui_args, String itm_dflt, String itm_name, String help) { - // insert itm_meta - int grp_id = db_mgr.Tbl__grp_meta().Select_id_by_key_or_fail(grp_key); - int itm_id = db_mgr.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id"); - int scope_id = Xoitm_scope_tid.To_int(scope_id_str); - int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); - db_mgr.Tbl__itm_meta().Upsert(itm_id, scope_id, db_type_id, gui_type_id, gui_args, itm_key, itm_dflt); - - // insert grp_map - int itm_sort = db_mgr.Tbl__grp_map().Select_next_sort(grp_id); - db_mgr.Tbl__grp_map().Upsert(grp_id, itm_id, itm_sort); - - // insert nde_i18n - db_mgr.Tbl__nde_i18n().Upsert(itm_id, Lang__dflt, itm_name, help); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_gui_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_gui_tid.java deleted file mode 100644 index 8d259af68..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_gui_tid.java +++ /dev/null @@ -1,34 +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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xoitm_gui_tid { // SERIALIZED - public static final int Tid__checkbox = 1, Tid__numeric = 2, Tid__select = 3, Tid__textbox = 4, Tid__fs_file = 5, Tid__fs_dir = 6, Tid__memo = 7, Tid__button = 8, Tid__label = 9; - - public static int To_tid(String str) { - if (String_.Eq(str, "checkbox")) return Tid__checkbox; - else if (String_.Eq(str, "numeric")) return Tid__numeric; - else if (String_.Eq(str, "select")) return Tid__select; - else if (String_.Eq(str, "textbox")) return Tid__textbox; - else if (String_.Eq(str, "fs_file")) return Tid__fs_file; - else if (String_.Eq(str, "fs_dir")) return Tid__fs_dir; - else if (String_.Eq(str, "memo")) return Tid__memo; - else if (String_.Eq(str, "button")) return Tid__button; - else if (String_.Eq(str, "label")) return Tid__label; - else throw Err_.new_unhandled_default(str); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_row.java similarity index 75% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_row.java index 2f476cabe..66b4e2bcb 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_row.java @@ -15,9 +15,9 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xogrp_meta_itm { - public Xogrp_meta_itm(int id, String key) { +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +public class Xocfg_grp_row { + public Xocfg_grp_row(int id, String key) { this.id = id; this.key = key; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_tbl.java similarity index 76% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_tbl.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_tbl.java index 80801f837..49b8c23fd 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_meta_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_grp_tbl.java @@ -15,13 +15,13 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xogrp_meta_tbl implements Db_tbl { +public class Xocfg_grp_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld__grp_id, fld__grp_key; private final Db_conn conn; - public Xogrp_meta_tbl(Db_conn conn) { + public Xocfg_grp_tbl(Db_conn conn) { this.conn = conn; this.fld__grp_id = flds.Add_int_pkey("grp_id"); this.fld__grp_key = flds.Add_str("grp_key", 255); @@ -37,21 +37,21 @@ public class Xogrp_meta_tbl implements Db_tbl { Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__grp_id), grp_id, grp_key); } public int Select_id_by_key_or_fail(String key) { - Xogrp_meta_itm itm = this.Select_by_key_or_null(key); + Xocfg_grp_row itm = this.Select_by_key_or_null(key); if (itm == null) throw Err_.new_wo_type("cfg.grp:invalid key", "key", key); return itm.Id(); } - public Xogrp_meta_itm Select_by_key_or_null(String key) { + public Xocfg_grp_row Select_by_key_or_null(String key) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__grp_key).Crt_str(fld__grp_key, key).Exec_select__rls_auto(); try {return rdr.Move_next() ? Load(rdr): null;} finally {rdr.Rls();} } - private Xogrp_meta_itm Load(Db_rdr rdr) { - return new Xogrp_meta_itm + private Xocfg_grp_row Load(Db_rdr rdr) { + return new Xocfg_grp_row ( rdr.Read_int(fld__grp_id) , rdr.Read_str(fld__grp_key) ); } public void Rls() {} - public static final String TBL_NAME = "cfg_grp_meta"; + public static final String TBL_NAME = "cfg_grp"; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java similarity index 78% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java index f2ca57590..5c85dbf91 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java @@ -15,9 +15,9 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xoitm_meta_itm { - public Xoitm_meta_itm(int id, int scope_id, int db_type, int gui_type, String gui_args, String key, String dflt) { +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +public class Xocfg_itm_row { + public Xocfg_itm_row(int id, int scope_id, int db_type, int gui_type, String gui_args, String key, String dflt) { this.id = id; this.scope_id = scope_id; this.db_type = db_type; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java similarity index 83% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_tbl.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java index 9b4d8cdc1..79ba5306e 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_meta_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java @@ -15,15 +15,15 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xoitm_meta_tbl implements Db_tbl { +public class Xocfg_itm_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_db_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt; private final Db_conn conn; - public Xoitm_meta_tbl(Db_conn conn) { + public Xocfg_itm_tbl(Db_conn conn) { this.conn = conn; - this.tbl_name = "cfg_itm_meta"; + this.tbl_name = "cfg_itm"; this.fld__itm_id = flds.Add_int_pkey("itm_id"); // EX: '2' this.fld__itm_key = flds.Add_str("itm_key", 255); // EX: 'cfg_1' this.fld__itm_scope_id = flds.Add_int("itm_scope_id"); // EX: '1'; ENUM: Xoitm_scope_tid @@ -41,13 +41,13 @@ public class Xoitm_meta_tbl implements Db_tbl { public void Upsert(int itm_id, int scope_id, int db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) { Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt); } - public Xoitm_meta_itm Select_by_key_or_null(String key) { + public Xocfg_itm_row Select_by_key_or_null(String key) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto(); try {return rdr.Move_next() ? Load(rdr) : null;} finally {rdr.Rls();} } - private Xoitm_meta_itm Load(Db_rdr rdr) { - return new Xoitm_meta_itm + private Xocfg_itm_row Load(Db_rdr rdr) { + return new Xocfg_itm_row ( rdr.Read_int(fld__itm_id) , rdr.Read_int(fld__itm_scope_id) , rdr.Read_int(fld__itm_db_type) diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_map_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_map_tbl.java similarity index 85% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_map_tbl.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_map_tbl.java index f230d6a1a..61833dfcf 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xogrp_map_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_map_tbl.java @@ -15,15 +15,15 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xogrp_map_tbl implements Db_tbl { +public class Xocfg_map_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld__map_src, fld__map_trg, fld__map_sort; private final Db_conn conn; - public Xogrp_map_tbl(Db_conn conn) { + public Xocfg_map_tbl(Db_conn conn) { this.conn = conn; - this.tbl_name = "cfg_grp_map"; + this.tbl_name = "cfg_map"; this.fld__map_src = flds.Add_int("map_src"); this.fld__map_trg = flds.Add_int("map_trg"); this.fld__map_sort = flds.Add_int("map_sort"); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_itm.java similarity index 76% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_itm.java index b228ee2b2..a22a25020 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_itm.java @@ -15,9 +15,9 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xonde_i18n_itm { - public Xonde_i18n_itm(int id, String lang, String name, String help) { +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +public class Xocfg_txt_itm { + public Xocfg_txt_itm(int id, String lang, String name, String help) { this.id = id; this.lang = lang; this.name = name; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_tbl.java similarity index 80% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_tbl.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_tbl.java index 68888880b..27180d488 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xonde_i18n_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_txt_tbl.java @@ -15,15 +15,15 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xonde_i18n_tbl implements Db_tbl { +public class Xocfg_txt_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); private final String fld__nde_id, fld__nde_lang, fld__nde_name, fld__nde_help; private final Db_conn conn; - public Xonde_i18n_tbl(Db_conn conn) { + public Xocfg_txt_tbl(Db_conn conn) { this.conn = conn; - this.tbl_name = "cfg_nde_i18n"; + this.tbl_name = "cfg_txt"; this.fld__nde_id = flds.Add_int_pkey("nde_id"); // EX: '2' this.fld__nde_lang = flds.Add_str("nde_lang", 16); // EX: 'en' this.fld__nde_name = flds.Add_str("nde_name", 255); // EX: 'Cfg Name' @@ -35,13 +35,13 @@ public class Xonde_i18n_tbl implements Db_tbl { public void Upsert(int nde_id, String nde_lang, String nde_name, String nde_help) { Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__nde_id, fld__nde_lang), nde_id, nde_lang, nde_name, nde_help); } - public Xonde_i18n_itm Select_by_id_or_null(int id) { + public Xocfg_txt_itm Select_by_id_or_null(int id) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__nde_id).Crt_int(fld__nde_id, id).Exec_select__rls_auto(); try {return rdr.Move_next() ? Load(rdr) : null;} finally {rdr.Rls();} } - private Xonde_i18n_itm Load(Db_rdr rdr) { - return new Xonde_i18n_itm + private Xocfg_txt_itm Load(Db_rdr rdr) { + return new Xocfg_txt_itm ( rdr.Read_int(fld__nde_id) , rdr.Read_str(fld__nde_lang) , rdr.Read_str(fld__nde_name) diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_row.java similarity index 70% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_row.java index 6ca35d127..a0114abd9 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_row.java @@ -15,15 +15,15 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public class Xoitm_data_itm { - public Xoitm_data_itm(int id, String ctx, String val, String date) { - this.id = id; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +public class Xocfg_val_row { + public Xocfg_val_row(String key, String ctx, String val, String date) { + this.key = key; this.ctx = ctx; this.val = val; this.date = date; } - public int Id() {return id;} private final int id; + public String Key() {return key;} private final String key; public String Ctx() {return ctx;} private final String ctx; public String Val() {return val;} private final String val; public String Date() {return date;} private final String date; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_tbl.java similarity index 54% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_tbl.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_tbl.java index 28713c2a8..f8eefa2a1 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_data_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_val_tbl.java @@ -15,16 +15,16 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xoitm_data_tbl implements Db_tbl { +public class Xocfg_val_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); - private final String fld__itm_id, fld__itm_ctx, fld__itm_val, fld__itm_date; + private final String fld__itm_key, fld__itm_ctx, fld__itm_val, fld__itm_date; private final Db_conn conn; - public Xoitm_data_tbl(Db_conn conn) { + public Xocfg_val_tbl(Db_conn conn) { this.conn = conn; - this.tbl_name = "cfg_itm_data"; - this.fld__itm_id = flds.Add_int("itm_id"); // EX: '1' + this.tbl_name = "cfg_val"; + this.fld__itm_key = flds.Add_str("itm_key", 255); // EX: 'xowa.app.cfg_1' this.fld__itm_ctx = flds.Add_str("itm_ctx", 255); // EX: 'app'; 'en.w'; 'ns-10' this.fld__itm_val = flds.Add_str("itm_val", 4096); // EX: 'abc' this.fld__itm_date = flds.Add_str("itm_date", 16); // EX: '20160901_010203' @@ -33,34 +33,34 @@ public class Xoitm_data_tbl implements Db_tbl { public String Tbl_name() {return tbl_name;} private final String tbl_name; public void Create_tbl() { conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds - , Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "core", fld__itm_id, fld__itm_ctx) + , Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "core", fld__itm_key, fld__itm_ctx) // NOTE: key,ctx b/c key has greater specificity )); } - public void Upsert(int itm_id, String ctx, String itm_val, String itm_date) { - Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, ctx, itm_val, itm_date); + public void Upsert(String ctx, String key, String val, String date) { + Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_key, fld__itm_ctx), key, ctx, val, date); } - public void Delete(int id, String ctx) { - conn.Stmt_delete(tbl_name, fld__itm_id, fld__itm_ctx).Crt_int(fld__itm_id, id).Crt_str(fld__itm_ctx, ctx).Exec_delete(); + public void Delete(String ctx, String key) { + conn.Stmt_delete(tbl_name, fld__itm_key, fld__itm_ctx).Crt_str(fld__itm_key, key).Crt_str(fld__itm_ctx, ctx).Exec_delete(); } - public Xoitm_data_itm Select_one_by_id_or_null(int id, String ctx) { - Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_id, fld__itm_ctx).Crt_int(fld__itm_id, id).Crt_str(fld__itm_ctx, ctx).Exec_select__rls_auto(); + public Xocfg_val_row Select_one_or_null(String ctx, String key) { + Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key, fld__itm_ctx).Crt_str(fld__itm_key, key).Crt_str(fld__itm_ctx, ctx).Exec_select__rls_auto(); try {return rdr.Move_next() ? Load(rdr) : null;} finally {rdr.Rls();} } - public Xoitm_data_itm[] Select_all_by_id(int id) { + public Xocfg_val_row[] Select_all(String key) { List_adp list = List_adp_.New(); - Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_id).Crt_int(fld__itm_id, id).Exec_select__rls_auto(); + Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto(); try { while (rdr.Move_next()) { list.Add(Load(rdr)); } } finally {rdr.Rls();} - return (Xoitm_data_itm[])list.To_ary_and_clear(Xoitm_data_itm.class); + return (Xocfg_val_row[])list.To_ary_and_clear(Xocfg_val_row.class); } - private Xoitm_data_itm Load(Db_rdr rdr) { - return new Xoitm_data_itm - ( rdr.Read_int(fld__itm_id) + private Xocfg_val_row Load(Db_rdr rdr) { + return new Xocfg_val_row + ( rdr.Read_str(fld__itm_key) , rdr.Read_str(fld__itm_ctx) , rdr.Read_str(fld__itm_val) , rdr.Read_str(fld__itm_date) diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_db_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_db_tid.java new file mode 100644 index 000000000..2228be810 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_db_tid.java @@ -0,0 +1,29 @@ +/* +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.apps.cfgs.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +public class Xoitm_db_tid { + public static final int Tid__bool = 1, Tid__int = 2, Tid__str = 3, Tid__memo = 4; + public static int To_int(String s) { + if (String_.Eq(s, "bool")) return Tid__bool; + else if (String_.Eq(s, "int")) return Tid__int; + else if (String_.Eq(s, "string")) return Tid__str; + else if (String_.Eq(s, "memo")) return Tid__memo; + else return Tid__str; +// else throw Err_.new_wo_type("xo.cfg_maint:unknown db_type", "db_type", s); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java new file mode 100644 index 000000000..0c310637c --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java @@ -0,0 +1,53 @@ +/* +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.apps.cfgs.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +public class Xoitm_gui_tid { // SERIALIZED + public static final int Tid__checkbox = 1, Tid__numeric = 2, Tid__select = 3, Tid__textbox = 4, Tid__fs_file = 5, Tid__fs_dir = 6, Tid__memo = 7, Tid__button = 8, Tid__label = 9; + public static final String + Str__checkbox = "checkbox" + , Str__numeric = "numeric" + , Str__select = "select" + , Str__textbox = "textbox" + , Str__fs_file = "fs_file" + , Str__fs_dir = "fs_dir" + , Str__memo = "memo" + , Str__button = "button" + , Str__label = "label" + ; + + public static int To_tid(String str) { + if (String_.Eq(str, Str__checkbox)) return Tid__checkbox; + else if (String_.Eq(str, Str__numeric)) return Tid__numeric; + else if (String_.Eq(str, Str__select)) return Tid__select; + else if (String_.Eq(str, Str__textbox)) return Tid__textbox; + else if (String_.Eq(str, Str__fs_file)) return Tid__fs_file; + else if (String_.Eq(str, Str__fs_dir)) return Tid__fs_dir; + else if (String_.Eq(str, Str__memo)) return Tid__memo; + else if (String_.Eq(str, Str__button)) return Tid__button; + else if (String_.Eq(str, Str__label)) return Tid__label; + else throw Err_.new_unhandled_default(str); + } + public static String Infer_gui_type(String db_type) { + if (String_.Eq(db_type, "bool")) + return Xoitm_gui_tid.Str__checkbox; + else if (String_.Eq(db_type, "memo")) + return Xoitm_gui_tid.Str__memo; + else + return Xoitm_gui_tid.Str__textbox; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_lang_tid.java similarity index 72% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_lang_tid.java index 468d15991..901c3eff1 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_lang_tid.java @@ -15,8 +15,7 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -public interface Xogui_nde { - int Id(); - void Load_by_i18n(String lang, String name, String help); +package gplx.xowa.addons.apps.cfgs.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +public class Xoitm_lang_tid { + public static final String Lang__dflt = "en"; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_scope_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java similarity index 84% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_scope_tid.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java index 1e77b3952..ee4650d5b 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/Xoitm_scope_tid.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java @@ -15,7 +15,7 @@ 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.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; public class Xoitm_scope_tid { // SERIALIZED public static final int Tid__app = 1, Tid__wiki = 2; public static int To_int(String raw) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde_hash.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde_hash.java deleted file mode 100644 index 0842d8f14..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nde_hash.java +++ /dev/null @@ -1,95 +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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -class Xogui_nde_hash { - private final Ordered_hash hash = Ordered_hash_.New(); - private final List_adp deleted = List_adp_.New(); - public int Len() { - return hash.Len(); - } - public void Add(Xogui_nde nde) { - hash.Add(nde.Id(), nde); - } - public Xogui_nde Get_at(int i) { - return (Xogui_nde)hash.Get_at(i); - } - public Xogui_nde Get_by_or_fail(int id) { - return (Xogui_nde)hash.Get_by_or_fail(id); - } - public Xogui_grp[] To_grp_ary_and_clear() { - return (Xogui_grp[])hash.To_ary_and_clear(Xogui_grp.class); - } - public void Delete_container_grps() {// remove container grps else headers with no items will show up - int len = hash.Len(); - for (int i = 0; i < len; i++) { - Xogui_grp grp = (Xogui_grp)hash.Get_at(i); - if (grp.Itms().length == 0) - deleted.Add(grp); - } - - len = deleted.Len(); - for (int i = 0; i < len; i++) { - Xogui_grp grp = (Xogui_grp)deleted.Get_at(i); - hash.Del(grp.Id()); - } - } - - public Xogui_nde_hash Merge(Xogui_nde_hash src) { - int len = src.Len(); - for (int i = 0; i < len; i++) { - this.Add(src.Get_at(i)); - } - return this; - } - public void Deleted__add(Xogui_nde nde) { - deleted.Add(nde); - } - public void Deleted__commit() { - int len = deleted.Len(); - for (int i = 0; i < len; i++) { - Xogui_nde nde = (Xogui_nde)deleted.Get_at(i); - hash.Del(nde.Id()); - } - } -} -class Xogui_nde_iter { - private final Xogui_nde_hash hash; - private int bgn, max; - public Xogui_nde_iter(Xogui_nde_hash hash, int max) { - this.hash = hash; - this.max = max; - } - public boolean Move_next() { - return bgn < hash.Len(); - } - public String To_sql_in() { - Bry_bfr bfr = Bry_bfr_.New(); - int end = bgn + max; - if (end > hash.Len()) end = hash.Len(); - for (int i = bgn; i < end; i++) { - Xogui_nde nde = hash.Get_at(i); - if (i != bgn) bfr.Add_byte_comma(); - bfr.Add_int_variable(nde.Id()); - } - bgn = end; - return bfr.To_str_and_clear(); - } - public static Xogui_nde_iter New_sql(Xogui_nde_hash hash) { - return new Xogui_nde_iter(hash, 255); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_grp.java index 08d53c40d..f8a0b1736 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_grp.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_grp.java @@ -31,7 +31,7 @@ class Xocfg_cache_grp { if (rv != null) return rv.Val(); // global match; EX: "app|key_1" - rv = (Xocfg_cache_itm)vals.Get_by(gplx.xowa.addons.apps.cfgs.gui.Xogui_itm.Ctx__app); + rv = (Xocfg_cache_itm)vals.Get_by(gplx.xowa.addons.apps.cfgs.specials.edits.objs.Xoedit_itm.Ctx__app); if (rv != null) return rv.Val(); // dflt diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr.java index 3781e4f96..014e391b0 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr.java @@ -16,16 +16,20 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.mgrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +import gplx.dbs.*; +import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; public class Xocfg_cache_mgr { private final Hash_adp grps = Hash_adp_.New(); public Xocfg_cache_mgr() { - this.db_mgr = new Xocfg_db_mgr(Db_conn_.Noop); + this.db_app = new Xocfg_db_app(Db_conn_.Noop); + this.db_usr = new Xocfg_db_usr(db_app, Db_conn_.Noop); } - public void Init_by_app(Db_conn conn) { - this.db_mgr = new Xocfg_db_mgr(conn); + public void Init_by_app(Db_conn app_conn, Db_conn usr_conn) { + this.db_app = new Xocfg_db_app(app_conn); + this.db_usr = new Xocfg_db_usr(db_app, usr_conn); } - public Xocfg_db_mgr Db_mgr() {return db_mgr;} private Xocfg_db_mgr db_mgr; + public Xocfg_db_app Db_app() {return db_app;} private Xocfg_db_app db_app; + public Xocfg_db_usr Db_usr() {return db_usr;} private Xocfg_db_usr db_usr; public void Clear() {grps.Clear();} public String Get(String ctx, String key) { Xocfg_cache_grp grp = Grps__get_or_load(key); @@ -34,13 +38,13 @@ public class Xocfg_cache_mgr { public void Set(String ctx, String key, String val) { Xocfg_cache_grp grp = Grps__get_or_load(key); grp.Set(ctx, val); - db_mgr.Set_str(ctx, key, val); + db_usr.Set_str(ctx, key, val); grp.Pub(ctx, val); } public void Del(String ctx, String key) { Xocfg_cache_grp grp = Grps__get_or_load(key); grp.Del(ctx); - db_mgr.Del(ctx, key); + db_usr.Del(ctx, key); grp.Pub(ctx, grp.Dflt()); } public void Sub(Gfo_invk sub, String ctx, String key, String evt) { @@ -57,18 +61,18 @@ public class Xocfg_cache_mgr { } private Xocfg_cache_grp Load_grp(String key) { // get data from db - Xoitm_meta_itm meta_itm = db_mgr.Tbl__itm_meta().Select_by_key_or_null(key); + Xocfg_itm_row meta_itm = db_app.Tbl__itm().Select_by_key_or_null(key); if (meta_itm == null) { Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:grp not found; key=~{0}", key); return new Xocfg_cache_grp(key, ""); } - Xoitm_data_itm[] itms = db_mgr.Tbl__itm_data().Select_all_by_id(meta_itm.Id()); + Xocfg_val_row[] itms = db_usr.Tbl__val().Select_all(meta_itm.Key()); // make Xocfg_cache_grp rv = new Xocfg_cache_grp(key, meta_itm.Dflt()); int len = itms.length; for (int i = 0; i < len; i++) { - Xoitm_data_itm itm = itms[0]; + Xocfg_val_row itm = itms[0]; String itm_ctx = itm.Ctx(); rv.Add(itm_ctx, new Xocfg_cache_itm(itm_ctx, key, itm.Val())); } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java index 26cfdec70..a5113c802 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/Xocfg_cache_mgr__tst.java @@ -16,7 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.mgrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -import org.junit.*; import gplx.core.tests.*; import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.*; +import org.junit.*; import gplx.core.tests.*; import gplx.dbs.*; +import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.specials.maints.services.*; public class Xocfg_cache_mgr__tst { private final Xocfg_cache_mgr__fxt fxt = new Xocfg_cache_mgr__fxt(); @Before public void init() {fxt.Clear();} @@ -26,14 +27,14 @@ public class Xocfg_cache_mgr__tst { fxt.Test__get("en.d", "key_1", "dflt"); } @Test public void Get__app() { - String ctx = gplx.xowa.addons.apps.cfgs.gui.Xogui_itm.Ctx__app; + String ctx = gplx.xowa.addons.apps.cfgs.specials.edits.objs.Xoedit_itm.Ctx__app; fxt.Init__db_add(ctx, "key_1", "val_1"); fxt.Test__get(ctx, "key_1", "val_1"); fxt.Test__get("en.w", "key_1", "val_1"); fxt.Test__get("en.d", "key_1", "val_1"); } @Test public void Set__app() { - String ctx = gplx.xowa.addons.apps.cfgs.gui.Xogui_itm.Ctx__app; + String ctx = gplx.xowa.addons.apps.cfgs.specials.edits.objs.Xoedit_itm.Ctx__app; fxt.Init__db_add(ctx, "key_1", "123"); fxt.Init__sub(ctx, "key_1", "key_1"); fxt.Exec__set(ctx, "key_1", "234"); @@ -43,19 +44,16 @@ public class Xocfg_cache_mgr__tst { } class Xocfg_cache_mgr__fxt { private Xocfg_cache_mgr mgr = new Xocfg_cache_mgr(); - private Xocfg_itm_bldr cfg_bldr; public void Clear() { gplx.dbs.Db_conn_bldr.Instance.Reg_default_mem(); Db_conn conn = Db_conn_bldr.Instance.Get_or_autocreate(true, Io_url_.new_any_("mem/xowa/wiki/en.wikipedia.org/")); - mgr.Init_by_app(conn); - cfg_bldr = new Xocfg_itm_bldr(mgr.Db_mgr()); + mgr.Init_by_app(conn, conn); } public Xocfg_cache_sub_mock Sub() {return sub;} private Xocfg_cache_sub_mock sub = new Xocfg_cache_sub_mock(); public void Init__db_add(String ctx, String key, Object val) { - cfg_bldr.Create_grp("", "test_grp", "", ""); - int type_id = Type_adp_.To_tid_obj(val); - cfg_bldr.Create_itm("test_grp", key, "wiki", type_id, "textbox", "", "dflt", "", ""); - mgr.Db_mgr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val)); + Xocfg_maint_svc.Create_grp(mgr.Db_app(), "test_grp", "", "", ""); + Xocfg_maint_svc.Create_itm(mgr.Db_app(), key, "test_grp", "", "", "wiki", "string", "dflt", "textbox", ""); + mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val)); } public void Init__sub(String ctx, String key, String evt) { mgr.Sub(sub, ctx, key, evt); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java similarity index 77% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_grp.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java index 698cf3e58..349a45bc6 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_grp.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java @@ -15,11 +15,11 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; -public class Xogui_grp implements Xogui_nde, Mustache_doc_itm { - public Xogui_grp(int id, int sort, String key) { +public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm { + public Xoedit_grp(int id, int sort, String key) { this.id = id; this.sort = sort; this.key = key; @@ -33,16 +33,16 @@ public class Xogui_grp implements Xogui_nde, Mustache_doc_itm { public String Name() {return name;} private String name; public String Help() {return help;} private String help; - public Xogui_itm[] Itms() {return itms;} private Xogui_itm[] itms = new Xogui_itm[0]; + public Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0]; public void Load_by_i18n(String lang, String name, String help) { this.lang = lang; this.name = name; this.help = help; } - public void Grps__add(Xogui_grp grp) { + public void Grps__add(Xoedit_grp grp) { } - public void Itms_(Xogui_itm[] v) { + public void Itms_(Xoedit_itm[] v) { this.itms = v; } public Gfobj_nde To_nde() { @@ -56,7 +56,7 @@ public class Xogui_grp implements Xogui_nde, Mustache_doc_itm { List_adp list = List_adp_.New(); int len = itms.length; for (int i = 0; i < len; i++) { - Xogui_itm itm = itms[i]; + Xoedit_itm itm = itms[i]; list.Add(itm.To_nde()); } rv.Add_ary("itms", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class))); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java similarity index 86% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java index 7aefc8c25..07c503c14 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java @@ -15,13 +15,14 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; import gplx.langs.jsons.*; -public class Xogui_itm implements Xogui_nde, Mustache_doc_itm { - public Xogui_itm(int id, int sort) { +public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { + public Xoedit_itm(int id, int sort, String key) { this.id = id; this.sort = sort; + this.key = key; } public int Id() {return id;} private final int id; public int Sort() {return sort;} private final int sort; @@ -77,12 +78,11 @@ public class Xogui_itm implements Xogui_nde, Mustache_doc_itm { rv.Add_str("date", date); Bry_bfr bfr = Bry_bfr_.New(); To_html(bfr); - // rv.Add_str("html", String_.Replace(bfr.To_str_and_clear(), "'", "\\\"")); rv.Add_str("html", bfr.To_str_and_clear()); return rv; } private void To_html(Bry_bfr bfr) { - new Xogui_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val); + new Xoedit_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val); } public boolean Mustache__write(String k, Mustache_bfr bfr) { if (String_.Eq(k, "id")) bfr.Add_int(id); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java similarity index 85% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm_html.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java index 788c599a2..12dd85ad4 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_itm_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java @@ -15,9 +15,9 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; -import gplx.xowa.addons.apps.cfgs.dbs.*; -public class Xogui_itm_html { +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; +import gplx.xowa.addons.apps.cfgs.enums.*; +public class Xoedit_itm_html { public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) { switch (gui_type) { case Xoitm_gui_tid.Tid__checkbox: diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_itm.java similarity index 74% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_itm.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_itm.java index d226ca785..033ec7a57 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_itm.java @@ -15,12 +15,12 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; -public class Xogui_nav_itm implements Mustache_doc_itm { +public class Xoedit_nav_itm implements Mustache_doc_itm { private final boolean selected; private final String key, text; - public Xogui_nav_itm(boolean selected, String key, String text) { + public Xoedit_nav_itm(boolean selected, String key, String text) { this.selected = selected; this.key = key; this.text = text; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_mgr.java similarity index 66% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_mgr.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_mgr.java index 76f7f6439..ce08f19eb 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_nav_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nav_mgr.java @@ -15,11 +15,11 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; -public class Xogui_nav_mgr implements Mustache_doc_itm { - public Xogui_nav_itm[] Itms() {return itms;} private final Xogui_nav_itm[] itms; - public Xogui_nav_mgr(Xogui_nav_itm[] itms) { +public class Xoedit_nav_mgr implements Mustache_doc_itm { + public Xoedit_nav_itm[] Itms() {return itms;} private final Xoedit_nav_itm[] itms; + public Xoedit_nav_mgr(Xoedit_nav_itm[] itms) { this.itms = itms; } public boolean Mustache__write(String k, Mustache_bfr bfr) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java new file mode 100644 index 000000000..5d05b8027 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java @@ -0,0 +1,23 @@ +/* +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.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; +public interface Xoedit_nde { + int Id(); + String Key(); + void Load_by_i18n(String lang, String name, String help); +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde_hash.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde_hash.java new file mode 100644 index 000000000..6adfb9fef --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde_hash.java @@ -0,0 +1,78 @@ +/* +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.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; +public class Xoedit_nde_hash { + private final Ordered_hash hash = Ordered_hash_.New(); + private final Ordered_hash id_hash = Ordered_hash_.New(); + private final List_adp deleted = List_adp_.New(); + public int Len() { + return hash.Len(); + } + public void Add(Xoedit_nde nde) { + hash.Add(nde.Key(), nde); + id_hash.Add(nde.Id(), nde); + } + public Xoedit_nde Get_at(int i) { + return (Xoedit_nde)hash.Get_at(i); + } + public Xoedit_nde Get_by_or_fail(String key) { + return (Xoedit_nde)hash.Get_by_or_fail(key); + } + public Xoedit_nde Get_by_or_fail(int id) { + return (Xoedit_nde)id_hash.Get_by_or_fail(id); + } + public Xoedit_grp[] To_grp_ary_and_clear() { + Xoedit_grp[] rv = (Xoedit_grp[])hash.To_ary_and_clear(Xoedit_grp.class); + id_hash.Clear(); + return rv; + } + public void Delete_container_grps() {// remove container grps else headers with no items will show up + int len = hash.Len(); + for (int i = 0; i < len; i++) { + Xoedit_grp grp = (Xoedit_grp)hash.Get_at(i); + if (grp.Itms().length == 0) + deleted.Add(grp); + } + + len = deleted.Len(); + for (int i = 0; i < len; i++) { + Xoedit_grp grp = (Xoedit_grp)deleted.Get_at(i); + hash.Del(grp.Key()); + id_hash.Del(grp.Id()); + } + } + + public Xoedit_nde_hash Merge(Xoedit_nde_hash src) { + int len = src.Len(); + for (int i = 0; i < len; i++) { + this.Add(src.Get_at(i)); + } + return this; + } + public void Deleted__add(Xoedit_nde nde) { + deleted.Add(nde); + } + public void Deleted__commit() { + int len = deleted.Len(); + for (int i = 0; i < len; i++) { + Xoedit_nde nde = (Xoedit_nde)deleted.Get_at(i); + hash.Del(nde.Key()); + id_hash.Del(nde.Id()); + } + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_root.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java similarity index 67% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_root.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java index 92000a82d..fe9871982 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_root.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java @@ -15,14 +15,14 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; -public class Xogui_root implements Mustache_doc_itm { - private final Xogui_nav_mgr[] nav_mgrs; - private final Xogui_grp[] grps; - public Xogui_root(Xogui_nav_mgr nav_mgr, Xogui_grp[] grps) { - this.nav_mgrs = nav_mgr.Itms().length == 0 ? new Xogui_nav_mgr[0] : new Xogui_nav_mgr[] {nav_mgr}; +public class Xoedit_root implements Mustache_doc_itm { + private final Xoedit_nav_mgr[] nav_mgrs; + private final Xoedit_grp[] grps; + public Xoedit_root(Xoedit_nav_mgr nav_mgr, Xoedit_grp[] grps) { + this.nav_mgrs = nav_mgr.Itms().length == 0 ? new Xoedit_nav_mgr[0] : new Xoedit_nav_mgr[] {nav_mgr}; this.grps = grps; } public Gfobj_nde To_nde() { @@ -30,7 +30,7 @@ public class Xogui_root implements Mustache_doc_itm { List_adp list = List_adp_.New(); int len = grps.length; for (int i = 0; i < len; i++) { - Xogui_grp itm = grps[i]; + Xoedit_grp itm = grps[i]; list.Add(itm.To_nde()); } rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class))); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xogui_nde_iter.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xogui_nde_iter.java new file mode 100644 index 000000000..f753895be --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xogui_nde_iter.java @@ -0,0 +1,58 @@ +/* +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.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; +public class Xogui_nde_iter { + private final Xoedit_nde_hash hash; + private int bgn, max; + public Xogui_nde_iter(Xoedit_nde_hash hash, int max) { + this.hash = hash; + this.max = max; + } + public boolean Move_next() { + return bgn < hash.Len(); + } + public String To_sql_in() { + Bry_bfr bfr = Bry_bfr_.New(); + int end = bgn + max; + if (end > hash.Len()) end = hash.Len(); + for (int i = bgn; i < end; i++) { + Xoedit_nde nde = hash.Get_at(i); + if (i != bgn) bfr.Add_byte_comma(); + bfr.Add_int_variable(nde.Id()); + } + bgn = end; + return bfr.To_str_and_clear(); + } + public String To_sql_in_key() { + Bry_bfr bfr = Bry_bfr_.New(); + int end = bgn + max; + if (end > hash.Len()) end = hash.Len(); + for (int i = bgn; i < end; i++) { + Xoedit_nde nde = (Xoedit_nde)hash.Get_at(i); + if (i != bgn) bfr.Add_byte_comma(); + bfr.Add_byte_apos(); + bfr.Add_str_u8(nde.Key()); + bfr.Add_byte_apos(); + } + bgn = end; + return bfr.To_str_and_clear(); + } + public static Xogui_nde_iter New_sql(Xoedit_nde_hash hash) { + return new Xogui_nde_iter(hash, 255); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_html.java index 73df8b36a..e7e70e73a 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_html.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.specials.edits.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*; -import gplx.xowa.addons.apps.cfgs.gui.*; +import gplx.xowa.addons.apps.cfgs.specials.edits.services.*; import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; class Xocfg_edit_html extends Xow_special_wtr__base { private final String grp, ctx, lang; public Xocfg_edit_html(String grp, String ctx, String lang) { @@ -28,8 +28,8 @@ class Xocfg_edit_html extends Xow_special_wtr__base { @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "edit");} @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xo.cfg_edit.page.mustache.html");} @Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) { - Xogui_mgr mgr = Xogui_mgr.New(app); - return mgr.Get_root(grp, ctx, lang); + Xocfg_edit_loader mgr = Xocfg_edit_loader.New(app); + return mgr.Load_root(grp, ctx, lang); } @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/apps/cfgs/specials/edits/services/Xocfg_edit_bridge.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_bridge.java index e30e133a5..286e0d09d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_bridge.java @@ -19,9 +19,9 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; impor import gplx.langs.jsons.*; import gplx.xowa.htmls.bridges.*; public class Xocfg_edit_bridge implements Bridge_cmd_itm { - private Xocfg_edit_service svc; + private Xocfg_edit_svc svc; public void Init_by_app(Xoa_app app) { - this.svc = new Xocfg_edit_service(app); + this.svc = new Xocfg_edit_svc(app); } public String Exec(Json_nde data) { byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java similarity index 54% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_mgr.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java index fafbfeca2..44e70c83f 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/gui/Xogui_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java @@ -15,30 +15,33 @@ 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.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; +package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.dbs.*; -import gplx.xowa.addons.apps.cfgs.dbs.*; -public class Xogui_mgr { - private final Xocfg_db_mgr db_mgr; - public Xogui_mgr(Xocfg_db_mgr db_mgr) { - this.db_mgr = db_mgr; +import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; +import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; +public class Xocfg_edit_loader { + private final Xocfg_db_app db_app; + private final Xocfg_db_usr db_usr; + public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr) { + this.db_app = db_app; + this.db_usr = db_usr; } - public Xogui_root Get_root(String grp_key, String ctx, String lang) { + public Xoedit_root Load_root(String grp_key, String ctx, String lang) { // create lists Ordered_hash grp_temp = Ordered_hash_.New(); - Xogui_nde_hash grp_list = new Xogui_nde_hash(); - Xogui_nde_hash itm_list = new Xogui_nde_hash(); + Xoedit_nde_hash grp_list = new Xoedit_nde_hash(); + Xoedit_nde_hash itm_list = new Xoedit_nde_hash(); // get root_itm - Xogrp_meta_itm grp_meta = db_mgr.Tbl__grp_meta().Select_by_key_or_null(grp_key); + Xocfg_grp_row grp_meta = db_app.Tbl__grp().Select_by_key_or_null(grp_key); if (grp_meta == null) throw Err_.new_wo_type("cfg:grp not found", "grp", grp_key); - Xogui_grp owner = new Xogui_grp(grp_meta.Id(), 0, grp_meta.Key()); + Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), 0, grp_meta.Key()); grp_temp.Add(grp_meta.Id(), owner); grp_list.Add(owner); // load tree by selecting subs until no more grps while (grp_temp.Count() > 0) { - owner = (Xogui_grp)grp_temp.Get_at(0); + owner = (Xoedit_grp)grp_temp.Get_at(0); grp_temp.Del(owner.Id()); Load_subs(grp_list, itm_list, grp_temp, owner); } @@ -49,30 +52,30 @@ public class Xogui_mgr { Load_i18n(grp_list, itm_list, lang); grp_list.Delete_container_grps(); - return new Xogui_root(Load_nav_mgr(grp_key), (Xogui_grp[])grp_list.To_grp_ary_and_clear()); + return new Xoedit_root(Load_nav_mgr(grp_key), (Xoedit_grp[])grp_list.To_grp_ary_and_clear()); } - private Xogui_nav_mgr Load_nav_mgr(String grp_key) { + private Xoedit_nav_mgr Load_nav_mgr(String grp_key) { // get grp_id String sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT grp_id" - , "FROM cfg_grp_meta" + , "FROM cfg_grp" , "WHERE grp_key = '{0}'" ), grp_key ); int grp_id = -1; - Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); try {grp_id = rdr.Move_next() ? rdr.Read_int("grp_id") : -1;} finally {rdr.Rls();} // get owner_id sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT map_src" - , "FROM cfg_grp_map" + , "FROM cfg_map" , "WHERE map_trg = {0}" ), grp_id ); int owner_id = -1; - rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); try {owner_id = rdr.Move_next() ? rdr.Read_int("map_src") : -1;} finally {rdr.Rls();} @@ -80,57 +83,62 @@ public class Xogui_mgr { sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT m.map_trg" , ", m.map_sort" + , ", n.nde_name" , ", t.grp_key" - , "FROM cfg_grp_map m" - , " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id" + , "FROM cfg_map m" + , " LEFT JOIN cfg_grp t ON m.map_trg = t.grp_id" + , " LEFT JOIN cfg_txt n ON m.map_trg = n.nde_id" , "WHERE m.map_src = {0}" , "ORDER BY m.map_sort" ), owner_id ); List_adp list = List_adp_.New(); try { - rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); while (rdr.Move_next()) { String nav_key = rdr.Read_str("grp_key"); - list.Add(new Xogui_nav_itm(String_.Eq(grp_key, nav_key), nav_key, nav_key)); + String nav_text = rdr.Read_str("nde_name"); + list.Add(new Xoedit_nav_itm(String_.Eq(grp_key, nav_key), nav_key, nav_text)); } } finally { rdr.Rls(); } - return new Xogui_nav_mgr((Xogui_nav_itm[])list.To_ary_and_clear(Xogui_nav_itm.class)); + return new Xoedit_nav_mgr((Xoedit_nav_itm[])list.To_ary_and_clear(Xoedit_nav_itm.class)); } - private void Load_subs(Xogui_nde_hash grp_list, Xogui_nde_hash itm_list, Ordered_hash grp_temp, Xogui_grp owner) { + private void Load_subs(Xoedit_nde_hash grp_list, Xoedit_nde_hash itm_list, Ordered_hash grp_temp, Xoedit_grp owner) { String sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT m.map_trg" , ", m.map_sort" - , ", t.grp_key" - , "FROM cfg_grp_map m" - , " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id" + , ", Coalesce(g.grp_key, i.itm_key) AS key" + , ", i.itm_dflt" + , "FROM cfg_map m" + , " LEFT JOIN cfg_grp g ON m.map_trg = g.grp_id" + , " LEFT JOIN cfg_itm i ON m.map_trg = i.itm_id" , "WHERE m.map_src = {0}" ), owner.Id() ); - Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); List_adp itms_list = List_adp_.New(); while (rdr.Move_next()) { - String grp_key = rdr.Read_str("grp_key"); - // nde is itm - if (grp_key == null) { - Xogui_itm gui_itm = new Xogui_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort")); - itms_list.Add(gui_itm); - itm_list.Add(gui_itm); - } + String grp_key = rdr.Read_str("key"); // nde is grp - else { - Xogui_grp gui_grp = new Xogui_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key); + if (rdr.Read_str("itm_dflt") == null) { + Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key); owner.Grps__add(gui_grp); grp_list.Add(gui_grp); grp_temp.Add(gui_grp.Id(), gui_grp); } + // nde is itm + else { + Xoedit_itm gui_itm = new Xoedit_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key); + itms_list.Add(gui_itm); + itm_list.Add(gui_itm); + } } - owner.Itms_((Xogui_itm[])itms_list.To_ary_and_clear(Xogui_itm.class)); + owner.Itms_((Xoedit_itm[])itms_list.To_ary_and_clear(Xoedit_itm.class)); } - private void Load_itm_meta(Xogui_nde_hash itm_list) { + private void Load_itm_meta(Xoedit_nde_hash itm_list) { Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list); while (iter.Move_next()) { String sql = Db_sql_.Make_by_fmt(String_.Ary @@ -140,20 +148,20 @@ public class Xogui_mgr { , ", t.itm_gui_type" , ", t.itm_gui_args" , ", t.itm_dflt" - , "FROM cfg_itm_meta t" - , "WHERE t.itm_id IN ({0})" - ), iter.To_sql_in() + , "FROM cfg_itm t" + , "WHERE t.itm_key IN ({0})" + ), iter.To_sql_in_key() ); - Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); while (rdr.Move_next()) { - Xogui_itm gui_itm = (Xogui_itm)itm_list.Get_by_or_fail(rdr.Read_int("itm_id")); + Xoedit_itm gui_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key")); gui_itm.Load_by_meta(rdr.Read_str("itm_key"), rdr.Read_int("itm_scope_id"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt")); } } } - private void Load_itm_data(Xogui_nde_hash itm_list, String... ctxs) { - Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(itm_list); + private void Load_itm_data(Xoedit_nde_hash itm_list, String... ctxs) { + Xoedit_nde_hash cur_regy = new Xoedit_nde_hash().Merge(itm_list); // loop ctxs where later ctxs are more general defaults; EX: ["en.w", "en.*", "*.w", "app"] int ctxs_len = ctxs.length; @@ -163,20 +171,20 @@ public class Xogui_mgr { while (cur_iter.Move_next()) { // get all data by ids and ctx String sql = Db_sql_.Make_by_fmt(String_.Ary - ( "SELECT d.itm_id" + ( "SELECT d.itm_key" , ", d.itm_ctx" , ", d.itm_val" , ", d.itm_date" - , "FROM cfg_itm_data d" - , "WHERE d.itm_id IN ({0})" + , "FROM cfg_val d" + , "WHERE d.itm_key IN ({0})" , "AND d.itm_ctx = '{1}'" - ), cur_iter.To_sql_in(), ctxs[i] + ), cur_iter.To_sql_in_key(), ctxs[i] ); // read and set data - Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + Db_rdr rdr = db_usr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); while (rdr.Move_next()) { - Xogui_itm gui_itm = (Xogui_itm)cur_regy.Get_by_or_fail(rdr.Read_int("itm_id")); + Xoedit_itm gui_itm = (Xoedit_itm)cur_regy.Get_by_or_fail(rdr.Read_str("itm_key")); gui_itm.Load_by_data(rdr.Read_str("itm_ctx"), rdr.Read_str("itm_val"), rdr.Read_str("itm_date")); cur_regy.Deleted__add(gui_itm); } @@ -187,12 +195,12 @@ public class Xogui_mgr { // loop over remaining items and set to dflts int cur_len = cur_regy.Len(); for (int i = 0; i < cur_len; i++) { - Xogui_itm itm = (Xogui_itm)cur_regy.Get_at(i); + Xoedit_itm itm = (Xoedit_itm)cur_regy.Get_at(i); itm.Set_data_by_dflt(); } } - private void Load_i18n(Xogui_nde_hash grp_list, Xogui_nde_hash itm_list, String... langs) { - Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(grp_list).Merge(itm_list); + private void Load_i18n(Xoedit_nde_hash grp_list, Xoedit_nde_hash itm_list, String... langs) { + Xoedit_nde_hash cur_regy = new Xoedit_nde_hash().Merge(grp_list).Merge(itm_list); // loop langs where later langs are fallbacks; EX: ["de", "en"] int langs_len = langs.length; @@ -206,7 +214,7 @@ public class Xogui_mgr { , ", h.nde_name" , ", h.nde_help" , ", h.nde_lang" - , "FROM cfg_nde_i18n h" + , "FROM cfg_txt h" , "WHERE h.nde_id IN ({0})" , "AND h.nde_lang = '{1}'" ), cur_iter.To_sql_in() @@ -214,9 +222,9 @@ public class Xogui_mgr { ); // read and set i18n - Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); + Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto(); while (rdr.Move_next()) { - Xogui_nde gui_itm = (Xogui_nde)cur_regy.Get_by_or_fail(rdr.Read_int("nde_id")); + Xoedit_nde gui_itm = (Xoedit_nde)cur_regy.Get_by_or_fail(rdr.Read_int("nde_id")); gui_itm.Load_by_i18n(rdr.Read_str("nde_lang"), rdr.Read_str("nde_name"), rdr.Read_str("nde_help")); cur_regy.Deleted__add(gui_itm); } @@ -224,8 +232,8 @@ public class Xogui_mgr { cur_regy.Deleted__commit(); } } - public static Xogui_mgr New(Xoa_app app) { - Xocfg_db_mgr db_mgr = new Xocfg_db_mgr(app.User().User_db_mgr().Conn()); - return new Xogui_mgr(db_mgr); + public static Xocfg_edit_loader New(Xoa_app app) { + Xocfg_db_app db_app = Xocfg_db_app.New(app); + return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn())); } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_service.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java similarity index 84% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_service.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java index 1094432e5..e8039e506 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_service.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java @@ -17,12 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*; import gplx.langs.jsons.*; -import gplx.xowa.guis.cbks.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.gui.*; +import gplx.xowa.guis.cbks.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; import gplx.xowa.addons.apps.cfgs.specials.edits.pages.*; -public class Xocfg_edit_service { +public class Xocfg_edit_svc { private final Xoa_app app; + private Xocfg_edit_loader edit_loader; private final Xog_cbk_trg cbk_trg = Xog_cbk_trg.New(Xocfg_edit_special.Prototype.Special__meta().Ttl_bry()); - public Xocfg_edit_service(Xoa_app app) { + public Xocfg_edit_svc(Xoa_app app) { this.app = app; } public void Upsert(Json_nde args) { @@ -39,8 +40,8 @@ public class Xocfg_edit_service { public void Load(Json_nde args) { String ctx = args.Get_as_str("ctx"); String key = args.Get_as_str("key"); - Xogui_mgr gui_mgr = new Xogui_mgr(new Xocfg_db_mgr(app.User().User_db_mgr().Conn())); - Xogui_root gui_root = gui_mgr.Get_root(key, ctx, "en"); - app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", gui_root.To_nde()); + if (edit_loader == null) edit_loader = Xocfg_edit_loader.New(app); + Xoedit_root root = edit_loader.Load_root(key, ctx, "en"); + app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", root.To_nde()); } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java index 041a6960f..6106a65cc 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/pages/Xocfg_maint_html.java @@ -17,13 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.specials.maints.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*; -import gplx.xowa.addons.apps.cfgs.gui.*; +import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; class Xocfg_maint_html extends Xow_special_wtr__base { public Xocfg_maint_html() {} @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "maint");} @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xo.cfg_maint.mustache.html");} @Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) { - return new Xogui_grp(0, 1, "test"); + return new Xoedit_grp(0, 1, "test"); } @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/apps/cfgs/specials/maints/services/Xocfg_maint_bridge.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_bridge.java index 95aec57f7..fdd61d430 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_bridge.java @@ -19,9 +19,9 @@ package gplx.xowa.addons.apps.cfgs.specials.maints.services; import gplx.*; impo import gplx.langs.jsons.*; import gplx.xowa.htmls.bridges.*; public class Xocfg_maint_bridge implements Bridge_cmd_itm { - private Xocfg_maint_service svc; + private Xocfg_maint_svc svc; public void Init_by_app(Xoa_app app) { - this.svc = new Xocfg_maint_service(app); + this.svc = new Xocfg_maint_svc(app); } public String Exec(Json_nde data) { byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_nde.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_nde.java new file mode 100644 index 000000000..b16c82783 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_nde.java @@ -0,0 +1,58 @@ +/* +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.apps.cfgs.specials.maints.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; +abstract class Xocfg_maint_nde implements gplx.core.brys.Bry_bfr_able { + public Xocfg_maint_nde(String key, String owner, String name, String help) { + this.key = key; + this.owner = owner; + this.name = name; + this.help = help; + } + public abstract boolean Type_is_grp(); + public String Key() {return key;} private final String key; + public String Owner() {return owner;} private final String owner; + public String Name() {return name;} private final String name; + public String Help() {return help;} private final String help; + public void To_bfr(Bry_bfr bfr) { + bfr.Add_str_u8_fmt("{0}|{1}|{2}|{3}|{4}", this.Type_is_grp(), key, owner, name, help); + To_bfr_hook(bfr); + } + protected abstract void To_bfr_hook(Bry_bfr bfr); +} +class Xocfg_maint_grp extends Xocfg_maint_nde { public Xocfg_maint_grp(String key, String owner, String name, String help) {super(key, owner, name, help); + } + @Override public boolean Type_is_grp() {return true;} + @Override protected void To_bfr_hook(Bry_bfr bfr) {} +} +class Xocfg_maint_itm extends Xocfg_maint_nde { public Xocfg_maint_itm(String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {super(key, owner, name, help); + this.scope = scope; + this.db_type = db_type; + this.dflt = dflt; + this.gui_type = gui_type; + this.gui_args = gui_args; + } + @Override public boolean Type_is_grp() {return false;} + public String Scope() {return scope;} private final String scope; + public String Db_type() {return db_type;} private final String db_type; + public String Dflt() {return dflt;} private final String dflt; + public String Gui_type() {return gui_type;} private final String gui_type; + public String Gui_args() {return gui_args;} private final String gui_args; + @Override protected void To_bfr_hook(Bry_bfr bfr) { + bfr.Add_str_u8_fmt("|{0}|{1}|{2}|{3}|{4}", scope, db_type, dflt, gui_type, gui_args); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java new file mode 100644 index 000000000..cd1ae4522 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser.java @@ -0,0 +1,78 @@ +/* +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.apps.cfgs.specials.maints.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; +import gplx.langs.gfs.*; +class Xocfg_maint_parser { + public Xocfg_maint_nde[] Parse(String raw) { + GfoMsg root = Gfs_msg_bldr.Instance.ParseToMsg(raw); + root = root.Subs_getAt(0); // NOTE: ignore fake root + + int len = root.Subs_count(); + Xocfg_maint_nde[] rv = new Xocfg_maint_nde[len]; + for (int i = 0; i < len; i++) { + GfoMsg msg = root.Subs_getAt(i); + rv[i] = Parse_nde(msg); + } + return rv; + } + private Xocfg_maint_nde Parse_nde(GfoMsg msg) { + Ordered_hash hash = To_atr_hash(msg); + // get common atrs + String owner = Get_atr_as_str_or_fail(hash, "owner_"); + String key = Get_atr_as_str_or_fail(hash, "key_"); + String name = Get_atr_as_str_or_fail(hash, "name_"); + String help = Get_atr_as_str_or_fail(hash, "help_"); + + // create + String nde_type = msg.Key(); + if (String_.Eq(nde_type, "grp")) { + return new Xocfg_maint_grp(key, owner, name, help); + } + else if (String_.Eq(nde_type, "itm")) { + String scope = Get_atr_as_str_or_fail(hash, "scope_"); + String db_type = Get_atr_as_str_or_fail(hash, "db_type_"); + String dflt = Get_atr_as_str_or_fail(hash, "dflt_"); + String gui_type = Get_atr_as_str_or(hash, "gui_type_", null); + String gui_args = Get_atr_as_str_or(hash, "gui_args_", ""); + + if (gui_type == null) { + gui_type = gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Infer_gui_type(db_type); + } + return new Xocfg_maint_itm(key, owner, name, help, scope, db_type, dflt, gui_type, gui_args); + } + else throw Err_.new_wo_type("xo.cfg_maint:unknown type", "type", nde_type); + } + private static Ordered_hash To_atr_hash(GfoMsg msg) { + Ordered_hash rv = Ordered_hash_.New(); + int len = msg.Subs_count(); + for (int i = 0; i < len; i++) { + GfoMsg sub = msg.Subs_getAt(i); + rv.Add(sub.Key(), sub.Args_getAt(0).Val()); + } + return rv; + } + private static String Get_atr_as_str_or_fail(Ordered_hash hash, String key) { + String rv = Get_atr_as_str_or(hash, key, null); + if (rv == null) throw Err_.new_wo_type("xo.cfg_maint:missing key", "key", key); + return rv; + } + private static String Get_atr_as_str_or(Ordered_hash hash, String key, String or) { + String val = (String)hash.Get_by(key); + return val == null ? or : val; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser__tst.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser__tst.java new file mode 100644 index 000000000..e27d465d1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_parser__tst.java @@ -0,0 +1,45 @@ +/* +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.apps.cfgs.specials.maints.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; +import org.junit.*; import gplx.core.tests.*; +public class Xocfg_maint_parser__tst { + private final Xocfg_maint_parser__fxt fxt = new Xocfg_maint_parser__fxt(); + @Test public void Parse_grp() { + fxt.Exec__parse("root {grp {key='key_1'; owner='owner_1'; name='name_1'; help='help_1'}}" + , fxt.Make__grp("key_1", "owner_1", "name_1", "help_1") + ); + } + @Test public void Parse_itm() { + fxt.Exec__parse("root {itm {key='key_1'; owner='owner_1'; name='name_1'; help='help_1'; scope='scope_1'; db_type='db_type_1'; dflt='dflt_1'; gui_type='gui_type_1'; gui_args='gui_args_1'}}" + , fxt.Make__itm("key_1", "owner_1", "name_1", "help_1", "scope_1", "db_type_1", "dflt_1", "gui_type_1", "gui_args_1") + ); + } +} +class Xocfg_maint_parser__fxt { + private Xocfg_maint_parser parser = new Xocfg_maint_parser(); + public void Exec__parse(String raw, Xocfg_maint_nde... expd) { + Xocfg_maint_nde[] actl = parser.Parse(raw); + Gftest.Eq__ary(expd, actl); + } + public Xocfg_maint_grp Make__grp(String key, String owner, String name, String help) { + return new Xocfg_maint_grp(key, owner, name, help); + } + public Xocfg_maint_itm Make__itm(String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) { + return new Xocfg_maint_itm(key, owner, name, help, scope, db_type, dflt, gui_type, gui_args); + } +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_service.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_service.java deleted file mode 100644 index 8cd130052..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_service.java +++ /dev/null @@ -1,40 +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.apps.cfgs.specials.maints.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; -import gplx.xowa.addons.apps.cfgs.dbs.*; -class Xocfg_maint_service { - private Xoa_app app; - public Xocfg_maint_service(Xoa_app app) { - this.app = app; - } - public void Upsert(String data) { - Xocfg_itm_bldr itm_bldr = new Xocfg_itm_bldr(new Xocfg_db_mgr(app.User().User_db_mgr().Conn())); - String[] lines = String_.Split(data, "\n"); - for (String line : lines) { - String[] ary = String_.Split(line, "|"); - if (ary.length < 4) continue; // ignore blank lines - String type = String_.Trim(ary[0]); // get 1st arg and ignore leading space - if (String_.Eq(type, "grp")) { - itm_bldr.Create_grp(ary[1], ary[2], ary[3], ary[4]); - } - else { - itm_bldr.Create_itm(ary[1], ary[2], ary[3], Type_adp_.To_tid(ary[4]), ary[5], ary[6], ary[7], ary[8], ary[9]); - } - } - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java new file mode 100644 index 000000000..c69703c49 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java @@ -0,0 +1,77 @@ +/* +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.apps.cfgs.specials.maints.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.maints.*; +import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; +import gplx.xowa.addons.apps.cfgs.enums.*; +public class Xocfg_maint_svc { + private Xoa_app app; + public Xocfg_maint_svc(Xoa_app app) { + this.app = app; + } + public void Upsert(String raw) { + // get wikitext parser + Xowe_wiki wiki = (Xowe_wiki)app.User().Wikii(); + gplx.xowa.parsers.Xow_parser_mgr parser_mgr = wiki.Parser_mgr(); + + // parse raw + Xocfg_maint_parser maint_parser = new Xocfg_maint_parser(); + Xocfg_maint_nde[] ndes = maint_parser.Parse(raw); + + // exec + Xocfg_db_app db_app = Xocfg_db_app.New(app); + for (Xocfg_maint_nde nde : ndes) { + if (nde.Type_is_grp()) { + Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), nde.Help()); + } + else { + Xocfg_maint_itm itm = (Xocfg_maint_itm)nde; + byte[] help = parser_mgr.Main().Parse_text_to_html(parser_mgr.Ctx(), Bry_.new_u8(itm.Help())); + Xocfg_maint_svc.Create_itm(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args()); + } + } + } + public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) { + // insert grp_meta + int grp_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_grp_meta.grp_id"); + db_app.Tbl__grp().Upsert(grp_id, key); + + // insert grp_map + int owner_id = String_.Len_eq_0(owner) ? Xocfg_grp_row.Id__root : db_app.Tbl__grp().Select_id_by_key_or_fail(owner); + int map_sort = db_app.Tbl__map().Select_next_sort(owner_id); + db_app.Tbl__map().Upsert(owner_id, grp_id, map_sort); + + // insert nde_i18n + db_app.Tbl__txt().Upsert(grp_id, Xoitm_lang_tid.Lang__dflt, name, help); + } + public static void Create_itm(Xocfg_db_app db_app, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) { + // insert itm_meta + int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner); + int itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id"); + int scope_id = Xoitm_scope_tid.To_int(scope); + int db_type_id = Xoitm_db_tid.To_int(db_type); + int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); + db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type_id, gui_type_id, gui_args, key, dflt); + + // insert grp_map + int itm_sort = db_app.Tbl__map().Select_next_sort(grp_id); + db_app.Tbl__map().Upsert(grp_id, itm_id, itm_sort); + + // insert nde_i18n + db_app.Tbl__txt().Upsert(itm_id, Xoitm_lang_tid.Lang__dflt, name, help); + } +} diff --git a/400_xowa/src/gplx/xowa/apps/Xoav_app.java b/400_xowa/src/gplx/xowa/apps/Xoav_app.java index 89b3d3d27..55291400f 100644 --- a/400_xowa/src/gplx/xowa/apps/Xoav_app.java +++ b/400_xowa/src/gplx/xowa/apps/Xoav_app.java @@ -97,7 +97,7 @@ public class Xoav_app implements Xoa_app, Gfo_invk { public void Init_by_app(Io_url user_db_url) { user.Init_db(this, wiki_mgr, user_db_url); this.Addon_mgr().Add_dflts_by_app(this).Run_by_app(this); - cfg.Init_by_app(user.User_db_mgr().Conn()); + cfg.Init_by_app(this); } public void Free_mem() { // NOTE:not yet called in drd; DATE:2016-12-04 cfg.Clear();