From 15504c03a7a52bcf6b82c6f78cb1209d4974bed2 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Wed, 28 Dec 2016 12:45:15 -0500 Subject: [PATCH] Cfg: Consolidate data_type and gui_type; Add some basic error validation --- 100_core/src/gplx/Bool_.java | 2 +- .../apps/cfgs/dbs/tbls/Xocfg_itm_row.java | 20 +++-- .../apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java | 26 +++---- .../addons/apps/cfgs/enums/Xoitm_gui_tid.java | 76 ------------------- ...m_scope_tid.java => Xoitm_scope_enum.java} | 2 +- ...Xoitm_db_tid.java => Xoitm_type_enum.java} | 31 +++++--- .../cfgs/mgrs/caches/Xocfg_cache_grp.java | 4 +- .../cfgs/mgrs/caches/Xocfg_cache_mgr.java | 8 +- .../mgrs/caches/Xocfg_cache_mgr__tst.java | 4 +- .../cfgs/specials/edits/objs/Xoedit_itm.java | 24 +++--- .../specials/edits/objs/Xoedit_itm_html.java | 76 ++++++++++--------- .../edits/pages/Xocfg_edit_special.java | 4 +- .../edits/services/Xocfg_edit_bridge.java | 6 +- .../edits/services/Xocfg_edit_loader.java | 12 +-- .../edits/services/Xocfg_edit_svc.java | 30 +++++--- .../maints/services/Xocfg_maint_nde.java | 28 ++++--- .../maints/services/Xocfg_maint_parser.java | 15 ++-- .../services/Xocfg_maint_parser__tst.java | 14 ++-- .../maints/services/Xocfg_maint_svc.java | 31 ++++---- 19 files changed, 170 insertions(+), 243 deletions(-) delete mode 100644 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/{Xoitm_scope_tid.java => Xoitm_scope_enum.java} (95%) rename 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/{Xoitm_db_tid.java => Xoitm_type_enum.java} (51%) diff --git a/100_core/src/gplx/Bool_.java b/100_core/src/gplx/Bool_.java index 91c149a69..3f78d4923 100644 --- a/100_core/src/gplx/Bool_.java +++ b/100_core/src/gplx/Bool_.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; import gplx.langs.gfs.*; public class Bool_ { - public static final String Cls_val_name = "boolean"; + public static final String Cls_val_name = "bool"; public static final Class Cls_ref_type = Boolean.class; public static final boolean N = false , Y = true; public static final byte N_byte = 0 , Y_byte = 1 , __byte = 127; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java index c606db7d6..08452fd3b 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_row.java @@ -17,22 +17,20 @@ along with this program. If not, see . */ 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, String data_type, int gui_type, String gui_args, String gui_cls, String key, String dflt) { + public Xocfg_itm_row(int id, String key, int scope, String type, String dflt, String html_atrs, String html_cls) { this.id = id; - this.scope_id = scope_id; - this.data_type = data_type; - this.gui_type = gui_type; - this.gui_args = gui_args; - this.gui_cls = gui_cls; this.key = key; + this.scope = scope; + this.type = type; this.dflt = dflt; + this.html_atrs = html_atrs; + this.html_cls = html_cls; } public int Id() {return id;} private final int id; - public int Scope_id() {return scope_id;} private final int scope_id; - public String Data_type() {return data_type;} private final String data_type; - public int Gui_type() {return gui_type;} private final int gui_type; - public String Gui_args() {return gui_args;} private final String gui_args; - public String Gui_cls() {return gui_cls;} private final String gui_cls; public String Key() {return key;} private final String key; + public int Scope() {return scope;} private final int scope; + public String Type() {return type;} private final String type; public String Dflt() {return dflt;} private final String dflt; + public String Html_atrs() {return html_atrs;} private final String html_atrs; + public String Html_cls() {return html_cls;} private final String html_cls; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java index 9d56557c9..c400d7060 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/dbs/tbls/Xocfg_itm_tbl.java @@ -19,19 +19,18 @@ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; import gplx.dbs.utls.*; 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_data_type, fld__itm_gui_type, fld__itm_gui_cls, fld__itm_gui_args, fld__itm_dflt; + private final String fld__itm_id, fld__itm_key, fld__itm_scope, fld__itm_type, fld__itm_dflt, fld__itm_html_atrs, fld__itm_html_cls; private final Db_conn conn; public Xocfg_itm_tbl(Db_conn conn) { this.conn = conn; this.tbl_name = "cfg_itm"; - this.fld__itm_id = flds.Add_int_pkey("itm_id"); // EX: '2' + this.fld__itm_id = flds.Add_int_pkey("itm_id"); // EX: '1' 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 - this.fld__itm_data_type = flds.Add_str("itm_data_type", 255); // EX: '1'; ENUM: Type_adp_ - this.fld__itm_gui_type = flds.Add_int("itm_gui_type"); // EX: '1'; ENUM: Xoitm_gui_tid - this.fld__itm_gui_args = flds.Add_str("itm_gui_args", 255); // EX: '1,40' (numeric); '255' (textbox); 'enum_name' (combo); etc.. - this.fld__itm_gui_cls = flds.Add_str("itm_gui_cls", 255); // EX: 'xocfg_custom' + this.fld__itm_scope = flds.Add_int("itm_scope"); // EX: '1'; ENUM: Xoitm_scope_enum + this.fld__itm_type = flds.Add_str("itm_type", 255); // EX: '1'; ENUM: Xoitm_type_enum this.fld__itm_dflt = flds.Add_str("itm_dflt", 4096); // EX: 'abc' + this.fld__itm_html_atrs = flds.Add_str("itm_html_atrs", 255); // EX: 'size="5"' + this.fld__itm_html_cls = flds.Add_str("itm_html_cls", 255); // EX: 'xocfg__bool__readonly' conn.Rls_reg(this); } public String Tbl_name() {return tbl_name;} private final String tbl_name; @@ -39,8 +38,8 @@ public class Xocfg_itm_tbl implements Db_tbl { conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds , Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, fld__itm_key, fld__itm_key))); } - public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String gui_cls, 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, gui_cls, itm_dflt); + public void Upsert(int id, String key, int scope, String type, String dflt, String html_atrs, String html_cls) { + Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), id, key, scope, type, dflt, html_atrs, html_cls); } public int Select_id_or(String key, int or) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto(); @@ -55,13 +54,12 @@ public class Xocfg_itm_tbl implements Db_tbl { 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_str(fld__itm_data_type) - , rdr.Read_int(fld__itm_gui_type) - , rdr.Read_str(fld__itm_gui_args) - , rdr.Read_str(fld__itm_gui_cls) , rdr.Read_str(fld__itm_key) + , rdr.Read_int(fld__itm_scope) + , rdr.Read_str(fld__itm_type) , rdr.Read_str(fld__itm_dflt) + , rdr.Read_str(fld__itm_html_atrs) + , rdr.Read_str(fld__itm_html_cls) ); } public void Rls() {} 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 deleted file mode 100644 index 415a3324c..000000000 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_gui_tid.java +++ /dev/null @@ -1,76 +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.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 { - public Xoitm_gui_tid(int uid, String key) { - this.uid = uid; - this.key = key; - } - public int Uid() {return uid;} private final int uid; - public String Key() {return key;} private final String key; - - public static final int // SERIALIZED - Tid__bool = 0 - , Tid__str = 1 - , Tid__int = 2 - , Tid__memo = 3 - , Tid__list = 4 - , Tid__io_cmd = 5 - , Tid__io_file = 6 - , Tid__io_dir = 7 - , Tid__btn = 8 - , Tid__gui_binding = 9 - ; - private static final Hash_adp to_uid_hash = Hash_adp_.New(); - private static final Xoitm_gui_tid[] to_key_ary = new Xoitm_gui_tid[10]; - public static final Xoitm_gui_tid - Itm__bool = New(Tid__bool , "bool") - , Itm__str = New(Tid__str , "string") - , Itm__int = New(Tid__int , "int") - , Itm__memo = New(Tid__memo , "memo") - , Itm__list = New(Tid__list , "select") - , Itm__io_cmd = New(Tid__io_cmd , "io.cmd") - , Itm__io_file = New(Tid__io_file , "io.file") - , Itm__io_dir = New(Tid__io_dir , "io.dir") - , Itm__btn = New(Tid__btn , "btn") - , Itm__gui_binding = New(Tid__gui_binding , "gui.binding") - ; - private static Xoitm_gui_tid New(int uid, String key) { - Xoitm_gui_tid rv = new Xoitm_gui_tid(uid, key); - to_uid_hash.Add(key, rv); - to_key_ary[uid] = rv; - return rv; - } - public static int To_uid(String str) { - Xoitm_gui_tid rv = (Xoitm_gui_tid)to_uid_hash.Get_by_or_fail(str); - return rv.uid; - } - public static String To_key(int uid) { - return to_key_ary[uid].key; - } - public static String Infer_gui_type(String db_type) { - if (String_.Eq(db_type, "bool")) return Itm__bool.key; - else if (String_.Eq(db_type, "int")) return Itm__int.key; - else if (String_.Eq(db_type, "memo")) return Itm__memo.key; - else if (String_.Eq(db_type, "io.cmd")) return Itm__io_cmd.key; - else if (String_.Eq(db_type, "gui.binding")) return Itm__gui_binding.key; - else if (String_.Has_at_bgn(db_type, "list:")) return Itm__list.key; - else if (String_.Eq(db_type, "btn")) return Itm__btn.key; - else return Itm__str.key; - } -} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_enum.java similarity index 95% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_enum.java index ee4650d5b..974e7abbf 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_tid.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_scope_enum.java @@ -16,7 +16,7 @@ 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_scope_tid { // SERIALIZED +public class Xoitm_scope_enum { // SERIALIZED public static final int Tid__app = 1, Tid__wiki = 2; public static int To_int(String raw) { if (String_.Eq(raw, "app")) return Tid__app; 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_type_enum.java similarity index 51% rename from 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_db_tid.java rename to 400_xowa/src/gplx/xowa/addons/apps/cfgs/enums/Xoitm_type_enum.java index 2228be810..c711511a0 100644 --- 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_type_enum.java @@ -16,14 +16,27 @@ 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); +public class Xoitm_type_enum { + public static final int + Tid__bool = 0 + , Tid__int = 1 + , Tid__str = 2 + , Tid__memo = 3 + , Tid__list = 4 + , Tid__btn = 5 + , Tid__io_cmd = 6 + , Tid__gui_binding = 7 + ; + + public static int To_uid(String v) { + if (String_.Eq(v, Bool_.Cls_val_name)) return Tid__bool; + else if (String_.Eq(v, Int_.Cls_val_name)) return Tid__int; + else if (String_.Eq(v, String_.Cls_val_name)) return Tid__str; + else if (String_.Eq(v, "memo")) return Tid__memo; + else if (String_.Eq(v, "btn")) return Tid__btn; + else if (String_.Eq(v, "io.cmd")) return Tid__io_cmd; + else if (String_.Eq(v, "gui.binding")) return Tid__gui_binding; + else if (String_.Has_at_bgn(v, "list:")) return Tid__list; + else throw Err_.new_wo_type("unknown cfg type enum; v=" + v); } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_grp.java index bd012fc27..f6ab9e53d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_grp.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_grp.java @@ -19,11 +19,13 @@ package gplx.xowa.addons.apps.cfgs.mgrs.caches; import gplx.*; import gplx.xowa. public class Xocfg_cache_grp { private final Hash_adp vals = Hash_adp_.New(); private final Ordered_hash subs = Ordered_hash_.New(); - public Xocfg_cache_grp(String key, String dflt) { + public Xocfg_cache_grp(String key, String dflt, String data_type) { this.key = key; this.dflt = dflt; + this.data_type = data_type; } public String Key() {return key;} private final String key; + public String Data_type() {return data_type;} private final String data_type; public String Dflt() {return dflt;} private String dflt; public void Dflt_(String v) {this.dflt = v;} public String Get(String ctx) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr.java index 6f6d056b4..0b4820dd9 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.addons.apps.cfgs.mgrs.caches; 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.mgrs.*; import gplx.dbs.*; -import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*; +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_cache_mgr { private final Hash_adp grps = Hash_adp_.New(); public Xocfg_cache_mgr() { @@ -47,6 +47,7 @@ public class Xocfg_cache_mgr { public void Set_wo_save(String ctx, String key, String val) {Set(Bool_.N, ctx, key, val);} public void Set(boolean save, String ctx, String key, String val) { Xocfg_cache_grp grp = Grps__get_or_load(key); + grp.Pub(ctx, val); // publish first; if fail will throw error grp.Set(ctx, val); if (save) { if (String_.Eq(grp.Dflt(), val)) @@ -54,7 +55,6 @@ public class Xocfg_cache_mgr { else 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); @@ -87,12 +87,12 @@ public class Xocfg_cache_mgr { 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:itm not found; key=~{0}", key); - return new Xocfg_cache_grp(key, or); + return new Xocfg_cache_grp(key, or, String_.Cls_val_name); } 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()); + Xocfg_cache_grp rv = new Xocfg_cache_grp(key, meta_itm.Dflt(), meta_itm.Type()); int len = itms.length; for (int i = 0; i < len; i++) { Xocfg_val_row itm = itms[0]; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java index 42a3e93d3..50362b8b0 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/caches/Xocfg_cache_mgr__tst.java @@ -52,8 +52,8 @@ class Xocfg_cache_mgr__fxt { } 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) { - Xocfg_maint_svc.Create_grp(mgr.Db_app(), id++, "test_grp", "", "", ""); - Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "string", "", ""); + Xocfg_maint_svc.Create_grp(mgr.Db_app(), "test_grp", id++, "", "", ""); + Xocfg_maint_svc.Create_itm(mgr.Db_app(), "test_grp", id++, key, "", "", "wiki", String_.Cls_val_name, "dflt", "", ""); mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val)); } public void Init__sub(String ctx, String key, String evt) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java index e2f95c416..9a38d4ed2 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java @@ -18,12 +18,11 @@ 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.*; import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; import gplx.langs.jsons.*; -import gplx.xowa.addons.apps.cfgs.mgrs.types.*; +import gplx.xowa.addons.apps.cfgs.mgrs.types.*; import gplx.xowa.addons.apps.cfgs.enums.*; import gplx.langs.htmls.*; public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { - private String gui_type; private boolean edited; - private String data_type, gui_args, gui_cls, lang, name, ctx, date; + private String type, html_atrs, html_cls, lang, name, ctx, date; private byte[] val, dflt; // NOTE: data is always escaped b/c it is only consumed by mustache; EX: "<'" not "<'" private Xocfg_type_mgr type_mgr; public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) { @@ -37,12 +36,11 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { public String Help() {return help;} private String help; public int Sort() {return sort;} private final int sort; - public void Load_by_meta(Bry_bfr tmp_bfr, int scope_id, String data_type, String gui_type, String gui_args, String gui_cls, String dflt_str) { - this.data_type = data_type; - this.gui_type = gui_type; - this.gui_args = gui_args; - this.gui_cls = gui_cls; + public void Load_by_meta(Bry_bfr tmp_bfr, String type, String dflt_str, String html_atrs, String html_cls) { + this.type = type; this.dflt = Gfh_utl.Escape_html_as_bry(tmp_bfr, Bry_.new_u8(dflt_str), Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); + this.html_atrs = html_atrs; + this.html_cls = html_cls; } public void Load_by_i18n(String lang, String name, String help) { this.lang = lang; @@ -54,8 +52,8 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { this.val = Gfh_utl.Escape_html_as_bry(tmp_bfr, Bry_.new_u8(val_str), Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); this.date = date; this.edited = true; - if ( String_.Has(gui_cls, "read"+"only") - || String_.Eq(gui_type, gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Itm__btn.Key())) + if ( String_.Has(html_cls, "read"+"only") + || Xoitm_type_enum.To_uid(type) == Xoitm_type_enum.Tid__btn) edited = false; } public void Set_data_by_dflt() { @@ -75,14 +73,14 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { rv.Add_str("ctx", ctx); rv.Add_bry("val", val); rv.Add_str("date", date); - rv.Add_str("gui", gui_type); + rv.Add_str("type", type); To_html(tmp_bfr, type_mgr); rv.Add_str("html", tmp_bfr.To_str_and_clear()); rv.Add_bool("edited", edited); return rv; } private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) { - Xoedit_itm_html.Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, gui_cls, val); + Xoedit_itm_html.Build_html(bfr, type_mgr, key, name, type, html_atrs, html_cls, val); } public boolean Mustache__write(String k, Mustache_bfr bfr) { if (String_.Eq(k, "id")) bfr.Add_int(id); @@ -94,7 +92,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx); else if (String_.Eq(k, "val")) bfr.Add_bry(val); else if (String_.Eq(k, "date")) bfr.Add_str_u8(date); - else if (String_.Eq(k, "gui")) bfr.Add_str_u8(gui_type); + else if (String_.Eq(k, "type")) bfr.Add_str_u8(type); else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr); return true; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java index fb695c8e2..02e927ea2 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java @@ -19,42 +19,44 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp import gplx.xowa.addons.apps.cfgs.enums.*; import gplx.xowa.addons.apps.cfgs.mgrs.types.*; public class Xoedit_itm_html { - public static void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, String gui_type_key, String gui_args, String gui_cls, byte[] val) { - // if gui_args exists, prepend space for html insertion; EX: "type='checkbox'{1}>" with "a=b" -> "type='checkbox' a='b'" x> "type='checkbox'a='b'" - if (String_.Len_gt_0(gui_args)) gui_args = " " + gui_args; - if (String_.Len_gt_0(gui_cls)) gui_cls = " " + gui_cls; - switch (Xoitm_gui_tid.To_uid(gui_type_key)) { - case Xoitm_gui_tid.Tid__bool: + public static void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String type, String html_atrs, String html_cls, byte[] val) { + // prepend space for html insertion; EX: "type='checkbox'{1}>" with "a=b" -> "type='checkbox' a='b'" x> "type='checkbox'a='b'" + if (String_.Len_gt_0(html_atrs)) html_atrs = " " + html_atrs; + if (String_.Len_gt_0(html_cls)) html_cls = " " + html_cls; + + // build html + switch (Xoitm_type_enum.To_uid(type)) { + case Xoitm_type_enum.Tid__bool: bfr.Add_str_u8_fmt - ( "" - , gui_type_key, gui_args, gui_cls, key, Bry_.Eq(val, Bool_.Y_bry) ? " checked=\"checked\"" : ""); + ( "" + , type, html_atrs, html_cls, key, Bry_.Eq(val, Bool_.Y_bry) ? " checked=\"checked\"" : ""); break; - case Xoitm_gui_tid.Tid__int: + case Xoitm_type_enum.Tid__int: bfr.Add_str_u8_fmt - ( "" - , gui_type_key, gui_args, gui_cls, key, val); + ( "" + , type, html_atrs, html_cls, key, val); break; - case Xoitm_gui_tid.Tid__str: + case Xoitm_type_enum.Tid__str: bfr.Add_str_u8_fmt - ( "" - , gui_type_key, gui_args, gui_cls, key, val); + ( "" + , type, html_atrs, html_cls, key, val); break; - case Xoitm_gui_tid.Tid__memo: - if (String_.Len_eq_0(gui_args)) gui_args = " rows=\"4\""; + case Xoitm_type_enum.Tid__memo: + if (String_.Len_eq_0(html_atrs)) html_atrs = " rows=\"4\""; bfr.Add_str_u8_fmt - ( "" - , gui_type_key, gui_args, gui_cls, key, val); + ( "" + , type, html_atrs, html_cls, key, val); break; - case Xoitm_gui_tid.Tid__list: + case Xoitm_type_enum.Tid__list: // get list of kvs by type - Keyval[] kvs_ary = type_mgr.Lists__get(data_type); + Keyval[] kvs_ary = type_mgr.Lists__get(type); int len = kvs_ary.length; - if (String_.Len_eq_0(gui_args)) gui_args = "size=\"" + Int_.To_str(len) + "\""; + if (String_.Len_eq_0(html_atrs)) html_atrs = "size=\"" + Int_.To_str(len) + "\""; // build html bfr.Add_str_u8_fmt - ( "\n" + , type, html_atrs, html_cls, key); String val_str = String_.new_u8(val); for (int i = 0; i < len; i++) { Keyval kv = kvs_ary[i]; @@ -66,29 +68,29 @@ public class Xoedit_itm_html { } bfr.Add_str_u8_fmt("\n"); break; - case Xoitm_gui_tid.Tid__io_cmd: + case Xoitm_type_enum.Tid__io_cmd: String[] lines = Xocfg_mgr.Parse_io_cmd(String_.new_u8(val)); bfr.Add_str_u8_fmt - ( "\n" - + "
\n" - , gui_type_key, gui_args, gui_cls, key, lines[0]); + ( "\n" + + "
\n" + , type, html_atrs, html_cls, key, lines[0]); bfr.Add_str_u8_fmt - ( "\n" - , gui_type_key, gui_args, gui_cls, key, lines[1]); + ( "\n" + , type, html_atrs, html_cls, key, lines[1]); break; - case Xoitm_gui_tid.Tid__gui_binding: + case Xoitm_type_enum.Tid__gui_binding: String[] flds = Xoitm_gui_binding.To_gui(String_.new_u8(val)); bfr.Add_str_u8_fmt - ( "\n" - , gui_type_key, gui_args, gui_cls, key, flds[0]); + ( "\n" + , type, html_atrs, html_cls, key, flds[0]); bfr.Add_str_u8_fmt - ( "\n" - , gui_type_key, gui_args, gui_cls, key, flds[1]); + ( "\n" + , type, html_atrs, html_cls, key, flds[1]); break; - case Xoitm_gui_tid.Tid__btn: + case Xoitm_type_enum.Tid__btn: bfr.Add_str_u8_fmt - ( "" - , gui_type_key, gui_args, gui_cls, key, name); + ( "" + , type, html_atrs, html_cls, key, name); break; default: break; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java index ef9901d7b..933b5f5f4 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java @@ -28,12 +28,11 @@ public class Xocfg_edit_special implements Xow_special_page { Xocfg_edit_loader loader = Xocfg_edit_loader.New(wiki.App()); if (String_.Eq(grp, "")) { - grp = wiki.App().Cfg().Get_str_app("xowa.app.cfg.previous_grp"); + grp = wiki.App().Cfg().Get_str_app(Cfg__previous_grp); if (!loader.Grp_key_exists(grp)) { grp = "xowa.app.security"; Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:grp_key not found; defaulting to xowa.app.security; key=~{0}", grp); } - } new Xocfg_edit_html(loader, grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this); } @@ -42,4 +41,5 @@ public class Xocfg_edit_special implements Xow_special_page { public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta; public Xow_special_page Special__clone() {return this;} public static final Xow_special_page Prototype = new Xocfg_edit_special(Xow_special_meta.New_xo("XowaCfg", "Options")); + public static final String Cfg__previous_grp = "xowa.app.cfg.previous_grp"; } 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 286e0d09d..b168ed241 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 @@ -27,7 +27,7 @@ public class Xocfg_edit_bridge implements Bridge_cmd_itm { 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); Json_nde args = data.Get_kv(Bridge_cmd_mgr.Msg__args).Val_as_nde(); switch (proc_id) { - case Proc__upsert: svc.Upsert(args); break; + case Proc__update: svc.Update(args); break; case Proc__revert: svc.Revert(args); break; case Proc__load: svc.Load(args); break; default: throw Err_.new_unhandled_default(proc_id); @@ -35,9 +35,9 @@ public class Xocfg_edit_bridge implements Bridge_cmd_itm { return Bridge_cmd_mgr.Msg__ok; } - private static final byte Proc__upsert = 0, Proc__revert = 1, Proc__load = 2; + private static final byte Proc__update = 0, Proc__revert = 1, Proc__load = 2; private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs() - .Add_str_byte("upsert" , Proc__upsert) + .Add_str_byte("update" , Proc__update) .Add_str_byte("revert" , Proc__revert) .Add_str_byte("load" , Proc__load) ; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java index a50e2dd9f..3a0b09a64 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java @@ -151,14 +151,7 @@ public class Xocfg_edit_loader { Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list); while (iter.Move_next()) { String sql = Db_sql_.Make_by_fmt(String_.Ary - ( "SELECT i.itm_id" - , ", i.itm_key" - , ", i.itm_scope_id" - , ", i.itm_data_type" - , ", i.itm_gui_type" - , ", i.itm_gui_args" - , ", i.itm_gui_cls" - , ", i.itm_dflt" + ( "SELECT *" , "FROM cfg_itm i" , "WHERE i.itm_key IN ({0})" ), iter.To_sql_in_key() @@ -169,8 +162,7 @@ public class Xocfg_edit_loader { String key = rdr.Read_str("itm_key"); Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(key); String dflt = dflt_mgr.Get_or(key, rdr.Read_str("itm_dflt")); - int gui_type = rdr.Read_int("itm_gui_type"); - edit_itm.Load_by_meta(tmp_bfr, rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.To_key(gui_type), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_gui_cls"), dflt); + edit_itm.Load_by_meta(tmp_bfr, rdr.Read_str("itm_type"), dflt, rdr.Read_str("itm_html_atrs"), rdr.Read_str("itm_html_cls")); } } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java index 9dcd06588..1677e0186 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java @@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; impor import gplx.langs.jsons.*; import gplx.core.gfobjs.*; 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.*; import gplx.xowa.addons.apps.cfgs.mgrs.caches.*; +import gplx.xowa.addons.apps.cfgs.specials.edits.pages.*; import gplx.xowa.addons.apps.cfgs.mgrs.caches.*; import gplx.xowa.addons.apps.cfgs.enums.*; public class Xocfg_edit_svc { private final Xoa_app app; private Xocfg_edit_loader edit_loader; @@ -27,29 +27,35 @@ public class Xocfg_edit_svc { public Xocfg_edit_svc(Xoa_app app) { this.app = app; } - public void Upsert(Json_nde args) { + public void Update(Json_nde args) { String ctx = args.Get_as_str("ctx"); String key = args.Get_as_str("key"); String val = args.Get_as_str("val"); - String gui = args.Get_as_str("gui"); - if (String_.Has_at_bgn(gui, "gui.binding")) { - val = gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_binding.To_db_str(val); + String type = args.Get_as_str("type"); + if (String_.Has_at_bgn(type, "gui.binding")) { + val = Xoitm_gui_binding.To_db_str(val); } - app.Cfg().Set_str(ctx, key, val); Xocfg_cache_grp grp = app.Cfg().Cache_mgr().Grps__get_or_load(key); - if (String_.Eq(grp.Dflt(), val)) - app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.revert__recv", Gfobj_nde.New().Add_str("key", key).Add_str("val", val)); + try { + app.Cfg().Set_str(ctx, key, val); + } catch (Exception exc) { + app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.update__fail", Gfobj_nde.New().Add_str("key", key).Add_str("new_val", val).Add_str("old_val", grp.Get(ctx)).Add_str("err", Err_.Message_lang(exc))); + return; + } + + if (!String_.Eq(type, "btn") && String_.Eq(grp.Dflt(), val)) + app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.revert__recv", Gfobj_nde.New().Add_str("key", key).Add_str("val", val).Add_str("type", type)); else - app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.upsert__recv", Gfobj_nde.New().Add_str("key", key)); + app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.update__pass", Gfobj_nde.New().Add_str("key", key).Add_str("val", val).Add_str("type", type)); } public void Revert(Json_nde args) { String ctx = args.Get_as_str("ctx"); String key = args.Get_as_str("key"); - String gui = args.Get_as_str("gui"); + String type = args.Get_as_str("type"); app.Cfg().Del(ctx, key); String val = app.Cfg().Get_str(ctx, key); - if (String_.Has_at_bgn(gui, "gui.binding")) { + if (String_.Has_at_bgn(type, "gui.binding")) { val = String_.Concat_with_str("|", gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_binding.To_gui(val)); } app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.revert__recv", Gfobj_nde.New().Add_str("key", key).Add_str("val", val)); @@ -60,6 +66,6 @@ public class Xocfg_edit_svc { 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(Bry_bfr_.New())); - app.Cfg().Set_str_app("xowa.app.cfg.recent_page", key); + app.Cfg().Set_str_app(Xocfg_edit_special.Cfg__previous_grp, key); } } 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 index 1c208990c..4b8e311c9 100644 --- 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 @@ -17,46 +17,44 @@ 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(int id, String key, String owner, String name, String help) { + public Xocfg_maint_nde(String owner, int id, String key, String name, String help) { + this.owner = owner; this.id = id; this.key = key; - this.owner = owner; this.name = name; this.help = help; } public abstract boolean Type_is_grp(); + public String Owner() {return owner;} private final String owner; public int Id() {return id;} private final int id; 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); + bfr.Add_str_u8_fmt("{0}|{1}|{2}|{3}|{4}", owner, this.Type_is_grp(), key, 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(int id, String key, String owner, String name, String help) {super(id, key, owner, name, help); +class Xocfg_maint_grp extends Xocfg_maint_nde { public Xocfg_maint_grp(String owner, int id, String key, String name, String help) {super(owner, id, key, 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(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args, String gui_cls) {super(id, key, owner, name, help); +class Xocfg_maint_itm extends Xocfg_maint_nde { public Xocfg_maint_itm(String owner, int id, String key, String name, String help, String scope, String type, String dflt, String html_atrs, String html_cls) {super(owner, id, key, name, help); this.scope = scope; - this.db_type = db_type; + this.type = type; this.dflt = dflt; - this.gui_type = gui_type; - this.gui_args = gui_args; - this.gui_cls = gui_cls; + this.html_atrs = html_atrs; + this.html_cls = html_cls; } @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 Type() {return type;} private final String 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; - public String Gui_cls() {return gui_cls;} private final String gui_cls; + public String Html_atrs() {return html_atrs;} private final String html_atrs; + public String Html_cls() {return html_cls;} private final String html_cls; @Override protected void To_bfr_hook(Bry_bfr bfr) { - bfr.Add_str_u8_fmt("|{0}|{1}|{2}|{3}|{4}|{5}", scope, db_type, dflt, gui_type, gui_args, gui_cls); + bfr.Add_str_u8_fmt("|{0}|{1}|{2}|{3}|{4}", scope, type, dflt, html_atrs, html_cls); } } 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 index 1ac49b9dc..a5f23f731 100644 --- 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 @@ -41,20 +41,15 @@ class Xocfg_maint_parser { // create String nde_type = msg.Key(); if (String_.Eq(nde_type, "grp")) { - return new Xocfg_maint_grp(id, key, owner, name, help); + return new Xocfg_maint_grp(owner, id, key, name, help); } else if (String_.Eq(nde_type, "itm")) { String scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki"; - String db_type = Get_atr_as_str_or_fail(hash, "db_type_"); + String type = Get_atr_as_str_or_fail(hash, "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_", ""); - String gui_cls = Get_atr_as_str_or(hash, "gui_cls_", ""); - - 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(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args, gui_cls); + String html_atrs = Get_atr_as_str_or(hash, "html_atrs_", ""); + String html_cls = Get_atr_as_str_or(hash, "html_cls_", ""); + return new Xocfg_maint_itm(owner, id, key, name, help, scope, type, dflt, html_atrs, html_cls); } else throw Err_.new_wo_type("xo.cfg_maint:unknown type", "type", nde_type); } 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 index f728e868a..ed4dbe662 100644 --- 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 @@ -21,12 +21,12 @@ 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("grp {id='123'; key='key_1'; owner='owner_1'; name='name_1'; help='help_1'}" - , fxt.Make__grp(123, "key_1", "owner_1", "name_1", "help_1") + , fxt.Make__grp("owner_1", 123, "key_1", "name_1", "help_1") ); } @Test public void Parse_itm() { - fxt.Exec__parse("itm {id='123'; 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'; gui_cls='gui_cls_1'}" - , fxt.Make__itm(123, "key_1", "owner_1", "name_1", "help_1", "scope_1", "db_type_1", "dflt_1", "gui_type_1", "gui_args_1", "gui_cls_1") + fxt.Exec__parse("itm {id='123'; key='key_1'; owner='owner_1'; name='name_1'; help='help_1'; scope='scope_1'; type='type_1'; dflt='dflt_1'; html_atrs='html_atrs_1'; html_cls='html_cls_1'}" + , fxt.Make__itm("owner_1", 123, "key_1", "name_1", "help_1", "scope_1", "type_1", "dflt_1", "html_atrs_1", "html_cls_1") ); } } @@ -36,10 +36,10 @@ class Xocfg_maint_parser__fxt { Xocfg_maint_nde[] actl = parser.Parse(raw); Gftest.Eq__ary(expd, actl); } - public Xocfg_maint_grp Make__grp(int id, String key, String owner, String name, String help) { - return new Xocfg_maint_grp(id, key, owner, name, help); + public Xocfg_maint_grp Make__grp(String owner, int id, String key, String name, String help) { + return new Xocfg_maint_grp(owner, id, key, name, help); } - public Xocfg_maint_itm Make__itm(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args, String gui_cls) { - return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args, gui_cls); + public Xocfg_maint_itm Make__itm(String owner, int id, String key, String name, String help, String scope, String type, String dflt, String html_atrs, String html_cls) { + return new Xocfg_maint_itm(owner, id, key, name, help, scope, type, dflt, html_atrs, html_cls); } } \ No newline at end of file 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 index 6902595c8..b94ca96f1 100644 --- 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 @@ -37,42 +37,43 @@ public class Xocfg_maint_svc { db_app.Conn().Txn_bgn("xo__cfg_maint__upsert"); byte[] anch_find_bry = Bry_.new_a7("