Cfg: Add id to maint parser

v3.3.4
gnosygnu 8 years ago
parent 3395b22d57
commit ce36e1e76a

@ -53,7 +53,7 @@ public class Xocfg_map_tbl implements Db_tbl {
try { try {
if (!rdr.Move_next()) return 0; if (!rdr.Move_next()) return 0;
Object max = rdr.Read_obj(fld__map_sort); Object max = rdr.Read_obj(fld__map_sort);
return max == null ? 0 : Int_.cast(max) + 1; return max == null ? 0 : Int_.cast(max) + 10;
} }
finally {rdr.Rls();} finally {rdr.Rls();}
} }

@ -44,6 +44,7 @@ public class Xocfg_cache_mgr__tst {
} }
class Xocfg_cache_mgr__fxt { class Xocfg_cache_mgr__fxt {
private Xocfg_cache_mgr mgr = new Xocfg_cache_mgr(); private Xocfg_cache_mgr mgr = new Xocfg_cache_mgr();
private int id;
public void Clear() { public void Clear() {
gplx.dbs.Db_conn_bldr.Instance.Reg_default_mem(); 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/")); Db_conn conn = Db_conn_bldr.Instance.Get_or_autocreate(true, Io_url_.new_any_("mem/xowa/wiki/en.wikipedia.org/"));
@ -51,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 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) { public void Init__db_add(String ctx, String key, Object val) {
Xocfg_maint_svc.Create_grp(mgr.Db_app(), "test_grp", "", "", ""); Xocfg_maint_svc.Create_grp(mgr.Db_app(), id++, "test_grp", "", "", "");
Xocfg_maint_svc.Create_itm(mgr.Db_app(), key, "test_grp", "", "", "wiki", "string", "dflt", "textbox", ""); Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "textbox", "");
mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val)); mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val));
} }
public void Init__sub(String ctx, String key, String evt) { public void Init__sub(String ctx, String key, String evt) {

@ -17,13 +17,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
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.*; 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 { abstract class Xocfg_maint_nde implements gplx.core.brys.Bry_bfr_able {
public Xocfg_maint_nde(String key, String owner, String name, String help) { public Xocfg_maint_nde(int id, String key, String owner, String name, String help) {
this.id = id;
this.key = key; this.key = key;
this.owner = owner; this.owner = owner;
this.name = name; this.name = name;
this.help = help; this.help = help;
} }
public abstract boolean Type_is_grp(); public abstract boolean Type_is_grp();
public int Id() {return id;} private final int id;
public String Key() {return key;} private final String key; public String Key() {return key;} private final String key;
public String Owner() {return owner;} private final String owner; public String Owner() {return owner;} private final String owner;
public String Name() {return name;} private final String name; public String Name() {return name;} private final String name;
@ -34,12 +36,12 @@ abstract class Xocfg_maint_nde implements gplx.core.brys.Bry_bfr_able {
} }
protected abstract void To_bfr_hook(Bry_bfr 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); 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);
} }
@Override public boolean Type_is_grp() {return true;} @Override public boolean Type_is_grp() {return true;}
@Override protected void To_bfr_hook(Bry_bfr bfr) {} @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); 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) {super(id, key, owner, name, help);
this.scope = scope; this.scope = scope;
this.db_type = db_type; this.db_type = db_type;
this.dflt = dflt; this.dflt = dflt;

@ -32,6 +32,7 @@ class Xocfg_maint_parser {
private Xocfg_maint_nde Parse_nde(GfoMsg msg) { private Xocfg_maint_nde Parse_nde(GfoMsg msg) {
Ordered_hash hash = To_atr_hash(msg); Ordered_hash hash = To_atr_hash(msg);
// get common atrs // get common atrs
int id = Int_.parse(Get_atr_as_str_or_fail(hash, "id_"));
String owner = Get_atr_as_str_or_fail(hash, "owner_"); String owner = Get_atr_as_str_or_fail(hash, "owner_");
String key = Get_atr_as_str_or_fail(hash, "key_"); String key = Get_atr_as_str_or_fail(hash, "key_");
String name = Get_atr_as_str_or_fail(hash, "name_"); String name = Get_atr_as_str_or_fail(hash, "name_");
@ -40,7 +41,7 @@ class Xocfg_maint_parser {
// create // create
String nde_type = msg.Key(); String nde_type = msg.Key();
if (String_.Eq(nde_type, "grp")) { if (String_.Eq(nde_type, "grp")) {
return new Xocfg_maint_grp(key, owner, name, help); return new Xocfg_maint_grp(id, key, owner, name, help);
} }
else if (String_.Eq(nde_type, "itm")) { else if (String_.Eq(nde_type, "itm")) {
String scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki"; String scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki";
@ -52,7 +53,7 @@ class Xocfg_maint_parser {
if (gui_type == null) { if (gui_type == null) {
gui_type = gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Infer_gui_type(db_type); 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); return new Xocfg_maint_itm(id, 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); else throw Err_.new_wo_type("xo.cfg_maint:unknown type", "type", nde_type);
} }

@ -20,13 +20,13 @@ import org.junit.*; import gplx.core.tests.*;
public class Xocfg_maint_parser__tst { public class Xocfg_maint_parser__tst {
private final Xocfg_maint_parser__fxt fxt = new Xocfg_maint_parser__fxt(); private final Xocfg_maint_parser__fxt fxt = new Xocfg_maint_parser__fxt();
@Test public void Parse_grp() { @Test public void Parse_grp() {
fxt.Exec__parse("grp {key='key_1'; owner='owner_1'; name='name_1'; help='help_1'}" fxt.Exec__parse("grp {id='123'; key='key_1'; owner='owner_1'; name='name_1'; help='help_1'}"
, fxt.Make__grp("key_1", "owner_1", "name_1", "help_1") , fxt.Make__grp(123, "key_1", "owner_1", "name_1", "help_1")
); );
} }
@Test public void Parse_itm() { @Test public void Parse_itm() {
fxt.Exec__parse("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.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'}"
, fxt.Make__itm("key_1", "owner_1", "name_1", "help_1", "scope_1", "db_type_1", "dflt_1", "gui_type_1", "gui_args_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")
); );
} }
} }
@ -36,10 +36,10 @@ class Xocfg_maint_parser__fxt {
Xocfg_maint_nde[] actl = parser.Parse(raw); Xocfg_maint_nde[] actl = parser.Parse(raw);
Gftest.Eq__ary(expd, actl); Gftest.Eq__ary(expd, actl);
} }
public Xocfg_maint_grp Make__grp(String key, String owner, String name, String help) { public Xocfg_maint_grp Make__grp(int id, String key, String owner, String name, String help) {
return new Xocfg_maint_grp(key, owner, name, help); return new Xocfg_maint_grp(id, 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) { 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) {
return new Xocfg_maint_itm(key, owner, name, help, scope, db_type, dflt, gui_type, gui_args); return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args);
} }
} }

@ -40,19 +40,17 @@ public class Xocfg_maint_svc {
byte[] help = parser_mgr.Main().Parse_text_to_html(parser_mgr.Ctx(), Bry_.new_u8(nde.Help())); byte[] help = parser_mgr.Main().Parse_text_to_html(parser_mgr.Ctx(), Bry_.new_u8(nde.Help()));
help = Bry_.Replace(help, anch_find_bry, anch_repl_bry); // replace "<a " with "<a tabindex=-1 " else tabbing will go to hidden anchors in help text help = Bry_.Replace(help, anch_find_bry, anch_repl_bry); // replace "<a " with "<a tabindex=-1 " else tabbing will go to hidden anchors in help text
if (nde.Type_is_grp()) { if (nde.Type_is_grp()) {
Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help)); Xocfg_maint_svc.Create_grp(db_app, nde.Id(), nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help));
} }
else { else {
Xocfg_maint_itm itm = (Xocfg_maint_itm)nde; Xocfg_maint_itm itm = (Xocfg_maint_itm)nde;
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()); Xocfg_maint_svc.Create_itm(db_app, nde.Id(), nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args());
} }
} }
db_app.Conn().Txn_end(); db_app.Conn().Txn_end();
} }
public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) { public static void Create_grp(Xocfg_db_app db_app, int grp_id, String key, String owner, String name, String help) {
// insert grp_meta // insert grp_meta
Xocfg_grp_row grp = db_app.Tbl__grp().Select_by_key_or_null(key);
int grp_id = grp == null ? db_app.Conn().Sys_mgr().Autonum_next("cfg_grp_meta.grp_id") : grp.Id();
db_app.Tbl__grp().Upsert(grp_id, key); db_app.Tbl__grp().Upsert(grp_id, key);
// insert grp_map // insert grp_map
@ -63,14 +61,11 @@ public class Xocfg_maint_svc {
// insert nde_i18n // insert nde_i18n
db_app.Tbl__txt().Upsert(grp_id, Xoitm_lang_tid.Lang__dflt, name, help); 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) { public static void Create_itm(Xocfg_db_app db_app, int itm_id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {
// insert itm_meta // insert itm_meta
int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner); int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner);
int scope_id = Xoitm_scope_tid.To_int(scope); int scope_id = Xoitm_scope_tid.To_int(scope);
int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); int gui_type_id = Xoitm_gui_tid.To_tid(gui_type);
int itm_id = db_app.Tbl__itm().Select_id_or(key, -1);
if (itm_id == -1)
itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id");
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt); db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
// insert grp_map // insert grp_map

Loading…
Cancel
Save