mirror of
https://github.com/gnosygnu/xowa.git
synced 2025-06-13 12:54:14 +00:00
Cfg: Split db into app and usr and overhaul db objects
This commit is contained in:
parent
9dfbd472ac
commit
fd79415b53
@ -116,7 +116,9 @@ public abstract class Db_engine_sql_base implements Db_engine {
|
|||||||
@Override public Object Stmt_by_sql(String sql) {
|
@Override public Object Stmt_by_sql(String sql) {
|
||||||
if (connection == null) Conn_assert();
|
if (connection == null) Conn_assert();
|
||||||
try {return connection.prepareStatement(sql);}
|
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) {
|
private Statement New_stmt_exec(String sql) {
|
||||||
if (connection == null) Conn_assert();
|
if (connection == null) Conn_assert();
|
||||||
|
@ -262,8 +262,13 @@ public class Json_wtr {
|
|||||||
switch (b) {
|
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.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.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.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
|
case Byte_ascii.Cr: break;// skip
|
||||||
default: bfr.Add_byte(b); break;
|
default: bfr.Add_byte(b); break;
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ public class Xoae_app implements Xoa_app, Gfo_invk {
|
|||||||
public void Init_by_app() {
|
public void Init_by_app() {
|
||||||
stage = Xoa_stage_.Tid_init;
|
stage = Xoa_stage_.Tid_init;
|
||||||
user.Init_by_app(this);
|
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);
|
prog_mgr.Init_by_app(url_cmd_eval);
|
||||||
xtn_mgr.Init_by_app(this);
|
xtn_mgr.Init_by_app(this);
|
||||||
gui_mgr.Init_by_app();
|
gui_mgr.Init_by_app();
|
||||||
|
@ -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.*;
|
import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*;
|
||||||
public class Xocfg_mgr {
|
public class Xocfg_mgr {
|
||||||
private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr();
|
private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr();
|
||||||
public void Init_by_app(Db_conn conn) {
|
public void Init_by_app(Xoa_app app) {
|
||||||
cache_mgr.Init_by_app(conn); // SECTION_EDIT
|
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() {
|
public void Clear() {
|
||||||
cache_mgr.Clear();
|
cache_mgr.Clear();
|
||||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
||||||
public class Xogrp_meta_itm {
|
public class Xocfg_grp_row {
|
||||||
public Xogrp_meta_itm(int id, String key) {
|
public Xocfg_grp_row(int id, String key) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.key = key;
|
this.key = key;
|
||||||
}
|
}
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||||
private final String fld__grp_id, fld__grp_key;
|
private final String fld__grp_id, fld__grp_key;
|
||||||
private final Db_conn conn;
|
private final Db_conn conn;
|
||||||
public Xogrp_meta_tbl(Db_conn conn) {
|
public Xocfg_grp_tbl(Db_conn conn) {
|
||||||
this.conn = conn;
|
this.conn = conn;
|
||||||
this.fld__grp_id = flds.Add_int_pkey("grp_id");
|
this.fld__grp_id = flds.Add_int_pkey("grp_id");
|
||||||
this.fld__grp_key = flds.Add_str("grp_key", 255);
|
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);
|
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) {
|
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);
|
if (itm == null) throw Err_.new_wo_type("cfg.grp:invalid key", "key", key);
|
||||||
return itm.Id();
|
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();
|
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;}
|
try {return rdr.Move_next() ? Load(rdr): null;}
|
||||||
finally {rdr.Rls();}
|
finally {rdr.Rls();}
|
||||||
}
|
}
|
||||||
private Xogrp_meta_itm Load(Db_rdr rdr) {
|
private Xocfg_grp_row Load(Db_rdr rdr) {
|
||||||
return new Xogrp_meta_itm
|
return new Xocfg_grp_row
|
||||||
( rdr.Read_int(fld__grp_id)
|
( rdr.Read_int(fld__grp_id)
|
||||||
, rdr.Read_str(fld__grp_key)
|
, rdr.Read_str(fld__grp_key)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public void Rls() {}
|
public void Rls() {}
|
||||||
public static final String TBL_NAME = "cfg_grp_meta";
|
public static final String TBL_NAME = "cfg_grp";
|
||||||
}
|
}
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
||||||
public class Xoitm_meta_itm {
|
public class Xocfg_itm_row {
|
||||||
public Xoitm_meta_itm(int id, int scope_id, int db_type, int gui_type, String gui_args, String key, String dflt) {
|
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.id = id;
|
||||||
this.scope_id = scope_id;
|
this.scope_id = scope_id;
|
||||||
this.db_type = db_type;
|
this.db_type = db_type;
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 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 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;
|
private final Db_conn conn;
|
||||||
public Xoitm_meta_tbl(Db_conn conn) {
|
public Xocfg_itm_tbl(Db_conn conn) {
|
||||||
this.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_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_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_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) {
|
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);
|
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();
|
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;}
|
try {return rdr.Move_next() ? Load(rdr) : null;}
|
||||||
finally {rdr.Rls();}
|
finally {rdr.Rls();}
|
||||||
}
|
}
|
||||||
private Xoitm_meta_itm Load(Db_rdr rdr) {
|
private Xocfg_itm_row Load(Db_rdr rdr) {
|
||||||
return new Xoitm_meta_itm
|
return new Xocfg_itm_row
|
||||||
( rdr.Read_int(fld__itm_id)
|
( rdr.Read_int(fld__itm_id)
|
||||||
, rdr.Read_int(fld__itm_scope_id)
|
, rdr.Read_int(fld__itm_scope_id)
|
||||||
, rdr.Read_int(fld__itm_db_type)
|
, rdr.Read_int(fld__itm_db_type)
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||||
private final String fld__map_src, fld__map_trg, fld__map_sort;
|
private final String fld__map_src, fld__map_trg, fld__map_sort;
|
||||||
private final Db_conn conn;
|
private final Db_conn conn;
|
||||||
public Xogrp_map_tbl(Db_conn conn) {
|
public Xocfg_map_tbl(Db_conn conn) {
|
||||||
this.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_src = flds.Add_int("map_src");
|
||||||
this.fld__map_trg = flds.Add_int("map_trg");
|
this.fld__map_trg = flds.Add_int("map_trg");
|
||||||
this.fld__map_sort = flds.Add_int("map_sort");
|
this.fld__map_sort = flds.Add_int("map_sort");
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
||||||
public class Xonde_i18n_itm {
|
public class Xocfg_txt_itm {
|
||||||
public Xonde_i18n_itm(int id, String lang, String name, String help) {
|
public Xocfg_txt_itm(int id, String lang, String name, String help) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.lang = lang;
|
this.lang = lang;
|
||||||
this.name = name;
|
this.name = name;
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 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 String fld__nde_id, fld__nde_lang, fld__nde_name, fld__nde_help;
|
||||||
private final Db_conn conn;
|
private final Db_conn conn;
|
||||||
public Xonde_i18n_tbl(Db_conn conn) {
|
public Xocfg_txt_tbl(Db_conn conn) {
|
||||||
this.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_id = flds.Add_int_pkey("nde_id"); // EX: '2'
|
||||||
this.fld__nde_lang = flds.Add_str("nde_lang", 16); // EX: 'en'
|
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'
|
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) {
|
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);
|
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();
|
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;}
|
try {return rdr.Move_next() ? Load(rdr) : null;}
|
||||||
finally {rdr.Rls();}
|
finally {rdr.Rls();}
|
||||||
}
|
}
|
||||||
private Xonde_i18n_itm Load(Db_rdr rdr) {
|
private Xocfg_txt_itm Load(Db_rdr rdr) {
|
||||||
return new Xonde_i18n_itm
|
return new Xocfg_txt_itm
|
||||||
( rdr.Read_int(fld__nde_id)
|
( rdr.Read_int(fld__nde_id)
|
||||||
, rdr.Read_str(fld__nde_lang)
|
, rdr.Read_str(fld__nde_lang)
|
||||||
, rdr.Read_str(fld__nde_name)
|
, rdr.Read_str(fld__nde_name)
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
||||||
public class Xoitm_data_itm {
|
public class Xocfg_val_row {
|
||||||
public Xoitm_data_itm(int id, String ctx, String val, String date) {
|
public Xocfg_val_row(String key, String ctx, String val, String date) {
|
||||||
this.id = id;
|
this.key = key;
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
this.val = val;
|
this.val = val;
|
||||||
this.date = date;
|
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 Ctx() {return ctx;} private final String ctx;
|
||||||
public String Val() {return val;} private final String val;
|
public String Val() {return val;} private final String val;
|
||||||
public String Date() {return date;} private final String date;
|
public String Date() {return date;} private final String date;
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 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;
|
private final Db_conn conn;
|
||||||
public Xoitm_data_tbl(Db_conn conn) {
|
public Xocfg_val_tbl(Db_conn conn) {
|
||||||
this.conn = conn;
|
this.conn = conn;
|
||||||
this.tbl_name = "cfg_itm_data";
|
this.tbl_name = "cfg_val";
|
||||||
this.fld__itm_id = flds.Add_int("itm_id"); // EX: '1'
|
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_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_val = flds.Add_str("itm_val", 4096); // EX: 'abc'
|
||||||
this.fld__itm_date = flds.Add_str("itm_date", 16); // EX: '20160901_010203'
|
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 String Tbl_name() {return tbl_name;} private final String tbl_name;
|
||||||
public void Create_tbl() {
|
public void Create_tbl() {
|
||||||
conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds
|
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) {
|
public void Upsert(String ctx, String key, String val, String date) {
|
||||||
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, ctx, itm_val, itm_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) {
|
public void Delete(String ctx, String key) {
|
||||||
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();
|
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) {
|
public Xocfg_val_row Select_one_or_null(String ctx, String key) {
|
||||||
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();
|
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;}
|
try {return rdr.Move_next() ? Load(rdr) : null;}
|
||||||
finally {rdr.Rls();}
|
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();
|
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 {
|
try {
|
||||||
while (rdr.Move_next()) {
|
while (rdr.Move_next()) {
|
||||||
list.Add(Load(rdr));
|
list.Add(Load(rdr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {rdr.Rls();}
|
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) {
|
private Xocfg_val_row Load(Db_rdr rdr) {
|
||||||
return new Xoitm_data_itm
|
return new Xocfg_val_row
|
||||||
( rdr.Read_int(fld__itm_id)
|
( rdr.Read_str(fld__itm_key)
|
||||||
, rdr.Read_str(fld__itm_ctx)
|
, rdr.Read_str(fld__itm_ctx)
|
||||||
, rdr.Read_str(fld__itm_val)
|
, rdr.Read_str(fld__itm_val)
|
||||||
, rdr.Read_str(fld__itm_date)
|
, rdr.Read_str(fld__itm_date)
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
|
||||||
public interface Xogui_nde {
|
public class Xoitm_lang_tid {
|
||||||
int Id();
|
public static final String Lang__dflt = "en";
|
||||||
void Load_by_i18n(String lang, String name, String help);
|
|
||||||
}
|
}
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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 class Xoitm_scope_tid { // SERIALIZED
|
||||||
public static final int Tid__app = 1, Tid__wiki = 2;
|
public static final int Tid__app = 1, Tid__wiki = 2;
|
||||||
public static int To_int(String raw) {
|
public static int To_int(String raw) {
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -31,7 +31,7 @@ class Xocfg_cache_grp {
|
|||||||
if (rv != null) return rv.Val();
|
if (rv != null) return rv.Val();
|
||||||
|
|
||||||
// global match; EX: "app|key_1"
|
// 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();
|
if (rv != null) return rv.Val();
|
||||||
|
|
||||||
// dflt
|
// dflt
|
||||||
|
@ -16,16 +16,20 @@ You should have received a copy of the GNU Affero General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 {
|
public class Xocfg_cache_mgr {
|
||||||
private final Hash_adp grps = Hash_adp_.New();
|
private final Hash_adp grps = Hash_adp_.New();
|
||||||
public Xocfg_cache_mgr() {
|
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) {
|
public void Init_by_app(Db_conn app_conn, Db_conn usr_conn) {
|
||||||
this.db_mgr = new Xocfg_db_mgr(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 void Clear() {grps.Clear();}
|
||||||
public String Get(String ctx, String key) {
|
public String Get(String ctx, String key) {
|
||||||
Xocfg_cache_grp grp = Grps__get_or_load(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) {
|
public void Set(String ctx, String key, String val) {
|
||||||
Xocfg_cache_grp grp = Grps__get_or_load(key);
|
Xocfg_cache_grp grp = Grps__get_or_load(key);
|
||||||
grp.Set(ctx, val);
|
grp.Set(ctx, val);
|
||||||
db_mgr.Set_str(ctx, key, val);
|
db_usr.Set_str(ctx, key, val);
|
||||||
grp.Pub(ctx, val);
|
grp.Pub(ctx, val);
|
||||||
}
|
}
|
||||||
public void Del(String ctx, String key) {
|
public void Del(String ctx, String key) {
|
||||||
Xocfg_cache_grp grp = Grps__get_or_load(key);
|
Xocfg_cache_grp grp = Grps__get_or_load(key);
|
||||||
grp.Del(ctx);
|
grp.Del(ctx);
|
||||||
db_mgr.Del(ctx, key);
|
db_usr.Del(ctx, key);
|
||||||
grp.Pub(ctx, grp.Dflt());
|
grp.Pub(ctx, grp.Dflt());
|
||||||
}
|
}
|
||||||
public void Sub(Gfo_invk sub, String ctx, String key, String evt) {
|
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) {
|
private Xocfg_cache_grp Load_grp(String key) {
|
||||||
// get data from db
|
// 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) {
|
if (meta_itm == null) {
|
||||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:grp not found; key=~{0}", key);
|
Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:grp not found; key=~{0}", key);
|
||||||
return new Xocfg_cache_grp(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
|
// 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());
|
||||||
int len = itms.length;
|
int len = itms.length;
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
Xoitm_data_itm itm = itms[0];
|
Xocfg_val_row itm = itms[0];
|
||||||
String itm_ctx = itm.Ctx();
|
String itm_ctx = itm.Ctx();
|
||||||
rv.Add(itm_ctx, new Xocfg_cache_itm(itm_ctx, key, itm.Val()));
|
rv.Add(itm_ctx, new Xocfg_cache_itm(itm_ctx, key, itm.Val()));
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,8 @@ You should have received a copy of the GNU Affero General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.*;
|
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 {
|
public class Xocfg_cache_mgr__tst {
|
||||||
private final Xocfg_cache_mgr__fxt fxt = new Xocfg_cache_mgr__fxt();
|
private final Xocfg_cache_mgr__fxt fxt = new Xocfg_cache_mgr__fxt();
|
||||||
@Before public void init() {fxt.Clear();}
|
@Before public void init() {fxt.Clear();}
|
||||||
@ -26,14 +27,14 @@ public class Xocfg_cache_mgr__tst {
|
|||||||
fxt.Test__get("en.d", "key_1", "dflt");
|
fxt.Test__get("en.d", "key_1", "dflt");
|
||||||
}
|
}
|
||||||
@Test public void Get__app() {
|
@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.Init__db_add(ctx, "key_1", "val_1");
|
||||||
fxt.Test__get(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.w", "key_1", "val_1");
|
||||||
fxt.Test__get("en.d", "key_1", "val_1");
|
fxt.Test__get("en.d", "key_1", "val_1");
|
||||||
}
|
}
|
||||||
@Test public void Set__app() {
|
@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__db_add(ctx, "key_1", "123");
|
||||||
fxt.Init__sub(ctx, "key_1", "key_1");
|
fxt.Init__sub(ctx, "key_1", "key_1");
|
||||||
fxt.Exec__set(ctx, "key_1", "234");
|
fxt.Exec__set(ctx, "key_1", "234");
|
||||||
@ -43,19 +44,16 @@ 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 Xocfg_itm_bldr cfg_bldr;
|
|
||||||
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/"));
|
||||||
mgr.Init_by_app(conn);
|
mgr.Init_by_app(conn, conn);
|
||||||
cfg_bldr = new Xocfg_itm_bldr(mgr.Db_mgr());
|
|
||||||
}
|
}
|
||||||
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) {
|
||||||
cfg_bldr.Create_grp("", "test_grp", "", "");
|
Xocfg_maint_svc.Create_grp(mgr.Db_app(), "test_grp", "", "", "");
|
||||||
int type_id = Type_adp_.To_tid_obj(val);
|
Xocfg_maint_svc.Create_itm(mgr.Db_app(), key, "test_grp", "", "", "wiki", "string", "dflt", "textbox", "");
|
||||||
cfg_bldr.Create_itm("test_grp", key, "wiki", type_id, "textbox", "", "dflt", "", "");
|
mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val));
|
||||||
mgr.Db_mgr().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) {
|
||||||
mgr.Sub(sub, ctx, key, evt);
|
mgr.Sub(sub, ctx, key, evt);
|
||||||
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.langs.mustaches.*;
|
||||||
import gplx.core.gfobjs.*;
|
import gplx.core.gfobjs.*;
|
||||||
public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
|
public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
|
||||||
public Xogui_grp(int id, int sort, String key) {
|
public Xoedit_grp(int id, int sort, String key) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.sort = sort;
|
this.sort = sort;
|
||||||
this.key = key;
|
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 Name() {return name;} private String name;
|
||||||
public String Help() {return help;} private String help;
|
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) {
|
public void Load_by_i18n(String lang, String name, String help) {
|
||||||
this.lang = lang;
|
this.lang = lang;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.help = help;
|
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;
|
this.itms = v;
|
||||||
}
|
}
|
||||||
public Gfobj_nde To_nde() {
|
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();
|
List_adp list = List_adp_.New();
|
||||||
int len = itms.length;
|
int len = itms.length;
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
Xogui_itm itm = itms[i];
|
Xoedit_itm itm = itms[i];
|
||||||
list.Add(itm.To_nde());
|
list.Add(itm.To_nde());
|
||||||
}
|
}
|
||||||
rv.Add_ary("itms", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
|
rv.Add_ary("itms", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.langs.mustaches.*;
|
||||||
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
|
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
|
||||||
public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
|
public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
|
||||||
public Xogui_itm(int id, int sort) {
|
public Xoedit_itm(int id, int sort, String key) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.sort = sort;
|
this.sort = sort;
|
||||||
|
this.key = key;
|
||||||
}
|
}
|
||||||
public int Id() {return id;} private final int id;
|
public int Id() {return id;} private final int id;
|
||||||
public int Sort() {return sort;} private final int sort;
|
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);
|
rv.Add_str("date", date);
|
||||||
Bry_bfr bfr = Bry_bfr_.New();
|
Bry_bfr bfr = Bry_bfr_.New();
|
||||||
To_html(bfr);
|
To_html(bfr);
|
||||||
// rv.Add_str("html", String_.Replace(bfr.To_str_and_clear(), "'", "\\\""));
|
|
||||||
rv.Add_str("html", bfr.To_str_and_clear());
|
rv.Add_str("html", bfr.To_str_and_clear());
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
private void To_html(Bry_bfr bfr) {
|
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) {
|
public boolean Mustache__write(String k, Mustache_bfr bfr) {
|
||||||
if (String_.Eq(k, "id")) bfr.Add_int(id);
|
if (String_.Eq(k, "id")) bfr.Add_int(id);
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.xowa.addons.apps.cfgs.dbs.*;
|
import gplx.xowa.addons.apps.cfgs.enums.*;
|
||||||
public class Xogui_itm_html {
|
public class Xoedit_itm_html {
|
||||||
public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) {
|
public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) {
|
||||||
switch (gui_type) {
|
switch (gui_type) {
|
||||||
case Xoitm_gui_tid.Tid__checkbox:
|
case Xoitm_gui_tid.Tid__checkbox:
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.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 boolean selected;
|
||||||
private final String key, text;
|
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.selected = selected;
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.text = text;
|
this.text = text;
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.langs.mustaches.*;
|
||||||
public class Xogui_nav_mgr implements Mustache_doc_itm {
|
public class Xoedit_nav_mgr implements Mustache_doc_itm {
|
||||||
public Xogui_nav_itm[] Itms() {return itms;} private final Xogui_nav_itm[] itms;
|
public Xoedit_nav_itm[] Itms() {return itms;} private final Xoedit_nav_itm[] itms;
|
||||||
public Xogui_nav_mgr(Xogui_nav_itm[] itms) {
|
public Xoedit_nav_mgr(Xoedit_nav_itm[] itms) {
|
||||||
this.itms = itms;
|
this.itms = itms;
|
||||||
}
|
}
|
||||||
public boolean Mustache__write(String k, Mustache_bfr bfr) {
|
public boolean Mustache__write(String k, Mustache_bfr bfr) {
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.langs.mustaches.*;
|
||||||
import gplx.core.gfobjs.*;
|
import gplx.core.gfobjs.*;
|
||||||
public class Xogui_root implements Mustache_doc_itm {
|
public class Xoedit_root implements Mustache_doc_itm {
|
||||||
private final Xogui_nav_mgr[] nav_mgrs;
|
private final Xoedit_nav_mgr[] nav_mgrs;
|
||||||
private final Xogui_grp[] grps;
|
private final Xoedit_grp[] grps;
|
||||||
public Xogui_root(Xogui_nav_mgr nav_mgr, Xogui_grp[] grps) {
|
public Xoedit_root(Xoedit_nav_mgr nav_mgr, Xoedit_grp[] grps) {
|
||||||
this.nav_mgrs = nav_mgr.Itms().length == 0 ? new Xogui_nav_mgr[0] : new Xogui_nav_mgr[] {nav_mgr};
|
this.nav_mgrs = nav_mgr.Itms().length == 0 ? new Xoedit_nav_mgr[0] : new Xoedit_nav_mgr[] {nav_mgr};
|
||||||
this.grps = grps;
|
this.grps = grps;
|
||||||
}
|
}
|
||||||
public Gfobj_nde To_nde() {
|
public Gfobj_nde To_nde() {
|
||||||
@ -30,7 +30,7 @@ public class Xogui_root implements Mustache_doc_itm {
|
|||||||
List_adp list = List_adp_.New();
|
List_adp list = List_adp_.New();
|
||||||
int len = grps.length;
|
int len = grps.length;
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
Xogui_grp itm = grps[i];
|
Xoedit_grp itm = grps[i];
|
||||||
list.Add(itm.To_nde());
|
list.Add(itm.To_nde());
|
||||||
}
|
}
|
||||||
rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
|
rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
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.*;
|
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.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 {
|
class Xocfg_edit_html extends Xow_special_wtr__base {
|
||||||
private final String grp, ctx, lang;
|
private final String grp, ctx, lang;
|
||||||
public Xocfg_edit_html(String grp, String ctx, String 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_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 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) {
|
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
|
||||||
Xogui_mgr mgr = Xogui_mgr.New(app);
|
Xocfg_edit_loader mgr = Xocfg_edit_loader.New(app);
|
||||||
return mgr.Get_root(grp, ctx, lang);
|
return mgr.Load_root(grp, ctx, lang);
|
||||||
}
|
}
|
||||||
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
@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();
|
Xopg_tag_mgr head_tags = page_data.Head_tags();
|
||||||
|
@ -19,9 +19,9 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; impor
|
|||||||
import gplx.langs.jsons.*;
|
import gplx.langs.jsons.*;
|
||||||
import gplx.xowa.htmls.bridges.*;
|
import gplx.xowa.htmls.bridges.*;
|
||||||
public class Xocfg_edit_bridge implements Bridge_cmd_itm {
|
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) {
|
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) {
|
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);
|
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);
|
||||||
|
@ -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
|
You should have received a copy of the GNU Affero General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
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.dbs.*;
|
||||||
import gplx.xowa.addons.apps.cfgs.dbs.*;
|
import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*;
|
||||||
public class Xogui_mgr {
|
import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*;
|
||||||
private final Xocfg_db_mgr db_mgr;
|
public class Xocfg_edit_loader {
|
||||||
public Xogui_mgr(Xocfg_db_mgr db_mgr) {
|
private final Xocfg_db_app db_app;
|
||||||
this.db_mgr = db_mgr;
|
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
|
// create lists
|
||||||
Ordered_hash grp_temp = Ordered_hash_.New();
|
Ordered_hash grp_temp = Ordered_hash_.New();
|
||||||
Xogui_nde_hash grp_list = new Xogui_nde_hash();
|
Xoedit_nde_hash grp_list = new Xoedit_nde_hash();
|
||||||
Xogui_nde_hash itm_list = new Xogui_nde_hash();
|
Xoedit_nde_hash itm_list = new Xoedit_nde_hash();
|
||||||
|
|
||||||
// get root_itm
|
// 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);
|
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_temp.Add(grp_meta.Id(), owner);
|
||||||
grp_list.Add(owner);
|
grp_list.Add(owner);
|
||||||
|
|
||||||
// load tree by selecting subs until no more grps
|
// load tree by selecting subs until no more grps
|
||||||
while (grp_temp.Count() > 0) {
|
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());
|
grp_temp.Del(owner.Id());
|
||||||
Load_subs(grp_list, itm_list, grp_temp, owner);
|
Load_subs(grp_list, itm_list, grp_temp, owner);
|
||||||
}
|
}
|
||||||
@ -49,30 +52,30 @@ public class Xogui_mgr {
|
|||||||
Load_i18n(grp_list, itm_list, lang);
|
Load_i18n(grp_list, itm_list, lang);
|
||||||
|
|
||||||
grp_list.Delete_container_grps();
|
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
|
// get grp_id
|
||||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
( "SELECT grp_id"
|
( "SELECT grp_id"
|
||||||
, "FROM cfg_grp_meta"
|
, "FROM cfg_grp"
|
||||||
, "WHERE grp_key = '{0}'"
|
, "WHERE grp_key = '{0}'"
|
||||||
), grp_key
|
), grp_key
|
||||||
);
|
);
|
||||||
int grp_id = -1;
|
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;}
|
try {grp_id = rdr.Move_next() ? rdr.Read_int("grp_id") : -1;}
|
||||||
finally {rdr.Rls();}
|
finally {rdr.Rls();}
|
||||||
|
|
||||||
// get owner_id
|
// get owner_id
|
||||||
sql = Db_sql_.Make_by_fmt(String_.Ary
|
sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
( "SELECT map_src"
|
( "SELECT map_src"
|
||||||
, "FROM cfg_grp_map"
|
, "FROM cfg_map"
|
||||||
, "WHERE map_trg = {0}"
|
, "WHERE map_trg = {0}"
|
||||||
), grp_id
|
), grp_id
|
||||||
);
|
);
|
||||||
int owner_id = -1;
|
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;}
|
try {owner_id = rdr.Move_next() ? rdr.Read_int("map_src") : -1;}
|
||||||
finally {rdr.Rls();}
|
finally {rdr.Rls();}
|
||||||
|
|
||||||
@ -80,57 +83,62 @@ public class Xogui_mgr {
|
|||||||
sql = Db_sql_.Make_by_fmt(String_.Ary
|
sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
( "SELECT m.map_trg"
|
( "SELECT m.map_trg"
|
||||||
, ", m.map_sort"
|
, ", m.map_sort"
|
||||||
|
, ", n.nde_name"
|
||||||
, ", t.grp_key"
|
, ", t.grp_key"
|
||||||
, "FROM cfg_grp_map m"
|
, "FROM cfg_map m"
|
||||||
, " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id"
|
, " 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}"
|
, "WHERE m.map_src = {0}"
|
||||||
, "ORDER BY m.map_sort"
|
, "ORDER BY m.map_sort"
|
||||||
), owner_id
|
), owner_id
|
||||||
);
|
);
|
||||||
List_adp list = List_adp_.New();
|
List_adp list = List_adp_.New();
|
||||||
try {
|
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()) {
|
while (rdr.Move_next()) {
|
||||||
String nav_key = rdr.Read_str("grp_key");
|
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 {
|
finally {
|
||||||
rdr.Rls();
|
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
|
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
( "SELECT m.map_trg"
|
( "SELECT m.map_trg"
|
||||||
, ", m.map_sort"
|
, ", m.map_sort"
|
||||||
, ", t.grp_key"
|
, ", Coalesce(g.grp_key, i.itm_key) AS key"
|
||||||
, "FROM cfg_grp_map m"
|
, ", i.itm_dflt"
|
||||||
, " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id"
|
, "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}"
|
, "WHERE m.map_src = {0}"
|
||||||
), owner.Id()
|
), 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();
|
List_adp itms_list = List_adp_.New();
|
||||||
while (rdr.Move_next()) {
|
while (rdr.Move_next()) {
|
||||||
String grp_key = rdr.Read_str("grp_key");
|
String grp_key = rdr.Read_str("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);
|
|
||||||
}
|
|
||||||
// nde is grp
|
// nde is grp
|
||||||
else {
|
if (rdr.Read_str("itm_dflt") == null) {
|
||||||
Xogui_grp gui_grp = new Xogui_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
|
Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
|
||||||
owner.Grps__add(gui_grp);
|
owner.Grps__add(gui_grp);
|
||||||
grp_list.Add(gui_grp);
|
grp_list.Add(gui_grp);
|
||||||
grp_temp.Add(gui_grp.Id(), 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));
|
|
||||||
}
|
}
|
||||||
private void Load_itm_meta(Xogui_nde_hash itm_list) {
|
owner.Itms_((Xoedit_itm[])itms_list.To_ary_and_clear(Xoedit_itm.class));
|
||||||
|
}
|
||||||
|
private void Load_itm_meta(Xoedit_nde_hash itm_list) {
|
||||||
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list);
|
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list);
|
||||||
while (iter.Move_next()) {
|
while (iter.Move_next()) {
|
||||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
@ -140,20 +148,20 @@ public class Xogui_mgr {
|
|||||||
, ", t.itm_gui_type"
|
, ", t.itm_gui_type"
|
||||||
, ", t.itm_gui_args"
|
, ", t.itm_gui_args"
|
||||||
, ", t.itm_dflt"
|
, ", t.itm_dflt"
|
||||||
, "FROM cfg_itm_meta t"
|
, "FROM cfg_itm t"
|
||||||
, "WHERE t.itm_id IN ({0})"
|
, "WHERE t.itm_key IN ({0})"
|
||||||
), iter.To_sql_in()
|
), 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()) {
|
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"));
|
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) {
|
private void Load_itm_data(Xoedit_nde_hash itm_list, String... ctxs) {
|
||||||
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(itm_list);
|
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"]
|
// loop ctxs where later ctxs are more general defaults; EX: ["en.w", "en.*", "*.w", "app"]
|
||||||
int ctxs_len = ctxs.length;
|
int ctxs_len = ctxs.length;
|
||||||
@ -163,20 +171,20 @@ public class Xogui_mgr {
|
|||||||
while (cur_iter.Move_next()) {
|
while (cur_iter.Move_next()) {
|
||||||
// get all data by ids and ctx
|
// get all data by ids and ctx
|
||||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||||
( "SELECT d.itm_id"
|
( "SELECT d.itm_key"
|
||||||
, ", d.itm_ctx"
|
, ", d.itm_ctx"
|
||||||
, ", d.itm_val"
|
, ", d.itm_val"
|
||||||
, ", d.itm_date"
|
, ", d.itm_date"
|
||||||
, "FROM cfg_itm_data d"
|
, "FROM cfg_val d"
|
||||||
, "WHERE d.itm_id IN ({0})"
|
, "WHERE d.itm_key IN ({0})"
|
||||||
, "AND d.itm_ctx = '{1}'"
|
, "AND d.itm_ctx = '{1}'"
|
||||||
), cur_iter.To_sql_in(), ctxs[i]
|
), cur_iter.To_sql_in_key(), ctxs[i]
|
||||||
);
|
);
|
||||||
|
|
||||||
// read and set data
|
// 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()) {
|
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"));
|
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);
|
cur_regy.Deleted__add(gui_itm);
|
||||||
}
|
}
|
||||||
@ -187,12 +195,12 @@ public class Xogui_mgr {
|
|||||||
// loop over remaining items and set to dflts
|
// loop over remaining items and set to dflts
|
||||||
int cur_len = cur_regy.Len();
|
int cur_len = cur_regy.Len();
|
||||||
for (int i = 0; i < cur_len; i++) {
|
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();
|
itm.Set_data_by_dflt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void Load_i18n(Xogui_nde_hash grp_list, Xogui_nde_hash itm_list, String... langs) {
|
private void Load_i18n(Xoedit_nde_hash grp_list, Xoedit_nde_hash itm_list, String... langs) {
|
||||||
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(grp_list).Merge(itm_list);
|
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"]
|
// loop langs where later langs are fallbacks; EX: ["de", "en"]
|
||||||
int langs_len = langs.length;
|
int langs_len = langs.length;
|
||||||
@ -206,7 +214,7 @@ public class Xogui_mgr {
|
|||||||
, ", h.nde_name"
|
, ", h.nde_name"
|
||||||
, ", h.nde_help"
|
, ", h.nde_help"
|
||||||
, ", h.nde_lang"
|
, ", h.nde_lang"
|
||||||
, "FROM cfg_nde_i18n h"
|
, "FROM cfg_txt h"
|
||||||
, "WHERE h.nde_id IN ({0})"
|
, "WHERE h.nde_id IN ({0})"
|
||||||
, "AND h.nde_lang = '{1}'"
|
, "AND h.nde_lang = '{1}'"
|
||||||
), cur_iter.To_sql_in()
|
), cur_iter.To_sql_in()
|
||||||
@ -214,9 +222,9 @@ public class Xogui_mgr {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// read and set i18n
|
// 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()) {
|
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"));
|
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);
|
cur_regy.Deleted__add(gui_itm);
|
||||||
}
|
}
|
||||||
@ -224,8 +232,8 @@ public class Xogui_mgr {
|
|||||||
cur_regy.Deleted__commit();
|
cur_regy.Deleted__commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static Xogui_mgr New(Xoa_app app) {
|
public static Xocfg_edit_loader New(Xoa_app app) {
|
||||||
Xocfg_db_mgr db_mgr = new Xocfg_db_mgr(app.User().User_db_mgr().Conn());
|
Xocfg_db_app db_app = Xocfg_db_app.New(app);
|
||||||
return new Xogui_mgr(db_mgr);
|
return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn()));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,12 +17,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
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.*;
|
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.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.*;
|
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 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());
|
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;
|
this.app = app;
|
||||||
}
|
}
|
||||||
public void Upsert(Json_nde args) {
|
public void Upsert(Json_nde args) {
|
||||||
@ -39,8 +40,8 @@ public class Xocfg_edit_service {
|
|||||||
public void Load(Json_nde args) {
|
public void Load(Json_nde args) {
|
||||||
String ctx = args.Get_as_str("ctx");
|
String ctx = args.Get_as_str("ctx");
|
||||||
String key = args.Get_as_str("key");
|
String key = args.Get_as_str("key");
|
||||||
Xogui_mgr gui_mgr = new Xogui_mgr(new Xocfg_db_mgr(app.User().User_db_mgr().Conn()));
|
if (edit_loader == null) edit_loader = Xocfg_edit_loader.New(app);
|
||||||
Xogui_root gui_root = gui_mgr.Get_root(key, ctx, "en");
|
Xoedit_root root = edit_loader.Load_root(key, ctx, "en");
|
||||||
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", gui_root.To_nde());
|
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", root.To_nde());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,13 +17,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
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.*;
|
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.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 {
|
class Xocfg_maint_html extends Xow_special_wtr__base {
|
||||||
public Xocfg_maint_html() {}
|
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_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 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) {
|
@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) {
|
@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();
|
Xopg_tag_mgr head_tags = page_data.Head_tags();
|
||||||
|
@ -19,9 +19,9 @@ package gplx.xowa.addons.apps.cfgs.specials.maints.services; import gplx.*; impo
|
|||||||
import gplx.langs.jsons.*;
|
import gplx.langs.jsons.*;
|
||||||
import gplx.xowa.htmls.bridges.*;
|
import gplx.xowa.htmls.bridges.*;
|
||||||
public class Xocfg_maint_bridge implements Bridge_cmd_itm {
|
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) {
|
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) {
|
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);
|
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);
|
||||||
|
@ -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 <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.*;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 <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.*;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -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 <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.*;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 <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.*;
|
|
||||||
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]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 <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.*;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -97,7 +97,7 @@ public class Xoav_app implements Xoa_app, Gfo_invk {
|
|||||||
public void Init_by_app(Io_url user_db_url) {
|
public void Init_by_app(Io_url user_db_url) {
|
||||||
user.Init_db(this, wiki_mgr, user_db_url);
|
user.Init_db(this, wiki_mgr, user_db_url);
|
||||||
this.Addon_mgr().Add_dflts_by_app(this).Run_by_app(this);
|
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
|
public void Free_mem() { // NOTE:not yet called in drd; DATE:2016-12-04
|
||||||
cfg.Clear();
|
cfg.Clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user