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