Cfg: Add support for lists

v3.3.4
gnosygnu 8 years ago
parent 0c3dbd4b4d
commit d7636457bd

@ -17,8 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*;
import gplx.xowa.addons.apps.cfgs.types.*;
public class Xocfg_mgr {
private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr();
public Xocfg_type_mgr Type_mgr() {return type_mgr;} private final Xocfg_type_mgr type_mgr = new Xocfg_type_mgr();
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)

@ -17,10 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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) {
public Xocfg_itm_row(int id, int scope_id, String data_type, int gui_type, String gui_args, String key, String dflt) {
this.id = id;
this.scope_id = scope_id;
this.db_type = db_type;
this.data_type = data_type;
this.gui_type = gui_type;
this.gui_args = gui_args;
this.key = key;
@ -28,7 +28,7 @@ public class Xocfg_itm_row {
}
public int Id() {return id;} private final int id;
public int Scope_id() {return scope_id;} private final int scope_id;
public int Db_type() {return db_type;} private final int db_type;
public String Data_type() {return data_type;} private final String data_type;
public int Gui_type() {return gui_type;} private final int gui_type;
public String Gui_args() {return gui_args;} private final String gui_args;
public String Key() {return key;} private final String key;

@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*;
import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xocfg_itm_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_db_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt;
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_data_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt;
private final Db_conn conn;
public Xocfg_itm_tbl(Db_conn conn) {
this.conn = conn;
@ -27,7 +27,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
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
this.fld__itm_db_type = flds.Add_int("itm_db_type"); // EX: '1'; ENUM: Type_adp_
this.fld__itm_data_type = flds.Add_str("itm_data_type", 255); // EX: '1'; ENUM: Type_adp_
this.fld__itm_gui_type = flds.Add_int("itm_gui_type"); // EX: '1'; ENUM: Xoitm_gui_tid
this.fld__itm_gui_args = flds.Add_str("itm_gui_args", 255); // EX: '1,40' (numeric); '255' (textbox); 'enum_name' (combo); etc..
this.fld__itm_dflt = flds.Add_str("itm_dflt", 4096); // EX: 'abc'
@ -38,7 +38,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, fld__itm_key, fld__itm_key)));
}
public void Upsert(int itm_id, int scope_id, int db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) {
public void Upsert(int itm_id, int scope_id, String 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 Xocfg_itm_row Select_by_key_or_null(String key) {
@ -50,7 +50,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
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)
, rdr.Read_str(fld__itm_data_type)
, rdr.Read_int(fld__itm_gui_type)
, rdr.Read_str(fld__itm_gui_args)
, rdr.Read_str(fld__itm_key)

@ -47,6 +47,8 @@ public class Xoitm_gui_tid { // SERIALIZED
return Xoitm_gui_tid.Str__checkbox;
else if (String_.Eq(db_type, "memo"))
return Xoitm_gui_tid.Str__memo;
else if (String_.Has_at_bgn(db_type, "list:"))
return Xoitm_gui_tid.Str__select;
else
return Xoitm_gui_tid.Str__textbox;
}

@ -19,32 +19,22 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*;
public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
public Xoedit_grp(int id, int sort, String key) {
private String lang, name, help;
public Xoedit_grp(int id, String key, int sort) {
this.id = id;
this.sort = sort;
this.key = key;
this.sort = sort;
}
public int Id() {return id;} private final int id;
public String Key() {return key;} private final String key;
public int Sort() {return sort;} private final int sort;
public String Key() {return key;} private String key;
public String Lang() {return lang;} private String lang;
public String Name() {return name;} private String name;
public String Help() {return help;} private String help;
public Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0];
public void Itms_(Xoedit_itm[] v) {this.itms = v;}
public void Load_by_i18n(String lang, String name, String help) {
this.lang = lang;
this.name = name;
this.help = help;
}
public void Grps__add(Xoedit_grp grp) {
}
public void Itms_(Xoedit_itm[] v) {
this.itms = v;
}
public Gfobj_nde To_nde() {
Gfobj_nde rv = Gfobj_nde.New();
rv.Add_int("id", id);

@ -18,34 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
import gplx.xowa.addons.apps.cfgs.types.*;
public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
public Xoedit_itm(int id, int sort, String key) {
private int gui_type;
private boolean edited;
private String data_type, gui_args, dflt, lang, name, help, ctx, val, date;
private Xocfg_type_mgr type_mgr;
public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) {
this.type_mgr = type_mgr;
this.id = id;
this.sort = sort;
this.key = key;
this.sort = sort;
}
public int Id() {return id;} private final int id;
public String Key() {return key;} private final String key;
public int Sort() {return sort;} private final int sort;
public int Scope_id() {return scope_id;} private int scope_id;
public int Gui_type() {return gui_type;} private int gui_type;
public String Gui_args() {return gui_args;} private String gui_args;
public String Key() {return key;} private String key;
public String Dflt() {return dflt;} private String dflt;
public boolean Edited() {return edited;} private boolean edited;
public String Lang() {return lang;} private String lang;
public String Name() {return name;} private String name;
public String Help() {return help;} private String help;
public String Ctx() {return ctx;} private String ctx;
public String Val() {return val;} private String val;
public String Date() {return date;} private String date;
public void Load_by_meta(String key, int scope_id, int gui_type, String gui_args, String dflt) {
this.scope_id = scope_id;
public void Load_by_meta(int scope_id, String data_type, int gui_type, String gui_args, String dflt) {
this.data_type = data_type;
this.gui_type = gui_type;
this.gui_args = gui_args;
this.key = key;
this.dflt = dflt;
}
public void Load_by_i18n(String lang, String name, String help) {
@ -77,12 +68,12 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
rv.Add_str("val", val);
rv.Add_str("date", date);
Bry_bfr bfr = Bry_bfr_.New();
To_html(bfr);
To_html(bfr, type_mgr);
rv.Add_str("html", bfr.To_str_and_clear());
return rv;
}
private void To_html(Bry_bfr bfr) {
new Xoedit_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val);
private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) {
new Xoedit_itm_html().Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, val);
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "id")) bfr.Add_int(id);
@ -94,7 +85,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx);
else if (String_.Eq(k, "val")) bfr.Add_str_u8(val);
else if (String_.Eq(k, "date")) bfr.Add_str_u8(date);
else if (String_.Eq(k, "html")) To_html(bfr.Bfr());
else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr);
return true;
}
public static String Ctx__app = "app";

@ -17,8 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
import gplx.xowa.addons.apps.cfgs.enums.*;
import gplx.xowa.addons.apps.cfgs.types.*;
public class Xoedit_itm_html {
public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) {
public void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, int gui_type, String gui_args, String data) {
switch (gui_type) {
case Xoitm_gui_tid.Tid__checkbox:
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"checkbox\" accesskey=\"d\" class=\"xocfg_checkbox\"{1}></input>", key, String_.Eq(data, "y") ? " checked=\"checked\"" : "");
@ -33,15 +34,21 @@ public class Xoedit_itm_html {
bfr.Add_str_u8_fmt("<textarea id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_memo\">{1}</textarea>", key, data);
break;
case Xoitm_gui_tid.Tid__select:
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"3\">", key);
for (int i = 0; i < 3; i++) {
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", i, i, i == 2 ? " selected=\"selected\"" : "");
Keyval[] kvs_ary = type_mgr.Lists__get(data_type);
int len = kvs_ary.length;
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"{1}\">", key, len);
for (int i = 0; i < len; i++) {
Keyval kv = kvs_ary[i];
String kv_val = kv.Val_to_str_or_null();
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", kv.Key(), kv_val, String_.Eq(data, kv_val) ? " selected=\"selected\"" : "");
}
bfr.Add_str_u8_fmt("</select>");
break;
case Xoitm_gui_tid.Tid__fs_file:
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_fs_file\" value=\"{1}\"></input>", key, data);
break;
default:
break;
}
}
}

@ -18,13 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
import gplx.dbs.*;
import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.dbs.tbls.*;
import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*;
import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*; import gplx.xowa.addons.apps.cfgs.types.*;
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) {
private final Xocfg_type_mgr type_mgr;
public Xocfg_edit_loader(Xocfg_db_app db_app, Xocfg_db_usr db_usr, Xocfg_type_mgr type_mgr) {
this.db_app = db_app;
this.db_usr = db_usr;
this.type_mgr = type_mgr;
}
public Xoedit_root Load_root(String grp_key, String ctx, String lang) {
// create lists
@ -35,7 +37,7 @@ public class Xocfg_edit_loader {
// get root_itm
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);
Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), 0, grp_meta.Key());
Xoedit_grp owner = new Xoedit_grp(grp_meta.Id(), grp_meta.Key(), 0);
grp_temp.Add(grp_meta.Id(), owner);
grp_list.Add(owner);
@ -83,11 +85,11 @@ public class Xocfg_edit_loader {
sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT m.map_trg"
, ", m.map_sort"
, ", n.nde_name"
, ", t.grp_key"
, ", t.nde_name"
, ", g.grp_key"
, "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"
, " LEFT JOIN cfg_grp g ON m.map_trg = g.grp_id"
, " LEFT JOIN cfg_txt t ON m.map_trg = t.nde_id"
, "WHERE m.map_src = {0}"
, "ORDER BY m.map_sort"
), owner_id
@ -124,14 +126,13 @@ public class Xocfg_edit_loader {
String grp_key = rdr.Read_str("key");
// nde is grp
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);
Xoedit_grp gui_grp = new Xoedit_grp(rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort"));
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);
Xoedit_itm gui_itm = new Xoedit_itm(type_mgr, rdr.Read_int("map_trg"), grp_key, rdr.Read_int("map_sort"));
itms_list.Add(gui_itm);
itm_list.Add(gui_itm);
}
@ -142,21 +143,22 @@ public class Xocfg_edit_loader {
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list);
while (iter.Move_next()) {
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT t.itm_id"
, ", t.itm_key"
, ", t.itm_scope_id"
, ", t.itm_gui_type"
, ", t.itm_gui_args"
, ", t.itm_dflt"
, "FROM cfg_itm t"
, "WHERE t.itm_key IN ({0})"
( "SELECT i.itm_id"
, ", i.itm_key"
, ", i.itm_scope_id"
, ", i.itm_data_type"
, ", i.itm_gui_type"
, ", i.itm_gui_args"
, ", i.itm_dflt"
, "FROM cfg_itm i"
, "WHERE i.itm_key IN ({0})"
), iter.To_sql_in_key()
);
Db_rdr rdr = db_app.Conn().Stmt_sql(sql).Exec_select__rls_auto();
while (rdr.Move_next()) {
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"));
Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(rdr.Read_str("itm_key"));
edit_itm.Load_by_meta(rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt"));
}
}
}
@ -171,13 +173,13 @@ public class Xocfg_edit_loader {
while (cur_iter.Move_next()) {
// get all data by ids and ctx
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT d.itm_key"
, ", d.itm_ctx"
, ", d.itm_val"
, ", d.itm_date"
, "FROM cfg_val d"
, "WHERE d.itm_key IN ({0})"
, "AND d.itm_ctx = '{1}'"
( "SELECT v.itm_key"
, ", v.itm_ctx"
, ", v.itm_val"
, ", v.itm_date"
, "FROM cfg_val v"
, "WHERE v.itm_key IN ({0})"
, "AND v.itm_ctx = '{1}'"
), cur_iter.To_sql_in_key(), ctxs[i]
);
@ -210,13 +212,13 @@ public class Xocfg_edit_loader {
while (cur_iter.Move_next()) {
// get all i18n for itms and lang
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT h.nde_id"
, ", h.nde_name"
, ", h.nde_help"
, ", h.nde_lang"
, "FROM cfg_txt h"
, "WHERE h.nde_id IN ({0})"
, "AND h.nde_lang = '{1}'"
( "SELECT t.nde_id"
, ", t.nde_name"
, ", t.nde_help"
, ", t.nde_lang"
, "FROM cfg_txt t"
, "WHERE t.nde_id IN ({0})"
, "AND t.nde_lang = '{1}'"
), cur_iter.To_sql_in()
, langs[i]
);
@ -234,6 +236,6 @@ public class Xocfg_edit_loader {
}
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()));
return new Xocfg_edit_loader(db_app, new Xocfg_db_usr(db_app, app.User().User_db_mgr().Conn()), app.Cfg().Type_mgr());
}
}

@ -23,7 +23,7 @@ class Xocfg_maint_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", "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 Xoedit_grp(0, 1, "test");
return new Xoedit_grp(0, "test", 1);
}
@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();

@ -43,7 +43,7 @@ class Xocfg_maint_parser {
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 scope = Get_atr_as_str_or(hash, "scope_", ""); if (String_.Eq(scope, "")) scope = "wiki";
String db_type = Get_atr_as_str_or_fail(hash, "db_type_");
String dflt = Get_atr_as_str_or_fail(hash, "dflt_");
String gui_type = Get_atr_as_str_or(hash, "gui_type_", null);

@ -34,6 +34,7 @@ public class Xocfg_maint_svc {
// exec
Xocfg_db_app db_app = Xocfg_db_app.New(app);
db_app.Conn().Txn_bgn("xo__cfg_maint__upsert");
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());
@ -44,6 +45,7 @@ public class Xocfg_maint_svc {
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());
}
}
db_app.Conn().Txn_end();
}
public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) {
// insert grp_meta
@ -63,9 +65,8 @@ public class Xocfg_maint_svc {
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);
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
// insert grp_map
int itm_sort = db_app.Tbl__map().Select_next_sort(grp_id);

@ -0,0 +1,30 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.types; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xocfg_type_mgr {
private final Ordered_hash list_hash = Ordered_hash_.New();
public Xocfg_type_mgr() {
this.Lists__add("list:Xo_load_html_type", Keyval_.new_("mem"), Keyval_.new_("url"));
}
public void Lists__add(String key, Keyval... itms) {
list_hash.Add(key, itms);
}
public Keyval[] Lists__get(String key) {
return (Keyval[])list_hash.Get_by_or_fail(key);
}
}
Loading…
Cancel
Save