Cfg: Add more implementation for create grp / itm

v3.3.4
gnosygnu 8 years ago
parent fd712c16f3
commit 323aba310c

@ -21,11 +21,11 @@ public class Dbmeta_fld_tid {
public Dbmeta_fld_tid(int tid_ansi, int tid_sqlite, byte[] name, int len_1, int len_2) {
this.tid_ansi = tid_ansi; this.tid_sqlite = tid_sqlite; this.name = name; this.len_1 = len_1; this.len_2 = len_2;
}
public int Tid_ansi() {return tid_ansi;} private final int tid_ansi;
public int Tid_sqlite() {return tid_sqlite;} private final int tid_sqlite;
public byte[] Name() {return name;} private final byte[] name;
public int Len_1() {return len_1;} private final int len_1;
public int Len_2() {return len_2;} private final int len_2;
public int Tid_ansi() {return tid_ansi;} private final int tid_ansi;
public int Tid_sqlite() {return tid_sqlite;} private final int tid_sqlite;
public byte[] Name() {return name;} private final byte[] name;
public int Len_1() {return len_1;} private final int len_1;
public int Len_2() {return len_2;} private final int len_2;
public boolean Eq(Dbmeta_fld_tid comp) {
return tid_ansi == comp.tid_ansi
&& tid_sqlite == comp.tid_sqlite
@ -35,7 +35,7 @@ public class Dbmeta_fld_tid {
}
public static final int Tid__bool = 0, Tid__byte = 1, Tid__short = 2, Tid__int = 3, Tid__long = 4, Tid__float = 5, Tid__double = 6, Tid__str = 7, Tid__text = 8, Tid__bry = 9, Tid__decimal = 10, Tid__date = 11;
public static final Dbmeta_fld_tid
public static final Dbmeta_fld_tid
Itm__byte = new Dbmeta_fld_tid(Dbmeta_fld_tid.Tid__byte , Sqlite_tid.Tid_int , Bry_.new_a7("tinyint") , -1, -1)
, Itm__short = new Dbmeta_fld_tid(Dbmeta_fld_tid.Tid__short , Sqlite_tid.Tid_int , Bry_.new_a7("smallint") , -1, -1)
, Itm__int = new Dbmeta_fld_tid(Dbmeta_fld_tid.Tid__int , Sqlite_tid.Tid_int , Bry_.new_a7("integer") , -1, -1)
@ -67,4 +67,7 @@ public class Dbmeta_fld_tid {
default: throw Err_.new_unhandled(tid);
}
}
public static Dbmeta_fld_itm To_itm(String raw) {
return null;
}
}

@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.dbs.*;
import gplx.dbs.*; 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);
@ -26,6 +27,7 @@ public class Xocfg_db_mgr {
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;

@ -18,31 +18,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xocfg_itm_bldr {
private final Xocfg_db_mgr db_mgr;
private final String Lang__dflt = "en";
public Xocfg_itm_bldr(Xocfg_db_mgr db_mgr) {
this.db_mgr = db_mgr;
}
public void Create_grp(String owner_key, String grp_key, String grp_name, String grp_help) {
int grp_id = 1; // select Max(id) + 1 from cfg_grp_meta;
// 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);
int owner_id = 1; // select id from cfg_grp_meta where key = owner_key;
int map_sort = 1; // select Max(map_sort) + 1 from cfg_grp_map where map_src = owner_id;
// 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);
int nde_type = 0; // 0=grp; 1=itm
db_mgr.Tbl__nde_i18n().Upsert(nde_type, grp_id, "en", grp_name, grp_help);
// insert nde_i18n
db_mgr.Tbl__nde_i18n().Upsert(Xonde_i18n_nde_tid.Tid__grp, grp_id, Lang__dflt, grp_name, grp_help);
}
public void Create_itm(String grp_key, String itm_key, String scope_id_str, String type_id_str, String itm_dflt, String itm_name, String help) {
int grp_id = 1; // select id from cfg_grp_meta WHERE key = grp_key;
int itm_id = 1; // select Max(itm_id) + 1 from cfg_itm_meta
int itm_sort = 1; // Select Max(itm_sort) + 1 FROM cfg_itm_meta WHERE grp_id = grp_id;
int scope_id = 1; // app-level,wiki-level,ns-level...
int type_id = 1; // boolean,int,String...
// 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_meta_scope_tid.To_int(scope_id_str);
int type_id = 1; // boolean,int:40,list:a|b|c,String:40,note:50,70;file;button?;label?
db_mgr.Tbl__itm_meta().Upsert(itm_id, scope_id, type_id, itm_key, itm_dflt);
db_mgr.Tbl__itm_meta().Upsert(grp_id, itm_id, itm_sort, scope_id, type_id, 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);
int nde_type = 1; // 0=grp; 1=itm
db_mgr.Tbl__nde_i18n().Upsert(nde_type, itm_id, "en", itm_name, help);
// insert nde_i18n
db_mgr.Tbl__nde_i18n().Upsert(Xonde_i18n_nde_tid.Tid__itm, itm_id, Lang__dflt, itm_name, help);
}
}

@ -34,11 +34,17 @@ public class Xogrp_map_tbl implements Db_tbl {
public void Upsert(int map_src, int map_trg, int map_sort) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__map_src), map_src, map_trg, map_sort);
}
public void Select_stub() {
Db_rdr rdr = Db_rdr_.Empty;
rdr.Read_int(fld__map_src);
rdr.Read_int(fld__map_trg);
rdr.Read_int(fld__map_sort);
public int Select_next_sort(int owner_id) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__map_src).Crt_int(fld__map_src, owner_id).Exec_select__rls_auto();
try {
return rdr.Move_next()
? rdr.Read_int(fld__map_sort) + 1
: 0;
}
finally {rdr.Rls();}
}
public void Delete(int src_id, int trg_id) {
conn.Stmt_delete(tbl_name, fld__map_src, fld__map_trg).Crt_int(fld__map_src, src_id).Crt_int(fld__map_trg, trg_id).Exec_delete();
}
public void Rls() {}
}

@ -0,0 +1,28 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xogrp_meta_itm {
public Xogrp_meta_itm(int id, String key) {
this.id = id;
this.key = key;
}
public int Id() {return id;} private final int id;
public String Key() {return key;} private final String key;
public static final int Id__root = -1;
}

@ -23,20 +23,31 @@ public class Xogrp_meta_tbl implements Db_tbl {
private final Db_conn conn;
public Xogrp_meta_tbl(Db_conn conn) {
this.conn = conn;
this.tbl_name = "cfg_grp_meta";
this.fld__grp_id = flds.Add_int("grp_id");
this.fld__grp_key = flds.Add_str("grp_key", 255);
conn.Rls_reg(this);
}
public String Tbl_name() {return tbl_name;} private final String tbl_name;
public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME;
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Upsert(int grp_id, String grp_key) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__grp_id), grp_id, grp_key);
}
public void Select_stub() {
Db_rdr rdr = Db_rdr_.Empty;
rdr.Read_int(fld__grp_id);
rdr.Read_str(fld__grp_key);
public int Select_id_by_key_or_fail(String key) {
Xogrp_meta_itm 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) {
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
( rdr.Read_int(fld__grp_id)
, rdr.Read_str(fld__grp_key)
);
}
public void Rls() {}
public static final String TBL_NAME = "cfg_grp_meta";
}

@ -17,18 +17,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xoitm_meta_itm {
public Xoitm_meta_itm(int grp_id, int id, int itm_sort, int scope_id, int type_id, String key, String dflt) {
this.grp_id = grp_id;
public Xoitm_meta_itm(int id, int scope_id, int type_id, String key, String dflt) {
this.id = id;
this.itm_sort = itm_sort;
this.scope_id = scope_id;
this.type_id = type_id;
this.key = key;
this.dflt = dflt;
}
public int Grp_id() {return grp_id;} private final int grp_id;
public int Id() {return id;} private final int id;
public int Itm_sort() {return itm_sort;} private final int itm_sort;
public int Scope_id() {return scope_id;} private final int scope_id;
public int Type_id() {return type_id;} private final int type_id;
public String Key() {return key;} private final String key;

@ -0,0 +1,26 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xoitm_meta_scope_tid {
public static final int Tid__app = 1, Tid__wiki = 2;
public static int To_int(String raw) {
if (String_.Eq(raw, "app")) return Tid__app;
else if (String_.Eq(raw, "wiki")) return Tid__wiki;
else throw Err_.new_unhandled_default(raw);
}
}

@ -19,14 +19,12 @@ package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; impor
import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xoitm_meta_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__grp_id, fld__itm_id, fld__itm_sort, fld__itm_key, fld__itm_scope_id, fld__itm_type_id, fld__itm_dflt;
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_type_id, fld__itm_dflt;
private final Db_conn conn;
public Xoitm_meta_tbl(Db_conn conn) {
this.conn = conn;
this.tbl_name = "cfg_itm_meta";
this.fld__grp_id = flds.Add_int("grp_id"); // EX: '1'
this.fld__itm_id = flds.Add_int("itm_id"); // EX: '2'
this.fld__itm_sort = flds.Add_int("itm_sort"); // EX: '1'
this.fld__itm_scope_id = flds.Add_int("itm_scope_id"); // EX: '1'; REF: cfg_scope_regy; ENUM: app-only, wiki-only, ...
this.fld__itm_type_id = flds.Add_int("itm_type_id"); // EX: '1'; REF: cfg_type_regy; ENUM: int, String, ...
this.fld__itm_key = flds.Add_str("itm_key", 255); // EX: 'cfg_1'
@ -35,8 +33,8 @@ public class Xoitm_meta_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));}
public void Upsert(int grp_id, int itm_id, int itm_sort, int scope_id, int type_id, String itm_key, String itm_dflt) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__grp_id, fld__itm_id), grp_id, itm_id, itm_sort, scope_id, type_id, itm_key, itm_dflt);
public void Upsert(int itm_id, int scope_id, int type_id, String itm_key, String itm_dflt) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, scope_id, type_id, itm_key, itm_dflt);
}
public Xoitm_meta_itm Select_by_key_or_null(String key) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Exec_select__rls_auto();
@ -45,9 +43,7 @@ public class Xoitm_meta_tbl implements Db_tbl {
}
private Xoitm_meta_itm Load(Db_rdr rdr) {
return new Xoitm_meta_itm
( rdr.Read_int(fld__grp_id)
, rdr.Read_int(fld__itm_id)
, rdr.Read_int(fld__itm_sort)
( rdr.Read_int(fld__itm_id)
, rdr.Read_int(fld__itm_scope_id)
, rdr.Read_int(fld__itm_type_id)
, rdr.Read_str(fld__itm_key)

@ -0,0 +1,21 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
public class Xonde_i18n_nde_tid {
public static final int Tid__grp = 1, Tid__itm = 2;
}

@ -19,28 +19,28 @@ package gplx.xowa.addons.apps.cfgs.dbs; import gplx.*; import gplx.xowa.*; impor
import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xonde_i18n_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__nde_type, fld__nde_id, fld__nde_locale, fld__nde_name, fld__nde_help;
private final String fld__nde_tid, fld__nde_id, fld__nde_lang, fld__nde_name, fld__nde_help;
private final Db_conn conn;
public Xonde_i18n_tbl(Db_conn conn) {
this.conn = conn;
this.tbl_name = "cfg_nde_i18n";
this.fld__nde_type = flds.Add_int("nde_type"); // EX: 1=grp; 2=itm
this.fld__nde_tid = flds.Add_int("nde_tid"); // EX: 1=grp; 2=itm
this.fld__nde_id = flds.Add_int("nde_id"); // EX: '2'
this.fld__nde_locale = flds.Add_str("nde_locale", 16); // EX: 'en'
this.fld__nde_lang = flds.Add_str("nde_lang", 16); // EX: 'en'
this.fld__nde_name = flds.Add_str("nde_name", 255); // EX: 'Cfg Name'
this.fld__nde_help = flds.Add_str("nde_help", 4096); // EX: 'Help text in html'
this.fld__nde_help = flds.Add_str("nde_help", 4096); // EX: 'Help text'
conn.Rls_reg(this);
}
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));}
public void Upsert(int nde_type, int nde_id, String nde_locale, String nde_name, String nde_help) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__nde_type, fld__nde_id, fld__nde_locale), nde_type, nde_id, nde_locale, nde_name, nde_help);
public void Upsert(int nde_tid, int nde_id, String nde_lang, String nde_name, String nde_help) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__nde_tid, fld__nde_id, fld__nde_lang), nde_tid, nde_id, nde_lang, nde_name, nde_help);
}
public void Select_stub() {
Db_rdr rdr = Db_rdr_.Empty;
rdr.Read_int(fld__nde_type);
rdr.Read_int(fld__nde_tid);
rdr.Read_int(fld__nde_id);
rdr.Read_str(fld__nde_locale);
rdr.Read_str(fld__nde_lang);
rdr.Read_str(fld__nde_name);
rdr.Read_str(fld__nde_help);
}

Loading…
Cancel
Save