diff --git a/100_core/src/gplx/core/primitives/Bool_obj_ref.java b/100_core/src/gplx/core/primitives/Bool_obj_ref.java index e5ae0d89c..353caba1b 100644 --- a/100_core/src/gplx/core/primitives/Bool_obj_ref.java +++ b/100_core/src/gplx/core/primitives/Bool_obj_ref.java @@ -20,6 +20,7 @@ public class Bool_obj_ref { public boolean Val() {return val;} private boolean val; public boolean Val_y() {return val;} public boolean Val_n() {return !val;} + public String Val_as_str_yn() {return Yn.Xto_str(val);} public Bool_obj_ref Val_y_() {val = true; return this;} public Bool_obj_ref Val_n_() {val = false; return this;} public Bool_obj_ref Val_(boolean v) {val = v; return this;} diff --git a/100_core/src/gplx/core/primitives/Int_obj_ref.java b/100_core/src/gplx/core/primitives/Int_obj_ref.java index cee9f9ba9..883b71d03 100644 --- a/100_core/src/gplx/core/primitives/Int_obj_ref.java +++ b/100_core/src/gplx/core/primitives/Int_obj_ref.java @@ -23,6 +23,7 @@ public class Int_obj_ref { public int Val_add(int v) {val += v; return val;} public Int_obj_ref Val_zero_() {val = 0; return this;} public Int_obj_ref Val_neg1_() {val = -1; return this;} + public String Val_as_str() {return Int_.Xto_str(val);} @Override public String toString() {return Int_.Xto_str(val);} @Override public int hashCode() {return val;} @Override public boolean equals(Object obj) {return val == ((Int_obj_ref)obj).Val();} diff --git a/100_core/src_000_err/gplx/Err_.java b/100_core/src_000_err/gplx/Err_.java index e9be59104..edc933e43 100644 --- a/100_core/src_000_err/gplx/Err_.java +++ b/100_core/src_000_err/gplx/Err_.java @@ -40,6 +40,7 @@ public class Err_ { //_20110415 public static Err find_failed_(String find) {return Err.hdr_("find failed").Add("find", find);} public static Err null_(String obj) {return Err.hdr_("null obj").Add("obj", obj);} + public static Err deprecated(String s) {return Err.hdr_("deprecated:" + s);} public static Err not_implemented_() {return not_implemented_msg_("method not implemented");} public static Err not_implemented_msg_(String hdr) {return Err.hdr_(hdr);} public static Err type_mismatch_exc_(Exception e, Class t, Object o) {return type_mismatch_(t, o);} // NOTE: e passed to "soak" up variable for IDE diff --git a/100_core/src_110_primitive/gplx/Bry_bfr.java b/100_core/src_110_primitive/gplx/Bry_bfr.java index 234e06995..744b99cc8 100644 --- a/100_core/src_110_primitive/gplx/Bry_bfr.java +++ b/100_core/src_110_primitive/gplx/Bry_bfr.java @@ -131,6 +131,7 @@ public class Bry_bfr { public Bry_bfr Add_byte_quote() {return Add_byte(Byte_ascii.Quote);} public Bry_bfr Add_byte_space() {return Add_byte(Byte_ascii.Space);} public Bry_bfr Add_byte_nl() {return Add_byte(Byte_ascii.NewLine);} + public Bry_bfr Add_byte_dot() {return Add_byte(Byte_ascii.Dot);} public Bry_bfr Add_byte(byte val) { int newPos = bfr_len + 1; if (newPos > bfr_max) Resize(bfr_len * 2); diff --git a/100_core/src_110_primitive/gplx/String_.java b/100_core/src_110_primitive/gplx/String_.java index 40eba34d1..723d219cd 100644 --- a/100_core/src_110_primitive/gplx/String_.java +++ b/100_core/src_110_primitive/gplx/String_.java @@ -329,6 +329,16 @@ public class String_ implements GfoInvkAble { } public static String[] Ary(String... ary) {return ary;} + public static String[] Ary_wo_null(String... ary) { + ListAdp list = ListAdp_.new_(); + int len = ary.length; + for (int i = 0; i < len; ++i) { + String itm = ary[i]; + if (itm == null) continue; + list.Add(itm); + } + return list.XtoStrAry(); + } public static String AryXtoStr(String... ary) { String_bldr sb = String_bldr_.new_(); for (String s : ary) diff --git a/100_core/src_140_list/gplx/Hash_adp_bry.java b/100_core/src_140_list/gplx/Hash_adp_bry.java index 3d1870954..fd20dc813 100644 --- a/100_core/src_140_list/gplx/Hash_adp_bry.java +++ b/100_core/src_140_list/gplx/Hash_adp_bry.java @@ -30,6 +30,7 @@ public class Hash_adp_bry extends gplx.lists.HashAdp_base implements HashAdp { public Object Get_by_bry(byte[] src) {return super.Fetch_base(key_ref.Init(src));} public Object Get_by_mid(byte[] src, int bgn, int end) {return super.Fetch_base(key_ref.Init(src, bgn, end));} public Hash_adp_bry Add_bry_byte(byte[] key, byte val) {this.Add_base(key, Byte_obj_val.new_(val)); return this;} + public Hash_adp_bry Add_bry_int(byte[] key, int val) {this.Add_base(key, Int_obj_val.new_(val)); return this;} public Hash_adp_bry Add_bry_bry(byte[] key) {this.Add_base(key, key); return this;} public Hash_adp_bry Add_str_byte(String key, byte val) {this.Add_base(Bry_.new_utf8_(key), Byte_obj_val.new_(val)); return this;} public Hash_adp_bry Add_str_obj(String key, Object val) {this.Add_base(Bry_.new_utf8_(key), val); return this;} diff --git a/100_core/src_140_list/gplx/OrderedHash_.java b/100_core/src_140_list/gplx/OrderedHash_.java index a9ad542fc..96b537516 100644 --- a/100_core/src_140_list/gplx/OrderedHash_.java +++ b/100_core/src_140_list/gplx/OrderedHash_.java @@ -22,9 +22,9 @@ public class OrderedHash_ { public static OrderedHash new_bry_() {return new OrderedHash_bry();} } class OrderedHash_bry extends OrderedHash_base { - private Bry_obj_ref lkp = Bry_obj_ref.null_(); + private final Bry_obj_ref tmp_ref = Bry_obj_ref.null_(); @Override protected void Add_base(Object key, Object val) {super.Add_base(Bry_obj_ref.new_((byte[])key), val);} - @Override protected void Del_base(Object key) {super.Del_base(lkp.Val_((byte[])key));} - @Override protected boolean Has_base(Object key) {return super.Has_base(lkp.Val_((byte[])key));} - @Override protected Object Fetch_base(Object key) {return super.Fetch_base(lkp.Val_((byte[])key));} + @Override protected void Del_base(Object key) {synchronized (tmp_ref) {super.Del_base(tmp_ref.Val_((byte[])key));}} + @Override protected boolean Has_base(Object key) {synchronized (tmp_ref) {return super.Has_base(tmp_ref.Val_((byte[])key));}} + @Override protected Object Fetch_base(Object key) {synchronized (tmp_ref) {return super.Fetch_base(tmp_ref.Val_((byte[])key));}} } diff --git a/100_core/src_200_io/gplx/Io_mgr.java b/100_core/src_200_io/gplx/Io_mgr.java index 381dfcaee..326c58d42 100644 --- a/100_core/src_200_io/gplx/Io_mgr.java +++ b/100_core/src_200_io/gplx/Io_mgr.java @@ -94,6 +94,13 @@ public class Io_mgr { // exists primarily to gather all cmds under gplx namespac catch (Exception e) {throw Err_.new_("failed to load file").Add("url", url.Xto_api()).Add("e", Err_.Message_lang(e));} finally {stream.Rls();} } + public byte[] LoadFilBry_loose(Io_url url) {return Bry_.new_utf8_(LoadFilStr_loose(url));} + public String LoadFilStr_loose(Io_url url) { + String rv = LoadFilStr_args(url).BomUtf8Convert_(Bool_.Y).MissingIgnored_(Bool_.Y).Exec(); + if (String_.Has(rv, "\r\n")) + rv = String_.Replace(rv, "\r\n", "\n"); + return rv; + } public void AppendFilBfr(Io_url url, Bry_bfr bfr) {AppendFilByt(url, bfr.Bfr(), 0, bfr.Len()); bfr.ClearAndReset();} public void AppendFilByt(Io_url url, byte[] val) {AppendFilByt(url, val, 0, val.length);} public void AppendFilByt(Io_url url, byte[] val, int len) {AppendFilByt(url, val, 0, len);} diff --git a/100_core/src_200_io/gplx/ios/IoEngine_system.java b/100_core/src_200_io/gplx/ios/IoEngine_system.java index 2e99935e0..a5fd6cacd 100644 --- a/100_core/src_200_io/gplx/ios/IoEngine_system.java +++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java @@ -155,7 +155,7 @@ public class IoEngine_system extends IoEngine_base { } IoItmFil QueryMkr_fil(IoUrlInfo urlInfo, File apiFil) { Io_url filUrl = Io_url_.new_inf_(apiFil.getPath(), urlInfo); // NOTE: may throw PathTooLongException when url is > 248 (exception messages states 260) - long fil_len = apiFil.exists() ? apiFil.length() : IoItmFil.Size_Invalid; // NOTE: if file doesn't exist, set len to -1; needed for "boolean Exists() {return size != Size_Invalid;}"; DATE:2014-06-21 + long fil_len = apiFil.exists() ? apiFil.length() : IoItmFil.Size_invalid; // NOTE: if file doesn't exist, set len to -1; needed for "boolean Exists() {return size != Size_Invalid;}"; DATE:2014-06-21 IoItmFil rv = IoItmFil_.new_(filUrl, fil_len, DateAdp_.MinValue, DateAdp_.unixtime_lcl_ms_(apiFil.lastModified())); rv.ReadOnly_(!apiFil.canWrite()); return rv; @@ -404,7 +404,7 @@ public class IoEngine_system extends IoEngine_base { src_conn = (HttpURLConnection)src_url.openConnection(); // src_conn.setReadTimeout(5000); // do not set; if file does not exist, will wait 5 seconds before timing out; want to fail immediately String user_agent = xrg.User_agent(); if (user_agent != null) src_conn.setRequestProperty("User-Agent", user_agent); - long content_length = Long_.parse_or_(src_conn.getHeaderField("Content-Length"), IoItmFil.Size_Invalid_int); + long content_length = Long_.parse_or_(src_conn.getHeaderField("Content-Length"), IoItmFil.Size_invalid_int); xrg.Src_content_length_(content_length); if (xrg.Src_last_modified_query()) // NOTE: only files will have last modified (api calls will not); if no last_modified, then src_conn will throw get nullRef; avoid nullRef xrg.Src_last_modified_(DateAdp_.unixtime_lcl_ms_(src_conn.getLastModified())); @@ -535,7 +535,7 @@ class Io_stream_rdr_http implements Io_stream_rdr { } private IoEngine_xrg_downloadFil xrg; public byte Tid() {return Io_stream_.Tid_file;} public Io_url Url() {return url;} public Io_stream_rdr Url_(Io_url v) {url = v; return this;} private Io_url url; - public long Len() {return len;} public Io_stream_rdr Len_(long v) {len = v; return this;} private long len = IoItmFil.Size_Invalid; // NOTE: must default size to -1; DATE:2014-06-21 + public long Len() {return len;} public Io_stream_rdr Len_(long v) {len = v; return this;} private long len = IoItmFil.Size_invalid; // NOTE: must default size to -1; DATE:2014-06-21 private String src_str; private HttpURLConnection src_conn; private java.io.BufferedInputStream src_stream; private Io_download_fmt xfer_fmt; private Gfo_usr_dlg prog_dlg; private boolean read_done = true, read_failed = false; @@ -555,7 +555,7 @@ class Io_stream_rdr_http implements Io_stream_rdr { if (user_agent != null) src_conn.setRequestProperty("User-Agent", user_agent); // src_conn.setReadTimeout(5000); // do not set; if file does not exist, will wait 5 seconds before timing out; want to fail immediately - long content_length = Long_.parse_or_(src_conn.getHeaderField("Content-Length"), IoItmFil.Size_Invalid_int); + long content_length = Long_.parse_or_(src_conn.getHeaderField("Content-Length"), IoItmFil.Size_invalid_int); xrg.Src_content_length_(content_length); this.len = content_length; if (xrg.Src_last_modified_query()) // NOTE: only files will have last modified (api calls will not); if no last_modified, then src_conn will throw get nullRef; avoid nullRef diff --git a/100_core/src_200_io/gplx/ios/IoItmFil.java b/100_core/src_200_io/gplx/ios/IoItmFil.java index 38069bbcb..15e66787d 100644 --- a/100_core/src_200_io/gplx/ios/IoItmFil.java +++ b/100_core/src_200_io/gplx/ios/IoItmFil.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.ios; import gplx.*; public class IoItmFil extends IoItm_base { @Override public int TypeId() {return IoItmFil.Type_Fil;} @Override public boolean Type_dir() {return false;} @Override public boolean Type_fil() {return true;} public static final int Type_Fil = 2; - public boolean Exists() {return size != Size_Invalid;} // NOTE: questionable logic, but preserved for historical reasons; requires that length be set to -1 if !.exists + public boolean Exists() {return size != Size_invalid;} // NOTE: questionable logic, but preserved for historical reasons; requires that length be set to -1 if !.exists public DateAdp ModifiedTime() {return modifiedTime;} public IoItmFil ModifiedTime_(DateAdp val) {modifiedTime = val; return this;} DateAdp modifiedTime; public IoItmFil ModifiedTime_(String val) {return ModifiedTime_(DateAdp_.parse_gplx(val));} @@ -37,6 +37,6 @@ public class IoItmFil extends IoItm_base { else return super.Invk(ctx, ikey, k, m); } @gplx.Internal protected IoItmFil() {} - public static final long Size_Invalid = -1; - public static final int Size_Invalid_int = -1; + public static final long Size_invalid = -1; + public static final int Size_invalid_int = -1; } diff --git a/100_core/src_200_io/gplx/ios/Io_url_obj_ref.java b/100_core/src_200_io/gplx/ios/Io_url_obj_ref.java new file mode 100644 index 000000000..afb8fa113 --- /dev/null +++ b/100_core/src_200_io/gplx/ios/Io_url_obj_ref.java @@ -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 . +*/ +package gplx.ios; import gplx.*; +public class Io_url_obj_ref { + public Io_url Val() {return val;} public Io_url_obj_ref Val_(Io_url v) {val = v; return this;} private Io_url val; + public String Val_as_str() {return val.Raw();} + @Override public String toString() {return val.Raw();} + @Override public int hashCode() {return val.hashCode();} + @Override public boolean equals(Object obj) {return String_.Eq(val.Raw(), ((Io_url_obj_ref)obj).val.Raw());} + public static Io_url_obj_ref new_(Io_url val) { + Io_url_obj_ref rv = new Io_url_obj_ref(); + rv.val = val; + return rv; + } Io_url_obj_ref() {} +} diff --git a/100_core/src_210_env/gplx/ProcessAdp.java b/100_core/src_210_env/gplx/ProcessAdp.java index a8be39ad7..22602ef36 100644 --- a/100_core/src_210_env/gplx/ProcessAdp.java +++ b/100_core/src_210_env/gplx/ProcessAdp.java @@ -93,14 +93,14 @@ public class ProcessAdp implements GfoInvkAble, RlsAble { } static final String Invk_cmd = "cmd", Invk_cmd_ = "cmd_", Invk_args = "args", Invk_args_ = "args_", Invk_cmd_args_ = "cmd_args_", Invk_enabled = "enabled", Invk_enabled_ = "enabled_", Invk_mode_ = "mode_", Invk_timeout_ = "timeout_", Invk_tmp_dir_ = "tmp_dir_", Invk_owner = "owner"; Bry_fmtr_eval_mgr cmd_url_eval; - public static ProcessAdp ini_(GfoInvkAble owner, Gfo_usr_dlg gui_wtr, ProcessAdp process, Bry_fmtr_eval_mgr cmd_url_eval, byte run_mode, int timeout, String cmd_url_fmt, String args_fmt, String... args_keys) { + public static ProcessAdp ini_(GfoInvkAble owner, Gfo_usr_dlg usr_dlg, ProcessAdp process, Bry_fmtr_eval_mgr cmd_url_eval, byte run_mode, int timeout, String cmd_url_fmt, String args_fmt, String... args_keys) { process.Run_mode_(run_mode).Thread_timeout_seconds_(timeout); process.cmd_url_eval = cmd_url_eval; Io_url cmd_url = Bry_fmtr_eval_mgr_.Eval_url(cmd_url_eval, Bry_.new_utf8_(cmd_url_fmt)); process.Exe_url_(cmd_url).Tmp_dir_(cmd_url.OwnerDir()); process.Args_fmtr().Fmt_(args_fmt).Keys_(args_keys); process.owner = owner; - process.Prog_dlg_(gui_wtr); + process.Prog_dlg_(usr_dlg); return process; // return process for chaining } public static String Escape_ampersands_if_process_is_cmd(boolean os_is_wnt, String exe_url, String exe_args) { diff --git a/140_dbs/.classpath b/140_dbs/.classpath index f51172064..50c3a49f4 100644 --- a/140_dbs/.classpath +++ b/140_dbs/.classpath @@ -1,13 +1,6 @@ - - - - - - - diff --git a/140_dbs/src/gplx/dbs/Db_cmd_mode.java b/140_dbs/src/gplx/dbs/Db_cmd_mode.java new file mode 100644 index 000000000..4e6d11132 --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_cmd_mode.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.dbs; import gplx.*; +public class Db_cmd_mode { + Db_cmd_mode(int val) {this.val = val;} + public int Val() {return val;} int val; + public Db_cmd_mode MarkUpdated() {return this == Retrieved ? Updated : this;} // Created/Deleted noops + public boolean Modified() {return this == Created || this == Updated;} + public static final byte Tid_create = 1, Tid_update = 2, Tid_delete = 3, Tid_ignore = 4; + public static final Db_cmd_mode + Created = new Db_cmd_mode(Tid_create) + , Updated = new Db_cmd_mode(Tid_update) + , Deleted = new Db_cmd_mode(Tid_delete) + , Retrieved = new Db_cmd_mode(Tid_ignore) + ; + public static byte To_update(byte cur) { + switch (cur) { + case Tid_create: // ignore update if item is already marked for create + case Tid_delete: // ignore update if item is already marked for delete (might want to throw error) + return cur; + case Tid_ignore: // must mark for update + case Tid_update: // return self + return Tid_update; + default: throw Err_.unhandled(cur); + } + } +} diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java index ce1438cf9..b5a6d0c32 100644 --- a/140_dbs/src/gplx/dbs/Db_conn.java +++ b/140_dbs/src/gplx/dbs/Db_conn.java @@ -16,36 +16,39 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.engines.*; import gplx.dbs.qrys.*; public class Db_conn { private final Db_engine engine; - private final ListAdp itm_list = ListAdp_.new_(); + private final ListAdp rls_list = ListAdp_.new_(); public Db_conn(Db_engine engine) { this.engine = engine; - this.txn_mgr = new Db_txn_mgr_base(engine); + this.txn_mgr = new Db_txn_mgr(engine); } public Db_url Url() {return engine.Url();} public Db_txn_mgr Txn_mgr() {return txn_mgr;} private final Db_txn_mgr txn_mgr; - public Db_stmt New_stmt_insert(String tbl, Db_meta_fld_list flds) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, flds.To_str_ary()));} - public Db_stmt New_stmt_insert(String tbl, String... cols) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, cols));} - public Db_stmt New_stmt_update(String tbl, String[] where, String... cols) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, cols));} - public Db_stmt New_stmt_delete(String tbl, String... where) {return engine.New_stmt_prep(Db_qry_delete.new_(tbl, where));} - public Db_stmt New_stmt_select_all_where(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols));} - public Db_stmt New_stmt_select_all_where(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary()));} - public Db_stmt New_stmt_update_by_meta(String tbl, Db_meta_fld_list flds, String... where) { - return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, flds.To_str_ary_exclude(where))); + public Db_stmt Stmt_insert(String tbl, Db_meta_fld_list flds) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, flds.To_str_ary()));} + public Db_stmt Stmt_insert(String tbl, String... cols) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, cols));} + public Db_stmt Stmt_update(String tbl, String[] where, String... cols) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, cols));} + public Db_stmt Stmt_update_exclude(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, flds.To_str_ary_exclude(where)));} + public Db_stmt Stmt_delete(String tbl, String... where) {return engine.New_stmt_prep(Db_qry_delete.new_(tbl, where));} + public Db_stmt Stmt_select(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols));} + public Db_stmt Stmt_select(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary()));} + public void Exec_create_tbl_and_idx(Db_meta_tbl meta) { + engine.Exec_create_tbl(meta); + engine.Exec_create_idx(Gfo_usr_dlg_.Null, meta.Idxs()); } - public void Itms_add(Db_conn_itm itm) {itm_list.Add(itm);} - public void Itms_del(Db_conn_itm itm) {itm_list.Del(itm);} + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_create_idx(usr_dlg, idxs);} + public Db_stmt Rls_reg(Db_stmt stmt) {rls_list.Add(stmt); return stmt;} public void Conn_term() { - int len = itm_list.Count(); + int len = rls_list.Count(); for (int i = 0; i < len; ++i) { - Db_conn_itm itm = (Db_conn_itm)itm_list.FetchAt(i); - itm.Conn_term(); + RlsAble itm = (RlsAble)rls_list.FetchAt(i); + itm.Rls(); } engine.Conn_term(); - Db_conn_pool_old._.Del(this.Url()); // remove from pool, else rls'd instance will be cached and fail upon next use +// Db_conn_pool.I.Del(this.Url()); // remove from pool, else rls'd instance will be cached and fail upon next use } - public Db_stmt New_stmt(Db_qry qry) {return engine.New_stmt_prep(qry);} + public Db_stmt Stmt_new(Db_qry qry) {return engine.New_stmt_prep(qry);} public int Exec_qry(Db_qry qry) {txn_mgr.Txn_count_(txn_mgr.Txn_count() + 1); return Int_.cast_(engine.Exec_as_obj(qry));} public DataRdr Exec_qry_as_rdr(Db_qry qry) {return DataRdr_.cast_(engine.Exec_as_obj(qry));} public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));} diff --git a/140_dbs/src/gplx/dbs/Db_conn_.java b/140_dbs/src/gplx/dbs/Db_conn_.java index 15599b6ec..18cdf86b1 100644 --- a/140_dbs/src/gplx/dbs/Db_conn_.java +++ b/140_dbs/src/gplx/dbs/Db_conn_.java @@ -16,19 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.qrys.*; public class Db_conn_ { - public static final Db_conn Null = new_and_open_(Db_url_.Null); - public static Db_conn new_and_open_(Db_url url) { - Db_engine prototype = Db_engine_regy._.Get(url.Tid()); - Db_engine engine = prototype.New_clone(url); - engine.Conn_open(); // auto-open - return new Db_conn(engine); - } - public static Db_conn Reg_itm(Db_conn_itm itm, Db_conn old_conn, Db_conn new_conn) { - if (old_conn != null) old_conn.Itms_del(itm); - new_conn.Itms_add(itm); - return new_conn; - } + public static final Db_conn Null = Db_conn_pool.I.Get_or_new(Db_url_.Null); public static int Select_fld0_as_int_or(Db_conn p, String sql, int or) { DataRdr rdr = DataRdr_.Null; try { diff --git a/140_dbs/src/gplx/dbs/Db_conn_pool_old.java b/140_dbs/src/gplx/dbs/Db_conn_bldr.java similarity index 50% rename from 140_dbs/src/gplx/dbs/Db_conn_pool_old.java rename to 140_dbs/src/gplx/dbs/Db_conn_bldr.java index 077a96877..56c888d49 100644 --- a/140_dbs/src/gplx/dbs/Db_conn_pool_old.java +++ b/140_dbs/src/gplx/dbs/Db_conn_bldr.java @@ -16,25 +16,16 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -public class Db_conn_pool_old { - private final OrderedHash hash = OrderedHash_.new_(); - public Db_conn Get_or_new(Db_url url) {return Get_or_new(url.Xto_raw());} - public Db_conn Get_or_new(String raw) { - Db_conn rv = (Db_conn)hash.Fetch(raw); - if (rv == null) { - rv = Db_conn_.new_and_open_(Db_url_.parse_(raw)); - hash.Add(raw, rv); - } - return rv; +public class Db_conn_bldr { + private Db_conn_bldr_wkr wkr; + public void Reg_default_sqlite() {wkr = Db_conn_bldr_wkr__sqlite.I; wkr.Clear_for_tests();} + public void Reg_default_mem() {wkr = Db_conn_bldr_wkr__mem.I; wkr.Clear_for_tests();} + public Db_conn Get(String type, Object url_obj) {return wkr.Get(type, url_obj);} + public Db_conn New(String type, Object url_obj) {return wkr.New(type, url_obj);} + public Db_conn_bldr_data Get_or_new(String type, Object url_obj) { + boolean exists = wkr.Exists(type, url_obj); + Db_conn conn = exists ? Get(type, url_obj) : New(type, url_obj); + return new Db_conn_bldr_data(conn, exists); } - public void Del(Db_url url) {hash.Del(url.Xto_raw());} - public void Clear() { - int len = hash.Count(); - for (int i = 0; i < len; i++) { - Db_conn conn = (Db_conn)hash.FetchAt(0); - conn.Conn_term(); - } - hash.Clear(); - } - public static final Db_conn_pool_old _ = new Db_conn_pool_old(); Db_conn_pool_old() {} + public static final Db_conn_bldr I = new Db_conn_bldr(); Db_conn_bldr() {} } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl_.java b/140_dbs/src/gplx/dbs/Db_conn_bldr_data.java similarity index 67% rename from 400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl_.java rename to 140_dbs/src/gplx/dbs/Db_conn_bldr_data.java index 14f17c261..05d6e68fe 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl_.java +++ b/140_dbs/src/gplx/dbs/Db_conn_bldr_data.java @@ -15,8 +15,10 @@ 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.fsdb; import gplx.*; -public class Fsdb_cfg_tbl_ { - public static Fsdb_cfg_tbl new_sql_() {return new Fsdb_cfg_tbl_sql();} - public static Fsdb_cfg_tbl new_mem_() {return new Fsdb_cfg_tbl_mem();} +package gplx.dbs; import gplx.*; +public class Db_conn_bldr_data { + public Db_conn_bldr_data(Db_conn conn, boolean exists) {this.conn = conn; this.exists = exists;} + public Db_conn Conn() {return conn;} private final Db_conn conn; + public boolean Exists() {return exists;} private final boolean exists; + public boolean Created() {return !exists;} } diff --git a/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java b/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java new file mode 100644 index 000000000..2d150c393 --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_conn_bldr_wkr.java @@ -0,0 +1,68 @@ +/* +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.dbs; import gplx.*; +import gplx.dbs.engines.sqlite.*; +public interface Db_conn_bldr_wkr { + void Clear_for_tests(); + boolean Exists(String type, Object url_obj); + Db_conn Get(String type, Object url_obj); + Db_conn New(String type, Object url_obj); +} +class Db_conn_bldr_wkr__sqlite implements Db_conn_bldr_wkr { + public void Clear_for_tests() {} + public boolean Exists(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; return Io_mgr._.ExistsFil(io_url); + } + public Db_conn Get(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; if (!Io_mgr._.ExistsFil(io_url)) return null; + Db_url db_url = Db_url_.sqlite_(io_url); + return Db_conn_pool.I.Get_or_new(db_url); + } + public Db_conn New(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; + Io_mgr._.CreateDirIfAbsent(io_url.OwnerDir()); // must assert that dir exists + Db_url db_url = Sqlite_url.make_(io_url); + Db_conn conn = Db_conn_pool.I.Get_or_new(db_url); + Sqlite_engine_.Pragma_page_size(conn, 4096); + // conn.Conn_term(); // close conn after PRAGMA adjusted + return conn; + } + public static final Db_conn_bldr_wkr__sqlite I = new Db_conn_bldr_wkr__sqlite(); Db_conn_bldr_wkr__sqlite() {} +} +class Db_conn_bldr_wkr__mem implements Db_conn_bldr_wkr { + private final HashAdp hash = HashAdp_.new_(); + public void Clear_for_tests() {hash.Clear(); Db_conn_pool.I.Clear();} + public boolean Exists(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; + String io_url_str = io_url.Xto_api(); + return hash.Has(io_url_str); + } + public Db_conn Get(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; + String io_url_str = io_url.Xto_api(); + if (!hash.Has(io_url_str)) return null; + return Db_conn_pool.I.Get_or_new__mem(io_url.Xto_api()); + } + public Db_conn New(String type, Object url_obj) { + Io_url io_url = (Io_url)url_obj; + String io_url_str = io_url.Xto_api(); + hash.Add(io_url_str, io_url_str); + return Db_conn_pool.I.Get_or_new__mem(io_url.Xto_api()); + } + public static final Db_conn_bldr_wkr__mem I = new Db_conn_bldr_wkr__mem(); Db_conn_bldr_wkr__mem() {} +} diff --git a/140_dbs/src/gplx/dbs/Db_conn_mkr.java b/140_dbs/src/gplx/dbs/Db_conn_mkr.java deleted file mode 100644 index e4ea428c5..000000000 --- a/140_dbs/src/gplx/dbs/Db_conn_mkr.java +++ /dev/null @@ -1,35 +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.dbs; import gplx.*; -import gplx.core.primitives.*; -public interface Db_conn_mkr { - Db_conn Load_or_make_(Io_url db_url, Bool_obj_ref created_ref); -} -class Db_conn_mkr_sqlite implements Db_conn_mkr { - public Db_conn Load_or_make_(Io_url db_url, Bool_obj_ref created_ref) {return Sqlite_engine_.Conn_load_or_make_(db_url, created_ref);} - public static final Db_conn_mkr_sqlite _ = new Db_conn_mkr_sqlite(); Db_conn_mkr_sqlite() {} -} -class Db_conn_mkr_mem implements Db_conn_mkr { - private boolean create; - public Db_conn Load_or_make_(Io_url db_url, Bool_obj_ref create_ref) {create_ref.Val_(create); return null;} - public static Db_conn_mkr_mem create_(boolean create) { - Db_conn_mkr_mem rv = new Db_conn_mkr_mem(); - rv.create = create; - return rv; - } -} diff --git a/140_dbs/src/gplx/dbs/Db_conn_pool.java b/140_dbs/src/gplx/dbs/Db_conn_pool.java index e48c3d5c7..0be514532 100644 --- a/140_dbs/src/gplx/dbs/Db_conn_pool.java +++ b/140_dbs/src/gplx/dbs/Db_conn_pool.java @@ -16,11 +16,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -import gplx.dbs.engines.mems.*; +import gplx.dbs.engines.*; import gplx.dbs.engines.nulls.*; import gplx.dbs.engines.mems.*; import gplx.dbs.engines.tdbs.*; +import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.mysql.*; import gplx.dbs.engines.postgres.*; public class Db_conn_pool { - private final HashAdp conn_hash = HashAdp_.new_(); private final HashAdp engine_hash = HashAdp_.new_(); - Db_conn_pool() {this.Init();} - public Db_conn Get_or_new__sqlite(Io_url url) {return Get_or_new(Db_url_.sqlite_(url));} + private final HashAdp conn_hash = HashAdp_.new_(); private final HashAdp engine_hash = HashAdp_.new_(); + public void Clear() {conn_hash.Clear();} + public void Del(Db_url url) {conn_hash.Del(url.Xto_api());} + public Db_conn Get_or_new__mem(String db) {return Get_or_new(Db_url__mem.new_(db));} + public Db_conn Get_or_new__sqlite(Io_url url) {return Get_or_new(Db_url_.sqlite_(url));} + public Db_conn Get_or_new(String s) {return Get_or_new(Db_url_.parse_(s));} public Db_conn Get_or_new(Db_url url) { Db_conn rv = (Db_conn)conn_hash.Fetch(url.Xto_api()); if (rv == null) { @@ -31,19 +35,12 @@ public class Db_conn_pool { } return rv; } - public Db_conn Set_mem(String db, Db_meta_tbl... tbls) { - Db_url url = Db_url__mem.new_(db); - Db_engine__mem engine = new Db_engine__mem(url, tbls); - Db_conn conn = new Db_conn(engine); - conn_hash.AddReplace(url.Xto_api(), conn); - return conn; - } - private void Init() { - this.Engines__add(Db_engine_null._, TdbEngine._, Mysql_engine._, Postgres_engine._, Sqlite_engine._, Db_engine__mem._); - } public void Engines__add(Db_engine... ary) { for (Db_engine itm : ary) engine_hash.Add(itm.Tid(), itm); } - public static final Db_conn_pool I = new Db_conn_pool(); + public static final Db_conn_pool I = new Db_conn_pool(); Db_conn_pool() {this.Init();} + private void Init() { + this.Engines__add(Null_engine._, TdbEngine._, Mysql_engine._, Postgres_engine._, Sqlite_engine._, Db_engine__mem._); + } } diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_crt_.java b/140_dbs/src/gplx/dbs/Db_crt_.java similarity index 87% rename from 140_dbs/src_130_misc/gplx/dbs/Db_crt_.java rename to 140_dbs/src/gplx/dbs/Db_crt_.java index c75f5c542..df0947118 100644 --- a/140_dbs/src_130_misc/gplx/dbs/Db_crt_.java +++ b/140_dbs/src/gplx/dbs/Db_crt_.java @@ -37,11 +37,20 @@ public class Db_crt_ { Criteria crt = Db_crt_.eq_(ary[i], null); rv = (i == 0)? crt : Criteria_.And(rv, crt); } -// if (rv == null) return Wildcard; -// return rv.Tid() == Criteria_.Tid_wrapper ? (Criteria_fld)rv : Criteria_fld.new_(Criteria_fld.Key_null, rv); return rv; } -// public static Criteria_fld and(Criteria and) {return Criteria_fld.new_(Criteria_fld.Key_null, and);} + public static Criteria eq_many_wo_null(String... ary) { + Criteria rv = null; + int len = ary.length; + int crt_idx = 0; + for (int i = 0; i < len; i++) { + String itm = ary[i]; if (itm == Db_meta_fld.Key_null) continue; + Criteria crt = Db_crt_.eq_(itm, null); + rv = (crt_idx == 0) ? crt : Criteria_.And(rv, crt); + ++crt_idx; + } + return rv; + } public static Criteria eq_many_(KeyVal... array) { Criteria rv = null; for (int i = 0; i < array.length; i++) { diff --git a/140_dbs/tst/gplx/dbs/Db_crt_tst.java b/140_dbs/src/gplx/dbs/Db_crt_tst.java similarity index 100% rename from 140_dbs/tst/gplx/dbs/Db_crt_tst.java rename to 140_dbs/src/gplx/dbs/Db_crt_tst.java diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_idx_itm.java b/140_dbs/src/gplx/dbs/Db_idx_itm.java similarity index 100% rename from 140_dbs/src_130_misc/gplx/dbs/Db_idx_itm.java rename to 140_dbs/src/gplx/dbs/Db_idx_itm.java diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld.java b/140_dbs/src/gplx/dbs/Db_meta_fld.java index b7576ab06..861aafc72 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_fld.java +++ b/140_dbs/src/gplx/dbs/Db_meta_fld.java @@ -29,4 +29,5 @@ public class Db_meta_fld { public boolean Autoincrement() {return autoincrement;} private final boolean autoincrement; 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; public static final String[] Ary_empy = String_.Ary_empty; + public static final String Key_null = null; } diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java index 58ae6411c..c033d5e07 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java +++ b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java @@ -19,26 +19,24 @@ package gplx.dbs; import gplx.*; public class Db_meta_fld_list { private final OrderedHash flds = OrderedHash_.new_(); private final ListAdp keys = ListAdp_.new_(); + public void Clear() {flds.Clear(); keys.Clear();} public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Fetch(name);} public String[] To_str_ary() {if (str_ary == null) str_ary = (String[])keys.Xto_ary(String.class); return str_ary;} private String[] str_ary; public Db_meta_fld[] To_fld_ary() {if (fld_ary == null) fld_ary = (Db_meta_fld[])flds.Xto_ary(Db_meta_fld.class); return fld_ary;} private Db_meta_fld[] fld_ary; public String[] To_str_ary_exclude(String[] ary) { + HashAdp ary_hash = HashAdp_.new_(); ListAdp rv = ListAdp_.new_(); int ary_len = ary.length; + for (int i = 0; i < ary_len; ++i) { + String ary_itm = ary[i]; + ary_hash.Add(ary_itm, ary_itm); + } int fld_len = flds.Count(); for (int i = 0; i < fld_len; ++i) { Db_meta_fld fld = (Db_meta_fld)flds.FetchAt(i); String fld_key = fld.Name(); - boolean include = true; - for (int j = 0; j < ary_len; ++j) { - String itm_key = ary[j]; - if (String_.Eq(fld_key, itm_key)) { - include = false; - break; - } - if (include) - rv.Add(itm_key); - } + if (ary_hash.Has(fld_key)) continue; + rv.Add(fld_key); } return rv.XtoStrAry(); } diff --git a/140_dbs/src/gplx/dbs/Db_meta_idx.java b/140_dbs/src/gplx/dbs/Db_meta_idx.java index cbf017289..6e81ef1ea 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_idx.java +++ b/140_dbs/src/gplx/dbs/Db_meta_idx.java @@ -16,12 +16,19 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.sqls.*; public class Db_meta_idx { - public Db_meta_idx(String tbl, String name, boolean unique, String[] flds) {this.tbl = tbl; this.name = name; this.unique = unique; this.flds = flds;} + Db_meta_idx(String tbl, String name, boolean unique, String[] flds) {this.tbl = tbl; this.name = name; this.unique = unique; this.flds = flds;} + public String Tbl() {return tbl;} private final String tbl; public String Name() {return name;} private final String name; public boolean Unique() {return unique;} private final boolean unique; public String[] Flds() {return flds;} private final String[] flds; - public String Tbl() {return tbl;} private final String tbl; - public static Db_meta_idx new_unique(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, name, Bool_.Y, flds);} - public static Db_meta_idx new_normal(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, name, Bool_.N, flds);} + public String To_sql_create() {return Db_sqlbldr__sqlite.I.Bld_create_idx(this);} + public static Db_meta_idx new_unique_by_name(String tbl, String idx_name, String... flds) {return new Db_meta_idx(tbl, idx_name, Bool_.Y, flds);} + public static Db_meta_idx new_normal_by_name(String tbl, String idx_name, String... flds) {return new Db_meta_idx(tbl, idx_name, Bool_.N, flds);} + public static Db_meta_idx new_unique_by_tbl(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.Y, flds);} + public static Db_meta_idx new_normal_by_tbl(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.N, flds);} + public static Db_meta_idx new_unique_by_tbl_wo_null(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.Y, String_.Ary_wo_null(flds));} + public static Db_meta_idx new_normal_by_tbl_wo_null(String tbl, String name, String... flds) {return new Db_meta_idx(tbl, Bld_idx_name(tbl, name), Bool_.N, String_.Ary_wo_null(flds));} + public static String Bld_idx_name(String tbl, String suffix) {return String_.Concat(tbl, "__", suffix);} } diff --git a/140_dbs/src/gplx/dbs/Db_meta_tbl.java b/140_dbs/src/gplx/dbs/Db_meta_tbl.java index dc001a23a..7ae542650 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_tbl.java +++ b/140_dbs/src/gplx/dbs/Db_meta_tbl.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.sqls.*; public class Db_meta_tbl { public Db_meta_tbl(String name, Db_meta_fld[] flds, Db_meta_idx[] idxs) { this.name = name; this.flds = flds; this.idxs = idxs; @@ -23,6 +24,7 @@ public class Db_meta_tbl { public String Name() {return name;} private final String name; public Db_meta_fld[] Flds() {return flds;} private final Db_meta_fld[] flds; public Db_meta_idx[] Idxs() {return idxs;} private final Db_meta_idx[] idxs; + public String To_sql_create() {return Db_sqlbldr__sqlite.I.Bld_create_tbl(this);} public static Db_meta_tbl new_(String name, Db_meta_fld_list flds, Db_meta_idx... idxs) {return new Db_meta_tbl(name, flds.To_fld_ary(), idxs);} public static Db_meta_tbl new_(String name, Db_meta_fld[] flds, Db_meta_idx... idxs) {return new Db_meta_tbl(name, flds, idxs);} public static Db_meta_tbl new_(String name, Db_meta_fld... flds) {return new Db_meta_tbl(name, flds, null);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry.java b/140_dbs/src/gplx/dbs/Db_qry.java similarity index 100% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry.java rename to 140_dbs/src/gplx/dbs/Db_qry.java diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java b/140_dbs/src/gplx/dbs/Db_qry_.java similarity index 96% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java rename to 140_dbs/src/gplx/dbs/Db_qry_.java index 073b1614a..bfd273211 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java +++ b/140_dbs/src/gplx/dbs/Db_qry_.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -import gplx.core.criterias.*; +import gplx.core.criterias.*; import gplx.dbs.qrys.*; public class Db_qry_ { public static Db_qry_select select_cols_(String tbl, Criteria crt, String... cols){return select_().From_(tbl).Where_(crt).Cols_(cols);} public static Db_qry_select select_val_(String tbl, String col, Criteria crt) {return select_().From_(tbl).Where_(crt).Cols_(col);} diff --git a/140_dbs/src/gplx/dbs/Db_rdr__basic.java b/140_dbs/src/gplx/dbs/Db_rdr__basic.java index 5e333e9c1..0765b523f 100644 --- a/140_dbs/src/gplx/dbs/Db_rdr__basic.java +++ b/140_dbs/src/gplx/dbs/Db_rdr__basic.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; import java.sql.ResultSet; -class Db_rdr__basic implements Db_rdr { +public class Db_rdr__basic implements Db_rdr { protected ResultSet rdr; public void Ctor(ResultSet rdr, String sql) {this.rdr = rdr; this.sql = sql;} public String Sql() {return sql;} private String sql; @@ -25,25 +25,25 @@ class Db_rdr__basic implements Db_rdr { try {return rdr.next();} catch (Exception e) {throw Err_.new_fmt_("move_next failed; check column casting error in SQL: err={0} sql={1}", Err_.Message_lang(e), sql);} } - public byte[] Read_bry(int i) {try {return rdr.getBytes(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bry_.Cls_val_name, Err_.Message_lang(e));}} - public byte[] Read_bry(String k) {try {return (byte[])rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bry_.Cls_val_name, Err_.Message_lang(e));}} - public byte[] Read_bry_by_str(int i) {try {return Bry_.new_utf8_(rdr.getString(i + 1));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}} - public byte[] Read_bry_by_str(String k) {try {return Bry_.new_utf8_((String)rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}} - public String Read_str(int i) {try {return rdr.getString(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}} - public String Read_str(String k) {try {return (String)rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}} - public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561(Read_str(i));} - public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561(Read_str(k));} - public int Read_int(int i) {try {return rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Int_.Cls_val_name, Err_.Message_lang(e));}} - public int Read_int(String k) {try {return Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Int_.Cls_val_name, Err_.Message_lang(e));}} - public long Read_long(int i) {try {return rdr.getLong(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Long_.Cls_val_name, Err_.Message_lang(e));}} - public long Read_long(String k) {try {return Long_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Long_.Cls_val_name, Err_.Message_lang(e));}} - public float Read_float(int i) {try {return rdr.getFloat(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Float_.Cls_val_name, Err_.Message_lang(e));}} - public float Read_float(String k) {try {return Float_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Float_.Cls_val_name, Err_.Message_lang(e));}} - public double Read_double(int i) {try {return rdr.getDouble(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Double_.Cls_val_name, Err_.Message_lang(e));}} - public double Read_double(String k) {try {return Double_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Double_.Cls_val_name, Err_.Message_lang(e));}} - @gplx.Virtual public byte Read_byte(int i) {try {return rdr.getByte(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_val_name, Err_.Message_lang(e));}} - @gplx.Virtual public byte Read_byte(String k) {try {return Byte_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}} - public boolean Read_bool_by_byte(int i) {try {return rdr.getByte(i + 1) == 1;} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bool_.Cls_val_name, Err_.Message_lang(e));}} - public boolean Read_bool_by_byte(String k) {try {return Byte_.cast_(rdr.getObject(k)) == 1;} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bool_.Cls_val_name, Err_.Message_lang(e));}} - public void Rls() {try {rdr.close();} catch (Exception e) {throw Err_.new_("close failed: err={0}", Err_.Message_lang(e));}} + @gplx.Virtual public byte[] Read_bry(int i) {try {return rdr.getBytes(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bry_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public byte[] Read_bry(String k) {try {return (byte[])rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bry_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public byte[] Read_bry_by_str(int i) {try {return Bry_.new_utf8_(rdr.getString(i + 1));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public byte[] Read_bry_by_str(String k) {try {return Bry_.new_utf8_((String)rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public String Read_str(int i) {try {return rdr.getString(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public String Read_str(String k) {try {return (String)rdr.getObject(k);} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, String_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561(Read_str(i));} + @gplx.Virtual public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561(Read_str(k));} + @gplx.Virtual public int Read_int(int i) {try {return rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Int_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public int Read_int(String k) {try {return Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Int_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public long Read_long(int i) {try {return rdr.getLong(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Long_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public long Read_long(String k) {try {return Long_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Long_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public float Read_float(int i) {try {return rdr.getFloat(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Float_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public float Read_float(String k) {try {return Float_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Float_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public double Read_double(int i) {try {return rdr.getDouble(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Double_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public double Read_double(String k) {try {return Double_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Double_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public byte Read_byte(int i) {try {return rdr.getByte(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public byte Read_byte(String k) {try {return Byte_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public boolean Read_bool_by_byte(int i) {try {return rdr.getByte(i + 1) == 1;} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bool_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public boolean Read_bool_by_byte(String k) {try {return Byte_.cast_(rdr.getObject(k)) == 1;} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Bool_.Cls_val_name, Err_.Message_lang(e));}} + @gplx.Virtual public void Rls() {try {rdr.close();} catch (Exception e) {throw Err_.new_("close failed: err={0}", Err_.Message_lang(e));}} } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java b/140_dbs/src/gplx/dbs/Db_stmt.java similarity index 94% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java rename to 140_dbs/src/gplx/dbs/Db_stmt.java index 0b842e39a..45eeac3aa 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java +++ b/140_dbs/src/gplx/dbs/Db_stmt.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.engines.*; public interface Db_stmt extends RlsAble { Db_stmt Crt_bool_as_byte(String k, boolean v); Db_stmt Val_bool_as_byte(String k, boolean v); @@ -54,6 +55,7 @@ public interface Db_stmt extends RlsAble { DataRdr Exec_select(); Db_rdr Exec_select_as_rdr(); Object Exec_select_val(); + void Ctor_stmt(Db_engine engine, Db_qry qry); Db_stmt Clear(); Db_stmt Reset_stmt(); } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java b/140_dbs/src/gplx/dbs/Db_stmt_.java similarity index 87% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java rename to 140_dbs/src/gplx/dbs/Db_stmt_.java index 04a126b81..783ea3d1d 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java +++ b/140_dbs/src/gplx/dbs/Db_stmt_.java @@ -16,36 +16,37 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.qrys.*; public class Db_stmt_ { public static final Db_stmt Null = new Db_stmt_sql(); public static Db_stmt new_insert_(Db_conn conn, String tbl, String... flds) { Db_qry qry = Db_qry_insert.new_(tbl, flds); - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_update_(Db_conn conn, String tbl, String[] where, String... flds) { Db_qry qry = Db_qry_update.new_(tbl, where, flds); - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_delete_(Db_conn conn, String tbl, String... where) { Db_qry_delete qry = Db_qry_.delete_(tbl, Db_crt_.eq_many_(where)); - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_select_(Db_conn conn, String tbl, String[] where, String... flds) { Db_qry_select qry = Db_qry_.select_cols_(tbl, Db_crt_.eq_many_(where), flds); - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_select_in_(Db_conn conn, String tbl, String in_fld, Object[] in_vals, String... flds) { Db_qry_select qry = Db_qry_.select_cols_(tbl, Db_crt_.in_(in_fld, in_vals), flds).OrderBy_asc_(in_fld); - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_select_all_(Db_conn conn, String tbl) { - return conn.New_stmt(Db_qry_.select_tbl_(tbl)); + return conn.Stmt_new(Db_qry_.select_tbl_(tbl)); } public static Db_stmt new_select_as_rdr(Db_conn conn, Db_qry__select_in_tbl qry) { - return conn.New_stmt(qry); + return conn.Stmt_new(qry); } public static Db_stmt new_select_as_rdr(Db_conn conn, String sql) { - return conn.New_stmt(Db_qry_sql.rdr_(sql)); + return conn.Stmt_new(Db_qry_sql.rdr_(sql)); } public static Err err_(Exception e, Db_stmt stmt, String proc) { throw Err_.err_(e, String_.Format("db stmt failed: proc=~{0} err=~{1}", proc, Err_.Message_gplx_brief(e))); diff --git a/140_dbs/src/gplx/dbs/Db_stmt_bldr.java b/140_dbs/src/gplx/dbs/Db_stmt_bldr.java new file mode 100644 index 000000000..bd000fa37 --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_stmt_bldr.java @@ -0,0 +1,48 @@ +/* +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.dbs; import gplx.*; +public class Db_stmt_bldr { + private Db_conn conn; private Db_stmt create, update, delete; + private String tbl_name; private String[] flds_keys, flds_vals, flds_all; + public void Conn_(Db_conn v, String tbl_name, Db_meta_fld_list flds, String... flds_keys) { + Conn_(v, tbl_name, flds.To_str_ary(), flds.To_str_ary_exclude(flds_keys), flds_keys); + } + public void Conn_(Db_conn v, String tbl_name, String[] flds_vals, String... flds_keys) { + Conn_(v, tbl_name, String_.Ary_add(flds_keys, flds_vals), flds_vals, flds_keys); + } + private void Conn_(Db_conn v, String tbl_name, String[] flds_all, String[] flds_vals, String... flds_keys) { + this.conn = v; this.tbl_name = tbl_name; + this.flds_all = flds_all; this.flds_vals = flds_vals; this.flds_keys = flds_keys; + } + public Db_stmt Get(byte cmd_mode) { + switch (cmd_mode) { + case Db_cmd_mode.Tid_create: if (create == null) create = conn.Stmt_insert(tbl_name, flds_all); return create; + case Db_cmd_mode.Tid_update: if (update == null) update = conn.Stmt_update(tbl_name, flds_keys, flds_vals); return update; + case Db_cmd_mode.Tid_delete: if (delete == null) delete = conn.Stmt_delete(tbl_name, flds_keys); return delete; + case Db_cmd_mode.Tid_ignore: return Db_stmt_.Null; + default: throw Err_.unhandled(cmd_mode); + } + } + public void Batch_bgn() {conn.Txn_mgr().Txn_bgn_if_none();} + public void Batch_end() {conn.Txn_mgr().Txn_end_all();} + public void Rls() { + create = Db_stmt_.Rls(create); + update = Db_stmt_.Rls(update); + delete = Db_stmt_.Rls(delete); + } +} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_txn_mgr.java b/140_dbs/src/gplx/dbs/Db_txn_mgr.java similarity index 77% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_txn_mgr.java rename to 140_dbs/src/gplx/dbs/Db_txn_mgr.java index 5d3bf545e..0ec437c0e 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_txn_mgr.java +++ b/140_dbs/src/gplx/dbs/Db_txn_mgr.java @@ -16,17 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -public interface Db_txn_mgr { - int Txn_depth(); - void Txn_bgn_if_none(); - void Txn_bgn(); - void Txn_end(); - void Txn_end_all(); - void Txn_end_all_bgn_if_none(); - int Txn_count(); void Txn_count_(int v); -} -class Db_txn_mgr_base implements Db_txn_mgr { - public Db_txn_mgr_base(Db_engine engine) {this.engine = engine;} private final Db_engine engine; +import gplx.dbs.engines.*; +public class Db_txn_mgr { + public Db_txn_mgr(Db_engine engine) {this.engine = engine;} private final Db_engine engine; public int Txn_depth() {return txn_depth;} int txn_depth; // NOTE: only support 1 level for now; public void Txn_bgn_if_none() {if (txn_depth == 0) this.Txn_bgn();} public void Txn_bgn() { diff --git a/140_dbs/src/gplx/dbs/Db_url.java b/140_dbs/src/gplx/dbs/Db_url.java index f5494be78..133ec5309 100644 --- a/140_dbs/src/gplx/dbs/Db_url.java +++ b/140_dbs/src/gplx/dbs/Db_url.java @@ -18,78 +18,8 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; public interface Db_url { String Tid(); + String Database(); String Xto_raw(); String Xto_api(); Db_url New_self(String raw, GfoMsg m); } -class Db_url__null extends Db_url__base { - @Override public String Tid() {return Tid_const;} public static final String Tid_const = "null_db"; - @Override public Db_url New_self(String raw, GfoMsg m) {return this;} - public static final Db_url__null _ = new Db_url__null(); Db_url__null() {this.Ctor("", "", "gplx_key=null_db", "");} -} -class Db_url__mysql extends Db_url__base { - @Override public String Tid() {return Tid_const;} public static final String Tid_const = "mysql"; - public String Uid() {return uid;} private String uid; - public String Pwd() {return pwd;} private String pwd; - public static Db_url new_(String server, String database, String uid, String pwd) { - return Db_url_.parse_(Bld_raw - ( "gplx_key", Tid_const - , "server", server - , "database", database - , "uid", uid - , "pwd", pwd - , "charset", "utf8" - )); - } - @Override public Db_url New_self(String raw, GfoMsg m) { - Db_url__mysql rv = new Db_url__mysql(); - rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("charset", "utf8"))); - rv.uid = m.ReadStr("uid"); - rv.pwd = m.ReadStr("pwd"); - return rv; - } - public static final Db_url__mysql _ = new Db_url__mysql(); Db_url__mysql() {} -} -class Db_url__postgres extends Db_url__base { - @Override public String Tid() {return Tid_const;} public static final String Tid_const = "postgresql"; - public String Uid() {return uid;} private String uid; - public String Pwd() {return pwd;} private String pwd; - public static Db_url new_(String server, String database, String uid, String pwd) { - return Db_url_.parse_(Bld_raw - ( "gplx_key", Tid_const - , "server", server - , "database", database - , "port", "5432" - , "user id", uid - , "password", pwd - , "encoding", "unicode" // needed for 1.1 conn; otherwise, ascii - )); - } - @Override public Db_url New_self(String raw, GfoMsg m) { - Db_url__postgres rv = new Db_url__postgres(); - rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("encoding", "unicode"))); - rv.uid = m.ReadStr("user id"); - rv.pwd = m.ReadStr("password"); - return rv; - } - public static final Db_url__postgres _ = new Db_url__postgres(); Db_url__postgres() {} -} -class Db_url__tdb extends Db_url__base { - public Io_url Url() {return url;} Io_url url; - @Override public String Tid() {return Tid_const;} public static final String Tid_const = "tdb"; - public static Db_url new_(Io_url url) { - return Db_url_.parse_(Bld_raw - ( "gplx_key", Tid_const - , "url", url.Raw() - )); - } Db_url__tdb() {} - @Override public Db_url New_self(String raw, GfoMsg m) { - Db_url__tdb rv = new Db_url__tdb(); - String urlStr = m.ReadStr("url"); - Io_url url = Io_url_.new_any_(urlStr); - rv.Ctor(urlStr, url.NameOnly(), raw, BldApi(m)); - rv.url = url; - return rv; - } - public static final Db_url__tdb _ = new Db_url__tdb(); -} diff --git a/140_dbs/src/gplx/dbs/Db_url_.java b/140_dbs/src/gplx/dbs/Db_url_.java index 242051b43..a835d7e6b 100644 --- a/140_dbs/src/gplx/dbs/Db_url_.java +++ b/140_dbs/src/gplx/dbs/Db_url_.java @@ -16,20 +16,21 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -import gplx.dbs.engines.mems.*; import gplx.dbs.engines.sqlite.*; +import gplx.dbs.engines.nulls.*; import gplx.dbs.engines.mems.*; import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.tdbs.*; +import gplx.dbs.engines.mysql.*; import gplx.dbs.engines.postgres.*; public class Db_url_ { - public static final Db_url Null = Db_url__null._; - public static final Db_url Test = Db_url__mysql.new_("127.0.0.1", "unit_tests", "root", "mysql7760"); + public static final Db_url Null = Null_url._; + public static final Db_url Test = Mysql_url.new_("127.0.0.1", "unit_tests", "root", "mysql7760"); public static Db_url parse_(String raw) {return Db_url_pool._.Parse(raw);} - public static Db_url sqlite_(Io_url url) {return Db_url__sqlite.load_(url);} - public static Db_url tdb_(Io_url url) {return Db_url__tdb.new_(url);} + public static Db_url sqlite_(Io_url url) {return Sqlite_url.load_(url);} + public static Db_url tdb_(Io_url url) {return Tdb_url.new_(url);} public static Db_url mem_(String db) {return Db_url__mem.new_(db);} - public static final String Key_tdb = Db_url__tdb.Tid_const; + public static final String Key_tdb = Tdb_url.Tid_const; } class Db_url_pool { private OrderedHash regy = OrderedHash_.new_(); public Db_url_pool() { - this.Add(Db_url__null._).Add(Db_url__tdb._).Add(Db_url__mysql._).Add(Db_url__postgres._).Add(Db_url__sqlite._); + this.Add(Null_url._).Add(Tdb_url._).Add(Mysql_url._).Add(Postgres_url._).Add(Sqlite_url._); this.Add(Db_url__mem.I); } public Db_url_pool Add(Db_url itm) {regy.AddReplace(itm.Tid(), itm); return this;} diff --git a/140_dbs/src/gplx/dbs/Db_url__base.java b/140_dbs/src/gplx/dbs/Db_url__base.java index e6c196730..b4a5b7770 100644 --- a/140_dbs/src/gplx/dbs/Db_url__base.java +++ b/140_dbs/src/gplx/dbs/Db_url__base.java @@ -21,7 +21,7 @@ public abstract class Db_url__base implements Db_url { public abstract String Tid(); public String Xto_raw() {return raw;} private String raw = ""; public String Xto_api() {return api;} private String api = ""; - public String Database() {return database;} private String database = ""; + public String Database() {return database;} protected String database = ""; public String Server() {return server;} private String server = ""; public abstract Db_url New_self(String raw, GfoMsg m); protected void Ctor(String server, String database, String raw, String api) {this.server = server; this.database = database; this.raw = raw; this.api = api;} diff --git a/140_dbs/src/gplx/dbs/Sql_join_itm.java b/140_dbs/src/gplx/dbs/Sql_join_itm.java deleted file mode 100644 index df727fd3a..000000000 --- a/140_dbs/src/gplx/dbs/Sql_join_itm.java +++ /dev/null @@ -1,67 +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.dbs; import gplx.*; -import gplx.core.strings.*; -public class Sql_join_itm { - public String SrcTbl() {return srcTbl;} public Sql_join_itm SrcTbl_(String v) {srcTbl = v; return this;} private String srcTbl; - public String SrcFld() {return srcFld;} public Sql_join_itm SrcFld_(String v) {srcFld = v; return this;} private String srcFld; - public String TrgFld() {return trgFld;} public Sql_join_itm TrgFld_(String v) {trgFld = v; return this;} private String trgFld; - public String TrgFldOrSrcFld() {return trgFld == null ? srcFld : trgFld;} - public static Sql_join_itm new_(String trgFld, String srcTbl, String srcFld) { - Sql_join_itm rv = new Sql_join_itm(); - rv.trgFld = trgFld; rv.srcTbl = srcTbl; rv.srcFld = srcFld; - return rv; - } Sql_join_itm() {} - public static Sql_join_itm same_(String tbl, String fld) { - Sql_join_itm rv = new Sql_join_itm(); - rv.trgFld = fld; rv.srcTbl = tbl; rv.srcFld = fld; - return rv; - } -} -class Sql_from { - public ListAdp Tbls() {return tbls;} ListAdp tbls = ListAdp_.new_(); - public Sql_tbl_src BaseTable() {return (Sql_tbl_src)tbls.FetchAt(0);} - public static Sql_from new_(Sql_tbl_src baseTable) { - Sql_from rv = new Sql_from(); - rv.tbls.Add(baseTable); - return rv; - } Sql_from() {} -} -class Sql_tbl_src { - public Sql_join_itmType JoinType() {return type;} public Sql_tbl_src JoinType_(Sql_join_itmType v) {this.type = v; return this;} Sql_join_itmType type = Sql_join_itmType.Inner; - public ListAdp JoinLinks() {return joinLinks;} ListAdp joinLinks = ListAdp_.new_(); - public String TblName() {return tblName;} public Sql_tbl_src TblName_(String s) {tblName = s; return this;} private String tblName; - public String Alias() {return alias;} public Sql_tbl_src Alias_(String s) {alias = s; return this;} private String alias; - public void XtoSql(String_bldr sb) { - sb.Add_many(tblName, alias == null ? "" : " " + alias); - } - public static Sql_tbl_src new_() {return new Sql_tbl_src();} Sql_tbl_src() {} -} -class Sql_join_itmType { - public int Val() {return val;} int val; - public String Name() {return name;} private String name; - Sql_join_itmType(int v, String name) {this.val = v; this.name = name;} - public static final Sql_join_itmType - From = new Sql_join_itmType(0, "FROM") - , Inner = new Sql_join_itmType(1, "INNER JOIN") - , Left = new Sql_join_itmType(2, "LEFT JOIN") - , Right = new Sql_join_itmType(3, "RIGHT JOIN") - , Outer = new Sql_join_itmType(4, "OUTER JOIN") - , Cross = new Sql_join_itmType(5, "CROSS JOIN") - ; -} diff --git a/140_dbs/src/gplx/dbs/Sql_select.java b/140_dbs/src/gplx/dbs/Sql_select.java deleted file mode 100644 index ac26cc858..000000000 --- a/140_dbs/src/gplx/dbs/Sql_select.java +++ /dev/null @@ -1,153 +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.dbs; import gplx.*; -import gplx.core.strings.*; -class Sql_select { - public Sql_select_fld_list Flds() {return flds;} Sql_select_fld_list flds = Sql_select_fld_list.new_(); - public boolean Distinct() {return distinct;} public void Distinct_set(boolean v) {distinct = v;} private boolean distinct; - public void Add(String fldName) {flds.Add(Sql_select_fld_fld.new_(Sql_select_fld_base.Tbl_null, fldName, fldName));} - public void Add(String fldName, String alias) {flds.Add(Sql_select_fld_fld.new_(Sql_select_fld_base.Tbl_null, fldName, alias));} - public void Add(Sql_select_fld_base fld) {flds.Add(fld);} - - public static final Sql_select All = all_(); static Sql_select all_() {Sql_select rv = new_(); rv.Add(Sql_select_fld_wild._); return rv;} - public static Sql_select new_() {return new Sql_select();} Sql_select() {} -} -abstract class Sql_select_fld_base { - public String Tbl() {return tbl;} public void Tbl_set(String val) {tbl = val;} private String tbl; - public String Fld() {return fld;} public void Fld_set(String val) {fld = val;} private String fld; - public String Alias() {return alias;} public void Alias_set(String val) {alias = val;} private String alias; - public ClassXtn ValType() {return valType;} public void ValType_set(ClassXtn val) {valType = val;} ClassXtn valType = ObjectClassXtn._; - public abstract Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type); - @gplx.Virtual public void GroupBy_type(GfoFld fld) {this.ValType_set(fld.Type());} - @gplx.Virtual public boolean Type_fld() {return true;} - public abstract String XtoSql(); - public static final String Tbl_null = null; - @gplx.Internal protected void ctor_(String tbl, String fld, String alias) { - Tbl_set(tbl); Fld_set(fld); Alias_set(alias); - } -} -class Sql_select_fld_wild extends Sql_select_fld_base { - @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) {throw Err_.new_("group by eval not allowed on *");} - @Override public void GroupBy_type(GfoFld fld) {throw Err_.new_("group by type not allowed on *");} - @Override public String XtoSql() {return "*";} - public static final Sql_select_fld_wild _ = new Sql_select_fld_wild(); Sql_select_fld_wild() {this.ctor_(Tbl_null, "*", "*");} -} -class Sql_select_fld_fld extends Sql_select_fld_base { - @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) {return curVal;} - @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(fld.Type());} - @Override public String XtoSql() { - String rv = Fld(); - if (Tbl() != Tbl_null) - rv = Tbl() + "." + Fld(); - if (!String_.Eq(Alias(), Fld())) - rv = rv + " AS " + Alias(); - return rv; - } - public static Sql_select_fld_fld new_(String tbl, String fld, String alias) { - Sql_select_fld_fld rv = new Sql_select_fld_fld(); - rv.ctor_(tbl, fld, alias); - return rv; - } Sql_select_fld_fld() {} -} -abstract class Sql_select_fld_func_base extends Sql_select_fld_base { - public abstract String XtoSql_functionName(); - @Override public boolean Type_fld() {return false;} - @Override public String XtoSql() { - return String_.Format("{0}({1}) AS {2}", XtoSql_functionName(), Fld(), Alias()); - } -} -class Sql_select_fld_count extends Sql_select_fld_func_base { - @Override public String XtoSql_functionName() {return "COUNT";} - @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(IntClassXtn._);} - @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { - if (groupByVal == null) return 1; - return Int_.cast_(groupByVal) + 1; - } - public static Sql_select_fld_count new_(String tbl, String fld, String alias) { - Sql_select_fld_count rv = new Sql_select_fld_count(); - rv.ctor_(tbl, fld, alias); - return rv; - } Sql_select_fld_count() {} -} -class Sql_select_fld_sum extends Sql_select_fld_func_base { - @Override public String XtoSql_functionName() {return "SUM";} - @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(IntClassXtn._);} - @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { - if (groupByVal == null) return Int_.cast_(curVal); - return Int_.cast_(groupByVal) + Int_.cast_(curVal); - } - public static Sql_select_fld_sum new_(String tbl, String fld, String alias) { - Sql_select_fld_sum rv = new Sql_select_fld_sum(); - rv.ctor_(tbl, fld, alias); - return rv; - } Sql_select_fld_sum() {} -} -class Sql_select_fld_minMax extends Sql_select_fld_func_base { - int compareType = CompareAble_.Less; - @Override public String XtoSql_functionName() {return compareType == CompareAble_.Less ? "MIN" : "MAX";} - @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { - if (groupByVal == null) return curVal; - int compareVal = CompareAble_.Compare_obj(curVal, groupByVal); - return compareVal * compareType > 0 ? curVal : groupByVal; - } - public static Sql_select_fld_minMax min_(String tbl, String fld, String alias) {return new_(CompareAble_.Less, tbl, fld, alias);} - public static Sql_select_fld_minMax max_(String tbl, String fld, String alias) {return new_(CompareAble_.More, tbl, fld, alias);} - static Sql_select_fld_minMax new_(int compareType, String tbl, String fld, String alias) { - Sql_select_fld_minMax rv = new Sql_select_fld_minMax(); - rv.compareType = compareType; - rv.ctor_(tbl, fld, alias); - return rv; - } Sql_select_fld_minMax() {} -} -class Sql_select_fld_list { - public int Count() {return hash.Count();} - public void Add(Sql_select_fld_base fld) {hash.Add(fld.Alias(), fld);} - public Sql_select_fld_base FetchAt(int i) {return (Sql_select_fld_base)hash.FetchAt(i);} - public Sql_select_fld_base FetchOrNull(String k) {return (Sql_select_fld_base)hash.Fetch(k);} - public GfoFldList XtoGfoFldLst(TdbTable tbl) { - GfoFldList rv = GfoFldList_.new_(); - for (int i = 0; i < this.Count(); i++) { - Sql_select_fld_base selectFld = this.FetchAt(i); - GfoFld fld = tbl.Flds().FetchOrNull(selectFld.Fld()); - if (fld == null) throw Err_.new_("fld not found in tbl").Add("fldName", selectFld.Fld()).Add("tblName", tbl.Name()).Add("tblFlds", tbl.Flds().XtoStr()); - if (rv.Has(selectFld.Alias())) throw Err_.new_("alias is not unique").Add("fldName", selectFld.Fld()).Add("flds", rv.XtoStr()); - selectFld.GroupBy_type(fld); - rv.Add(selectFld.Alias(), selectFld.ValType()); - } - return rv; - } - public String[] To_str_ary() { - int len = this.Count(); - String[] rv = new String[len]; - for (int i = 0; i < len; i++) { - Sql_select_fld_base fld = this.FetchAt(i); - rv[i] = fld.Fld(); - } - return rv; - } - public String XtoStr() { - String_bldr sb = String_bldr_.new_(); - for (int i = 0; i < this.Count(); i++) { - Sql_select_fld_base fld = this.FetchAt(i); - sb.Add_fmt("{0},{1}|", fld.Fld(), fld.Alias()); - } - return sb.XtoStr(); - } - OrderedHash hash = OrderedHash_.new_(); - public static Sql_select_fld_list new_() {return new Sql_select_fld_list();} Sql_select_fld_list() {} -} diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine.java b/140_dbs/src/gplx/dbs/engines/Db_engine.java new file mode 100644 index 000000000..0b7d5bb35 --- /dev/null +++ b/140_dbs/src/gplx/dbs/engines/Db_engine.java @@ -0,0 +1,34 @@ +/* +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.dbs.engines; import gplx.*; import gplx.dbs.*; +public interface Db_engine { + String Tid(); + Db_url Url(); + Db_engine New_clone(Db_url url); + Db_rdr New_rdr_by_obj(Object o, String sql); // Object o:ResultSet if desktop; Cursor if android + Db_stmt New_stmt_prep(Db_qry qry); + Object New_stmt_prep_as_obj(String sql); + DataRdr New_rdr(java.sql.ResultSet rdr, String sql); + void Txn_bgn(); + void Txn_end(); + void Conn_open(); + void Conn_term(); + Object Exec_as_obj(Db_qry qry); + void Exec_create_tbl(Db_meta_tbl meta); + void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary); +} diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java similarity index 82% rename from 140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java rename to 140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java index d9137ad00..fd2abf666 100644 --- a/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java +++ b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java @@ -15,20 +15,20 @@ 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.dbs; import gplx.*; +package gplx.dbs.engines; import gplx.*; import gplx.dbs.*; import java.sql.*; -import gplx.dbs.sqls.*; -abstract class Db_engine_sql_base implements Db_engine { +import gplx.dbs.engines.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; +public abstract class Db_engine_sql_base implements Db_engine { @gplx.Internal protected void Ctor(Db_url url) {this.url = url;} public abstract String Tid(); public Db_url Url() {return url;} protected Db_url url; public abstract Db_engine New_clone(Db_url url); public Db_rdr New_rdr_by_obj(Object rdr, String sql) { - Db_rdr__basic rv = New_rdr_clone(); + Db_rdr__basic rv = (Db_rdr__basic)New_rdr_clone(); rv.Ctor((ResultSet)rdr, sql); return rv; } - @gplx.Virtual public Db_rdr__basic New_rdr_clone() {return new Db_rdr__basic();} + @gplx.Virtual public Db_rdr New_rdr_clone() {return new Db_rdr__basic();} public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt_cmd(this, qry);} public void Txn_bgn() {Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));} public void Txn_end() {Exec_as_obj(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));} @@ -53,6 +53,15 @@ abstract class Db_engine_sql_base implements Db_engine { } catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));} } + public void Exec_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());} + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) { + int len = ary.length; + for (int i = 0; i < len; ++i) { + Db_meta_idx idx = ary[i]; + usr_dlg.Plog_many("", "", "db.idx.create; db=~{0} idx=~{1}", url.Database(), idx.Name()); + Exec_as_int(idx.To_sql_create()); + } + } @gplx.Virtual public DataRdr New_rdr(ResultSet rdr, String sql) {return gplx.stores.Db_data_rdr_.new_(rdr, sql);} @gplx.Virtual public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_ansi();} @gplx.Internal protected abstract Connection Conn_new(); diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java index 8409aed45..6171c99f4 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java @@ -18,20 +18,12 @@ along with this program. If not, see . package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; public class Db_engine__mem implements Db_engine { private final HashAdp tbl_hash = HashAdp_.new_(); - public Db_engine__mem(Db_url url, Db_meta_tbl[] meta_tbls) { - this.url = url; - int tbls_len = meta_tbls.length; - for (int i = 0; i < tbls_len; ++i) { - Db_meta_tbl meta_tbl = meta_tbls[i]; - Mem_tbl tbl = new Mem_tbl(); - tbl_hash.Add(meta_tbl.Name(), tbl); - } - } + Db_engine__mem(Db_url url) {this.url = url;} public String Tid() {return Db_url__mem.Tid_const;} public Db_url Url() {return url;} private Db_url url; - public Db_engine New_clone(Db_url url) {return this;} + public Db_engine New_clone(Db_url url) {return new Db_engine__mem(url);} public Db_stmt New_stmt_prep(Db_qry qry) {return new Db_stmt__mem(this, qry);} - public Mem_tbl Tbls_get(String name) {return (Mem_tbl)tbl_hash.Fetch(name);} + public Mem_tbl Tbls_get(String name) {return (Mem_tbl)tbl_hash.Fetch(name);} public void Txn_bgn() {++txn_count;} private int txn_count = 0; public void Txn_end() {--txn_count;} public Object Exec_as_obj(Db_qry qry) {throw Err_.not_implemented_();} @@ -42,5 +34,10 @@ public class Db_engine__mem implements Db_engine { public Db_rdr New_rdr_by_obj(Object rdr, String sql) {throw Err_.not_implemented_();} public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {throw Err_.not_implemented_();} public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();} + public void Exec_create_tbl(Db_meta_tbl meta) { + Mem_tbl mem_tbl = new Mem_tbl(); + tbl_hash.AddReplace(meta.Name(), mem_tbl); + } + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {} } diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java index 378f22020..4c5d8991e 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Db_rdr__mem.java @@ -18,13 +18,9 @@ along with this program. If not, see . package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; public class Db_rdr__mem implements Db_rdr { private final Mem_itm[] rows; private int row_idx = -1; private final int rows_len; - private final HashAdp ords = HashAdp_.new_(); private Mem_itm row; public Db_rdr__mem(String[] cols, Mem_itm[] rows) { this.rows = rows; this.rows_len = rows.length; - int cols_len = cols.length; - for (int i = 0; i < cols_len; ++i) - ords.Add(cols[i], i); } public boolean Move_next() { boolean rv = ++row_idx < rows_len; @@ -33,25 +29,24 @@ public class Db_rdr__mem implements Db_rdr { return rv; } public byte[] Read_bry(int i) {return (byte[])row.Get_at(i);} - public byte[] Read_bry(String k) {return (byte[])row.Get_at(Ord_by_key(k));} + public byte[] Read_bry(String k) {return (byte[])row.Get_by(k);} public String Read_str(int i) {return (String)row.Get_at(i);} - public String Read_str(String k) {return (String)row.Get_at(Ord_by_key(k));} - public byte[] Read_bry_by_str(int i) {return Bry_.new_utf8_((String)row.Get_at(i));} - public byte[] Read_bry_by_str(String k) {return Bry_.new_utf8_((String)row.Get_at(Ord_by_key(k)));} + public String Read_str(String k) {return (String)row.Get_by(k);} + public byte[] Read_bry_by_str(int i) {return Bry_.new_utf8__null((String)row.Get_at(i));} // NOTE: null b/c db can have NULL + public byte[] Read_bry_by_str(String k) {return Bry_.new_utf8__null((String)row.Get_by(k));} // NOTE: null b/c db can have NULL public DateAdp Read_date_by_str(int i) {return DateAdp_.parse_iso8561((String)row.Get_at(i));} - public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561((String)row.Get_at(Ord_by_key(k)));} + public DateAdp Read_date_by_str(String k) {return DateAdp_.parse_iso8561((String)row.Get_by(k));} public byte Read_byte(int i) {return Byte_.cast_(row.Get_at(i));} - public byte Read_byte(String k) {return Byte_.cast_(row.Get_at(Ord_by_key(k)));} + public byte Read_byte(String k) {return Byte_.cast_(row.Get_by(k));} public int Read_int(int i) {return Int_.cast_(row.Get_at(i));} - public int Read_int(String k) {return Int_.cast_(row.Get_at(Ord_by_key(k)));} + public int Read_int(String k) {return Int_.cast_(row.Get_by(k));} public long Read_long(int i) {return Long_.cast_(row.Get_at(i));} - public long Read_long(String k) {return Long_.cast_(row.Get_at(Ord_by_key(k)));} + public long Read_long(String k) {return Long_.cast_(row.Get_by(k));} public float Read_float(int i) {return Float_.cast_(row.Get_at(i));} - public float Read_float(String k) {return Float_.cast_(row.Get_at(Ord_by_key(k)));} + public float Read_float(String k) {return Float_.cast_(row.Get_by(k));} public double Read_double(int i) {return Double_.cast_(row.Get_at(i));} - public double Read_double(String k) {return Double_.cast_(row.Get_at(Ord_by_key(k)));} + public double Read_double(String k) {return Double_.cast_(row.Get_by(k));} public boolean Read_bool_by_byte(int i) {return Byte_.cast_(row.Get_at(i)) == 1;} - public boolean Read_bool_by_byte(String k) {return Byte_.cast_(row.Get_at(Ord_by_key(k))) == 1;} + public boolean Read_bool_by_byte(String k) {return Byte_.cast_(row.Get_by(k)) == 1;} public void Rls() {} - private int Ord_by_key(String k) {return Int_.cast_(ords.Fetch(k));} } diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java index 5b68f4e2d..1811c2b8e 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Db_stmt__mem.java @@ -17,91 +17,90 @@ along with this program. If not, see . */ package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; public class Db_stmt__mem implements Db_stmt { - private final ListAdp val_list = ListAdp_.new_(); private int val_idx; - public Db_stmt__mem(Db_engine__mem engine, Db_qry qry) {this.engine = engine; this.qry = qry;} private Db_engine__mem engine; + private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val( v); + private final ListAdp val_list = ListAdp_.new_(); + public Db_stmt__mem(Db_engine__mem engine, Db_qry qry) {Ctor_stmt(engine, qry);} private Db_engine__mem engine; + public void Ctor_stmt(Db_engine engine, Db_qry qry) {this.engine = (Db_engine__mem)engine; this.qry = qry;} public HashAdp Crts() {return crt_hash;} private final HashAdp crt_hash = HashAdp_.new_(); public int Args_len() {return val_list.Count();} public Object Args_get_at(int i) {return val_list.FetchAt(i);} public Db_qry Qry() {return qry;} private Db_qry qry; public Db_stmt Reset_stmt() {return this;} public Db_stmt Clear() { - val_idx = 0; val_list.Clear(); crt_hash.Clear(); return this; } - public void Rls() { - this.Clear(); - } + public void Rls() {this.Clear();} public Db_stmt Crt_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.Y, k, v);} public Db_stmt Val_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.N, k, v);} - public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, null, v);} + public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, Key_na, v);} private Db_stmt Add_byte_by_bool(boolean where, String k, boolean v) {return Add_byte(where, k, v ? Bool_.Y_byte : Bool_.N_byte);} public Db_stmt Crt_byte(String k, byte v) {return Add_byte(Bool_.Y, k, v);} public Db_stmt Val_byte(String k, byte v) {return Add_byte(Bool_.N, k, v);} - public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, null, v);} + public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, Key_na, v);} private Db_stmt Add_byte(boolean where, String k, byte v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte", v);} return this; } public Db_stmt Crt_int(String k, int v) {return Add_int(Bool_.Y, k, v);} public Db_stmt Val_int(String k, int v) {return Add_int(Bool_.N, k, v);} - public Db_stmt Val_int(int v) {return Add_int(Bool_.N, null, v);} + public Db_stmt Val_int(int v) {return Add_int(Bool_.N, Key_na, v);} private Db_stmt Add_int(boolean where, String k, int v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "int", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "int", v);} return this; } public Db_stmt Crt_long(String k, long v) {return Add_long(Bool_.Y, k, v);} public Db_stmt Val_long(String k, long v) {return Add_long(Bool_.N, k, v);} - public Db_stmt Val_long(long v) {return Add_long(Bool_.N, null, v);} + public Db_stmt Val_long(long v) {return Add_long(Bool_.N, Key_na, v);} private Db_stmt Add_long(boolean where, String k, long v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "long", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "long", v);} return this; } public Db_stmt Crt_float(String k, float v) {return Add_float(Bool_.Y, k, v);} public Db_stmt Val_float(String k, float v) {return Add_float(Bool_.N, k, v);} - public Db_stmt Val_float(float v) {return Add_float(Bool_.N, null, v);} + public Db_stmt Val_float(float v) {return Add_float(Bool_.N, Key_na, v);} private Db_stmt Add_float(boolean where, String k, float v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "float", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "float", v);} return this; } public Db_stmt Crt_double(String k, double v) {return Add_double(Bool_.Y, k, v);} public Db_stmt Val_double(String k, double v) {return Add_double(Bool_.N, k, v);} - public Db_stmt Val_double(double v) {return Add_double(Bool_.N, null, v);} + public Db_stmt Val_double(double v) {return Add_double(Bool_.N, Key_na, v);} private Db_stmt Add_double(boolean where, String k, double v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "double", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "double", v);} return this; } public Db_stmt Crt_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.Y, k, v);} public Db_stmt Val_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.N, k, v);} - public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, null, v);} + public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, Key_na, v);} private Db_stmt Add_decimal(boolean where, String k, DecimalAdp v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", v);} return this; } public Db_stmt Crt_bry(String k, byte[] v) {return Add_bry(Bool_.Y, k, v);} public Db_stmt Val_bry(String k, byte[] v) {return Add_bry(Bool_.N, k, v);} - public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, null, v);} + public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, Key_na, v);} private Db_stmt Add_bry(boolean where, String k, byte[] v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);} return this; } public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);} public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);} - public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, null, v);} + public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);} private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));} public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);} public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);} - public Db_stmt Val_str(String v) {return Add_str(Bool_.N, null, v);} + public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);} private Db_stmt Add_str(boolean where, String k, String v) { - try {Add(++val_idx, k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "String", v);} + try {Add(k, where, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "String", v);} return this; } public Db_stmt Val_rdr_(gplx.ios.Io_stream_rdr v, long rdr_len) { try { Bry_bfr bfr = Bry_bfr.new_(); gplx.ios.Io_stream_rdr_.Load_all_to_bfr(bfr, v); - Add(++val_idx, "", Bool_.N, bfr.Xto_str_and_clear()); + Add("", Bool_.N, bfr.Xto_str_and_clear()); } catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "rdr", v);} return this; } @@ -122,10 +121,9 @@ public class Db_stmt__mem implements Db_stmt { Mem_tbl tbl = engine.Tbls_get(qry.Base_table()); return tbl.Select(this); } - public Object Exec_select_val() { - try {Object rv = Db_qry_select.Rdr_to_val(this.Exec_select()); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec select_val: tbl={0}", qry.Base_table());} - } - private void Add(int idx, String k, boolean where, Object v) { + public Object Exec_select_val() {throw Err_.not_implemented_();} + private void Add(String k, boolean where, Object v) { + if (k == Db_meta_fld.Key_null) return; // key is explicitly null; ignore; allows version_2+ type definitions val_list.Add(v); if (where) { ListAdp list = (ListAdp)crt_hash.Fetch(k); diff --git a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java index 558927b80..b3efa2604 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.engines.mems; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; -import gplx.core.criterias.*; +import gplx.core.criterias.*; import gplx.dbs.qrys.*; public class Mem_tbl { private final ListAdp rows = ListAdp_.new_(); private final ListAdp where_rows = ListAdp_.new_(); public int Insert(Db_stmt__mem stmt) { diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java similarity index 80% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java rename to 140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.java index bb20dbe9e..adc217549 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java +++ b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_engine.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.dbs; import gplx.*; -import gplx.stores.*; import gplx.dbs.sqls.*; +package gplx.dbs.engines.mysql; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.sqls.*; import java.sql.*; -class Mysql_engine extends Db_engine_sql_base { - @Override public String Tid() {return Db_url__mysql.Tid_const;} +public class Mysql_engine extends Db_engine_sql_base { + @Override public String Tid() {return Mysql_url.Tid_const;} @Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();} @Override public Db_engine New_clone(Db_url connectInfo) { Mysql_engine rv = new Mysql_engine(); @@ -28,10 +28,10 @@ class Mysql_engine extends Db_engine_sql_base { } @Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Mysql_rdr.new_(rdr, commandText);} @gplx.Internal @Override protected Connection Conn_new() { - Db_url__mysql url_as_mysql = (Db_url__mysql)url; + Mysql_url url_as_mysql = (Mysql_url)url; return Conn_make_by_url("jdbc:mysql://localhost/" + url_as_mysql.Database() + "?characterEncoding=UTF8", url_as_mysql.Uid(), url_as_mysql.Pwd()); } - @gplx.Internal protected static final Mysql_engine _ = new Mysql_engine(); Mysql_engine() {} + public static final Mysql_engine _ = new Mysql_engine(); Mysql_engine() {} } class Mysql_rdr extends Db_data_rdr { //PATCH:MYSQL:byte actually returned as int by Jdbc ResultSet (or MYSQL impmentation); convert to byte diff --git a/140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java new file mode 100644 index 000000000..ac27421e1 --- /dev/null +++ b/140_dbs/src/gplx/dbs/engines/mysql/Mysql_url.java @@ -0,0 +1,41 @@ +/* +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.dbs.engines.mysql; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +public class Mysql_url extends Db_url__base { + @Override public String Tid() {return Tid_const;} public static final String Tid_const = "mysql"; + public String Uid() {return uid;} private String uid; + public String Pwd() {return pwd;} private String pwd; + public static Db_url new_(String server, String database, String uid, String pwd) { + return Db_url_.parse_(Bld_raw + ( "gplx_key", Tid_const + , "server", server + , "database", database + , "uid", uid + , "pwd", pwd + , "charset", "utf8" + )); + } + @Override public Db_url New_self(String raw, GfoMsg m) { + Mysql_url rv = new Mysql_url(); + rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("charset", "utf8"))); + rv.uid = m.ReadStr("uid"); + rv.pwd = m.ReadStr("pwd"); + return rv; + } + public static final Mysql_url _ = new Mysql_url(); Mysql_url() {} +} diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine.java b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java similarity index 65% rename from 140_dbs/src_200_engine/gplx/dbs/Db_engine.java rename to 140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java index 1689d9b2b..ae2112ac1 100644 --- a/140_dbs/src_200_engine/gplx/dbs/Db_engine.java +++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java @@ -15,23 +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.dbs; import gplx.*; -public interface Db_engine { - String Tid(); - Db_url Url(); - Db_engine New_clone(Db_url url); - Db_rdr New_rdr_by_obj(Object o, String sql); // Object o:ResultSet if desktop; Cursor if android - Db_stmt New_stmt_prep(Db_qry qry); - Object New_stmt_prep_as_obj(String sql); - DataRdr New_rdr(java.sql.ResultSet rdr, String sql); - void Txn_bgn(); - void Txn_end(); - void Conn_open(); - void Conn_term(); - Object Exec_as_obj(Db_qry qry); -} -class Db_engine_null implements Db_engine { - public String Tid() {return Db_url__null.Tid_const;} +package gplx.dbs.engines.nulls; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +public class Null_engine implements Db_engine { + public String Tid() {return Null_url.Tid_const;} public Db_url Url() {return Db_url_.Null;} public void Conn_open() {} public void Conn_term() {} @@ -43,5 +29,7 @@ class Db_engine_null implements Db_engine { public void Txn_bgn() {} public void Txn_end() {} public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;} - public static final Db_engine_null _ = new Db_engine_null(); Db_engine_null() {} + public void Exec_create_tbl(Db_meta_tbl meta) {} + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} + public static final Null_engine _ = new Null_engine(); Null_engine() {} } diff --git a/140_dbs/src/gplx/dbs/engines/nulls/Null_url.java b/140_dbs/src/gplx/dbs/engines/nulls/Null_url.java new file mode 100644 index 000000000..ce99e5120 --- /dev/null +++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_url.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.dbs.engines.nulls; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +public class Null_url extends Db_url__base { + @Override public String Tid() {return Tid_const;} public static final String Tid_const = "null_db"; + @Override public Db_url New_self(String raw, GfoMsg m) {return this;} + public static final Null_url _ = new Null_url(); Null_url() {this.Ctor("", "", "gplx_key=null_db", "");} +} diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java similarity index 74% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java rename to 140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.java index 66577124f..809cfbb81 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java +++ b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_engine.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.dbs; import gplx.*; -import gplx.stores.*; import gplx.dbs.sqls.*; +package gplx.dbs.engines.postgres; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.sqls.*; import java.sql.*; -class Postgres_engine extends Db_engine_sql_base { - @Override public String Tid() {return Db_url__postgres.Tid_const;} +public class Postgres_engine extends Db_engine_sql_base { + @Override public String Tid() {return Postgres_url.Tid_const;} @Override public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_escape_backslash();} @Override public Db_engine New_clone(Db_url connectInfo) { Postgres_engine rv = new Postgres_engine(); @@ -28,8 +28,8 @@ class Postgres_engine extends Db_engine_sql_base { } @Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Db_data_rdr_.new_(rdr, commandText);} @gplx.Internal @Override protected Connection Conn_new() { - Db_url__postgres url_as_postgres = (Db_url__postgres)url; + Postgres_url url_as_postgres = (Postgres_url)url; return Conn_make_by_url("jdbc:" + url_as_postgres.Tid() + "://localhost/" + url_as_postgres.Database(), url_as_postgres.Uid(), url_as_postgres.Pwd()); } - @gplx.Internal protected static final Postgres_engine _ = new Postgres_engine(); Postgres_engine() {} + public static final Postgres_engine _ = new Postgres_engine(); Postgres_engine() {} } diff --git a/140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.java b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.java new file mode 100644 index 000000000..d8663b08c --- /dev/null +++ b/140_dbs/src/gplx/dbs/engines/postgres/Postgres_url.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.dbs.engines.postgres; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +public class Postgres_url extends Db_url__base { + @Override public String Tid() {return Tid_const;} public static final String Tid_const = "postgresql"; + public String Uid() {return uid;} private String uid; + public String Pwd() {return pwd;} private String pwd; + public static Db_url new_(String server, String database, String uid, String pwd) { + return Db_url_.parse_(Bld_raw + ( "gplx_key", Tid_const + , "server", server + , "database", database + , "port", "5432" + , "user id", uid + , "password", pwd + , "encoding", "unicode" // needed for 1.1 conn; otherwise, ascii + )); + } + @Override public Db_url New_self(String raw, GfoMsg m) { + Postgres_url rv = new Postgres_url(); + rv.Ctor(m.ReadStr("server"), m.ReadStr("database"), raw, BldApi(m, KeyVal_.new_("encoding", "unicode"))); + rv.uid = m.ReadStr("user id"); + rv.pwd = m.ReadStr("password"); + return rv; + } + public static final Postgres_url _ = new Postgres_url(); Postgres_url() {} +} diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java similarity index 67% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java rename to 140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java index 19b264a1f..522849993 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java +++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java @@ -15,18 +15,19 @@ 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.dbs; import gplx.*; +package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import java.sql.*; -import gplx.stores.*; import gplx.dbs.engines.sqlite.*; -class Sqlite_engine extends Db_engine_sql_base { - @Override public String Tid() {return Db_url__sqlite.Tid_const;} +import gplx.stores.*; import gplx.dbs.engines.*; import gplx.dbs.engines.sqlite.*; +import gplx.dbs.qrys.*; +public class Sqlite_engine extends Db_engine_sql_base { + @Override public String Tid() {return Sqlite_url.Tid_const;} @Override public Db_engine New_clone(Db_url connectInfo) { Sqlite_engine rv = new Sqlite_engine(); rv.Ctor(connectInfo); return rv; } @Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);} - @Override public Db_rdr__basic New_rdr_clone() {return new Db_rdr__sqlite();} + @Override public Db_rdr New_rdr_clone() {return new Db_rdr__sqlite();} static boolean loaded = false; @gplx.Internal @Override protected Connection Conn_new() { if (!loaded) { @@ -36,8 +37,8 @@ class Sqlite_engine extends Db_engine_sql_base { catch (ClassNotFoundException e) {throw Err_.new_("could not load sqlite jdbc driver");} loaded = true; } - Db_url__sqlite url_as_sqlite = (Db_url__sqlite)url; - return Conn_make_by_url("jdbc:sqlite://" + String_.Replace(url_as_sqlite.Database(), "\\", "/"), "", ""); + Sqlite_url url_as_sqlite = (Sqlite_url)url; + return Conn_make_by_url("jdbc:sqlite://" + String_.Replace(url_as_sqlite.Url().Raw(), "\\", "/"), "", ""); } private boolean pragma_needed = true; @Override public void Txn_bgn() { @@ -53,11 +54,41 @@ class Sqlite_engine extends Db_engine_sql_base { // Execute(Db_qry_sql.xtn_("PRAGMA cache_size=4000;")); // too many will also cause out of memory Exec_as_obj(Db_qry_sql.xtn_("BEGIN TRANSACTION;")); } - @gplx.Internal protected static final Sqlite_engine _ = new Sqlite_engine(); Sqlite_engine() {} + public static final Sqlite_engine _ = new Sqlite_engine(); Sqlite_engine() {} } class Db_rdr__sqlite extends Db_rdr__basic { @Override public byte Read_byte(int i) {try {return (byte)rdr.getInt(i + 1);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_val_name, Err_.Message_lang(e));}} @Override public byte Read_byte(String k) {try {return (byte)Int_.cast_(rdr.getObject(k));} catch (Exception e) {throw Err_.new_("read failed: k={0} type={1} err={2}", k, Byte_.Cls_val_name, Err_.Message_lang(e));}} -} + @Override public boolean Read_bool_by_byte(String k) { + try { + int val = rdr.getInt(k); + return val == 1; + } catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", k, Bool_.Cls_val_name, Err_.Message_lang(e));} + } + @Override public long Read_long(String k) { + try { + long val = rdr.getLong(k); + Number n = (Number)val; + return n.longValue(); + } catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", k, Long_.Cls_val_name, Err_.Message_lang(e));} + } + @Override public float Read_float(String k) { + try { + Double val = (Double)rdr.getDouble(k); + return val == null ? Float.NaN : val.floatValue(); + } catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", k, Float_.Cls_val_name, Err_.Message_lang(e));} + } + @Override public DateAdp Read_date_by_str(String k) { + try { + String val = rdr.getString(k); + return val == null ? null : DateAdp_.parse_fmt(val, "M/dd/yyyy hh:mm tt"); + } catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", k, DateAdp_.Cls_ref_type, Err_.Message_lang(e));} + } +// @Override public DecimalAdp ReadDecimalOr(String key, DecimalAdp or) { +// Object val = Read(key); +// Double d = ((Double)val); +// return val == null ? null : DecimalAdp_.double_(d); +// } + } class Sqlite_rdr extends Db_data_rdr { @Override public float ReadFloat(String key) {return ReadFloatOr(key, Float.NaN);} @Override public float ReadFloatOr(String key, float or) { Object val = Read(key); diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java similarity index 75% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java rename to 140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java index 4c117740f..856719eb2 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java +++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine_.java @@ -15,8 +15,8 @@ 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.dbs; import gplx.*; -import gplx.core.primitives.*; import gplx.dbs.engines.sqlite.*; +package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.core.primitives.*; import gplx.dbs.qrys.*; import gplx.dbs.utls.*; import gplx.dbs.engines.*; import gplx.dbs.engines.sqlite.*; public class Sqlite_engine_ { public static void Db_attach(Db_conn p, String alias, String url) { String s = String_.Format("ATTACH '{0}' AS {1};", url, alias); @@ -50,11 +50,21 @@ public class Sqlite_engine_ { Db_qry qry = Db_qry_sql.ddl_(String_.Format("ALTER TABLE {0} RENAME TO {1};", src, trg)); p.Exec_qry(qry); } - public static void Pragma_page_size_4096(Db_conn p) {Pragma_page_size(p, 4096);} public static void Pragma_page_size(Db_conn p, int val) { Db_qry qry = Db_qry_sql.ddl_("PRAGMA page_size = " + Int_.Xto_str(val) + ";"); p.Exec_qry(qry); } + public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_conn conn, String tbl, Db_meta_idx[] idx_ary) { + conn.Txn_mgr().Txn_end_all(); // commit any pending transactions + int len = idx_ary.length; + for (int i = 0; i < len; ++i) { + Db_meta_idx idx = idx_ary[i]; + String idx_sql = idx.To_sql_create(); + usr_dlg.Plog_many("", "", "creating index: ~{0} ~{1}", tbl, idx_sql); + conn.Exec_qry(Db_qry_sql.ddl_(idx.To_sql_create())); + usr_dlg.Log_many("", "", "index created: ~{0} ~{1}", tbl, idx_sql); + } + } public static void Idx_create(Db_conn p, Db_idx_itm... idxs) {Idx_create(Gfo_usr_dlg_.Null, p, "", idxs);} public static void Idx_create(Gfo_usr_dlg usr_dlg, Db_conn p, String file_id, Db_idx_itm... idxs) { int len = idxs.length; @@ -66,24 +76,16 @@ public class Sqlite_engine_ { usr_dlg.Log_many("", "", "index created: ~{0} ~{1}", file_id, index); } } - public static Db_conn Conn_load_or_fail_(Io_url url) { - boolean exists = Io_mgr._.ExistsFil(url); - if (!exists) throw Err_.new_fmt_("db does not exist; url=~{0}", url.Raw()); - Db_url connect = Db_url__sqlite.load_(url); - return Db_conn_.new_and_open_(connect); - } - public static Db_conn Conn_load_or_make_(Io_url url) {return Conn_load_or_make_(url, Bool_obj_ref.n_());} public static Db_conn Conn_load_or_make_(Io_url url, Bool_obj_ref created) { boolean exists = Io_mgr._.ExistsFil(url); created.Val_(!exists); - Db_url connect = exists ? Db_url__sqlite.load_(url) : Db_url__sqlite.make_(url); - Db_conn p = Db_conn_.new_and_open_(connect); + Db_url connect = exists ? Sqlite_url.load_(url) : Sqlite_url.make_(url); + Db_conn p = Db_conn_pool.I.Get_or_new(connect); if (!exists) Pragma_page_size(p, 4096); return p; } - public static Db_engine New_engine() {return Sqlite_engine._;} - public static final int Stmt_arg_max = 999; // 999 is max number of variables allowed by sqlite + public static final int Stmt_arg_max = 999; // 999 is max number of variables allowed by sqlite public static final boolean Supports_read_binary_stream = false; public static final boolean Supports_indexed_by = true; public static String X_date_to_str(DateAdp v) {return v == Date_null ? "" : v.XtoStr_fmt_iso_8561();} diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Db_url__sqlite.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java similarity index 87% rename from 140_dbs/src/gplx/dbs/engines/sqlite/Db_url__sqlite.java rename to 140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java index ca51af798..a566f787e 100644 --- a/140_dbs/src/gplx/dbs/engines/sqlite/Db_url__sqlite.java +++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_url.java @@ -16,14 +16,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.engines.sqlite; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; -public class Db_url__sqlite extends Db_url__base { +public class Sqlite_url extends Db_url__base { @Override public String Tid() {return Tid_const;} public static final String Tid_const = "sqlite"; public Io_url Url() {return url;} private Io_url url; @Override public Db_url New_self(String raw, GfoMsg m) { - Db_url__sqlite rv = new Db_url__sqlite(); + Sqlite_url rv = new Sqlite_url(); String url = m.ReadStr("data source"); rv.url = Io_url_.new_any_(url); rv.Ctor("", url, raw, BldApi(m, KeyVal_.new_("version", "3"))); + rv.database = rv.url.NameOnly(); return rv; } public static Db_url load_(Io_url url) { @@ -42,5 +43,5 @@ public class Db_url__sqlite extends Db_url__base { )); } - public static final Db_url__sqlite _ = new Db_url__sqlite(); Db_url__sqlite() {} + public static final Sqlite_url _ = new Sqlite_url(); Sqlite_url() {} } \ No newline at end of file diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java similarity index 89% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.java index a4f5c738c..0da565272 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbConnectInfo_tst.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import org.junit.*; public class TdbConnectInfo_tst { @Test public void Full() { @@ -27,6 +27,6 @@ public class TdbConnectInfo_tst { tst_Parse(connectInfo, Io_url_.new_any_("C:\\dir\\xmpl.tdb"), "dsv"); } void tst_Parse(Db_url connectInfo, Io_url url, String format) { - Tfds.Eq(((Db_url__tdb)connectInfo).Url(), url); + Tfds.Eq(((Tdb_url)connectInfo).Url(), url); } } diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.java index 6c428d985..65fd0f33d 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDatabase.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; public class TdbDatabase { public String Name() {return name;} public void Name_set(String v) {name = v;} private String name = "xmpl"; public Io_url DbUrl() {return dbInfo;} Io_url dbInfo; diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr.java similarity index 93% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr.java index bcb150921..28829459a 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; class TdbDbLoadMgr { public TdbDatabase LoadTbls(Io_url dbInfo) { TdbDatabase db = TdbDatabase.new_(dbInfo); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr_tst.java similarity index 95% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr_tst.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr_tst.java index 85a8d8bdf..6e251e902 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbLoadMgr_tst.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbLoadMgr_tst.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import org.junit.*; import gplx.stores.*; /*DsvDataRdr*/ import gplx.stores.dsvs.*; /*DsvDataWtr*/ public class TdbDbLoadMgr_tst { diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr.java similarity index 93% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr.java index ca2c82261..c21585cad 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; class TdbDbSaveMgr { public void SaveDb(TdbDatabase db) { for (Object filObj : db.Files()) { diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr_tst.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr_tst.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr_tst.java index f0b1d23ad..8e4d3cbb3 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDbSaveMgr_tst.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDbSaveMgr_tst.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import org.junit.*; import gplx.stores.dsvs.*; /*DsvDataWtr*/ public class TdbDbSaveMgr_tst { diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDelete.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDelete.java similarity index 88% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbDelete.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbDelete.java index 2b864e140..60b42fc25 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDelete.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbDelete.java @@ -15,9 +15,8 @@ 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.dbs; import gplx.*; -import gplx.core.criterias.*; -import gplx.lists.*; /*GfoNde*/ +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.core.criterias.*; import gplx.lists.*; /*GfoNde*/ import gplx.dbs.qrys.*; class TdbDeleteWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_delete cmd = (Db_qry_delete)cmdObj; diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java similarity index 83% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java index 9ed97ab4f..7f4d13de5 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.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.dbs; import gplx.*; -import gplx.dbs.sqls.*; -class TdbEngine implements Db_engine { - public String Tid() {return Db_url__tdb.Tid_const;} +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; +public class TdbEngine implements Db_engine { + public String Tid() {return Tdb_url.Tid_const;} public Db_url Url() {return url;} private Db_url url; public TdbDatabase Db() {return db;} TdbDatabase db; public void Conn_open() { - Db_url__tdb tdb_url = (Db_url__tdb)url; + Tdb_url tdb_url = (Tdb_url)url; String url_str = tdb_url.Server(); db = loadMgr.LoadTbls(Io_url_.new_any_(url_str)); } @@ -32,6 +32,7 @@ class TdbEngine implements Db_engine { public Db_engine New_clone(Db_url url) { TdbEngine rv = new TdbEngine(); rv.CtorTdbEngine(url); + rv.Conn_open(); return rv; } public Object Exec_as_obj(Db_qry qry) { @@ -53,9 +54,11 @@ class TdbEngine implements Db_engine { public void FlushTbl(TdbTable tbl) { saveMgr.SaveFile(db, tbl.File()); } + public void Exec_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();} + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();} HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_(); - @gplx.Internal protected static final TdbEngine _ = new TdbEngine(); + public static final TdbEngine _ = new TdbEngine(); void CtorTdbEngine(Db_url url) { this.url = url; wkrs.Add(Db_qry_.Tid_select, TdbSelectWkr._); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbFile.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFile.java similarity index 92% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbFile.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbFile.java index b2e5fb0e1..f7cef44a1 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbFile.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFile.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; public class TdbFile { public int Id() {return id;} int id; public Io_url Path() {return url;} Io_url url; diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbFileList.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFileList.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbFileList.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbFileList.java index 1b8d69562..141f7a290 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbFileList.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFileList.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import gplx.lists.*; /*OrderedHash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/ public class TdbFileList extends OrderedHash_base { public TdbFile FetchOrFail(int id) {return TdbFile.as_(FetchOrFail_base(id));} diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush.java similarity index 88% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbFlush.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush.java index 16e20c1ff..75a391b72 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush.java @@ -15,8 +15,8 @@ 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.dbs; import gplx.*; -import gplx.lists.*; /*GfoNde*/ +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.lists.*; /*GfoNde*/ import gplx.dbs.qrys.*; class TdbFlushWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_flush cmd = Db_qry_flush.cast_(cmdObj); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.java index 60492683c..ce40d35ec 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbFlush_tst.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import org.junit.*; -import gplx.ios.*; /*IoMgrFxt*/ +import gplx.ios.*; /*IoMgrFxt*/ import gplx.dbs.qrys.*; public class TdbFlush_tst { @Before public void setup() { Io_mgr._.InitEngine_mem(); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbInsert.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbInsert.java similarity index 92% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbInsert.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbInsert.java index 7f50171c1..d26629db1 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbInsert.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbInsert.java @@ -15,8 +15,8 @@ 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.dbs; import gplx.*; -import gplx.lists.*; import gplx.dbs.sqls.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.lists.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; class TdbInsertWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_insert cmd = (Db_qry_insert)cmdObj; diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbSelect.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbSelect.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java index 18bc33a49..d4afb0e69 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbSelect.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java @@ -15,8 +15,8 @@ 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.dbs; import gplx.*; -import gplx.core.criterias.*; import gplx.dbs.sqls.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.core.criterias.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; import gplx.lists.*; /*ComparerAble*/ import gplx.stores.*; /*GfoNdeRdr*/ class TdbSelectWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbStores.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbStores.java similarity index 92% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbStores.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbStores.java index 6dfd231c1..9c88c3476 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbStores.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbStores.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import gplx.stores.*; import gplx.stores.xmls.*; /*XmlDataRdr*/ import gplx.stores.dsvs.*; /*DsvDataWtr*/ diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbTable.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbTable.java similarity index 95% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbTable.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbTable.java index f6c837faa..d36d7500e 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbTable.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbTable.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import gplx.*; /*GfoNdeList*/ import gplx.stores.*; import gplx.stores.dsvs.*; /*DsvStoreLayout*/ public class TdbTable { public int Id() {return id;} int id; diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbTableList.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbTableList.java similarity index 94% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbTableList.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbTableList.java index 31e3eedd4..3ee24aadd 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbTableList.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbTableList.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.dbs; import gplx.*; +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; import gplx.lists.*; /*OrderedHash_base*/ import gplx.stores.dsvs.*; /*DsvStoreLayout*/ public class TdbTableList extends OrderedHash_base { public TdbTable Fetch(String name) {return TdbTable.as_(Fetch_base(name));} diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbUpdate.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbUpdate.java similarity index 88% rename from 140_dbs/src_400_tdbs/gplx/dbs/TdbUpdate.java rename to 140_dbs/src/gplx/dbs/engines/tdbs/TdbUpdate.java index ad6982526..e3fee5f34 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbUpdate.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbUpdate.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.dbs; import gplx.*; -import gplx.core.criterias.*; -import gplx.lists.*; /*GfoNde*/ +package gplx.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +import gplx.core.criterias.*; import gplx.lists.*; /*GfoNde*/ +import gplx.dbs.qrys.*; class TdbUpdateWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_update cmd = (Db_qry_update)cmdObj; diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java b/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java new file mode 100644 index 000000000..3e5b61187 --- /dev/null +++ b/140_dbs/src/gplx/dbs/engines/tdbs/Tdb_url.java @@ -0,0 +1,37 @@ +/* +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.dbs.engines.tdbs; import gplx.*; import gplx.dbs.*; import gplx.dbs.engines.*; +public class Tdb_url extends Db_url__base { + public Io_url Url() {return url;} Io_url url; + @Override public String Tid() {return Tid_const;} public static final String Tid_const = "tdb"; + public static Db_url new_(Io_url url) { + return Db_url_.parse_(Bld_raw + ( "gplx_key", Tid_const + , "url", url.Raw() + )); + } Tdb_url() {} + @Override public Db_url New_self(String raw, GfoMsg m) { + Tdb_url rv = new Tdb_url(); + String urlStr = m.ReadStr("url"); + Io_url url = Io_url_.new_any_(urlStr); + rv.Ctor(urlStr, url.NameOnly(), raw, BldApi(m)); + rv.url = url; + return rv; + } + public static final Tdb_url _ = new Tdb_url(); +} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_arg.java b/140_dbs/src/gplx/dbs/qrys/Db_arg.java similarity index 88% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_arg.java rename to 140_dbs/src/gplx/dbs/qrys/Db_arg.java index 1e1e677f7..26877ae39 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_arg.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_arg.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; public class Db_arg { - @gplx.Internal protected Db_arg(String key, Object val) {this.key = key; this.val = val;} + public Db_arg(String key, Object val) {this.key = key; this.val = val;} public String Key() {return key;} private String key; public Object Val() {return val;} public void Val_(Object v) {this.val = v;} private Object val; public byte Val_tid() {return val_tid;} public Db_arg Val_tid_(byte v) {val_tid = v; return this;} private byte val_tid = Db_val_type.Tid_null; diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.java b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java similarity index 77% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java index 0a0011db2..556858f6e 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.core.strings.*; import gplx.core.criterias.*; public class Db_qry__select_in_tbl implements Db_qry { public Db_qry__select_in_tbl(String base_table, String[] select_flds, String[] where_flds, String group_by_sql, String having_sql, String order_by_sql, String limit_sql) { @@ -42,24 +42,26 @@ public class Db_qry__select_in_tbl implements Db_qry { public String Limit_sql() {return limit_sql;} private final String limit_sql; public String XtoSql() {return Xto_sql();} public String Xto_sql() { - String_bldr sb = String_bldr_.new_(); - sb.Add("SELECT "); - int select_flds_len = select_flds.length; - for (int i = 0; i < select_flds_len; ++i) { - if (i != 0) sb.Add(","); - sb.Add(select_flds[i]); + synchronized (this) { + String_bldr sb = String_bldr_.new_(); + sb.Add("SELECT "); + int select_flds_len = select_flds.length; + for (int i = 0; i < select_flds_len; ++i) { + if (i != 0) sb.Add(","); + sb.Add(select_flds[i]); + } + sb.Add(" FROM ").Add(base_table); + if (where_flds != null && where_flds.length != 0) {sb.Add(" WHERE "); Where_sql(sb);} + if (group_by_sql != null) sb.Add(group_by_sql); + if (having_sql != null) sb.Add(having_sql); + if (order_by_sql != null) {sb.Add(" ORDER BY "); sb.Add(order_by_sql);} + if (limit_sql != null) sb.Add(limit_sql); + return sb.XtoStr(); } - sb.Add(" FROM ").Add(base_table); - if (where_flds != null && where_flds.length != 0) {sb.Add(" WHERE "); Where_sql(sb);} - if (group_by_sql != null) sb.Add(group_by_sql); - if (having_sql != null) sb.Add(having_sql); - if (order_by_sql != null) {sb.Add(" ORDER BY "); sb.Add(order_by_sql);} - if (limit_sql != null) sb.Add(limit_sql); - return sb.XtoStr(); } public static Db_qry__select_in_tbl new_(String base_table, String[] where_flds, String[] select_flds) { Db_qry__select_in_tbl rv = new Db_qry__select_in_tbl(base_table, select_flds, where_flds, null, null, null, null); - rv.where = Db_crt_.eq_many_(where_flds); + rv.where = where_flds.length == 0 ? Db_crt_.Wildcard : Db_crt_.eq_many_(where_flds); return rv; } public static Db_qry__select_in_tbl as_(Object obj) {return obj instanceof Db_qry__select_in_tbl ? (Db_qry__select_in_tbl)obj : null;} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_arg_owner.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_arg_owner.java similarity index 94% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_arg_owner.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_arg_owner.java index bdd23619f..6f286ab4b 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_arg_owner.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_arg_owner.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; public interface Db_qry_arg_owner extends Db_qry { Db_qry_arg_owner From_(String tbl); Db_qry_arg_owner Key_arg_(String k, int v); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_delete.java similarity index 95% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_delete.java index e211aebde..e62b97867 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_delete.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; import gplx.dbs.sqls.*; public class Db_qry_delete implements Db_qry { Db_qry_delete(String base_table, Criteria where) {this.base_table = base_table; this.where = where;} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_dml_tst.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_dml_tst.java similarity index 95% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_dml_tst.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_dml_tst.java index 2a05d8bdd..daa8e6755 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_dml_tst.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_dml_tst.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.core.criterias.*; public class Db_qry_dml_tst { diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_flush.java similarity index 90% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_flush.java index 0d4771b17..743df5284 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_flush.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.dbs.sqls.*; public class Db_qry_flush implements Db_qry { public int Tid() {return Db_qry_.Tid_flush;} @@ -24,7 +24,7 @@ public class Db_qry_flush implements Db_qry { public String Xto_sql() {return Sql_qry_wtr_.I.Xto_str(this, false);} public int Exec_qry(Db_conn conn) {return conn.Exec_qry(this);} - @gplx.Internal protected String[] TableNames() {return tableNames;} private String[] tableNames; + public String[] TableNames() {return tableNames;} private String[] tableNames; public static Db_qry_flush as_(Object obj) {return obj instanceof Db_qry_flush ? (Db_qry_flush)obj : null;} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java similarity index 92% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java index 2bc9ce5c7..765eaa073 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.dbs.sqls.*; public class Db_qry_insert implements Db_qry_arg_owner { public Db_qry_insert(String base_table) {this.base_table = base_table;} @@ -37,6 +37,7 @@ public class Db_qry_insert implements Db_qry_arg_owner { public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_utf8_(v), Db_val_type.Tid_varchar);} public Db_qry_arg_owner Arg_obj_(String k, Object v) {return Arg_obj_type_(k, v, Db_val_type.Tid_null);} public Db_qry_arg_owner Arg_obj_type_(String key, Object val, byte val_tid) { + if (key == Db_meta_fld.Key_null) return this; Db_arg arg = new Db_arg(key, val).Val_tid_(val_tid); args.Add(arg.Key(), arg); return this; @@ -48,10 +49,10 @@ public class Db_qry_insert implements Db_qry_arg_owner { public Db_qry_insert Cols_(String... ary) { if (cols == null) cols = Sql_select_fld_list.new_(); for (String fld : ary) - cols.Add(Sql_select_fld_fld.new_(Sql_select_fld_base.Tbl_null, fld, fld)); + cols.Add(Sql_select_fld_.new_fld(Sql_select_fld_base.Tbl_null, fld, fld)); return this; } - @gplx.Internal protected Sql_select_fld_list Cols() {return cols;} private Sql_select_fld_list cols; + public Sql_select_fld_list Cols() {return cols;} private Sql_select_fld_list cols; public static Db_qry_insert new_() {return new Db_qry_insert();} Db_qry_insert() {} public static Db_qry_insert new_(String tbl, String... keys) { diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_select.java similarity index 82% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_select.java index 1fea2af39..194c7c143 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_select.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; import gplx.dbs.sqls.*; public class Db_qry_select implements Db_qry { public int Tid() {return Db_qry_.Tid_select;} @@ -47,8 +47,7 @@ public class Db_qry_select implements Db_qry { } finally {rdr.Rls();} } - - @gplx.Internal protected Sql_from From() {return from;} Sql_from from; + public Sql_from From() {return from;} Sql_from from; public Db_qry_select From_(String tblName) {return From_(tblName, null);} public Db_qry_select From_(String tblName, String alias) { if (from != null) throw Err_.new_("super table already defined").Add("from", from.Tbls().Count()); @@ -64,7 +63,7 @@ public class Db_qry_select implements Db_qry { return this; } - @gplx.Internal protected Sql_select Cols() {return cols;} Sql_select cols = Sql_select.All; + public Sql_select Cols() {return cols;} Sql_select cols = Sql_select.All; public String[] Cols_ary() {return cols.Flds().To_str_ary();} public Db_qry_select Cols_all_() {return this;} public Db_qry_select Cols_alias_(String expr, String alias) { @@ -81,28 +80,28 @@ public class Db_qry_select implements Db_qry { public Db_qry_select Cols_groupBy_max(String fld) {return Cols_groupBy_max(fld, fld);} public Db_qry_select Cols_groupBy_max(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); - cols.Add(Sql_select_fld_minMax.max_(Sql_select_fld_base.Tbl_null, fld, alias)); + cols.Add(Sql_select_fld_.new_max(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } public Db_qry_select Cols_groupBy_min(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); - cols.Add(Sql_select_fld_minMax.min_(Sql_select_fld_base.Tbl_null, fld, alias)); + cols.Add(Sql_select_fld_.new_min(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } public Db_qry_select Cols_groupBy_count(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); - cols.Add(Sql_select_fld_count.new_(Sql_select_fld_base.Tbl_null, fld, alias)); + cols.Add(Sql_select_fld_.new_count(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } public Db_qry_select Cols_groupBy_sum(String fld) {return Cols_groupBy_sum(fld, fld);} public Db_qry_select Cols_groupBy_sum(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); - cols.Add(Sql_select_fld_sum.new_(Sql_select_fld_base.Tbl_null, fld, alias)); + cols.Add(Sql_select_fld_.new_sum(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } public Criteria Where() {return where;} public Db_qry_select Where_(Criteria crt) {where = crt; return this;} Criteria where; - @gplx.Internal protected Sql_order_by OrderBy() {return orderBy;} Sql_order_by orderBy = null; + public Sql_order_by OrderBy() {return orderBy;} Sql_order_by orderBy = null; public Db_qry_select OrderBy_(String fieldName, boolean ascending) { Sql_order_by_itm item = Sql_order_by_itm.new_(fieldName, ascending); orderBy = Sql_order_by.new_(item); @@ -116,14 +115,15 @@ public class Db_qry_select implements Db_qry { orderBy = Sql_order_by.new_(ary); return this; } - @gplx.Internal protected Sql_group_by GroupBy() {return groupBy;} Sql_group_by groupBy = null; + public Sql_group_by GroupBy() {return groupBy;} Sql_group_by groupBy = null; public Db_qry_select GroupBy_(String... flds) { if (groupBy != null) throw Err_.new_("group by already defined").Add("group", groupBy); groupBy = Sql_group_by.new_(flds); return this; } + public String Indexed_by() {return indexed_by;} public Db_qry_select Indexed_by_(String v) {indexed_by = v; return this;} private String indexed_by; public Db_qry_select Distinct_() {cols.Distinct_set(true); return this;} - @gplx.Internal protected int Limit() {return limit;} int limit = -1; public static final int Limit_disabled = -1; + public int Limit() {return limit;} int limit = -1; public static final int Limit_disabled = -1; public Db_qry_select Limit_(int v) {this.limit = v; return this;} public static Db_qry_select new_() {return new Db_qry_select();} Db_qry_select() {} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select_tst.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java similarity index 95% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select_tst.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java index 51098886d..2615dc252 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select_tst.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.dbs.sqls.*; public class Db_qry_select_tst { @Before public void setup() { diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_sql.java similarity index 96% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_sql.java index 93b19acdd..4a1f42809 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_sql.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.dbs.sqls.*; public class Db_qry_sql implements Db_qry { public int Tid() {return Db_qry_.Tid_sql;} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql_tst.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_sql_tst.java similarity index 95% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql_tst.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_sql_tst.java index 6fb69ef54..07fa91f55 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql_tst.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_sql_tst.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import org.junit.*; public class Db_qry_sql_tst { @Before public void init() {fxt.Clear();} private Db_qry_sql_fxt fxt = new Db_qry_sql_fxt(); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_update.java similarity index 95% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry_update.java index 9f7594779..6b24ebafb 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_update.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; import gplx.dbs.sqls.*; public class Db_qry_update implements Db_qry_arg_owner { public int Tid() {return Db_qry_.Tid_update;} @@ -37,6 +37,7 @@ public class Db_qry_update implements Db_qry_arg_owner { public Db_qry_arg_owner Arg_(String k, byte[] v) {return Arg_obj_type_(k, String_.new_utf8_(v), Db_val_type.Tid_varchar);} public Db_qry_arg_owner Arg_obj_(String k, Object v) {return Arg_obj_type_(k, v, Db_val_type.Tid_null);} public Db_qry_arg_owner Arg_obj_type_(String key, Object val, byte val_tid) { + if (key == Db_meta_fld.Key_null) return this; Db_arg arg = new Db_arg(key, val).Val_tid_(val_tid); args.Add(arg.Key(), arg); return this; diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java similarity index 54% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java rename to 140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java index 4754137a7..dfeb7a276 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java @@ -15,14 +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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import java.sql.*; -import gplx.dbs.sqls.*; -class Db_stmt_cmd implements Db_stmt { - private final Db_engine engine; +import gplx.dbs.engines.*; import gplx.dbs.sqls.*; +public class Db_stmt_cmd implements Db_stmt { + private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val( v); + private Db_engine engine; private PreparedStatement stmt = null; private String sql; private int val_idx = 0; - public Db_stmt_cmd(Db_engine engine, Db_qry qry) { + public Db_stmt_cmd(Db_engine engine, Db_qry qry) {Ctor_stmt(engine, qry);} + public void Ctor_stmt(Db_engine engine, Db_qry qry) { this.engine = engine; sql = qry.Tid() == Db_qry_.Tid_select_in_tbl ? ((Db_qry__select_in_tbl)qry).Xto_sql() : Sql_qry_wtr_.I.Xto_str(qry, true); Reset_stmt(); @@ -33,66 +35,74 @@ class Db_stmt_cmd implements Db_stmt { } public Db_stmt Crt_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.Y, k, v);} public Db_stmt Val_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.N, k, v);} - public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, null, v);} + public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, Key_na, v);} private Db_stmt Add_byte_by_bool(boolean where, String k, boolean v) {return Add_byte(where, k, v ? Bool_.Y_byte : Bool_.N_byte);} public Db_stmt Crt_byte(String k, byte v) {return Add_byte(Bool_.Y, k, v);} public Db_stmt Val_byte(String k, byte v) {return Add_byte(Bool_.N, k, v);} - public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, null, v);} + public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, Key_na, v);} private Db_stmt Add_byte(boolean where, String k, byte v) { - try {stmt.setByte(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setByte(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "byte", v, sql);} return this; } public Db_stmt Crt_int(String k, int v) {return Add_int(Bool_.Y, k, v);} public Db_stmt Val_int(String k, int v) {return Add_int(Bool_.N, k, v);} - public Db_stmt Val_int(int v) {return Add_int(Bool_.N, null, v);} + public Db_stmt Val_int(int v) {return Add_int(Bool_.N, Key_na, v);} private Db_stmt Add_int(boolean where, String k, int v) { - try {stmt.setInt(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "int", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setInt(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "int", v, sql);} return this; } public Db_stmt Crt_long(String k, long v) {return Add_long(Bool_.Y, k, v);} public Db_stmt Val_long(String k, long v) {return Add_long(Bool_.N, k, v);} - public Db_stmt Val_long(long v) {return Add_long(Bool_.N, null, v);} + public Db_stmt Val_long(long v) {return Add_long(Bool_.N, Key_na, v);} private Db_stmt Add_long(boolean where, String k, long v) { - try {stmt.setLong(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "long", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setLong(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "long", v, sql);} return this; } public Db_stmt Crt_float(String k, float v) {return Add_float(Bool_.Y, k, v);} public Db_stmt Val_float(String k, float v) {return Add_float(Bool_.N, k, v);} - public Db_stmt Val_float(float v) {return Add_float(Bool_.N, null, v);} + public Db_stmt Val_float(float v) {return Add_float(Bool_.N, Key_na, v);} private Db_stmt Add_float(boolean where, String k, float v) { - try {stmt.setFloat(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "float", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setFloat(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "float", v, sql);} return this; } public Db_stmt Crt_double(String k, double v) {return Add_double(Bool_.Y, k, v);} public Db_stmt Val_double(String k, double v) {return Add_double(Bool_.N, k, v);} - public Db_stmt Val_double(double v) {return Add_double(Bool_.N, null, v);} + public Db_stmt Val_double(double v) {return Add_double(Bool_.N, Key_na, v);} private Db_stmt Add_double(boolean where, String k, double v) { - try {stmt.setDouble(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "double", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setDouble(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "double", v, sql);} return this; } public Db_stmt Crt_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.Y, k, v);} public Db_stmt Val_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.N, k, v);} - public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, null, v);} + public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, Key_na, v);} private Db_stmt Add_decimal(boolean where, String k, DecimalAdp v) { - try {stmt.setBigDecimal(++val_idx, v.Xto_decimal());} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setBigDecimal(++val_idx, v.Xto_decimal());} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "decimal", v, sql);} return this; } public Db_stmt Crt_bry(String k, byte[] v) {return Add_bry(Bool_.Y, k, v);} public Db_stmt Val_bry(String k, byte[] v) {return Add_bry(Bool_.N, k, v);} - public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, null, v);} + public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, Key_na, v);} private Db_stmt Add_bry(boolean where, String k, byte[] v) { - try {stmt.setBytes(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setBytes(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "byte[]", v.length, sql);} return this; } public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);} public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);} - public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, null, v);} + public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);} private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));} public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);} public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);} - public Db_stmt Val_str(String v) {return Add_str(Bool_.N, null, v);} + public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);} private Db_stmt Add_str(boolean where, String k, String v) { - try {stmt.setString(++val_idx, v);} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "String", v);} + if (k == Db_meta_fld.Key_null) return this; // key is explicitly null; ignore; allows version_2+ type definitions + try {stmt.setString(++val_idx, v);} catch (Exception e) {this.Rls(); throw Err_.err_(e, "failed to add value: type={0} val={1} sql={2}", "String", v, sql);} return this; } public Db_stmt Val_rdr_(gplx.ios.Io_stream_rdr v, long rdr_len) { @@ -100,13 +110,28 @@ class Db_stmt_cmd implements Db_stmt { return this; } public boolean Exec_insert() { - try {boolean rv = stmt.execute(); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0} err={1}", sql, Err_.Message_gplx_brief(e));} + try {boolean rv = stmt.execute(); return rv;} + catch (Exception e) { + this.Rls(); + Reset_stmt(); + throw Err_.err_(e, "db_stmt.insert: sql={0} err={1}", sql, Err_.Message_gplx_brief(e)); + } } public int Exec_update() { - try {int rv = stmt.executeUpdate(); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} + try {int rv = stmt.executeUpdate(); return rv;} + catch (Exception e) { + this.Rls(); + Reset_stmt(); + throw Err_.err_(e, "db_stmt.update: sql={0} err={1}", sql, Err_.Message_gplx_brief(e)); + } } public int Exec_delete() { - try {int rv = stmt.executeUpdate(); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} + try {int rv = stmt.executeUpdate(); return rv;} + catch (Exception e) { + this.Rls(); + Reset_stmt(); + throw Err_.err_(e, "db_stmt.insert: sql={0} err={1}", sql, Err_.Message_gplx_brief(e)); + } } public DataRdr Exec_select() { try {DataRdr rv = engine.New_rdr(stmt.executeQuery(), sql); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} @@ -124,8 +149,11 @@ class Db_stmt_cmd implements Db_stmt { return this; } public void Rls() { - if (stmt == null) return; // Null instance - try {stmt.close();} + if (stmt == null) return; // Null instance + try { + if (stmt.getConnection().isClosed()) return; // do not close stmt if connection is already closed; throws null error; DATE:2015-02-11 + stmt.close(); + } catch (Exception e) {throw Err_.err_(e, "failed to close command: {0}", sql);} } } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java similarity index 71% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java rename to 140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java index 7024965d0..c759a9547 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java @@ -15,82 +15,85 @@ 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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; +import gplx.dbs.engines.*; public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statements; not used for actual insert into database - private Bry_bfr tmp_bfr = Bry_bfr.new_(); - private Bry_fmtr tmp_fmtr = Bry_fmtr.new_(); - private int val_idx = 0; + private static final String Key_na = ""; // key is not_available; only called by procs with signature of Val( v); + private final ListAdp args = ListAdp_.new_(); + private final Bry_bfr tmp_bfr = Bry_bfr.new_(); + private final Bry_fmtr tmp_fmtr = Bry_fmtr.new_(); + public void Ctor_stmt(Db_engine engine, Db_qry qry) {} public Db_conn Conn() {return conn;} public void Conn_(Db_conn v) {this.conn = v;} Db_conn conn; public Db_stmt Reset_stmt() {return this;} public Db_stmt Crt_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.Y, k, v);} public Db_stmt Val_bool_as_byte(String k, boolean v) {return Add_byte_by_bool(Bool_.N, k, v);} - public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, null, v);} + public Db_stmt Val_bool_as_byte(boolean v) {return Add_byte_by_bool(Bool_.N, Key_na, v);} private Db_stmt Add_byte_by_bool(boolean where, String k, boolean v) {return Add_byte(where, k, v ? Bool_.Y_byte : Bool_.N_byte);} public Db_stmt Crt_byte(String k, byte v) {return Add_byte(Bool_.Y, k, v);} public Db_stmt Val_byte(String k, byte v) {return Add_byte(Bool_.N, k, v);} - public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, null, v);} + public Db_stmt Val_byte(byte v) {return Add_byte(Bool_.N, Key_na, v);} private Db_stmt Add_byte(boolean where, String k, byte v) { - try {Add(++val_idx, Byte_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte", v);} + try {Add(k, Byte_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte", v);} return this; } public Db_stmt Crt_int(String k, int v) {return Add_int(Bool_.Y, k, v);} public Db_stmt Val_int(String k, int v) {return Add_int(Bool_.N, k, v);} - public Db_stmt Val_int(int v) {return Add_int(Bool_.N, null, v);} + public Db_stmt Val_int(int v) {return Add_int(Bool_.N, Key_na, v);} private Db_stmt Add_int(boolean where, String k, int v) { - try {Add(++val_idx, Int_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "int", v);} + try {Add(k, Int_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "int", v);} return this; } public Db_stmt Crt_long(String k, long v) {return Add_long(Bool_.Y, k, v);} public Db_stmt Val_long(String k, long v) {return Add_long(Bool_.N, k, v);} - public Db_stmt Val_long(long v) {return Add_long(Bool_.N, null, v);} + public Db_stmt Val_long(long v) {return Add_long(Bool_.N, Key_na, v);} private Db_stmt Add_long(boolean where, String k, long v) { - try {Add(++val_idx, Long_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "long", v);} + try {Add(k, Long_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "long", v);} return this; } public Db_stmt Crt_float(String k, float v) {return Add_float(Bool_.Y, k, v);} public Db_stmt Val_float(String k, float v) {return Add_float(Bool_.N, k, v);} - public Db_stmt Val_float(float v) {return Add_float(Bool_.N, null, v);} + public Db_stmt Val_float(float v) {return Add_float(Bool_.N, Key_na, v);} private Db_stmt Add_float(boolean where, String k, float v) { - try {Add(++val_idx, Float_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "float", v);} + try {Add(k, Float_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "float", v);} return this; } public Db_stmt Crt_double(String k, double v) {return Add_double(Bool_.Y, k, v);} public Db_stmt Val_double(String k, double v) {return Add_double(Bool_.N, k, v);} - public Db_stmt Val_double(double v) {return Add_double(Bool_.N, null, v);} + public Db_stmt Val_double(double v) {return Add_double(Bool_.N, Key_na, v);} private Db_stmt Add_double(boolean where, String k, double v) { - try {Add(++val_idx, Double_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "double", v);} + try {Add(k, Double_.Xto_str(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "double", v);} return this; } public Db_stmt Crt_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.Y, k, v);} public Db_stmt Val_decimal(String k, DecimalAdp v) {return Add_decimal(Bool_.N, k, v);} - public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, null, v);} + public Db_stmt Val_decimal(DecimalAdp v) {return Add_decimal(Bool_.N, Key_na, v);} private Db_stmt Add_decimal(boolean where, String k, DecimalAdp v) { - try {Add(++val_idx, v.Xto_str());} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", v);} + try {Add(k, v.Xto_str());} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", v);} return this; } public Db_stmt Crt_bry(String k, byte[] v) {return Add_bry(Bool_.Y, k, v);} public Db_stmt Val_bry(String k, byte[] v) {return Add_bry(Bool_.N, k, v);} - public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, null, v);} + public Db_stmt Val_bry(byte[] v) {return Add_bry(Bool_.N, Key_na, v);} private Db_stmt Add_bry(boolean where, String k, byte[] v) {// HACK: convert to String b/c tdb does not support byte[] - try {Add(++val_idx, Val_str_wrap(String_.new_utf8_(v)));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);} + try {Add(k, Val_str_wrap(String_.new_utf8_(v)));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "byte[]", v.length);} return this; } public Db_stmt Crt_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.Y, k, v);} public Db_stmt Val_bry_as_str(String k, byte[] v) {return Add_bry_as_str(Bool_.N, k, v);} - public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, null, v);} + public Db_stmt Val_bry_as_str(byte[] v) {return Add_bry_as_str(Bool_.N, Key_na, v);} private Db_stmt Add_bry_as_str(boolean where, String k, byte[] v) {return Add_str(where, k, String_.new_utf8_(v));} public Db_stmt Crt_str(String k, String v) {return Add_str(Bool_.Y, k, v);} public Db_stmt Val_str(String k, String v) {return Add_str(Bool_.N, k, v);} - public Db_stmt Val_str(String v) {return Add_str(Bool_.N, null, v);} + public Db_stmt Val_str(String v) {return Add_str(Bool_.N, Key_na, v);} private Db_stmt Add_str(boolean where, String k, String v) { - try {Add(++val_idx, Val_str_wrap(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "String", v);} + try {Add(k, Val_str_wrap(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "String", v);} return this; } public Db_stmt Val_rdr_(gplx.ios.Io_stream_rdr v, long rdr_len) { try { Bry_bfr bfr = Bry_bfr.new_(); gplx.ios.Io_stream_rdr_.Load_all_to_bfr(bfr, v); - Add(++val_idx, bfr.Xto_str_and_clear()); + Add(Key_na, bfr.Xto_str_and_clear()); } catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "rdr", v);} return this; } @@ -114,15 +117,14 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen try {Object rv = Db_qry_select.Rdr_to_val(this.Exec_select()); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);} } public Db_stmt Clear() { - val_idx = 0; args.Clear(); return this; } - public void Rls() { - this.Clear(); + public void Rls() {this.Clear();} + public void Add(String k, String v) { + if (k == Db_meta_fld.Key_null) return; // key is explicitly null; ignore; allows version_2+ type definitions + args.Add(v); } - public void Add(String v) {Add(-1, v);} - public void Add(int idx, String v) {args.Add(v);} private ListAdp args = ListAdp_.new_(); public String Xto_sql() { tmp_fmtr.Bld_bfr_many(tmp_bfr, (Object[])args.Xto_ary_and_clear(Object.class)); return tmp_bfr.Xto_str_and_clear(); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql_tst.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql_tst.java similarity index 89% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql_tst.java rename to 140_dbs/src/gplx/dbs/qrys/Db_stmt_sql_tst.java index c6c50d421..83771485b 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql_tst.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql_tst.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import org.junit.*; public class Db_stmt_sql_tst { @Before public void init() {} @Test public void Basic() { Db_stmt_sql stmt = new Db_stmt_sql(); stmt.Parse(null, "UPDATE tbl_0 SET col_0 = ? WHERE col_1 = ?"); - stmt.Add("1"); - stmt.Add("2"); + stmt.Add("col_0", "1"); + stmt.Add("col_1", "2"); Tfds.Eq("UPDATE tbl_0 SET col_0 = 1 WHERE col_1 = 2", stmt.Xto_sql()); } } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_val_type.java b/140_dbs/src/gplx/dbs/qrys/Db_val_type.java similarity index 93% rename from 140_dbs/src_110_dbQry/gplx/dbs/Db_val_type.java rename to 140_dbs/src/gplx/dbs/qrys/Db_val_type.java index 8f1aced2f..6ae591103 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_val_type.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_val_type.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.dbs; import gplx.*; +package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; public class Db_val_type { public static final byte // not serialized Tid_null = 0 diff --git a/140_dbs/src_120_sql/gplx/dbs/Db_fld.java b/140_dbs/src/gplx/dbs/sqls/Db_fld.java similarity index 94% rename from 140_dbs/src_120_sql/gplx/dbs/Db_fld.java rename to 140_dbs/src/gplx/dbs/sqls/Db_fld.java index 619292bc5..25b9b087c 100644 --- a/140_dbs/src_120_sql/gplx/dbs/Db_fld.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_fld.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; public class Db_fld { public Db_fld(String name, byte type_tid) {this.name = name; this.type_tid = type_tid;} public String Name() {return name;} public Db_fld Name_(String v) {name = v; return this;} private String name; diff --git a/140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_crt.java b/140_dbs/src/gplx/dbs/sqls/Db_obj_ary_crt.java similarity index 95% rename from 140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_crt.java rename to 140_dbs/src/gplx/dbs/sqls/Db_obj_ary_crt.java index 5c631c4b2..e5709c469 100644 --- a/140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_crt.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_obj_ary_crt.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; public class Db_obj_ary_crt implements gplx.core.criterias.Criteria { public byte Tid() {return Criteria_.Tid_db_obj_ary;} diff --git a/140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_tst.java b/140_dbs/src/gplx/dbs/sqls/Db_obj_ary_tst.java similarity index 96% rename from 140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_tst.java rename to 140_dbs/src/gplx/dbs/sqls/Db_obj_ary_tst.java index 1c0a47ac6..6647da50b 100644 --- a/140_dbs/src_120_sql/gplx/dbs/Db_obj_ary_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_obj_ary_tst.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.core.strings.*; import gplx.dbs.sqls.*; public class Db_obj_ary_tst { @Before public void init() {} private Db_obj_ary_fxt fxt = new Db_obj_ary_fxt(); diff --git a/140_dbs/src/gplx/dbs/Db_sqlbldr__sqlite.java b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java similarity index 84% rename from 140_dbs/src/gplx/dbs/Db_sqlbldr__sqlite.java rename to 140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java index a6b306c12..6af3a4da1 100644 --- a/140_dbs/src/gplx/dbs/Db_sqlbldr__sqlite.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; interface Db_sqlbldr {} -class Db_sqlbldr__sqlite implements Db_sqlbldr { +public class Db_sqlbldr__sqlite implements Db_sqlbldr { private final Bry_bfr tmp_bfr = Bry_bfr.reset_(1024); public String Bld_create_idx(Db_meta_idx idx) { tmp_bfr.Add_str_ascii("CREATE "); @@ -25,7 +25,9 @@ class Db_sqlbldr__sqlite implements Db_sqlbldr { tmp_bfr.Add_str_ascii("UNIQUE "); tmp_bfr.Add_str_ascii("INDEX "); tmp_bfr.Add_str_ascii("IF NOT EXISTS "); - tmp_bfr.Add_str_ascii(idx.Tbl()).Add_str_ascii("__").Add_str_ascii(idx.Name()); + tmp_bfr.Add_str_ascii(idx.Name()); + tmp_bfr.Add_str_ascii(" ON "); + tmp_bfr.Add_str_ascii(idx.Tbl()); tmp_bfr.Add_str_ascii(" ("); String[] flds = idx.Flds(); int flds_len = flds.length; @@ -60,7 +62,7 @@ class Db_sqlbldr__sqlite implements Db_sqlbldr { case Db_meta_fld.Tid_bool: tmp_bfr.Add_str_ascii("boolean"); break; case Db_meta_fld.Tid_byte: tmp_bfr.Add_str_ascii("tinyint"); break; case Db_meta_fld.Tid_short: tmp_bfr.Add_str_ascii("smallint"); break; - case Db_meta_fld.Tid_int: tmp_bfr.Add_str_ascii("int"); break; + case Db_meta_fld.Tid_int: tmp_bfr.Add_str_ascii("integer"); break; // NOTE: must be integer, not int, else "int PRIMARY KEY AUTONUMBER" will fail; DATE:2015-02-12 case Db_meta_fld.Tid_long: tmp_bfr.Add_str_ascii("bigint"); break; case Db_meta_fld.Tid_float: tmp_bfr.Add_str_ascii("float"); break; case Db_meta_fld.Tid_double: tmp_bfr.Add_str_ascii("double"); break; @@ -70,4 +72,5 @@ class Db_sqlbldr__sqlite implements Db_sqlbldr { default: throw Err_.unhandled(tid); } } + public static final Db_sqlbldr__sqlite I = new Db_sqlbldr__sqlite(); Db_sqlbldr__sqlite() {} } diff --git a/140_dbs/src/gplx/dbs/Db_sqlbldr_tst.java b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java similarity index 82% rename from 140_dbs/src/gplx/dbs/Db_sqlbldr_tst.java rename to 140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java index 095f4d201..55ccf8520 100644 --- a/140_dbs/src/gplx/dbs/Db_sqlbldr_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import org.junit.*; public class Db_sqlbldr_tst { @Before public void setup() {} private final Db_sqlbldr_fxt fxt = new Db_sqlbldr_fxt(); @Test public void Idx_unique() { - fxt.Test_create_idx(Db_meta_idx.new_unique("tbl_name", "idx_name", "fld_1", "fld_2") - , "CREATE UNIQUE INDEX IF NOT EXISTS tbl_name__idx_name (fld_1, fld_2);" + fxt.Test_create_idx(Db_meta_idx.new_unique_by_tbl("tbl_name", "idx_name", "fld_1", "fld_2") + , "CREATE UNIQUE INDEX IF NOT EXISTS tbl_name__idx_name ON tbl_name (fld_1, fld_2);" ); } @Test public void Tbl_basic() { @@ -39,10 +39,10 @@ public class Db_sqlbldr_tst { fxt.Test_create_tbl(Db_meta_tbl.new_("tbl_name", flds.To_fld_ary()) , String_.Concat_lines_nl_skip_last ( "CREATE TABLE tbl_name" - , "( fld_int_pkey int NOT NULL PRIMARY KEY" + , "( fld_int_pkey integer NOT NULL PRIMARY KEY" , ", fld_bool boolean NOT NULL" , ", fld_short smallint NOT NULL" - , ", fld_int int NOT NULL" + , ", fld_int integer NOT NULL" , ", fld_long bigint NOT NULL" , ", fld_float float NOT NULL" , ", fld_double double NOT NULL" @@ -54,7 +54,7 @@ public class Db_sqlbldr_tst { } } class Db_sqlbldr_fxt { - private Db_sqlbldr__sqlite sqlbldr = new Db_sqlbldr__sqlite(); + private Db_sqlbldr__sqlite sqlbldr = Db_sqlbldr__sqlite.I; public void Test_create_idx(Db_meta_idx idx, String expd) { Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx)); } diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_from.java b/140_dbs/src/gplx/dbs/sqls/Sql_from.java new file mode 100644 index 000000000..676dbb109 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_from.java @@ -0,0 +1,27 @@ +/* +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.dbs.sqls; import gplx.*; import gplx.dbs.*; +public class Sql_from { + public ListAdp Tbls() {return tbls;} ListAdp tbls = ListAdp_.new_(); + public Sql_tbl_src BaseTable() {return (Sql_tbl_src)tbls.FetchAt(0);} + public static Sql_from new_(Sql_tbl_src baseTable) { + Sql_from rv = new Sql_from(); + rv.tbls.Add(baseTable); + return rv; + } Sql_from() {} +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_dummy_class.java b/140_dbs/src/gplx/dbs/sqls/Sql_group_by.java similarity index 73% rename from 140_dbs/src/gplx/dbs/sqls/Sql_dummy_class.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_group_by.java index 0f2394edd..1e7b8aa77 100644 --- a/140_dbs/src/gplx/dbs/sqls/Sql_dummy_class.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_group_by.java @@ -16,4 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; -public class Sql_dummy_class {} +public class Sql_group_by { + public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_(); + + public static Sql_group_by new_(String... ary) { + Sql_group_by rv = new Sql_group_by(); + for (String itm : ary) + rv.flds.Add(itm); + return rv; + } Sql_group_by() {} +} \ No newline at end of file diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_join_itm.java b/140_dbs/src/gplx/dbs/sqls/Sql_join_itm.java new file mode 100644 index 000000000..48a858f99 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_join_itm.java @@ -0,0 +1,35 @@ +/* +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.dbs.sqls; import gplx.*; import gplx.dbs.*; +import gplx.core.strings.*; +public class Sql_join_itm { + public String SrcTbl() {return srcTbl;} public Sql_join_itm SrcTbl_(String v) {srcTbl = v; return this;} private String srcTbl; + public String SrcFld() {return srcFld;} public Sql_join_itm SrcFld_(String v) {srcFld = v; return this;} private String srcFld; + public String TrgFld() {return trgFld;} public Sql_join_itm TrgFld_(String v) {trgFld = v; return this;} private String trgFld; + public String TrgFldOrSrcFld() {return trgFld == null ? srcFld : trgFld;} + public static Sql_join_itm new_(String trgFld, String srcTbl, String srcFld) { + Sql_join_itm rv = new Sql_join_itm(); + rv.trgFld = trgFld; rv.srcTbl = srcTbl; rv.srcFld = srcFld; + return rv; + } Sql_join_itm() {} + public static Sql_join_itm same_(String tbl, String fld) { + Sql_join_itm rv = new Sql_join_itm(); + rv.trgFld = fld; rv.srcTbl = tbl; rv.srcFld = fld; + return rv; + } +} diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_obj_state.java b/140_dbs/src/gplx/dbs/sqls/Sql_join_itmType.java similarity index 57% rename from 140_dbs/src_130_misc/gplx/dbs/Db_obj_state.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_join_itmType.java index 0ae4d06ff..cddf092f8 100644 --- a/140_dbs/src_130_misc/gplx/dbs/Db_obj_state.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_join_itmType.java @@ -15,16 +15,17 @@ 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.dbs; import gplx.*; -public class Db_obj_state { +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; +public class Sql_join_itmType { public int Val() {return val;} int val; - public Db_obj_state MarkUpdated() {return this == Retrieved ? Updated : this;} // Created/Deleted noops - public boolean Modified() {return this == Created || this == Updated;} - Db_obj_state(int val) {this.val = val;} - public static final Db_obj_state - Created = new Db_obj_state(1) - , Retrieved = new Db_obj_state(2) - , Updated = new Db_obj_state(3) - , Deleted = new Db_obj_state(4) - ; + public String Name() {return name;} private String name; + Sql_join_itmType(int v, String name) {this.val = v; this.name = name;} + public static final Sql_join_itmType + From = new Sql_join_itmType(0, "FROM") + , Inner = new Sql_join_itmType(1, "INNER JOIN") + , Left = new Sql_join_itmType(2, "LEFT JOIN") + , Right = new Sql_join_itmType(3, "RIGHT JOIN") + , Outer = new Sql_join_itmType(4, "OUTER JOIN") + , Cross = new Sql_join_itmType(5, "CROSS JOIN") + ; } diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_order_by.java b/140_dbs/src/gplx/dbs/sqls/Sql_order_by.java new file mode 100644 index 000000000..b790c3ca2 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_order_by.java @@ -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 . +*/ +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; +public class Sql_order_by { + public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_(); + + public static Sql_order_by new_(Sql_order_by_itm... ary) { + Sql_order_by rv = new Sql_order_by(); + for (Sql_order_by_itm itm : ary) + rv.flds.Add(itm); + return rv; + } Sql_order_by() {} +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_order_by_itm.java b/140_dbs/src/gplx/dbs/sqls/Sql_order_by_itm.java new file mode 100644 index 000000000..ea5566941 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_order_by_itm.java @@ -0,0 +1,31 @@ +/* +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.dbs.sqls; import gplx.*; import gplx.dbs.*; +public class Sql_order_by_itm { + public String Name() {return name;} private String name; + public boolean Ascending() {return ascending;} private boolean ascending; + public String XtoSql() { + String ascString = ascending ? "" : " DESC"; + return name + ascString; + } + public static Sql_order_by_itm new_(String name, boolean ascending) { + Sql_order_by_itm rv = new Sql_order_by_itm(); + rv.name = name; rv.ascending = ascending; + return rv; + } Sql_order_by_itm() {} +} diff --git a/140_dbs/src/gplx/dbs/Sql_order_by.java b/140_dbs/src/gplx/dbs/sqls/Sql_order_by_sorter.java similarity index 54% rename from 140_dbs/src/gplx/dbs/Sql_order_by.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_order_by_sorter.java index fa30513f9..73d736ebe 100644 --- a/140_dbs/src/gplx/dbs/Sql_order_by.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_order_by_sorter.java @@ -15,42 +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.dbs; import gplx.*; -import gplx.lists.*; /*ComparerAble*/ -class Sql_order_by { - public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_(); - - public static Sql_order_by new_(Sql_order_by_itm... ary) { - Sql_order_by rv = new Sql_order_by(); - for (Sql_order_by_itm itm : ary) - rv.flds.Add(itm); - return rv; - } Sql_order_by() {} -} -class Sql_group_by { - public ListAdp Flds() {return flds;} ListAdp flds = ListAdp_.new_(); - - public static Sql_group_by new_(String... ary) { - Sql_group_by rv = new Sql_group_by(); - for (String itm : ary) - rv.flds.Add(itm); - return rv; - } Sql_group_by() {} -} -class Sql_order_by_itm { - public String Name() {return name;} private String name; - public boolean Ascending() {return ascending;} private boolean ascending; - public String XtoSql() { - String ascString = ascending ? "" : " DESC"; - return name + ascString; - } - public static Sql_order_by_itm new_(String name, boolean ascending) { - Sql_order_by_itm rv = new Sql_order_by_itm(); - rv.name = name; rv.ascending = ascending; - return rv; - } Sql_order_by_itm() {} -} -class Sql_order_by_sorter implements ComparerAble { +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; +import gplx.lists.*; +public class Sql_order_by_sorter implements ComparerAble { public int compare(Object lhsObj, Object rhsObj) { GfoNde lhs = (GfoNde)lhsObj; GfoNde rhs = (GfoNde)rhsObj; Sql_order_by_itm item = null; Object lhsData = null, rhsData = null; @@ -70,4 +37,4 @@ class Sql_order_by_sorter implements ComparerAble { rv.items = items; return rv; } -} \ No newline at end of file +} diff --git a/140_dbs/src/gplx/dbs/Sql_qry_wtr.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr.java similarity index 93% rename from 140_dbs/src/gplx/dbs/Sql_qry_wtr.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr.java index 02aa24b3e..37c6d268e 100644 --- a/140_dbs/src/gplx/dbs/Sql_qry_wtr.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; public interface Sql_qry_wtr { String Xto_str(Db_qry qry, boolean prepare); diff --git a/140_dbs/src/gplx/dbs/Sql_qry_wtr_.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_.java similarity index 94% rename from 140_dbs/src/gplx/dbs/Sql_qry_wtr_.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_.java index eae3e7ca1..08cc06eb0 100644 --- a/140_dbs/src/gplx/dbs/Sql_qry_wtr_.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; public class Sql_qry_wtr_ { public static Sql_qry_wtr new_ansi() {return new Sql_qry_wtr_ansi();} public static Sql_qry_wtr new_escape_backslash() {return new Sql_qry_wtr_ansi_escape_backslash();} diff --git a/140_dbs/src/gplx/dbs/Sql_qry_wtr_ansi.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java similarity index 90% rename from 140_dbs/src/gplx/dbs/Sql_qry_wtr_ansi.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java index df89128ec..956130689 100644 --- a/140_dbs/src/gplx/dbs/Sql_qry_wtr_ansi.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java @@ -15,21 +15,24 @@ 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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import gplx.core.strings.*; import gplx.core.criterias.*; -class Sql_qry_wtr_ansi implements Sql_qry_wtr { +import gplx.dbs.qrys.*; +public class Sql_qry_wtr_ansi implements Sql_qry_wtr { private final String_bldr sb = String_bldr_.new_(); private boolean prepare = false; public String Xto_str(Db_qry cmd, boolean prepare) { - this.prepare = prepare; - switch (cmd.Tid()) { - case Db_qry_.Tid_insert: return Bld_qry_insert((Db_qry_insert)cmd); - case Db_qry_.Tid_delete: return Bld_qry_delete((Db_qry_delete)cmd); - case Db_qry_.Tid_update: return Bld_qry_update((Db_qry_update)cmd); - case Db_qry_.Tid_select_in_tbl: - case Db_qry_.Tid_select: return Bld_qry_select((Db_qry_select)cmd); - case Db_qry_.Tid_sql: return ((Db_qry_sql)cmd).Xto_sql(); - default: throw Err_.unhandled(cmd.Tid()); + synchronized (sb) { + this.prepare = prepare; + switch (cmd.Tid()) { + case Db_qry_.Tid_insert: return Bld_qry_insert((Db_qry_insert)cmd); + case Db_qry_.Tid_delete: return Bld_qry_delete((Db_qry_delete)cmd); + case Db_qry_.Tid_update: return Bld_qry_update((Db_qry_update)cmd); + case Db_qry_.Tid_select_in_tbl: + case Db_qry_.Tid_select: return Bld_qry_select((Db_qry_select)cmd); + case Db_qry_.Tid_sql: return ((Db_qry_sql)cmd).Xto_sql(); + default: throw Err_.unhandled(cmd.Tid()); + } } } private String Bld_qry_delete(Db_qry_delete cmd) { @@ -89,6 +92,7 @@ class Sql_qry_wtr_ansi implements Sql_qry_wtr { this.Xto_sql_col(sb, fld.XtoSql()); } Bld_clause_from(sb, cmd.From()); + Bld_indexed_by(sb, cmd.Indexed_by()); Bld_where(sb, cmd.Where()); Bld_select_group_by(sb, cmd.GroupBy()); Bld_select_order_by(sb, cmd.OrderBy()); @@ -131,6 +135,10 @@ class Sql_qry_wtr_ansi implements Sql_qry_wtr { } } } + private void Bld_indexed_by(String_bldr sb, String idx_name) { + if (idx_name == null) return; + sb.Add(" INDEXED BY ").Add(idx_name); + } private void Xto_sql_col(String_bldr sb, Object obj) { if (obj == null) throw Err_.null_("ColName"); sb.Add_obj(obj); // FIXME: options for bracketing; ex: [name] diff --git a/140_dbs/tst/gplx/dbs/AnsiSqlWtr_tst.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi_tst.java similarity index 94% rename from 140_dbs/tst/gplx/dbs/AnsiSqlWtr_tst.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi_tst.java index afc259694..18e197da9 100644 --- a/140_dbs/tst/gplx/dbs/AnsiSqlWtr_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi_tst.java @@ -15,10 +15,10 @@ 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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.core.criterias.*; import gplx.dbs.sqls.*; -public class AnsiSqlWtr_tst { +public class Sql_qry_wtr_ansi_tst { Sql_qry_wtr sqlWtr = Sql_qry_wtr_.new_ansi(); @Test public void Insert() { tst_XtoSql diff --git a/140_dbs/tst/gplx/dbs/IoSqlCriteriaWriter_tst.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_iosql_tst.java similarity index 94% rename from 140_dbs/tst/gplx/dbs/IoSqlCriteriaWriter_tst.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_iosql_tst.java index aead42f70..e9ce26e77 100644 --- a/140_dbs/tst/gplx/dbs/IoSqlCriteriaWriter_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_iosql_tst.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.dbs; import gplx.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.core.strings.*; import gplx.core.criterias.*; /*Criteria_base*/ import gplx.ios.*; import gplx.dbs.sqls.*; -public class IoSqlCriteriaWriter_tst { +public class Sql_qry_wtr_iosql_tst { @Test public void Type() { fld = IoItm_base_.Prop_Type; tst_Write("type=1", ioCrt_(fld, Criteria_.eq_(IoItmDir.Type_Dir))); diff --git a/140_dbs/src/gplx/dbs/Sql_qry_wtr_tst.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_tst.java similarity index 92% rename from 140_dbs/src/gplx/dbs/Sql_qry_wtr_tst.java rename to 140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_tst.java index 023fc3bb2..01f14d357 100644 --- a/140_dbs/src/gplx/dbs/Sql_qry_wtr_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_tst.java @@ -15,9 +15,8 @@ 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.dbs; import gplx.*; -import org.junit.*; import gplx.core.strings.*; -import gplx.core.criterias.*; +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; +import org.junit.*; import gplx.core.strings.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*; public class Sql_qry_wtr_tst { private final Sql_qry_wtr_fxt fxt = new Sql_qry_wtr_fxt(); @Test public void Val() { diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_select.java b/140_dbs/src/gplx/dbs/sqls/Sql_select.java new file mode 100644 index 000000000..e301405af --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_select.java @@ -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 . +*/ +package gplx.dbs.sqls; import gplx.*; import gplx.dbs.*; +import gplx.core.strings.*; +import gplx.dbs.engines.tdbs.*; +public class Sql_select { + public Sql_select_fld_list Flds() {return flds;} Sql_select_fld_list flds = Sql_select_fld_list.new_(); + public boolean Distinct() {return distinct;} public void Distinct_set(boolean v) {distinct = v;} private boolean distinct; + public void Add(String fldName) {flds.Add(Sql_select_fld_.new_fld(Sql_select_fld_base.Tbl_null, fldName, fldName));} + public void Add(String fldName, String alias) {flds.Add(Sql_select_fld_.new_fld(Sql_select_fld_base.Tbl_null, fldName, alias));} + public void Add(Sql_select_fld_base fld) {flds.Add(fld);} + + public static final Sql_select All = all_(); static Sql_select all_() {Sql_select rv = new_(); rv.Add(Sql_select_fld_wild._); return rv;} + public static Sql_select new_() {return new Sql_select();} Sql_select() {} +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_.java b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_.java new file mode 100644 index 000000000..522c0b866 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_.java @@ -0,0 +1,69 @@ +/* +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.dbs.sqls; import gplx.*; import gplx.dbs.*; +public class Sql_select_fld_ { + public static Sql_select_fld_base new_fld(String tbl, String fld, String alias) {return new Sql_select_fld_fld(tbl, fld, alias);} + public static Sql_select_fld_base new_count(String tbl, String fld, String alias) {return new Sql_select_fld_count(tbl, fld, alias);} + public static Sql_select_fld_base new_sum(String tbl, String fld, String alias) {return new Sql_select_fld_sum(tbl, fld, alias);} + public static Sql_select_fld_base new_min(String tbl, String fld, String alias) {return new Sql_select_fld_minMax(CompareAble_.Less, tbl, fld, alias);} + public static Sql_select_fld_base new_max(String tbl, String fld, String alias) {return new Sql_select_fld_minMax(CompareAble_.More, tbl, fld, alias);} +} +class Sql_select_fld_fld extends Sql_select_fld_base { + public Sql_select_fld_fld(String tbl, String fld, String alias) {this.ctor_(tbl, fld, alias);} + @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) {return curVal;} + @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(fld.Type());} + @Override public String XtoSql() { + String rv = Fld(); + if (Tbl() != Tbl_null) + rv = Tbl() + "." + Fld(); + if (!String_.Eq(Alias(), Fld())) + rv = rv + " AS " + Alias(); + return rv; + } +} +class Sql_select_fld_count extends Sql_select_fld_func_base { + public Sql_select_fld_count(String tbl, String fld, String alias) {this.ctor_(tbl, fld, alias);} + @Override public String XtoSql_functionName() {return "COUNT";} + @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(IntClassXtn._);} + @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { + if (groupByVal == null) return 1; + return Int_.cast_(groupByVal) + 1; + } +} +class Sql_select_fld_sum extends Sql_select_fld_func_base { + public Sql_select_fld_sum(String tbl, String fld, String alias) {this.ctor_(tbl, fld, alias);} + @Override public String XtoSql_functionName() {return "SUM";} + @Override public void GroupBy_type(GfoFld fld) {this.ValType_set(IntClassXtn._);} + @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { + if (groupByVal == null) return Int_.cast_(curVal); + return Int_.cast_(groupByVal) + Int_.cast_(curVal); + } +} +class Sql_select_fld_minMax extends Sql_select_fld_func_base { + private final int compareType; + public Sql_select_fld_minMax(int compareType, String tbl, String fld, String alias) { + this.compareType = compareType; + this.ctor_(tbl, fld, alias); + } + @Override public String XtoSql_functionName() {return compareType == CompareAble_.Less ? "MIN" : "MAX";} + @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) { + if (groupByVal == null) return curVal; + int compareVal = CompareAble_.Compare_obj(curVal, groupByVal); + return compareVal * compareType > 0 ? curVal : groupByVal; + } +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_base.java b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_base.java new file mode 100644 index 000000000..cbdd8fb78 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_base.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.dbs.sqls; import gplx.*; import gplx.dbs.*; +public abstract class Sql_select_fld_base { + public String Tbl() {return tbl;} public void Tbl_set(String val) {tbl = val;} private String tbl; + public String Fld() {return fld;} public void Fld_set(String val) {fld = val;} private String fld; + public String Alias() {return alias;} public void Alias_set(String val) {alias = val;} private String alias; + public ClassXtn ValType() {return valType;} public void ValType_set(ClassXtn val) {valType = val;} ClassXtn valType = ObjectClassXtn._; + public abstract Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type); + @gplx.Virtual public void GroupBy_type(GfoFld fld) {this.ValType_set(fld.Type());} + @gplx.Virtual public boolean Type_fld() {return true;} + public abstract String XtoSql(); + public static final String Tbl_null = null; + @gplx.Internal protected void ctor_(String tbl, String fld, String alias) { + Tbl_set(tbl); Fld_set(fld); Alias_set(alias); + } +} +class Sql_select_fld_wild extends Sql_select_fld_base { + @Override public Object GroupBy_eval(Object groupByVal, Object curVal, ClassXtn type) {throw Err_.new_("group by eval not allowed on *");} + @Override public void GroupBy_type(GfoFld fld) {throw Err_.new_("group by type not allowed on *");} + @Override public String XtoSql() {return "*";} + public static final Sql_select_fld_wild _ = new Sql_select_fld_wild(); Sql_select_fld_wild() {this.ctor_(Tbl_null, "*", "*");} +} +abstract class Sql_select_fld_func_base extends Sql_select_fld_base { + public abstract String XtoSql_functionName(); + @Override public boolean Type_fld() {return false;} + @Override public String XtoSql() { + return String_.Format("{0}({1}) AS {2}", XtoSql_functionName(), Fld(), Alias()); + } +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_list.java b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_list.java new file mode 100644 index 000000000..428b4f972 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_select_fld_list.java @@ -0,0 +1,57 @@ +/* +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.dbs.sqls; import gplx.*; import gplx.dbs.*; +import gplx.core.strings.*; +import gplx.dbs.engines.tdbs.*; +public class Sql_select_fld_list { + public int Count() {return hash.Count();} + public void Add(Sql_select_fld_base fld) {hash.Add(fld.Alias(), fld);} + public Sql_select_fld_base FetchAt(int i) {return (Sql_select_fld_base)hash.FetchAt(i);} + public Sql_select_fld_base FetchOrNull(String k) {return (Sql_select_fld_base)hash.Fetch(k);} + public GfoFldList XtoGfoFldLst(TdbTable tbl) { + GfoFldList rv = GfoFldList_.new_(); + for (int i = 0; i < this.Count(); i++) { + Sql_select_fld_base selectFld = this.FetchAt(i); + GfoFld fld = tbl.Flds().FetchOrNull(selectFld.Fld()); + if (fld == null) throw Err_.new_("fld not found in tbl").Add("fldName", selectFld.Fld()).Add("tblName", tbl.Name()).Add("tblFlds", tbl.Flds().XtoStr()); + if (rv.Has(selectFld.Alias())) throw Err_.new_("alias is not unique").Add("fldName", selectFld.Fld()).Add("flds", rv.XtoStr()); + selectFld.GroupBy_type(fld); + rv.Add(selectFld.Alias(), selectFld.ValType()); + } + return rv; + } + public String[] To_str_ary() { + int len = this.Count(); + String[] rv = new String[len]; + for (int i = 0; i < len; i++) { + Sql_select_fld_base fld = this.FetchAt(i); + rv[i] = fld.Fld(); + } + return rv; + } + public String XtoStr() { + String_bldr sb = String_bldr_.new_(); + for (int i = 0; i < this.Count(); i++) { + Sql_select_fld_base fld = this.FetchAt(i); + sb.Add_fmt("{0},{1}|", fld.Fld(), fld.Alias()); + } + return sb.XtoStr(); + } + OrderedHash hash = OrderedHash_.new_(); + public static Sql_select_fld_list new_() {return new Sql_select_fld_list();} Sql_select_fld_list() {} +} diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_tbl_src.java b/140_dbs/src/gplx/dbs/sqls/Sql_tbl_src.java new file mode 100644 index 000000000..43f8856a5 --- /dev/null +++ b/140_dbs/src/gplx/dbs/sqls/Sql_tbl_src.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.dbs.sqls; import gplx.*; import gplx.dbs.*; +import gplx.core.strings.*; +public class Sql_tbl_src { + public Sql_join_itmType JoinType() {return type;} public Sql_tbl_src JoinType_(Sql_join_itmType v) {this.type = v; return this;} Sql_join_itmType type = Sql_join_itmType.Inner; + public ListAdp JoinLinks() {return joinLinks;} ListAdp joinLinks = ListAdp_.new_(); + public String TblName() {return tblName;} public Sql_tbl_src TblName_(String s) {tblName = s; return this;} private String tblName; + public String Alias() {return alias;} public Sql_tbl_src Alias_(String s) {alias = s; return this;} private String alias; + public void XtoSql(String_bldr sb) { + sb.Add_many(tblName, alias == null ? "" : " " + alias); + } + public static Sql_tbl_src new_() {return new Sql_tbl_src();} Sql_tbl_src() {} +} diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup.java b/140_dbs/src/gplx/dbs/utls/Db_cmd_backup.java similarity index 97% rename from 140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup.java rename to 140_dbs/src/gplx/dbs/utls/Db_cmd_backup.java index 5141ad695..ff767e67b 100644 --- a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup.java +++ b/140_dbs/src/gplx/dbs/utls/Db_cmd_backup.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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; public class Db_cmd_backup implements GfoInvkAble { public String DbName() {return dbName;} public Db_cmd_backup DbName_(String val) {dbName = val; return this;} private String dbName = "db"; public Io_url ExeUrl() {return exeUrl;} public Db_cmd_backup ExeUrl_(Io_url val) {exeUrl = val; return this;} Io_url exeUrl; diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup_tst.java b/140_dbs/src/gplx/dbs/utls/Db_cmd_backup_tst.java similarity index 94% rename from 140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup_tst.java rename to 140_dbs/src/gplx/dbs/utls/Db_cmd_backup_tst.java index eaa189495..1876ff873 100644 --- a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_backup_tst.java +++ b/140_dbs/src/gplx/dbs/utls/Db_cmd_backup_tst.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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; import org.junit.*; public class Db_cmd_backup_tst { @Test public void Basic() { diff --git a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java new file mode 100644 index 000000000..73cf150f7 --- /dev/null +++ b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.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.dbs.utls; import gplx.*; import gplx.dbs.*; +public abstract class Db_in_wkr__base { + protected abstract int Interval(); + protected abstract Db_qry Make_qry (Object db_ctx, int bgn, int end); + protected abstract void Fill_stmt (Db_stmt stmt, int bgn, int end); + protected abstract void Read_data (Cancelable cancelable, Object db_ctx, Db_rdr rdr); + public void Select_in(Cancelable cancelable, Object db_ctx, Db_conn conn, int full_bgn, int full_end) { + Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; + int part_len = Interval(); + for (int part_bgn = full_bgn; part_bgn < full_end; part_bgn += part_len) { + int part_end = part_bgn + part_len; + if (part_end > full_end) part_end = full_end; + try { + stmt = conn.Stmt_new(Make_qry(db_ctx, part_bgn, part_end)); + Fill_stmt(stmt, part_bgn, part_end); + rdr = stmt.Exec_select_as_rdr(); + Read_data(cancelable, db_ctx, rdr); + } + finally {rdr.Rls(); stmt.Rls();} + } + } + public static Object[] In_ary(int len) { + Object[] rv = new Object[len]; + for (int i = 0; i < len; i++) + rv[i] = ""; + return rv; + } +} diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java b/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java new file mode 100644 index 000000000..8abab286f --- /dev/null +++ b/140_dbs/src/gplx/dbs/utls/Db_sys_id_mgr.java @@ -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 . +*/ +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; +import gplx.core.primitives.*; +class Db_sys_id_mgr { + private Db_sys_regy_mgr db_regy; + public Db_sys_id_mgr(Db_sys_regy_mgr db_regy) {this.db_regy = db_regy;} + public int Get_next(String key) {return db_regy.Get_val_as_int_or(Grp_key, key, 1);} + public void Set_next(String key, int v) {db_regy.Set(Grp_key, key, Int_.Xto_str(v));} + private static final String Grp_key = "gplx.next_id"; +} diff --git a/140_dbs/src/gplx/dbs/Db_sys_regy_mgr.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java similarity index 78% rename from 140_dbs/src/gplx/dbs/Db_sys_regy_mgr.java rename to 140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java index eaafd2611..c281d2c45 100644 --- a/140_dbs/src/gplx/dbs/Db_sys_regy_mgr.java +++ b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr.java @@ -15,10 +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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; class Db_sys_regy_mgr { private Db_sys_regy_tbl tbl; - public Db_sys_regy_mgr(Db_url url, String name) {tbl = new Db_sys_regy_tbl(url, name);} + public Db_sys_regy_mgr(Db_url url, String name, boolean create) { + tbl = new Db_sys_regy_tbl(url, name); + if (create) tbl.Create_table(); + } public void Set(String grp, String key, String val) { if (tbl.Select_val_or(grp, key, null) == null) tbl.Insert(grp, key, val); @@ -31,6 +34,10 @@ class Db_sys_regy_mgr { public String Get_val_as_str_or(String grp, String key, String or) { return tbl.Select_val_or(grp, key, or); } + public int Get_val_as_int_or(String grp, String key, int or) { + String rv = tbl.Select_val_or(grp, key, null); + return rv == null ? or : Int_.parse_or_(rv, or); + } } class Db_sys_regy_itm { public Db_sys_regy_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;} diff --git a/140_dbs/src/gplx/dbs/Db_sys_regy_mgr_tst.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.java similarity index 92% rename from 140_dbs/src/gplx/dbs/Db_sys_regy_mgr_tst.java rename to 140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.java index 4de9b10cf..fa0d9f899 100644 --- a/140_dbs/src/gplx/dbs/Db_sys_regy_mgr_tst.java +++ b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_mgr_tst.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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; import org.junit.*; public class Db_sys_regy_mgr_tst { @Before public void init() {fxt.Init();} private Db_sys_regy_mgr_fxt fxt = new Db_sys_regy_mgr_fxt(); @@ -41,8 +41,8 @@ class Db_sys_regy_mgr_fxt { private Db_sys_regy_mgr sys_regy_mgr; public void Init() { if (sys_regy_mgr == null) { - Db_conn_pool.I.Set_mem("test_db", Db_sys_regy_tbl.new_meta("test_regy")); - sys_regy_mgr = new Db_sys_regy_mgr(Db_url_.mem_("test_db"), "test_regy"); + Db_conn_pool.I.Get_or_new__mem("test_db"); + sys_regy_mgr = new Db_sys_regy_mgr(Db_url_.mem_("test_db"), "test_regy", true); } } public Db_sys_regy_mgr_fxt Exec_set(String grp, String key, String val) {sys_regy_mgr.Set(grp, key, val); return this;} diff --git a/140_dbs/src/gplx/dbs/Db_sys_regy_tbl.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java similarity index 74% rename from 140_dbs/src/gplx/dbs/Db_sys_regy_tbl.java rename to 140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java index 09e6cea8a..c5ce94a4e 100644 --- a/140_dbs/src/gplx/dbs/Db_sys_regy_tbl.java +++ b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java @@ -15,32 +15,31 @@ 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.dbs; import gplx.*; -class Db_sys_regy_tbl implements Db_conn_itm { +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; +class Db_sys_regy_tbl { private final String tbl_name; + private Db_meta_tbl meta; private Db_conn conn; - public void Conn_term() {} public Db_sys_regy_tbl(Db_url url, String tbl_name) { this.tbl_name = tbl_name; -// this.meta = Db_sys_regy_tbl.new_meta(tbl_name); + this.meta = Db_sys_regy_tbl.new_meta(tbl_name); this.conn = Db_conn_pool.I.Get_or_new(url); - conn.Itms_add(this); } -// private Db_meta_tbl meta; + public void Create_table() {conn.Exec_create_tbl_and_idx(meta);} public void Insert(String grp, String key, String val) { - Db_stmt stmt = conn.New_stmt_insert(tbl_name, Flds.To_str_ary()); + Db_stmt stmt = conn.Stmt_insert(tbl_name, Flds.To_str_ary()); stmt.Clear().Val_str(grp).Val_str(key).Val_str(val).Exec_insert(); } public void Update(String grp, String key, String val) { - Db_stmt stmt = conn.New_stmt_update(tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Fld_regy_val); + Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Fld_regy_val); stmt.Clear().Val_str(val).Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_update(); } public void Delete(String grp, String key) { - Db_stmt stmt = conn.New_stmt_delete(tbl_name, Fld_regy_grp, Fld_regy_key); + Db_stmt stmt = conn.Stmt_delete(tbl_name, Fld_regy_grp, Fld_regy_key); stmt.Clear().Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_delete(); } public String Select_val_or(String grp, String key, String or) { - Db_stmt stmt = conn.New_stmt_select_all_where(tbl_name, Flds.To_str_ary(), Fld_regy_grp, Fld_regy_key); + Db_stmt stmt = conn.Stmt_select(tbl_name, Flds.To_str_ary(), Fld_regy_grp, Fld_regy_key); Db_rdr rdr = Db_rdr_.Null; try { rdr = stmt.Clear().Crt_str(Fld_regy_grp, grp).Crt_str(Fld_regy_key, key).Exec_select_as_rdr(); @@ -55,7 +54,7 @@ class Db_sys_regy_tbl implements Db_conn_itm { ; public static Db_meta_tbl new_meta(String tbl) { return Db_meta_tbl.new_(tbl, Flds.To_fld_ary() - , Db_meta_idx.new_unique(tbl, "key", Flds.To_str_ary()) + , Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary()) ); } } diff --git a/140_dbs/src_130_misc/gplx/dbs/PoolIds.java b/140_dbs/src/gplx/dbs/utls/PoolIds.java similarity index 92% rename from 140_dbs/src_130_misc/gplx/dbs/PoolIds.java rename to 140_dbs/src/gplx/dbs/utls/PoolIds.java index 3a7a6045a..1bec24158 100644 --- a/140_dbs/src_130_misc/gplx/dbs/PoolIds.java +++ b/140_dbs/src/gplx/dbs/utls/PoolIds.java @@ -15,7 +15,8 @@ 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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; +import gplx.dbs.qrys.*; public class PoolIds { public int FetchNext(Db_conn conn, String url) { Db_qry_select cmd = Db_qry_.select_().From_(Tbl_Name).Where_(Db_crt_.eq_(Fld_id_path, url)); @@ -31,7 +32,7 @@ public class PoolIds { return rv; } public int FetchNextAndCommit(String dbInfo, String url) { - Db_conn conn = Db_conn_pool_old._.Get_or_new(dbInfo); + Db_conn conn = Db_conn_pool.I.Get_or_new(dbInfo); int rv = PoolIds._.FetchNext(conn, url); PoolIds._.Commit(conn, url, rv + 1); return rv; diff --git a/140_dbs/tst/gplx/dbs/PoolIds_tst.java b/140_dbs/src/gplx/dbs/utls/PoolIds_tst.java similarity index 91% rename from 140_dbs/tst/gplx/dbs/PoolIds_tst.java rename to 140_dbs/src/gplx/dbs/utls/PoolIds_tst.java index 2a472b740..a1e7565f6 100644 --- a/140_dbs/tst/gplx/dbs/PoolIds_tst.java +++ b/140_dbs/src/gplx/dbs/utls/PoolIds_tst.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.dbs; import gplx.*; +package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; import org.junit.*; public class PoolIds_tst { @Before public void setup() { - conn = Db_conn_pool_old._.Get_or_new(Db_url_.Test); + conn = Db_conn_pool.I.Get_or_new(Db_url_.Test); Db_qry_fxt.DeleteAll(conn, PoolIds.Tbl_Name); mgr = PoolIds._; } diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprArg.java b/140_dbs/src/gplx/stores/DbMaprArg.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprArg.java rename to 140_dbs/src/gplx/stores/DbMaprArg.java diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprItm.java b/140_dbs/src/gplx/stores/DbMaprItm.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprItm.java rename to 140_dbs/src/gplx/stores/DbMaprItm.java diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprMgr.java b/140_dbs/src/gplx/stores/DbMaprMgr.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprMgr.java rename to 140_dbs/src/gplx/stores/DbMaprMgr.java diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java b/140_dbs/src/gplx/stores/DbMaprMgr_tst.java similarity index 97% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java rename to 140_dbs/src/gplx/stores/DbMaprMgr_tst.java index 08c388509..c987bb6de 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java +++ b/140_dbs/src/gplx/stores/DbMaprMgr_tst.java @@ -39,7 +39,7 @@ public class DbMaprMgr_tst { ))); wtr = DbMaprWtr.new_by_url_(Db_url_.Test); wtr.EnvVars().Add(DbMaprWtr.Key_Mgr, mgr); - conn = Db_conn_pool_old._.Get_or_new(Db_url_.Test); + conn = Db_conn_pool.I.Get_or_new(Db_url_.Test); Db_qry_fxt.DeleteAll(conn, "mock_discs", "mock_titles", "mock_chapters", "mock_streams"); } DbMaprMgr mgr; DbMaprWtr wtr; Db_conn conn; MockDisc disc; MockTitle title; MockChapter chapter; MockStream audio, subtitle; SrlMgr rdr; @Test public void PurgeObjTree() { diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java b/140_dbs/src/gplx/stores/DbMaprRdr.java similarity index 96% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java rename to 140_dbs/src/gplx/stores/DbMaprRdr.java index 671eaf933..84e0621c0 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java +++ b/140_dbs/src/gplx/stores/DbMaprRdr.java @@ -116,7 +116,7 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr { DbMaprMgr mgr; ListAdp rowStack = ListAdp_.new_(); public static DbMaprRdr new_(Db_url dbInfo, Criteria rootCrt) { DbMaprRdr rv = new DbMaprRdr(); - rv.conn = Db_conn_pool_old._.Get_or_new(dbInfo); rv.rootCrt = rootCrt; + rv.conn = Db_conn_pool.I.Get_or_new(dbInfo); rv.rootCrt = rootCrt; return rv; } DbMaprRdr() {} } \ No newline at end of file diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprWtr.java b/140_dbs/src/gplx/stores/DbMaprWtr.java similarity index 95% rename from 140_dbs/src_410_stores/gplx/stores/DbMaprWtr.java rename to 140_dbs/src/gplx/stores/DbMaprWtr.java index 908610918..2899f59f8 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprWtr.java +++ b/140_dbs/src/gplx/stores/DbMaprWtr.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.stores; import gplx.*; -import gplx.core.criterias.*; import gplx.dbs.*; +import gplx.core.criterias.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; public class DbMaprWtr extends DataWtr_base implements DataWtr { public void InitWtr(String key, Object val) {} @Override public Object StoreRoot(SrlObj root, String key) { @@ -85,7 +86,7 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr { DbMaprMgr mgr; Db_conn conn; String curTableName; Db_qry_insert insertCmd; public static DbMaprWtr new_by_url_(Db_url url) { DbMaprWtr rv = new DbMaprWtr(); - rv.conn = Db_conn_pool_old._.Get_or_new(url); + rv.conn = Db_conn_pool.I.Get_or_new(url); return rv; } DbMaprWtr() {} public static final String Key_Mgr = "DbMapr.mgr"; diff --git a/140_dbs/src_410_stores/gplx/stores/Db_data_rdr.java b/140_dbs/src/gplx/stores/Db_data_rdr.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/Db_data_rdr.java rename to 140_dbs/src/gplx/stores/Db_data_rdr.java diff --git a/140_dbs/src_410_stores/gplx/stores/Db_data_rdr_.java b/140_dbs/src/gplx/stores/Db_data_rdr_.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/Db_data_rdr_.java rename to 140_dbs/src/gplx/stores/Db_data_rdr_.java diff --git a/140_dbs/src_410_stores/gplx/stores/MockDiscObj.java b/140_dbs/src/gplx/stores/MockDiscObj.java similarity index 100% rename from 140_dbs/src_410_stores/gplx/stores/MockDiscObj.java rename to 140_dbs/src/gplx/stores/MockDiscObj.java diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_bldr.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_bldr.java deleted file mode 100644 index 3cdaeafb2..000000000 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_bldr.java +++ /dev/null @@ -1,54 +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.dbs; import gplx.*; -public class Db_stmt_bldr implements RlsAble { - private Db_conn conn; - private Db_stmt create, update, delete; - private String tbl_name; private String[] flds_keys, flds_vals, flds_all; - public Db_stmt_bldr(String tbl_name, String[] flds_keys, String... flds_vals) { - this.tbl_name = tbl_name; this.flds_keys = flds_keys; this.flds_vals = flds_vals; - flds_all = String_.Ary_add(flds_keys, flds_vals); - } - public Db_stmt_bldr Init(Db_conn v) { - this.conn = v; - conn.Txn_mgr().Txn_bgn_if_none(); - return this; - } - public Db_stmt Get(byte cmd_mode) { - switch (cmd_mode) { - case Db_cmd_mode.Create: if (create == null) create = Db_stmt_.new_insert_(conn, tbl_name, flds_all); return create; - case Db_cmd_mode.Update: if (update == null) update = Db_stmt_.new_update_(conn, tbl_name, flds_keys, flds_vals); return update; - case Db_cmd_mode.Delete: if (delete == null) delete = Db_stmt_.new_delete_(conn, tbl_name, flds_keys); return delete; - case Db_cmd_mode.Ignore: return Db_stmt_.Null; - default: throw Err_.unhandled(cmd_mode); - } - } - public void Commit() { - conn.Txn_mgr().Txn_end_all(); - } - public void Rls() { - conn = null; - create = Rls(create); - update = Rls(update); - delete = Rls(delete); - } - private Db_stmt Rls(Db_stmt stmt) { - if (stmt != null) stmt.Rls(); - return null; - } -} diff --git a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_mode.java b/140_dbs/src_130_misc/gplx/dbs/Db_cmd_mode.java deleted file mode 100644 index 12ec101cd..000000000 --- a/140_dbs/src_130_misc/gplx/dbs/Db_cmd_mode.java +++ /dev/null @@ -1,32 +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.dbs; import gplx.*; -public class Db_cmd_mode { - public static final byte Create = 1, Update = 2, Delete = 3, Ignore = 4; - public static byte Xto_update(byte cur) { - switch (cur) { - case Create: // ignore update if item is already marked for create - case Delete: // ignore update if item is already marked for delete (might want to throw error) - return cur; - case Ignore: // must mark for update - case Update: // return self - return Update; - default: throw Err_.unhandled(cur); - } - } -} \ No newline at end of file diff --git a/140_dbs/tst/gplx/dbs/Db_conn_fxt.java b/140_dbs/tst/gplx/dbs/Db_conn_fxt.java index 7d870a2e9..f9273c491 100644 --- a/140_dbs/tst/gplx/dbs/Db_conn_fxt.java +++ b/140_dbs/tst/gplx/dbs/Db_conn_fxt.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; -import gplx.dbs.engines.sqlite.*; +import gplx.dbs.engines.sqlite.*; import gplx.dbs.engines.mysql.*; import gplx.dbs.engines.postgres.*; public class Db_conn_fxt implements RlsAble { public Db_conn Conn() {return conn;} public Db_conn_fxt Conn_(Db_conn v) {conn = v; return this;} Db_conn conn; public void DmlAffectedAvailable_(boolean v) {dmlAffectedAvailable = v;} private boolean dmlAffectedAvailable = true; @@ -46,10 +46,9 @@ public class Db_conn_fxt implements RlsAble { } public void Rls() {conn.Conn_term();} - public static Db_conn Mysql() {return Db_conn_.new_and_open_(Db_url__mysql.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} - public static Db_conn Tdb(String fileName) {return Db_conn_.new_and_open_(Db_url_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));} - public static Db_conn Postgres() {return Db_conn_.new_and_open_(Db_url__postgres.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} - public static Db_conn Sqlite() {return Db_conn_.new_and_open_(Db_url__sqlite.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));} -// public static Db_conn Mssql() {return MssqlConnectUrl.WindowsAuth(".", "unit_tests"); + public static Db_conn Mysql() {return Db_conn_pool.I.Get_or_new(Mysql_url.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} + public static Db_conn Tdb(String fileName) {return Db_conn_pool.I.Get_or_new(Db_url_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));} + public static Db_conn Postgres() {return Db_conn_pool.I.Get_or_new(Postgres_url.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} + public static Db_conn Sqlite() {return Db_conn_pool.I.Get_or_new(Sqlite_url.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));} public static final boolean SkipPostgres = Tfds.SkipDb || true; } \ No newline at end of file diff --git a/140_dbs/tst/gplx/dbs/Db_qry_fxt.java b/140_dbs/tst/gplx/dbs/Db_qry_fxt.java index ff5fa67d8..5a6ba9843 100644 --- a/140_dbs/tst/gplx/dbs/Db_qry_fxt.java +++ b/140_dbs/tst/gplx/dbs/Db_qry_fxt.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; import gplx.*; +import gplx.dbs.qrys.*; public class Db_qry_fxt { public static void Insert_kvo(Db_conn conn, String tblName, KeyValList kvList) { Db_qry_insert qry = Db_qry_.insert_(tblName); diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/db_CrudOps_tst.java b/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java similarity index 96% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/db_CrudOps_tst.java rename to 140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java index ee5605735..5752cf4c5 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/db_CrudOps_tst.java +++ b/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java @@ -15,8 +15,8 @@ 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.dbs; import gplx.*; -import org.junit.*; +package gplx.dbs.engines; import gplx.*; import gplx.dbs.*; +import org.junit.*; import gplx.dbs.qrys.*; public class db_CrudOps_tst { CrudOpsFxt fx = new CrudOpsFxt(); @Test public void Mysql() {if (Tfds.SkipDb) return; diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java b/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java similarity index 96% rename from 140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java rename to 140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.java index 8eedceff2..ff5917e08 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java +++ b/140_dbs/tst/gplx/dbs/engines/db_DataTypes_tst.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.dbs; import gplx.*; +package gplx.dbs.engines; import gplx.*; import gplx.dbs.*; import org.junit.*; public class db_DataTypes_tst { DataTypes_base_fxt fx = new DataTypes_base_fxt(); diff --git a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java index c277bc65e..86b97577f 100644 --- a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.groupBys; import gplx.*; import gplx.dbs.*; -import org.junit.*; +import org.junit.*; import gplx.dbs.qrys.*; public abstract class GroupBys_base_tst { protected abstract Db_conn provider_(); protected Db_conn conn; diff --git a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java index a92892e12..b4cd96ea7 100644 --- a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java +++ b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.insertIntos; import gplx.*; import gplx.dbs.*; -import org.junit.*; +import org.junit.*; import gplx.dbs.qrys.*; public abstract class InsertIntos_base_tst { protected abstract Db_conn provider_(); protected Db_conn conn; diff --git a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java index 931ac25da..7fb40eac6 100644 --- a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java +++ b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.joins; import gplx.*; import gplx.dbs.*; -import org.junit.*; import gplx.dbs.sqls.*; +import org.junit.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; public abstract class Joins_base_tst { protected Db_conn conn; @Before public void setup() { diff --git a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java index 32a627a46..5a0a7ccd6 100644 --- a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.orderBys; import gplx.*; import gplx.dbs.*; -import org.junit.*; +import org.junit.*; import gplx.dbs.qrys.*; public abstract class OrderBys_base_tst { @Before public void setup() { conn = provider_(); diff --git a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java index f58762273..a29dfeb14 100644 --- a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java +++ b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java @@ -16,8 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs; -import gplx.*; - +import gplx.*; import gplx.dbs.engines.sqlite.*; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; @@ -50,7 +49,7 @@ public class SqliteDbMain { // } private void CreateMany(int number, int base_val) { long time_bgn = Env_.TickCount(); - Db_conn provider = Sqlite_engine_.Conn_load_or_make_(Io_url_.new_fil_("E:\\test.sqlite3")); + Db_conn provider = Db_conn_pool.I.Get_or_new__sqlite(Io_url_.new_fil_("E:\\test.sqlite3")); String tbl_sql = String_.Concat_lines_nl ( "CREATE TABLE fsdb_xtn_thm" , "( thm_id integer NOT NULL PRIMARY KEY" diff --git a/400_xowa/src/gplx/cache/Gfo_cache_mgr_bry.java b/400_xowa/src/gplx/cache/Gfo_cache_mgr_bry.java index 70984323c..e38b1f986 100644 --- a/400_xowa/src/gplx/cache/Gfo_cache_mgr_bry.java +++ b/400_xowa/src/gplx/cache/Gfo_cache_mgr_bry.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.cache; import gplx.*; +import gplx.core.primitives.*; public class Gfo_cache_mgr_bry extends Gfo_cache_mgr_base { public Object Get_or_null(byte[] key) {return Base_get_or_null(key);} public void Add(byte[] key, Object val) {Base_add(key, val);} @@ -36,3 +37,17 @@ class Gfo_cache_itm_comparer implements gplx.lists.ComparerAble { } public static final Gfo_cache_itm_comparer Touched_asc = new Gfo_cache_itm_comparer(); } +class Io_url_exists_mgr { + private gplx.cache.Gfo_cache_mgr_bry cache_mgr = new gplx.cache.Gfo_cache_mgr_bry(); + public Io_url_exists_mgr() { + cache_mgr.Compress_max_(Int_.MaxValue); + } + public boolean Has(Io_url url) { + byte[] url_key = url.RawBry(); + Object rv_obj = cache_mgr.Get_or_null(url_key); + if (rv_obj != null) return ((Bool_obj_ref)rv_obj).Val(); // cached val exists; use it + boolean exists = Io_mgr._.ExistsFil(url); + cache_mgr.Add(url_key, Bool_obj_ref.new_(exists)); + return exists; + } +} diff --git a/400_xowa/src/gplx/fsdb/Binary_search_.java b/400_xowa/src/gplx/core/lists/Binary_search_.java similarity index 95% rename from 400_xowa/src/gplx/fsdb/Binary_search_.java rename to 400_xowa/src/gplx/core/lists/Binary_search_.java index 4234c1ed2..7a154cd29 100644 --- a/400_xowa/src/gplx/fsdb/Binary_search_.java +++ b/400_xowa/src/gplx/core/lists/Binary_search_.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.fsdb; import gplx.*; +package gplx.core.lists; import gplx.*; import gplx.core.*; public class Binary_search_ { public static int Search(CompareAble[] ary, int ary_len, CompareAble val) { if (ary_len == 1) return 0; diff --git a/400_xowa/src/gplx/fsdb/Binary_search__tst.java b/400_xowa/src/gplx/core/lists/Binary_search__tst.java similarity index 94% rename from 400_xowa/src/gplx/fsdb/Binary_search__tst.java rename to 400_xowa/src/gplx/core/lists/Binary_search__tst.java index 5ba73c772..5165d3c87 100644 --- a/400_xowa/src/gplx/fsdb/Binary_search__tst.java +++ b/400_xowa/src/gplx/core/lists/Binary_search__tst.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.fsdb; import gplx.*; +package gplx.core.lists; import gplx.*; import gplx.core.*; import org.junit.*; import gplx.core.primitives.*; public class Binary_search__tst { private Binary_search__fxt fxt = new Binary_search__fxt(); diff --git a/400_xowa/src/gplx/fsdb/Fsdb_cfg_grp.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java similarity index 71% rename from 400_xowa/src/gplx/fsdb/Fsdb_cfg_grp.java rename to 400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java index a1f79fa6b..b77f090fe 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_cfg_grp.java +++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_grp.java @@ -15,25 +15,25 @@ 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.fsdb; import gplx.*; -public class Fsdb_cfg_grp { +package gplx.dbs.cfgs; import gplx.*; import gplx.dbs.*; +public class Db_cfg_grp { private OrderedHash itms = OrderedHash_.new_(); - public Fsdb_cfg_grp(String grp) {this.grp = grp;} + public Db_cfg_grp(String grp) {this.grp = grp;} public String Grp() {return grp;} private String grp; public void Insert(String key, String val) { if (itms.Has(key)) throw Err_.new_fmt_("cfg_grp.Insert failed; key={0}", key); - Fsdb_cfg_itm itm = new Fsdb_cfg_itm(grp, key, val); + Fsm_cfg_itm itm = new Fsm_cfg_itm(grp, key, val); itms.Add(key, itm); } public void Update(String key, String val) { - Fsdb_cfg_itm itm = (Fsdb_cfg_itm)itms.Fetch(key); + Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key); if (itm == null) throw Err_.new_fmt_("cfg_grp.Update failed; key={0}", key); itm.Val_(val); } public void Upsert(String key, String val) { - Fsdb_cfg_itm itm = (Fsdb_cfg_itm)itms.Fetch(key); + Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key); if (itm == null) { - itm = new Fsdb_cfg_itm(grp, key, val); + itm = new Fsm_cfg_itm(grp, key, val); itms.Add(key, itm); } else @@ -50,14 +50,14 @@ public class Fsdb_cfg_grp { return rv == null ? or : Int_.parse_(rv); } public String Get_str_or(String key, String or) { - Fsdb_cfg_itm itm = (Fsdb_cfg_itm)itms.Fetch(key); + Fsm_cfg_itm itm = (Fsm_cfg_itm)itms.Fetch(key); return itm == null ? or : itm.Val(); } - public static final Fsdb_cfg_grp Null = new Fsdb_cfg_grp(); Fsdb_cfg_grp() {} + public static final Db_cfg_grp Null = new Db_cfg_grp(); Db_cfg_grp() {} } -class Fsdb_cfg_itm { - public Fsdb_cfg_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;} +class Fsm_cfg_itm { + public Fsm_cfg_itm(String grp, String key, String val) {this.grp = grp; this.key = key; this.val = val;} public String Grp() {return grp;} private String grp; public String Key() {return key;} private String key; - public String Val() {return val;} public Fsdb_cfg_itm Val_(String v) {val = v; return this;} private String val; + public String Val() {return val;} public Fsm_cfg_itm Val_(String v) {val = v; return this;} private String val; } diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java new file mode 100644 index 000000000..2b00c9b60 --- /dev/null +++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java @@ -0,0 +1,84 @@ +/* +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.dbs.cfgs; import gplx.*; import gplx.dbs.*; +import gplx.dbs.*; +public class Db_cfg_tbl { + private String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_grp, fld_key, fld_val; + private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, String tbl_v1, String tbl_v2) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = tbl_v1; + fld_prefix = "cfg_"; + } + else + tbl_name = tbl_v2; + fld_grp = flds.Add_str(fld_prefix + "grp", 255); + fld_key = flds.Add_str(fld_prefix + "key", 255); + fld_val = flds.Add_str(fld_prefix + "val", 1024); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_grp, fld_key, fld_val) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_update = stmt_select = null; + } + public void Insert(String grp, String key, String val) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear().Val_str(fld_grp, grp).Val_str(fld_key, key).Val_str(fld_val, val).Exec_insert(); + } + public void Update(String grp, String key, String val) { + if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_grp, fld_key)); + stmt_update.Clear().Val_str(fld_val, val).Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_update(); + } + public int Select_as_int_or_fail(String grp, String key) { + int rv = Select_as_int_or(grp, key, Int_.MinValue); + if (rv == Int_.MinValue) throw Err_.new_fmt_("dbs.cfg_tbl.Select_as_int_or_fail: tbl={0} grp={1} key={2}", tbl_name, grp, key); + return rv; + } + public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);} + public String Select_as_str_or(String grp, String key, String or) { + if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, String_.Ary(fld_val), fld_grp, fld_key)); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select.Clear() + .Crt_str(fld_grp, grp) + .Crt_str(fld_key, key) + .Exec_select_as_rdr(); + return rdr.Move_next() ? rdr.Read_str(fld_val) : or; + } finally {rdr.Rls();} + } + public Db_cfg_grp Select_as_grp(String grp) { + Db_cfg_grp rv = null; + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_grp); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt.Clear().Crt_str(fld_grp, grp).Exec_select_as_rdr(); + while (rdr.Move_next()) { + if (rv == null) rv = new Db_cfg_grp(grp); + rv.Upsert(rdr.Read_str(fld_key), rdr.Read_str(fld_val)); + } + } + finally {rdr.Rls();} + return rv == null ? Db_cfg_grp.Null : rv; + } + public void Rls() {conn.Conn_term();} +} diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java index 00c72a5bd..77c1cdb35 100644 --- a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java +++ b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.schemas; import gplx.*; import gplx.dbs.*; +import gplx.dbs.qrys.*; public class Schema_loader_mgr_ { public static final Schema_loader_mgr Null = new Schema_loader_mgr__null(); public static final Schema_loader_mgr Sqlite = new Schema_loader_mgr__sqlite(); diff --git a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java index 62cd43707..c95eed588 100644 --- a/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java +++ b/400_xowa/src/gplx/dbs/schemas/updates/Schema_update_cmd_.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.dbs.schemas.updates; import gplx.*; import gplx.dbs.*; import gplx.dbs.schemas.*; +import gplx.dbs.engines.sqlite.*; public class Schema_update_cmd_ { public static Schema_update_cmd Make_tbl_create(String tbl_name, String tbl_sql, Db_idx_itm... tbl_idxs) {return new Schema_update_cmd__tbl_create(tbl_name, tbl_sql, tbl_idxs);} } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_bin_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_bin_tbl.java deleted file mode 100644 index 67e5ee563..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_bin_tbl.java +++ /dev/null @@ -1,131 +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.fsdb; import gplx.*; -import gplx.dbs.*; import gplx.ios.*; -public class Fsdb_bin_tbl { - public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} - public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_bin_owner_id, Fld_bin_owner_tid, Fld_bin_part_id, Fld_bin_data_url, Fld_bin_data);} - public static void Insert_rdr(Db_conn p, int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) { - Db_stmt stmt = Insert_stmt(p); - try {Insert_rdr(stmt, id, tid, bin_len, bin_rdr);} - finally {stmt.Rls();} - } - public static long Insert_rdr(Db_stmt stmt, int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) { - long rv = bin_len; - stmt.Clear() - .Val_int(id) - .Val_byte(tid) - .Val_int(Null_part_id) - .Val_str(Null_data_url) - ; - if (Sqlite_engine_.Supports_read_binary_stream) - stmt.Val_rdr_(bin_rdr, bin_len); - else { - byte[] bin_ary = Io_stream_rdr_.Load_all_as_bry(Bry_bfr.new_(), bin_rdr); - stmt.Val_bry(bin_ary); - rv = bin_ary.length; - } - stmt.Exec_insert(); - return rv; - } - public static void Delete(Db_conn p, int id) { - Db_stmt stmt = Delete_stmt(p); - try {Delete(stmt, id);} - finally {stmt.Rls();} - } - private static Db_stmt Delete_stmt(Db_conn p) {return Db_stmt_.new_delete_(p, Tbl_name, Fld_bin_owner_id);} - private static void Delete(Db_stmt stmt, int id) { - stmt.Clear() - .Val_int(id) - .Exec_delete(); - } - public static Io_stream_rdr Select_as_rdr(Db_conn p, int owner) { - Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_bin_data).Where_(Db_crt_.eq_(Fld_bin_owner_id, owner)); - DataRdr rdr = DataRdr_.Null; - try { - rdr = p.Exec_qry_as_rdr(qry); - if (rdr.MoveNextPeer()) { - if (Sqlite_engine_.Supports_read_binary_stream) - return rdr.ReadRdr(Fld_bin_data); - else - return gplx.ios.Io_stream_rdr_.mem_(Read_bin_data(rdr)); - } - else - return gplx.ios.Io_stream_rdr_.Null; - } - finally {rdr.Rls();} - } - public static boolean Select_to_url(Db_conn p, int owner, Io_url url, byte[] bin_bfr, int bin_flush_when) { - Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_bin_data).Where_(Db_crt_.eq_(Fld_bin_owner_id, owner)); - DataRdr rdr = DataRdr_.Null; - try { - rdr = p.Exec_qry_as_rdr(qry); - if (rdr.MoveNextPeer()) { - if (Sqlite_engine_.Supports_read_binary_stream) - return Select_to_fsys__stream(rdr, url, bin_bfr, bin_flush_when); - else { - byte[] bry = Read_bin_data(rdr); - Io_mgr._.SaveFilBry(url, bry); - return true; - } - } - else - return false; - } - finally {rdr.Rls();} - } - public static boolean Select_to_fsys__stream(DataRdr rdr, Io_url url, byte[] bin_bfr, int bin_flush_when) { - Io_stream_rdr db_stream = Io_stream_rdr_.Null; - IoStream fs_stream = IoStream_.Null; - try { - db_stream = rdr.ReadRdr(Fld_bin_data); if (db_stream == Io_stream_rdr_.Null) return false; - fs_stream = Io_mgr._.OpenStreamWrite(url); - int pos = 0, flush_nxt = bin_flush_when; - while (true) { - int read = db_stream.Read(bin_bfr, pos, bin_bfr.length); if (read == Io_stream_rdr_.Read_done) break; - fs_stream.Write(bin_bfr, 0, read); - if (pos > flush_nxt) { - fs_stream.Flush(); - flush_nxt += bin_flush_when; - } - } - fs_stream.Flush(); - return true; - } finally { - db_stream.Rls(); - fs_stream.Rls(); - } - } - private static byte[] Read_bin_data(DataRdr rdr) { - byte[] rv = rdr.ReadBry(Fld_bin_data); - return rv == null ? Bry_.Empty : rv; // NOTE: bug in v0.10.1 where .ogg would save as null; return Bry_.Empty instead, else java.io.ByteArrayInputStream would fail on null - } - public static final String Tbl_name = "fsdb_bin", Fld_bin_owner_id = "bin_owner_id", Fld_bin_owner_tid = "bin_owner_tid", Fld_bin_part_id = "bin_part_id", Fld_bin_data_url = "bin_data_url", Fld_bin_data = "bin_data"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_bin" - , "( bin_owner_id integer NOT NULL PRIMARY KEY" - , ", bin_owner_tid byte NOT NULL" - , ", bin_part_id integer NOT NULL" - , ", bin_data_url varchar(255) NOT NULL" - , ", bin_data mediumblob NOT NULL" - , ");" - ); - public static final byte Owner_tid_fil = 1, Owner_tid_thm = 2; - public static final int Null_db_bin_id = -1, Null_size = -1, Null_part_id = -1; - public static final String Null_data_url = ""; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl.java deleted file mode 100644 index 923361c7e..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_cfg_tbl.java +++ /dev/null @@ -1,143 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public interface Fsdb_cfg_tbl extends RlsAble { - Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created); - void Insert(String grp, String key, String val); - void Update(String grp, String key, String val); - int Select_as_int_or(String grp, String key, int or); - int Select_as_int_or_fail(String grp, String key); - String Select_as_str_or(String grp, String key, String or); - Fsdb_cfg_grp Select_as_grp(String grp); -} -abstract class Fsdb_cfg_tbl_base { - public abstract int Select_as_int_or(String grp, String key, int or); - public int Select_as_int_or_fail(String grp, String key) { - int rv = Select_as_int_or(grp, key, Int_.MinValue); - if (rv == Int_.MinValue) throw Err_.new_fmt_("fsdb_cfg did not have itm: grp={0} key={1}", grp, key); - return rv; - } -} -class Fsdb_cfg_tbl_mem extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl { - private HashAdp grps = HashAdp_.new_(); - public Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created) {return this;} - public void Insert(String grp, String key, String val) { - Fsdb_cfg_grp grp_itm = Grps_get_or_make(grp); - grp_itm.Insert(key, val); - } - public void Update(String grp, String key, String val) { - Fsdb_cfg_grp grp_itm = Grps_get_or_make(grp); - grp_itm.Update(key, val); - } - @Override public int Select_as_int_or(String grp, String key, int or) { - Fsdb_cfg_grp grp_itm = Grps_get_or_null(grp); - return grp_itm == null ? or : grp_itm.Get_int_or(grp, or); - } - public String Select_as_str_or(String grp, String key, String or) { - Fsdb_cfg_grp grp_itm = Grps_get_or_null(grp); - return grp_itm == null ? or : grp_itm.Get_str_or(grp, or); - } - public Fsdb_cfg_grp Select_as_grp(String grp) {return Grps_get_or_null(grp);} - public void Rls() {} - private Fsdb_cfg_grp Grps_get_or_make(String grp) { - Fsdb_cfg_grp rv = (Fsdb_cfg_grp)grps.Fetch(grp); - if (rv == null) { - rv = new Fsdb_cfg_grp(grp); - grps.Add(grp, rv); - } - return rv; - } - public Fsdb_cfg_grp Grps_get_or_null(String grp) {return (Fsdb_cfg_grp)grps.Fetch(grp);} -} -class Fsdb_cfg_tbl_sql extends Fsdb_cfg_tbl_base implements Fsdb_cfg_tbl { - private Db_conn conn; - private Db_stmt stmt_insert, stmt_update, stmt_select; - public Fsdb_cfg_tbl Ctor(Db_conn conn, boolean created) { - this.conn = conn; - if (created) Create_table(); - return this; - } - private void Create_table() { - Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(conn, Idx_main); - } - private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_cfg_grp, Fld_cfg_key, Fld_cfg_val);} - public void Insert(String grp, String key, String val) { - if (stmt_insert == null) stmt_insert = Insert_stmt(); - stmt_insert.Clear() - .Val_str(grp) - .Val_str(key) - .Val_str(val) - .Exec_insert(); - } - private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key), Fld_cfg_val);} - public void Update(String grp, String key, String val) { - if (stmt_update == null) stmt_update = Update_stmt(); - stmt_update.Clear() - .Val_str(val) - .Val_str(grp) - .Val_str(key) - .Exec_update(); - } - private Db_stmt Select_stmt() { - Db_qry_select qry = Db_qry_.select_val_(Tbl_name, Fld_cfg_val, gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cfg_grp, ""), Db_crt_.eq_(Fld_cfg_key, ""))); - return conn.New_stmt(qry); - } - @Override public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);} - public String Select_as_str_or(String grp, String key, String or) { - if (stmt_select == null) stmt_select = Select_stmt(); - Object rv = (String)stmt_select.Clear() - .Val_str(grp) - .Val_str(key) - .Exec_select_val(); - return rv == null ? or : (String)rv; - } - public Fsdb_cfg_grp Select_as_grp(String grp) { - Fsdb_cfg_grp rv = null; - Db_qry_select qry = Db_qry_.select_cols_(Tbl_name, gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cfg_grp, "")), Fld_cfg_key, Fld_cfg_val); - DataRdr rdr = DataRdr_.Null; - try { - rdr = conn.New_stmt(qry).Clear().Val_str(grp).Exec_select(); - while (rdr.MoveNextPeer()) { - if (rv == null) rv = new Fsdb_cfg_grp(grp); - String key = rdr.ReadStr(Fld_cfg_key); - String val = rdr.ReadStr(Fld_cfg_val); - rv.Upsert(key, val); - } - } - finally {rdr.Rls();} - return rv == null ? Fsdb_cfg_grp.Null : rv; - } - public void Rls() { - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - if (stmt_update != null) {stmt_update.Rls(); stmt_update = null;} - if (stmt_select != null) {stmt_select.Rls(); stmt_select = null;} - } - private static final String Tbl_name = "fsdb_cfg", Fld_cfg_grp = "cfg_grp", Fld_cfg_key = "cfg_key", Fld_cfg_val = "cfg_val"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_cfg" - , "( cfg_grp varchar(255) NOT NULL" - , ", cfg_key varchar(255) NOT NULL" - , ", cfg_val varchar(1024) NOT NULL" - , ");" - ); - private static final Db_idx_itm - Idx_main = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS fsdb_cfg__main ON fsdb_cfg (cfg_grp, cfg_key, cfg_val);") - ; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java deleted file mode 100644 index e6ea2aef1..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java +++ /dev/null @@ -1,112 +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.fsdb; import gplx.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; -public class Fsdb_db_abc_mgr implements RlsAble { - private Db_conn boot_provider; - public int Next_id() {return cfg_mgr.Next_id();} - public Fsdb_mnt_mgr Mnt_mgr() {return mnt_mgr;} private Fsdb_mnt_mgr mnt_mgr; - public Fsdb_db_abc_mgr(Fsdb_mnt_mgr mnt_mgr) {this.mnt_mgr = mnt_mgr;} - public Fsdb_db_atr_mgr Atr_mgr() {return atr_mgr;} private Fsdb_db_atr_mgr atr_mgr; - public Fsdb_db_bin_mgr Bin_mgr() {return bin_mgr;} private Fsdb_db_bin_mgr bin_mgr; - public Fsdb_cfg_mgr Cfg_mgr() {return cfg_mgr;} private Fsdb_cfg_mgr cfg_mgr; - public Fsdb_db_abc_mgr Init(Io_url dir) { - Io_url url = dir.GenSubFil("fsdb.abc.sqlite3"); - if (Io_mgr._.ExistsFil(url)) - Init_load(dir, url); - else - Init_make(dir, url); - return this; - } - public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); - rv.Db_bin_id_(bin_db_id); - int fil_id = atr_mgr.Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_db_id, bin_len, bin_rdr); - bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsdb_bin_tbl.Owner_tid_fil, bin_len, bin_rdr); - bin_mgr.Increment(bin_len); - } - public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); - rv.Db_bin_id_(bin_db_id); - int thm_id = atr_mgr.Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr); - bin_len = bin_mgr.Insert(bin_db_id, thm_id, Fsdb_bin_tbl.Owner_tid_thm, bin_len, bin_rdr); - bin_mgr.Increment(bin_len); - } - public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr, int img_w, int img_h) { - int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); - rv.Db_bin_id_(bin_db_id); - int fil_id = atr_mgr.Img_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr); - bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsdb_bin_tbl.Owner_tid_fil, bin_len, bin_rdr); - bin_mgr.Increment(bin_len); - } - public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsdb_xtn_thm_itm thm) { - Fsdb_fil_itm fil_itm = atr_mgr.Fil_select(dir, fil); - return atr_mgr.Thm_select(fil_itm.Id(), thm); - } - public Fsdb_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) { - return atr_mgr.Fil_select(dir, fil); - } - public void Txn_open() { - boot_provider.Txn_mgr().Txn_bgn_if_none(); - atr_mgr.Txn_open(); - bin_mgr.Txn_open(); - } - public void Txn_save() { - atr_mgr.Txn_save(boot_provider); - bin_mgr.Txn_save(); - cfg_mgr.Txn_save(); - } - public void Rls() { - atr_mgr.Rls(); - bin_mgr.Rls(); - cfg_mgr.Rls(); - boot_provider.Conn_term(); - } - private void Init_load(Io_url dir, Io_url boot_url) { - Db_url connect = Db_url__sqlite.load_(boot_url); - boot_provider = Db_conn_.new_and_open_(connect); - atr_mgr = Fsdb_db_atr_mgr.load_(this, boot_provider, dir); - bin_mgr = Fsdb_db_bin_mgr.load_(boot_provider, dir); - cfg_mgr = Fsdb_cfg_mgr.load_(this, boot_provider); - if (!cfg_mgr.Patch_next_id()) Fsdb_db_abc_mgr_.Patch_next_id(this, dir); - } - private void Init_make(Io_url dir, Io_url boot_url) { - Db_url connect = Db_url__sqlite.make_(boot_url); - boot_provider = Db_conn_.new_and_open_(connect); - Sqlite_engine_.Pragma_page_size_4096(boot_provider); - atr_mgr = Fsdb_db_atr_mgr.make_(this, boot_provider, dir); - bin_mgr = Fsdb_db_bin_mgr.make_(boot_provider, dir); - cfg_mgr = Fsdb_cfg_mgr.make_(this, boot_provider); - this.Txn_save(); // immediately save new entries in atr,cfg - } -} -class Fsdb_db_abc_mgr_ { - public static void Patch_next_id(Fsdb_db_abc_mgr abc_mgr, Io_url dir) { - if (!String_.Eq(dir.NameOnly(), "fsdb.user")) return; - Fsdb_db_atr_mgr atr_mgr = abc_mgr.Atr_mgr(); - Fsdb_cfg_mgr cfg_mgr = abc_mgr.Cfg_mgr(); - int last_id = -1; - if (atr_mgr.Len() > 0) { - Fsdb_db_atr_fil atr_fil = atr_mgr.Get_at(0); - int max_fil_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1); - int max_thm_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1); - last_id = max_fil_id > max_thm_id ? max_fil_id : max_thm_id; - } - cfg_mgr.Patch_next_id_exec(last_id); - } -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java deleted file mode 100644 index 947b28d9a..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java +++ /dev/null @@ -1,76 +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.fsdb; import gplx.*; -import gplx.dbs.*; import gplx.cache.*; -public class Fsdb_db_atr_mgr implements RlsAble { - private Fsdb_db_atr_fil[] itms; private Fsdb_db_atr_fil itms_0; - public int Len() {return itms.length;} - public Fsdb_db_atr_fil Get_at(int i) {return i == Id_0 ? itms_0 : itms[i];} - public Fsdb_fil_itm Fil_select(byte[] dir, byte[] fil) {return itms_0.Fil_select(dir, fil);} - public boolean Thm_select(int owner_id, Fsdb_xtn_thm_itm thm) {return itms_0.Thm_select(owner_id, thm);} - public int Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - return itms_0.Fil_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, modified, hash, bin_db_id, bin_len, bin_rdr); - } - public int Img_insert(Fsdb_xtn_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - return itms_0.Img_insert(rv, dir, fil, ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr); - } - public int Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int width, int height, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - return itms_0.Thm_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, width, height, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr); - } - public void Txn_open() { - int len = itms.length; - for (int i = 0; i < len; i++) { - Fsdb_db_atr_fil itm = itms[i]; - itm.Txn_open(); - } - } - public void Txn_save(Db_conn conn) { - Fsdb_db_atr_tbl.Commit_all(conn, itms); - int len = itms.length; - for (int i = 0; i < len; i++) { - Fsdb_db_atr_fil itm = itms[i]; - itm.Txn_save(); - } - } - public void Rls() { - int len = itms.length; - for (int i = 0; i < len; i++) { - Fsdb_db_atr_fil itm = itms[i]; - itm.Rls(); - } - } - public static Fsdb_db_atr_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) { - Fsdb_db_atr_mgr rv = new Fsdb_db_atr_mgr(); - rv.itms = Fsdb_db_atr_tbl.Select_all(abc_mgr, p, dir); - rv.itms_0 = rv.itms[0]; - return rv; - } - public static Fsdb_db_atr_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) { - Fsdb_db_atr_tbl.Create_table(p); - Fsdb_db_atr_mgr rv = new Fsdb_db_atr_mgr(); - Fsdb_db_atr_fil itm = Fsdb_db_atr_fil.make_(abc_mgr, Id_0, url_(dir, Id_0), Path_bgn_0); - rv.itms_0 = itm; - rv.itms = new Fsdb_db_atr_fil[] {itm}; - return rv; - } - private static Io_url url_(Io_url dir, int id) { - return dir.GenSubFil_ary("fsdb.atr.", Int_.Xto_str_pad_bgn(id, 2), ".sqlite3"); - } - public static final int Id_0 = 0; - public static final String Path_bgn_0 = ""; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_tbl.java deleted file mode 100644 index ddd66d459..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_tbl.java +++ /dev/null @@ -1,81 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_db_atr_tbl { - public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} - public static Fsdb_db_atr_fil[] Select_all(Fsdb_db_abc_mgr abc_mgr, Db_conn p, Io_url dir) { - ListAdp rv = ListAdp_.new_(); - Db_qry qry = Db_qry_select.new_().From_(Tbl_name).Cols_all_().OrderBy_asc_(Fld_uid); - DataRdr rdr = DataRdr_.Null; - try { - rdr = p.Exec_qry_as_rdr(qry); - while (rdr.MoveNextPeer()) { - Fsdb_db_atr_fil itm = Fsdb_db_atr_fil.load_(abc_mgr, rdr, dir); - rv.Add(itm); - } - } finally {rdr.Rls();} - return (Fsdb_db_atr_fil[])rv.Xto_ary(Fsdb_db_atr_fil.class); - } - public static void Commit_all(Db_conn conn, Fsdb_db_atr_fil[] ary) { - stmt_bldr.Init(conn); - try { - int len = ary.length; - for (int i = 0; i < len; i++) - Commit_itm(ary[i]); - stmt_bldr.Commit(); - } finally {stmt_bldr.Rls();} - } - private static void Commit_itm(Fsdb_db_atr_fil itm) { - Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); - switch (itm.Cmd_mode()) { - case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Id()) .Val_str(itm.Url().NameAndExt()).Val_str(itm.Path_bgn()).Exec_insert(); break; - case Db_cmd_mode.Update: stmt.Clear() .Val_str(itm.Url().NameAndExt()).Val_str(itm.Path_bgn()).Val_int(itm.Id()).Exec_update(); break; - case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Id()).Exec_delete(); break; - case Db_cmd_mode.Ignore: break; - default: throw Err_.unhandled(itm.Cmd_mode()); - } - itm.Cmd_mode_(Db_cmd_mode.Ignore); - } - public static final String Tbl_name = "fsdb_db_atr", Fld_uid = "uid", Fld_url = "url", Fld_path_bgn = "path_bgn"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_db_atr" - , "( uid integer NOT NULL PRIMARY KEY" - , ", url varchar(255) NOT NULL" - , ", path_bgn varchar(255) NOT NULL" - , ");" - ); - private static Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_uid), Fld_url, Fld_path_bgn); -} -// class tmptbl { -// private String Tbl_name = "file_url_atr"; -// private String Fld_wiki_id -// , Fld_uid, Fld_url, Fld_path_bgn -// ; -// private Db_meta_tbl meta; -// private Db_meta_fld_list Flds = Db_meta_fld_list.new_(); -// private void Conn_() { -// Fld_wiki_id = Flds.Add_int("wiki_id"); -// Fld_uid = Flds.Add_int("uid"); -// Fld_url = Flds.Add_str("url", 255); -// Fld_path_bgn = Flds.Add_str("path_bgn", 255); -// meta = Db_meta_tbl.new_(Tbl_name, Flds -// , Db_meta_idx.new_unique(Tbl_name, "pkey", Fld_wiki_id, Fld_uid) -// ); -// } -// } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java deleted file mode 100644 index 6a207b517..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java +++ /dev/null @@ -1,85 +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.fsdb; import gplx.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; -public class Fsdb_db_bin_fil implements RlsAble { - public int Id() {return id;} private int id; - public Io_url Url() {return url;} private Io_url url; - public long Bin_max() {return bin_max;} private long bin_max; - public void Bin_max_(long v) { - bin_max = v; - if (cmd_mode == Db_cmd_mode.Ignore) cmd_mode = Db_cmd_mode.Update; - } - public long Bin_len() {return bin_len;} private long bin_len; - public void Bin_len_(long v) { - bin_len = v; - if (cmd_mode == Db_cmd_mode.Ignore) cmd_mode = Db_cmd_mode.Update; - } - public byte Cmd_mode() {return cmd_mode;} public Fsdb_db_bin_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; - public Db_conn Conn() { - if (conn == null) { - if (cmd_mode == Db_cmd_mode.Create) { - conn = Db_conn_.new_and_open_(Db_url__sqlite.make_(url)); - Sqlite_engine_.Pragma_page_size_4096(conn); - Fsdb_bin_tbl.Create_table(conn); - } - else - conn = Db_conn_.new_and_open_(Db_url__sqlite.load_(url)); - } - return conn; - } private Db_conn conn; - public void Rls() {if (conn != null) conn.Conn_term();} - public long Insert(int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Fsdb_bin_tbl.Insert_stmt(this.Conn()); - return Fsdb_bin_tbl.Insert_rdr(stmt, bin_id, owner_tid, bin_len, bin_rdr); - } - finally {stmt.Rls();} - } - public boolean Get_to_url(int id, Io_url url, byte[] bin_bfr, int bin_flush_when) { - return Fsdb_bin_tbl.Select_to_url(this.Conn(), id, url, bin_bfr, bin_flush_when); - } - public Io_stream_rdr Get_as_rdr(int id) { - return Fsdb_bin_tbl.Select_as_rdr(this.Conn(), id); - } - public static Fsdb_db_bin_fil load_(DataRdr rdr, Io_url dir) { - return new_ - ( rdr.ReadInt(Fsdb_db_bin_tbl.Fld_uid) - , dir.GenSubFil(rdr.ReadStr(Fsdb_db_bin_tbl.Fld_url)) - , rdr.ReadLong(Fsdb_db_bin_tbl.Fld_bin_len) - , rdr.ReadLong(Fsdb_db_bin_tbl.Fld_bin_max) - , Db_cmd_mode.Ignore - ); - } - public static Fsdb_db_bin_fil make_(int id, Io_url url, long bin_len, long bin_max) { - Fsdb_db_bin_fil rv = new_(id, url, bin_len, bin_max, Db_cmd_mode.Create); - rv.Conn(); // force table create - return rv; - } - private static Fsdb_db_bin_fil new_(int id, Io_url url, long bin_len, long bin_max, byte cmd_mode) { - Fsdb_db_bin_fil rv = new Fsdb_db_bin_fil(); - rv.id = id; - rv.url = url; - rv.bin_len = bin_len; - rv.bin_max = bin_max; - rv.cmd_mode = cmd_mode; - return rv; - } - public static final Fsdb_db_bin_fil[] Ary_empty = new Fsdb_db_bin_fil[0]; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java deleted file mode 100644 index 453bd1584..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java +++ /dev/null @@ -1,99 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_db_bin_mgr implements RlsAble { - private Io_url dir; - private Fsdb_db_bin_fil[] itms = Fsdb_db_bin_fil.Ary_empty; private int itms_len = 0; - private Fsdb_db_bin_fil itms_n; - private Db_conn conn; - private Fsdb_db_bin_mgr(Io_url dir) {this.dir = dir;} - public int Len() {return itms.length;} - public long Db_bin_max() {return db_bin_max;} - public int Insert_to_bin() {return insert_to_bin;} public Fsdb_db_bin_mgr Insert_to_bin_(int v) {insert_to_bin = v; return this;} private int insert_to_bin = Fsdb_mnt_mgr.Insert_to_bin_null; - public Fsdb_db_bin_mgr Db_bin_max_(long v) { - db_bin_max = v; - for (int i = 0; i < itms_len; i++) - itms[i].Bin_max_(v); - return this; - } private long db_bin_max = Io_mgr.Len_mb * Long_.Xby_int(188); - public Fsdb_db_bin_fil Get_at(int i) {return itms[i];} - private Fsdb_db_bin_fil Get_cur() {return itms_len == 0 ? null : itms[itms_len - 1];} - public void Txn_open() { - Get_cur().Conn().Txn_mgr().Txn_bgn_if_none(); - } - public void Txn_save() { - Fsdb_db_bin_tbl.Commit_all(conn, itms); - Get_cur().Conn().Txn_mgr().Txn_end_all(); - } - public void Rls() { - int len = itms.length; - for (int i = 0; i < len; i++) { - Fsdb_db_bin_fil itm = itms[i]; - itm.Rls(); - } - } - public int Get_id_for_insert(long bin_len) { - if (insert_to_bin != Fsdb_mnt_mgr.Insert_to_bin_null) return insert_to_bin; // insert_to_bin specified; return it - if (itms_n.Bin_len() > itms_n.Bin_max()) - Itms_add(0); - return itms_n.Id(); - } - public void Increment(long bin_len) { - long new_bin_len = itms_n.Bin_len() + bin_len; - itms_n.Bin_len_(new_bin_len); - } - public long Insert(int db_id, int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - Fsdb_db_bin_fil bin_fil = itms[db_id]; - return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr); - } - public static Fsdb_db_bin_mgr load_(Db_conn p, Io_url dir) { - Fsdb_db_bin_mgr rv = new Fsdb_db_bin_mgr(dir); - rv.conn = p; - rv.itms = Fsdb_db_bin_tbl.Select_all(p, dir); - rv.itms_len = rv.itms.length; - rv.itms_n = rv.itms[rv.itms_len - 1]; - return rv; - } - public static Fsdb_db_bin_mgr make_(Db_conn p, Io_url dir) { - Fsdb_db_bin_tbl.Create_table(p); - Fsdb_db_bin_mgr rv = new Fsdb_db_bin_mgr(dir); - rv.conn = p; - rv.Itms_add(0); - return rv; - } - private void Itms_add(long bin_len) { - Fsdb_db_bin_fil cur = Get_cur(); - if (cur != null) { - cur.Conn().Txn_mgr().Txn_end_all(); - cur.Conn().Conn_term(); - } - int new_itms_len = itms_len + 1; - Fsdb_db_bin_fil[] new_itms = new Fsdb_db_bin_fil[new_itms_len]; - for (int i = 0; i < itms_len; i++) - new_itms[i] = itms[i]; - itms_n = Fsdb_db_bin_fil.make_(itms_len, url_(dir, itms_len), bin_len, db_bin_max); - itms = new_itms; - itms_len = new_itms_len; - itms[itms_len - 1] = itms_n; - this.Txn_open(); - } - private static Io_url url_(Io_url dir, int id) { - return dir.GenSubFil_ary("fsdb.bin.", Int_.Xto_str_pad_bgn(id, 4), ".sqlite3"); - } -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_tbl.java deleted file mode 100644 index 772b2b64b..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_tbl.java +++ /dev/null @@ -1,90 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_db_bin_tbl { - public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} - public static void Commit_all(Db_conn conn, Fsdb_db_bin_fil[] ary) { - stmt_bldr.Init(conn); - try { - int len = ary.length; - for (int i = 0; i < len; i++) - Commit_itm(ary[i]); - stmt_bldr.Commit(); - } finally {stmt_bldr.Rls();} - } - private static void Commit_itm(Fsdb_db_bin_fil itm) { - Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); - switch (itm.Cmd_mode()) { - case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Id()) .Val_str(itm.Url().NameAndExt()).Val_long(itm.Bin_len()).Val_long(itm.Bin_max()).Exec_insert(); break; - case Db_cmd_mode.Update: stmt.Clear() .Val_str(itm.Url().NameAndExt()).Val_long(itm.Bin_len()).Val_long(itm.Bin_max()).Val_int(itm.Id()).Exec_update(); break; - case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Id()).Exec_delete(); break; - case Db_cmd_mode.Ignore: break; - default: throw Err_.unhandled(itm.Cmd_mode()); - } - itm.Cmd_mode_(Db_cmd_mode.Ignore); - } - public static Fsdb_db_bin_fil[] Select_all(Db_conn p, Io_url dir) { - ListAdp rv = ListAdp_.new_(); - Db_qry qry = Db_qry_select.new_().From_(Tbl_name).Cols_all_().OrderBy_asc_(Fld_uid); - DataRdr rdr = DataRdr_.Null; - try { - rdr = p.Exec_qry_as_rdr(qry); - while (rdr.MoveNextPeer()) { - Fsdb_db_bin_fil itm = Fsdb_db_bin_fil.load_(rdr, dir); - rv.Add(itm); - } - } finally {rdr.Rls();} - return (Fsdb_db_bin_fil[])rv.Xto_ary(Fsdb_db_bin_fil.class); - } - public static final String Tbl_name = "fsdb_db_bin", Fld_uid = "uid", Fld_url = "url", Fld_bin_len = "bin_len", Fld_bin_max = "bin_max"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_db_bin" - , "( uid integer NOT NULL PRIMARY KEY" - , ", url varchar(255) NOT NULL" - , ", bin_len bigint NOT NULL" - , ", bin_max bigint NOT NULL" - , ");" - ); -// public void Conn_(boolean version_is_1) { -// this.version_is_1 = version_is_1; -// if (version_is_1) { -// where_cols = String_.Ary(Fld_ns_id); -// } -// else { -// where_cols = String_.Ary(Fld_wiki_id, Fld_ns_id); -// Tbl_name = "wiki_ns_regy"; -// Fld_wiki_id = Flds.Add_int("wiki_id"); -// } -// Fld_ns_id = Flds.Add_int("ns_id"); -// Fld_ns_name = Flds.Add_str("ns_name", 255); -// Fld_ns_case = Flds.Add_byte("ns_case"); -// Fld_ns_is_alias = Flds.Add_bool("ns_is_alias"); -// Fld_ns_count = Flds.Add_int("ns_count"); -// } - private static Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_uid), Fld_url, Fld_bin_len, Fld_bin_max); -// private String tbl_name = "file_fsdb_bin"; -// private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_(); -// private static final String -// Fld_wiki_id = Flds.Add_int("wiki_id") -// , Fld_uid = Flds.Add_int("uid") -// , Fld_url = Flds.Add_str("url", 255) -// , Fld_bin_len = Flds.Add_long("bin_len") -// , Fld_bin_max = Flds.Add_long("bin_max") -// ; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_tid_.java b/400_xowa/src/gplx/fsdb/Fsdb_db_tid_.java deleted file mode 100644 index 7c2b037c7..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_tid_.java +++ /dev/null @@ -1,36 +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.fsdb; import gplx.*; -public class Fsdb_db_tid_ { - public static final byte Tid_cfg = 0, Tid_atr = 1, Tid_bin = 2; - public static final String Key_cfg = "cfg", Key_atr = "atr", Key_bin = "bin"; - public static byte Xto_tid(String s) { - if (String_.Eq(s, Key_cfg)) return Tid_cfg; - else if (String_.Eq(s, Key_atr)) return Tid_atr; - else if (String_.Eq(s, Key_bin)) return Tid_bin; - else throw Err_.unhandled(s); - } - public static String Xto_key(byte v) { - switch (v) { - case Tid_cfg: return Key_cfg; - case Tid_atr: return Key_atr; - case Tid_bin: return Key_bin; - default: throw Err_.unhandled(v); - } - } -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_dir_itm.java b/400_xowa/src/gplx/fsdb/Fsdb_dir_itm.java deleted file mode 100644 index 329c19afc..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_dir_itm.java +++ /dev/null @@ -1,25 +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.fsdb; import gplx.*; -public class Fsdb_dir_itm { - public Fsdb_dir_itm(int id, int owner, String name) {this.id = id; this.owner = owner; this.name = name;} - public int Id() {return id;} public Fsdb_dir_itm Id_(int v) {id = v; return this;} private int id; - public int Owner() {return owner;} public Fsdb_dir_itm Owner_(int v) {owner = v; return this;} private int owner; - public String Name() {return name;} public Fsdb_dir_itm Name_(String v) {name = v; return this;} private String name; - public static final Fsdb_dir_itm Null = new Fsdb_dir_itm(0, 0, ""); -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_dir_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_dir_tbl.java deleted file mode 100644 index 884d16a0a..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_dir_tbl.java +++ /dev/null @@ -1,87 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_dir_tbl { - private Db_conn conn; - private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; - public Fsdb_dir_tbl(Db_conn conn, boolean created) { - this.conn = conn; - if (created) Create_table(); - } - public void Rls() { - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - if (stmt_update != null) {stmt_update.Rls(); stmt_update = null;} - if (stmt_select_by_name != null) {stmt_select_by_name.Rls(); stmt_select_by_name = null;} - } - public void Create_table() { - Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(conn, Idx_name); - } - private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_dir_id, Fld_dir_owner_id, Fld_dir_name);} - public void Insert(int id, String name, int owner_id) { - if (stmt_insert == null) stmt_insert = Insert_stmt(); - try { - stmt_insert.Clear() - .Val_int(id) - .Val_int(owner_id) - .Val_str(name) - .Exec_insert(); - } catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_dir_id), Fld_dir_owner_id, Fld_dir_name);} - public void Update(int id, String name, int owner_id) { - if (stmt_update == null) stmt_update = Update_stmt(); - try { - stmt_update.Clear() - .Val_int(id) - .Val_str(name) - .Val_int(owner_id) - .Exec_update(); - } catch (Exception exc) {stmt_update = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - private Db_stmt Select_itm_stmt() { - Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_dir_id, Fld_dir_owner_id).Where_(Db_crt_.eq_(Fld_dir_name, Bry_.Empty)); - return conn.New_stmt(qry); - } - public Fsdb_dir_itm Select_itm(String dir_name) { - if (stmt_select_by_name == null) stmt_select_by_name = Select_itm_stmt(); - DataRdr rdr = DataRdr_.Null; - try { - rdr = stmt_select_by_name.Clear() - .Val_str(dir_name) - .Exec_select(); - while (rdr.MoveNextPeer()) { - return new Fsdb_dir_itm(rdr.ReadInt(Fld_dir_id), rdr.ReadInt(Fld_dir_owner_id), dir_name); - } - return Fsdb_dir_itm.Null; - } - finally {rdr.Rls();} - } - public static final String Tbl_name = "fsdb_dir", Fld_dir_id = "dir_id", Fld_dir_owner_id = "dir_owner_id", Fld_dir_name = "dir_name"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_dir" - , "( dir_id integer NOT NULL PRIMARY KEY" - , ", dir_owner_id integer NOT NULL" - , ", dir_name varchar(255) NOT NULL" - , ");" - ); - public static final Db_idx_itm - Idx_name = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS fsdb_dir__name ON fsdb_dir (dir_name, dir_owner_id, dir_id);") - ; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_fil_itm.java b/400_xowa/src/gplx/fsdb/Fsdb_fil_itm.java deleted file mode 100644 index f520717d0..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_fil_itm.java +++ /dev/null @@ -1,29 +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.fsdb; import gplx.*; -public class Fsdb_fil_itm { - public int Id() {return id;} public Fsdb_fil_itm Id_(int v) {id = v; return this;} private int id; - public int Owner() {return owner;} public Fsdb_fil_itm Owner_(int v) {owner = v; return this;} private int owner; - public int Ext_id() {return ext_id;} public Fsdb_fil_itm Ext_id_(int v) {ext_id = v; return this;} private int ext_id; - public String Name() {return name;} public Fsdb_fil_itm Name_(String v) {name = v; return this;} private String name; - public int Db_bin_id() {return bin_db_id;} public Fsdb_fil_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; - public int Mnt_id() {return mnt_id;} public Fsdb_fil_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; - public Fsdb_fil_itm Init(int id, int owner, int ext_id, String name, int bin_db_id) {this.id = id; this.owner = owner; this.ext_id = ext_id; this.name = name; this.bin_db_id = bin_db_id; return this;} - public static final int Null_id = 0; - public static final Fsdb_fil_itm Null = new Fsdb_fil_itm().Init(Null_id, 0, 0, "", Fsdb_bin_tbl.Null_db_bin_id); -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_fil_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_fil_tbl.java deleted file mode 100644 index 6bdfb1b9e..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_fil_tbl.java +++ /dev/null @@ -1,158 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_fil_tbl { - private Db_conn conn; - private Db_stmt stmt_insert, stmt_update, stmt_select_by_name, stmt_select_by_id; - public Fsdb_fil_tbl(Db_conn conn, boolean created) { - this.conn = conn; - if (created) Create_table(); - } - private void Create_table() { - Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(conn, Idx_owner); - } - public void Rls() { - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - if (stmt_update != null) {stmt_update.Rls(); stmt_update = null;} - if (stmt_select_by_name != null) {stmt_select_by_name.Rls(); stmt_select_by_name = null;} - if (stmt_select_by_id != null) {stmt_select_by_id.Rls(); stmt_select_by_id = null;} - } - private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_fil_id, Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);} - public void Insert(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) { - if (stmt_insert == null) stmt_insert = Insert_stmt(); - try { - stmt_insert.Clear() - .Val_int(id) - .Val_int(owner_id) - .Val_str(name) - .Val_int(xtn_id) - .Val_int(ext_id) - .Val_int(bin_db_id) - .Val_long(size) - .Val_str(Sqlite_engine_.X_date_to_str(modified)) - .Val_str(hash) - .Exec_insert(); - } catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - private Db_stmt Update_stmt() {return Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_fil_id), Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id, Fld_fil_bin_db_id, Fld_fil_size, Fld_fil_modified, Fld_fil_hash);} - public void Update(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) { - if (stmt_update == null) stmt_update = Update_stmt(); - try { - stmt_update.Clear() - .Val_int(owner_id) - .Val_str(name) - .Val_int(xtn_id) - .Val_int(ext_id) - .Val_int(bin_db_id) - .Val_long(size) - .Val_str(Sqlite_engine_.X_date_to_str(modified)) - .Val_str(hash) - .Val_int(id) - .Exec_update(); - } catch (Exception exc) {stmt_update = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - private Db_stmt Select_by_name_stmt() { - Db_qry qry = Sqlite_engine_.Supports_indexed_by - ? (Db_qry)Db_qry_sql.rdr_("SELECT * FROM fsdb_fil INDEXED BY fsdb_fil__owner WHERE fil_owner_id = ? AND fil_name = ?;") - : Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_fil_owner_id, Int_.MinValue), Db_crt_.eq_(Fld_fil_name, ""))) - ; - return conn.New_stmt(qry); - } - public Fsdb_fil_itm Select_itm_by_name(int dir_id, String fil_name) { - if (stmt_select_by_name == null) stmt_select_by_name = Select_by_name_stmt(); - DataRdr rdr = DataRdr_.Null; - try { - rdr = stmt_select_by_name.Clear() - .Val_int(dir_id) - .Val_str(fil_name) - .Exec_select(); - if (rdr.MoveNextPeer()) - return load_(rdr); - else - return Fsdb_fil_itm.Null; - } - finally {rdr.Rls();} - } - private Db_stmt Select_by_id_stmt() { - Db_qry qry = Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(Db_crt_.eq_(Fld_fil_id, 0)); - return conn.New_stmt(qry); - } - public Fsdb_fil_itm Select_itm_by_id(int fil_id) { - if (stmt_select_by_id == null) stmt_select_by_id = Select_by_id_stmt(); - DataRdr rdr = DataRdr_.Null; - try { - rdr = stmt_select_by_name.Clear() - .Val_int(fil_id) - .Exec_select(); - if (rdr.MoveNextPeer()) - return load_(rdr); - else - return Fsdb_fil_itm.Null; - } - finally {rdr.Rls();} - } - private Fsdb_fil_itm load_(DataRdr rdr) { - return new Fsdb_fil_itm().Init(rdr.ReadInt(Fld_fil_id), rdr.ReadInt(Fld_fil_owner_id), rdr.ReadInt(Fld_fil_ext_id), rdr.ReadStr(Fld_fil_name), rdr.ReadInt(Fld_fil_bin_db_id)); - } - public static final String Tbl_name = "fsdb_fil", Fld_fil_id = "fil_id", Fld_fil_owner_id = "fil_owner_id", Fld_fil_name = "fil_name", Fld_fil_xtn_id = "fil_xtn_id", Fld_fil_ext_id = "fil_ext_id" - , Fld_fil_size = "fil_size", Fld_fil_modified = "fil_modified", Fld_fil_hash = "fil_hash", Fld_fil_bin_db_id = "fil_bin_db_id" - ; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_fil" - , "( fil_id integer NOT NULL PRIMARY KEY" - , ", fil_owner_id integer NOT NULL" - , ", fil_xtn_id integer NOT NULL" - , ", fil_ext_id integer NOT NULL" - , ", fil_bin_db_id integer NOT NULL" // group ints at beginning of table - , ", fil_name varchar(255) NOT NULL" - , ", fil_size bigint NOT NULL" - , ", fil_modified varchar(14) NOT NULL" // stored as yyyyMMddHHmmss - , ", fil_hash varchar(40) NOT NULL" - , ");" - ); - public static final Db_idx_itm -// Idx_name = Db_idx_itm.sql_ ("CREATE INDEX IF NOT EXISTS fsdb_fil__name ON fsdb_fil (fil_name, fil_owner_id, fil_id, fil_ext_id);") - Idx_owner = Db_idx_itm.sql_ ("CREATE INDEX IF NOT EXISTS fsdb_fil__owner ON fsdb_fil (fil_owner_id, fil_name, fil_id);") - ; -} -// class tmptbl { -// private String Tbl_name = "file_fsdb_fil"; -// private String Fld_wiki_id, Fld_fil_id, Fld_fil_owner_id, Fld_fil_name, Fld_fil_xtn_id, Fld_fil_ext_id -// , Fld_fil_size, Fld_fil_modified, Fld_fil_hash, Fld_fil_bin_db_id -// ; -// private Db_meta_tbl meta; -// private Db_meta_fld_list Flds = Db_meta_fld_list.new_(); -// private void Conn_() { -// Fld_wiki_id = Flds.Add_int("wiki_id"); -// Fld_fil_id = Flds.Add_int("fil_id"); -// Fld_fil_owner_id = Flds.Add_int("fil_owner_id"); -// Fld_fil_xtn_id = Flds.Add_int("fil_xtn_id"); -// Fld_fil_ext_id = Flds.Add_int("fil_ext_id"); -// Fld_fil_bin_db_id = Flds.Add_int("fil_bin_db_id"); // group ints at beginning of table -// Fld_fil_name = Flds.Add_str("fil_name", 255); -// Fld_fil_size = Flds.Add_long("fil_size"); -// Fld_fil_modified = Flds.Add_str("fil_modified", 14); // stored as yyyyMMddHHmmss -// Fld_fil_hash = Flds.Add_str("fil_hash", 40); -// meta = Db_meta_tbl.new_(Tbl_name, Flds -// , Db_meta_idx.new_unique(Tbl_name, "pkey", Fld_wiki_id, Fld_fil_id) -// , Db_meta_idx.new_unique(Tbl_name, "fil_owner", Fld_wiki_id, Fld_fil_owner_id, Fld_fil_name, Fld_fil_id) -// ); -// } -// } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_mnt_itm.java b/400_xowa/src/gplx/fsdb/Fsdb_mnt_itm.java deleted file mode 100644 index b8d8a65e5..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_mnt_itm.java +++ /dev/null @@ -1,26 +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.fsdb; import gplx.*; -public class Fsdb_mnt_itm { - public Fsdb_mnt_itm(int id, String name, String url) {this.id = id; this.name = name; this.url = url;} - public int Id() {return id;} public Fsdb_mnt_itm Id_(int v) {id = v; return this;} private int id; - public String Name() {return name;} public Fsdb_mnt_itm Name_(String v) {name = v; return this;} private String name; - public String Url() {return url;} public Fsdb_mnt_itm Url_(String v) {url = v; return this;} private String url; - public static final Fsdb_mnt_itm Null = new Fsdb_mnt_itm(0, "", ""); - public static final Fsdb_mnt_itm[] Ary_empty = new Fsdb_mnt_itm[0]; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java deleted file mode 100644 index bf83bee1c..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java +++ /dev/null @@ -1,121 +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.fsdb; import gplx.*; -import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.xowa.files.fsdb.*; -public class Fsdb_mnt_mgr implements GfoInvkAble { - private Db_conn conn; - private Fsdb_cfg_tbl tbl_cfg; - private Fsdb_db_abc_mgr[] ary; int ary_len = 0; - public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public Fsdb_mnt_mgr Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v; return this;} private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Null; - public void Init(Io_url cur_dir) { - Fsdb_mnt_itm[] mnts = Db_load_or_make(cur_dir); - ary_len = mnts.length; - ary = new Fsdb_db_abc_mgr[ary_len]; - for (int i = 0; i < ary_len; i++) { - Fsdb_mnt_itm itm = mnts[i]; - Io_url abc_url = cur_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3"); - ary[i] = new Fsdb_db_abc_mgr(this).Init(abc_url.OwnerDir()); - } - insert_to_mnt = tbl_cfg.Select_as_int_or_fail("core", "mnt.insert_idx"); - } - public int Insert_to_mnt() {return insert_to_mnt;} public Fsdb_mnt_mgr Insert_to_mnt_(int v) {insert_to_mnt = v; return this;} private int insert_to_mnt = Mnt_idx_user; - public int Abc_mgr_len() {return ary == null ? 0 : ary.length;} - public Fsdb_db_abc_mgr Abc_mgr_at(int i) {return ary[i];} - private Fsdb_mnt_itm[] Db_load_or_make(Io_url cur_dir) { - Bool_obj_ref created = Bool_obj_ref.n_(); - conn = Sqlite_engine_.Conn_load_or_make_(cur_dir.GenSubFil("wiki.mnt.sqlite3"), created); - tbl_cfg = new Fsdb_cfg_tbl_sql().Ctor(conn, created.Val()); - if (created.Val()) { - Fsdb_mnt_tbl.Create_table(conn); - Fsdb_mnt_tbl.Insert(conn, Mnt_idx_main, "fsdb.main", "fsdb.main"); - Fsdb_mnt_tbl.Insert(conn, Mnt_idx_user, "fsdb.user", "fsdb.user"); - tbl_cfg.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user)); - } - return Fsdb_mnt_tbl.Select_all(conn); - } - public Fsdb_db_bin_fil Bin_db_get(int mnt_id, int bin_db_id) { - return ary[mnt_id].Bin_mgr().Get_at(bin_db_id); - } - public Fsdb_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) { - for (int i = 0; i < ary_len; i++) { - Fsdb_fil_itm rv = ary[i].Fil_select_bin(dir, fil, is_thumb, width, thumbtime); - if (rv != Fsdb_fil_itm.Null && rv.Db_bin_id() != Fsdb_bin_tbl.Null_db_bin_id) { // NOTE: mnt_0 can have thumb, but mnt_1 can have itm; check for itm with Db_bin_id; DATE:2013-11-16 - rv.Mnt_id_(i); - return rv; - } - } - return Fsdb_fil_itm.Null; - } - public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsdb_xtn_thm_itm thm) { - for (int i = 0; i < ary_len; i++) { - boolean rv = ary[i].Thm_select_bin(dir, fil, thm); - if (rv) { - thm.Mnt_id_(i); - return rv; - } - } - return false; - } - public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - ary[insert_to_mnt].Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr); - } - public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_len, bin_rdr); - } - public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr, int img_w, int img_h) { - ary[insert_to_mnt].Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h); - } - public void Bin_db_max_(long v) { - for (int i = 0; i < ary_len; i++) - ary[i].Bin_mgr().Db_bin_max_(v); - } - public void Insert_to_bin_(int v) { - for (int i = 0; i < ary_len; i++) - ary[i].Bin_mgr().Insert_to_bin_(v); - } - public void Txn_open() { - for (int i = 0; i < ary_len; i++) - ary[i].Txn_open(); - } - public void Txn_save() { - for (int i = 0; i < ary_len; i++) - ary[i].Txn_save(); - } - public void Rls() { - for (int i = 0; i < ary_len; i++) - ary[i].Rls(); - tbl_cfg.Rls(); - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_bin_db_max_in_mb_)) this.Bin_db_max_(m.ReadLong("v") * Io_mgr.Len_mb); - else if (ctx.Match(k, Invk_insert_to_mnt_)) insert_to_mnt = m.ReadInt("v"); - else if (ctx.Match(k, Invk_insert_to_bin_)) this.Insert_to_bin_(m.ReadInt("v")); - else return GfoInvkAble_.Rv_unhandled; - return this; - } private static final String Invk_bin_db_max_in_mb_ = "bin_db_max_in_mb_", Invk_insert_to_mnt_ = "insert_to_mnt_", Invk_insert_to_bin_ = "insert_to_bin_"; - public static final int Mnt_idx_main = 0, Mnt_idx_user = 1, Insert_to_bin_null = -1; - public static void Patch(Fsdb_mnt_mgr mnt_mgr) { - mnt_mgr.Abc_mgr_at(Fsdb_mnt_mgr.Mnt_idx_main).Cfg_mgr() - .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_fix_defaults , "y") - .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_packed , "y") - .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w , "y") - .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y") - ; - } -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_mnt_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_mnt_tbl.java deleted file mode 100644 index 304b9f3b3..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_mnt_tbl.java +++ /dev/null @@ -1,84 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_mnt_tbl { - public static void Create_table(Db_conn p) { - Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); - } - public static void Insert(Db_conn p, int id, String name, String url) { - Db_stmt stmt = Insert_stmt(p); - try {Insert(stmt, id, name, url);} - finally {stmt.Rls();} - } - private static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_mnt_id, Fld_mnt_name, Fld_mnt_url);} - private static void Insert(Db_stmt stmt, int id, String name, String url) { - stmt.Clear() - .Val_int(id) - .Val_str(name) - .Val_str(url) - .Exec_insert(); - } - public static Db_stmt Update_stmt(Db_conn p) {return Db_stmt_.new_update_(p, Tbl_name, String_.Ary(Fld_mnt_id), Fld_mnt_name, Fld_mnt_url);} - public static void Update(Db_stmt stmt, int id, String name, String url) { - stmt.Clear() - .Val_str(name) - .Val_str(url) - .Val_int(id) - .Exec_update(); - } - public static Fsdb_mnt_itm[] Select_all(Db_conn p) { - Db_qry qry = Db_qry_.select_().From_(Tbl_name); - DataRdr rdr = DataRdr_.Null; - ListAdp list = ListAdp_.new_(); - try { - rdr = p.Exec_qry_as_rdr(qry); - while (rdr.MoveNextPeer()) { - Fsdb_mnt_itm itm = new Fsdb_mnt_itm(rdr.ReadInt(Fld_mnt_id), rdr.ReadStr(Fld_mnt_name), rdr.ReadStr(Fld_mnt_url)); - list.Add(itm); - } - } - finally {rdr.Rls();} - return (Fsdb_mnt_itm[])list.Xto_ary_and_clear(Fsdb_mnt_itm.class); - } - public static final String Tbl_name = "fsdb_mnt", Fld_mnt_id = "mnt_id", Fld_mnt_name = "mnt_name", Fld_mnt_url = "mnt_url"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_mnt" - , "( mnt_id integer NOT NULL PRIMARY KEY" - , ", mnt_name varchar(255) NOT NULL" - , ", mnt_url varchar(255) NOT NULL" - , ");" - ); -} -// class tmptbl { -// private String Tbl_name = "file_url_mnt"; -// private String Fld_wiki_id -// , Fld_id, Fld_name, Fld_url -// ; -// private Db_meta_tbl meta; -// private Db_meta_fld_list Flds = Db_meta_fld_list.new_(); -// private void Conn_() { -// Fld_wiki_id = Flds.Add_int("wiki_id"); -// Fld_id = Flds.Add_int("id"); -// Fld_name = Flds.Add_str("name", 255); -// Fld_url = Flds.Add_str("url", 255); -// meta = Db_meta_tbl.new_(Tbl_name, Flds -// , Db_meta_idx.new_unique(Tbl_name, "pkey", Fld_wiki_id, Fld_id) -// ); -// } -// } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_itm.java b/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_itm.java deleted file mode 100644 index bf15e423d..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_itm.java +++ /dev/null @@ -1,56 +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.fsdb; import gplx.*; -public class Fsdb_xtn_thm_itm { - protected Fsdb_xtn_thm_itm() {} - public int Id() {return id;} public Fsdb_xtn_thm_itm Id_(int v) {id = v; return this;} private int id; - public Fsdb_fil_itm Owner() {return owner;} public Fsdb_xtn_thm_itm Owner_(Fsdb_fil_itm v) {owner = v; return this;} private Fsdb_fil_itm owner = Fsdb_fil_itm.Null; - public int Owner_id() {return owner_id;} public Fsdb_xtn_thm_itm Owner_id_(int v) {owner_id = v; return this;} private int owner_id; - public int Width() {return width;} public Fsdb_xtn_thm_itm Width_(int v) {width = v; return this;} private int width; - public double Thumbtime() {return thumbtime;} public Fsdb_xtn_thm_itm Thumbtime_(double v) {thumbtime = v; return this;} private double thumbtime; - public int Page() {return page;} public Fsdb_xtn_thm_itm Page_(int v) {page = v; return this;} private int page; - public int Height() {return height;} public Fsdb_xtn_thm_itm Height_(int v) {height = v; return this;} private int height; - public long Size() {return size;} public Fsdb_xtn_thm_itm Size_(long v) {size = v; return this;} private long size; - public String Modified() {return modified;} public Fsdb_xtn_thm_itm Modified_(String v) {modified = v; return this;} private String modified; - public String Hash() {return hash;} public Fsdb_xtn_thm_itm Hash_(String v) {hash = v; return this;} private String hash; - public int Dir_id() {return dir_id;} public Fsdb_xtn_thm_itm Dir_id_(int v) {dir_id = v; return this;} private int dir_id; - public int Db_bin_id() {return bin_db_id;} public Fsdb_xtn_thm_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; - public int Mnt_id() {return mnt_id;} public Fsdb_xtn_thm_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; - public void Init_by_load(DataRdr rdr, boolean schema_thm_page) { - this.id = rdr.ReadInt(Fsdb_xtn_thm_tbl.Fld_thm_id); - this.owner_id = rdr.ReadInt(Fsdb_xtn_thm_tbl.Fld_thm_owner_id); - this.width = rdr.ReadInt(Fsdb_xtn_thm_tbl.Fld_thm_w); - this.height = rdr.ReadInt(Fsdb_xtn_thm_tbl.Fld_thm_h); - this.size = rdr.ReadLong(Fsdb_xtn_thm_tbl.Fld_thm_size); - this.modified = rdr.ReadStr(Fsdb_xtn_thm_tbl.Fld_thm_modified); - this.hash = rdr.ReadStr(Fsdb_xtn_thm_tbl.Fld_thm_hash); - this.bin_db_id = rdr.ReadInt(Fsdb_xtn_thm_tbl.Fld_thm_bin_db_id); - if (schema_thm_page) { - this.thumbtime = gplx.xowa.files.Xof_doc_thumb.Db_load_double(rdr, Fsdb_xtn_thm_tbl.Fld_thm_time); - this.page = gplx.xowa.files.Xof_doc_page.Db_load_int(rdr, Fsdb_xtn_thm_tbl.Fld_thm_page); - } - else { - this.thumbtime = gplx.xowa.files.Xof_doc_thumb.Db_load_int(rdr, Fsdb_xtn_thm_tbl.Fld_thm_thumbtime); - this.page = gplx.xowa.files.Xof_doc_page.Null; - } - } - public static Fsdb_xtn_thm_itm new_() {return new Fsdb_xtn_thm_itm();} // NOTE: Owner is null by default - public static Fsdb_xtn_thm_itm load_() {return new Fsdb_xtn_thm_itm().Owner_(new Fsdb_fil_itm());} // NOTE: Owner is new'd b/c load will use owner.Ext_id - public static final Fsdb_xtn_thm_itm Null = new Fsdb_xtn_thm_itm(); - public static final Fsdb_xtn_thm_itm[] Ary_empty = new Fsdb_xtn_thm_itm[0]; -} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_tbl.java b/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_tbl.java deleted file mode 100644 index 4da46c0eb..000000000 --- a/400_xowa/src/gplx/fsdb/Fsdb_xtn_thm_tbl.java +++ /dev/null @@ -1,155 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_xtn_thm_tbl { - private Fsdb_db_atr_fil atr_fil; private Db_conn conn; - private Db_stmt stmt_insert, stmt_select_by_fil_w; - public Fsdb_xtn_thm_tbl(Fsdb_db_atr_fil atr_fil, Db_conn conn, boolean created) { - this.atr_fil = atr_fil; this.conn = conn; - if (created) Create_table(); - } - private void Create_table() { - Sqlite_engine_.Tbl_create(conn, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(conn, Idx_name); - } - public void Rls() { - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - if (stmt_select_by_fil_w != null) {stmt_select_by_fil_w.Rls(); stmt_select_by_fil_w = null;} - } - private boolean Schema_thm_page() { - if (schema_thm_page_init) { - schema_thm_page = atr_fil.Abc_mgr().Cfg_mgr().Schema_thm_page(); - schema_thm_page_init = false; - } - return schema_thm_page; - } private boolean schema_thm_page, schema_thm_page_init = true; - private Db_stmt Make_stmt_insert() { - return this.Schema_thm_page() - ? Db_stmt_.new_insert_(conn, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_time, Fld_thm_page) - : Db_stmt_.new_insert_(conn, Tbl_name, Fld_thm_id, Fld_thm_owner_id, Fld_thm_w, Fld_thm_h, Fld_thm_bin_db_id, Fld_thm_size, Fld_thm_modified, Fld_thm_hash, Fld_thm_thumbtime) - ; - } - public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size, DateAdp modified, String hash) { - if (stmt_insert == null) stmt_insert = Make_stmt_insert(); - try { - stmt_insert.Clear() - .Val_int(id) - .Val_int(thm_owner_id) - .Val_int(width) - .Val_int(height) - .Val_int(bin_db_id) - .Val_long(size) - .Val_str(Sqlite_engine_.X_date_to_str(modified)) - .Val_str(hash); - if (this.Schema_thm_page()) { - stmt_insert.Val_double (gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime)); - stmt_insert.Val_int (gplx.xowa.files.Xof_doc_page.Db_save_int(page)); - } - else - stmt_insert.Val_int(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thumbtime)); - stmt_insert.Exec_insert(); - } catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - private Db_stmt Select_by_fil_w_stmt() { - Db_qry_select qry = Db_qry_.select_().From_(Tbl_name).Cols_all_(); - gplx.core.criterias.Criteria crt - = this.Schema_thm_page() - ? gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_thm_owner_id, Int_.MinValue), Db_crt_.eq_(Fld_thm_w, Int_.MinValue), Db_crt_.eq_(Fld_thm_time, Int_.MinValue), Db_crt_.eq_(Fld_thm_page, Int_.MinValue)) - : gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_thm_owner_id, Int_.MinValue), Db_crt_.eq_(Fld_thm_w, Int_.MinValue), Db_crt_.eq_(Fld_thm_thumbtime, Int_.MinValue)) - ; - qry.Where_(crt); - return conn.New_stmt(qry); - } - public boolean Select_itm_by_fil_width(int owner_id, Fsdb_xtn_thm_itm thm) { - if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = Select_by_fil_w_stmt(); - DataRdr rdr = DataRdr_.Null; - try { - stmt_select_by_fil_w.Clear() - .Val_int(owner_id) - .Val_int(thm.Width()) - ; - if (this.Schema_thm_page()) { - stmt_select_by_fil_w.Val_double(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thm.Thumbtime())); - stmt_select_by_fil_w.Val_int(gplx.xowa.files.Xof_doc_page.Db_save_int(thm.Page())); - } - else { - stmt_select_by_fil_w.Val_int(gplx.xowa.files.Xof_doc_thumb.Db_save_int(thm.Thumbtime())); - } - rdr = stmt_select_by_fil_w.Exec_select(); - if (rdr.MoveNextPeer()) { - thm.Init_by_load(rdr, this.Schema_thm_page()); - return true; - } - else - return false; - } - finally {rdr.Rls();} - } - public static final String Tbl_name = "fsdb_xtn_thm" - , Fld_thm_id = "thm_id", Fld_thm_owner_id = "thm_owner_id", Fld_thm_w = "thm_w", Fld_thm_h = "thm_h" - , Fld_thm_thumbtime = "thm_thumbtime", Fld_thm_time = "thm_time", Fld_thm_page = "thm_page" - , Fld_thm_bin_db_id = "thm_bin_db_id", Fld_thm_size = "thm_size", Fld_thm_modified = "thm_modified", Fld_thm_hash = "thm_hash"; - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS fsdb_xtn_thm" - , "( thm_id integer NOT NULL PRIMARY KEY" - , ", thm_owner_id integer NOT NULL" - , ", thm_w integer NOT NULL" - , ", thm_h integer NOT NULL" - //, ", thm_thumbtime integer NOT NULL" // removed; DATE:2014-01-23 - , ", thm_time double NOT NULL" // replacement for thm_time - , ", thm_page integer NOT NULL" - , ", thm_bin_db_id integer NOT NULL" - , ", thm_size bigint NOT NULL" - , ", thm_modified varchar(14) NOT NULL" // stored as yyyyMMddHHmmss - , ", thm_hash varchar(40) NOT NULL" - , ");" - ); - public static final Db_idx_itm - Idx_name = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS fsdb_xtn_thm__owner ON fsdb_xtn_thm (thm_owner_id, thm_id, thm_w, thm_time, thm_page);") - ; - public static final DateAdp Modified_null = null; - public static final String Hash_null = ""; -} -// class tmptbl { -// private String Tbl_name = "file_data_thm"; -// private String Fld_wiki_id -// , Fld_id, Fld_owner_id, Fld_w, Fld_h -// , Fld_time, Fld_page -// , Fld_bin_db_id, Fld_size, Fld_modified, Fld_hash -// ; -// private Db_meta_tbl meta; -// private Db_meta_fld_list Flds = Db_meta_fld_list.new_(); -// private void Conn_() { -// Fld_wiki_id = Flds.Add_int("wiki_id"); -// Fld_id = Flds.Add_int("id"); -// Fld_owner_id = Flds.Add_int("owner_id"); -// Fld_w = Flds.Add_int("w"); -// Fld_h = Flds.Add_int("h"); -// Fld_time = Flds.Add_double("time"); -// Fld_page = Flds.Add_int("page"); -// Fld_bin_db_id = Flds.Add_int("bin_db_id"); -// Fld_size = Flds.Add_long("size"); -// Fld_modified = Flds.Add_str("modified", 14); // stored as yyyyMMddHHmmss -// Fld_hash = Flds.Add_str("hash", 40); -// meta = Db_meta_tbl.new_(Tbl_name, Flds -// , Db_meta_idx.new_unique(Tbl_name, "pkey", Fld_wiki_id, Fld_id) -// , Db_meta_idx.new_unique(Tbl_name, "owner", Fld_wiki_id, Fld_owner_id, Fld_id, Fld_w, Fld_time, Fld_page) -// ); -// } -// } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java new file mode 100644 index 000000000..3b8000acf --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java @@ -0,0 +1,93 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.ios.*; +import gplx.dbs.engines.sqlite.*; +public class Fsd_bin_tbl { + private String tbl_name = "file_data_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_owner_id, fld_owner_tid, fld_part_id, fld_data_url, fld_data; + private Db_conn conn; + private Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_kb); + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "fsdb_bin"; + fld_prefix = "bin_"; + } + fld_owner_id = flds.Add_int(fld_prefix + "owner_id"); + fld_owner_tid = flds.Add_byte(fld_prefix + "owner_tid"); + fld_part_id = flds.Add_int(fld_prefix + "part_id"); + fld_data_url = flds.Add_str(fld_prefix + "data_url", 255); + fld_data = flds.Add_bry(fld_prefix + "data"); // mediumblob + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_owner_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + } + public long Insert_rdr(int id, byte tid, long bin_len, Io_stream_rdr bin_rdr) { + synchronized (tmp_bfr) { + Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); + byte[] bin_ary = Io_stream_rdr_.Load_all_as_bry(tmp_bfr, bin_rdr); + long rv = bin_ary.length; + stmt.Clear() + .Val_int(fld_owner_id, id) + .Val_byte(fld_owner_tid, tid) + .Val_int(fld_part_id, Null_part_id) + .Val_str(fld_data_url, Null_data_url) + .Val_bry(bin_ary) + .Exec_insert(); + return rv; + } + } + public Io_stream_rdr Select_as_rdr(Db_conn conn, int owner_id) { + Db_rdr rdr = Db_rdr_.Null; + try { + Db_stmt stmt = conn.Stmt_select(tbl_name, String_.Ary(fld_data), fld_owner_id); + rdr = stmt.Clear().Crt_int(fld_owner_id, owner_id).Exec_select_as_rdr(); + return rdr.Move_next() + ? Io_stream_rdr_.mem_(Read_bin_data(rdr)) + : Io_stream_rdr_.Null; + } + finally {rdr.Rls();} + } + public boolean Select_to_url(int owner_id, Io_url url) { + Db_rdr rdr = Db_rdr_.Null; + try { + Db_stmt stmt = conn.Stmt_select(tbl_name, String_.Ary(fld_data), fld_owner_id); + rdr = stmt.Clear().Crt_int(fld_owner_id, owner_id).Exec_select_as_rdr(); + if (rdr.Move_next()) { + byte[] bry = Read_bin_data(rdr); + Io_mgr._.SaveFilBry(url, bry); + return true; + } + else + return false; + } + finally {rdr.Rls();} + } + private byte[] Read_bin_data(Db_rdr rdr) { + byte[] rv = rdr.Read_bry(fld_data); + return rv == null ? Bry_.Empty : rv; // NOTE: bug in v0.10.1 where .ogg would save as null; return Bry_.Empty instead, else java.io.ByteArrayInputStream would fail on null + } + public static final byte Owner_tid_fil = 1, Owner_tid_thm = 2; + public static final int Null_db_bin_id = -1, Null_size = -1, Null_part_id = -1; + public static final String Null_data_url = ""; +} diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java new file mode 100644 index 000000000..d8ac58ff0 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java @@ -0,0 +1,25 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +public class Fsd_dir_itm { + public Fsd_dir_itm(int id, int owner, String name) {this.id = id; this.owner = owner; this.name = name;} + public int Id() {return id;} public Fsd_dir_itm Id_(int v) {id = v; return this;} private int id; + public int Owner() {return owner;} public Fsd_dir_itm Owner_(int v) {owner = v; return this;} private int owner; + public String Name() {return name;} public Fsd_dir_itm Name_(String v) {name = v; return this;} private String name; + public static final Fsd_dir_itm Null = new Fsd_dir_itm(0, 0, ""); +} diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java new file mode 100644 index 000000000..75a807063 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java @@ -0,0 +1,71 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; +public class Fsd_dir_tbl { + private String tbl_name = "file_data_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_owner_id, fld_name; + private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "fsdb_dir"; + fld_prefix = "dir_"; + } + fld_id = flds.Add_int(fld_prefix + "id"); + fld_owner_id = flds.Add_int(fld_prefix + "owner_id"); + fld_name = flds.Add_str(fld_prefix + "name", 255); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id) + , Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name, fld_owner_id, fld_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_update = stmt_select_by_name = null; + } + public void Insert(int id, String name, int owner_id) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_id, id) + .Val_int(fld_owner_id, owner_id) + .Val_str(fld_name, name) + .Exec_insert(); + } + public void Update(int id, String name, int owner_id) { + if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_id)); + stmt_update.Clear() + .Val_int(fld_owner_id, owner_id) + .Val_str(fld_name, name) + .Crt_int(fld_id, id) + .Exec_update(); + } + public Fsd_dir_itm Select_itm(String name) { + if (stmt_select_by_name == null) stmt_select_by_name = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name)); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select_by_name.Clear().Crt_str(fld_name, name).Exec_select_as_rdr(); + return rdr.Move_next() + ? new Fsd_dir_itm(rdr.Read_int(fld_id), rdr.Read_int(fld_owner_id), name) + : Fsd_dir_itm.Null + ; + } + finally {rdr.Rls();} + } +} diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java new file mode 100644 index 000000000..272614d3c --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.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.fsdb.data; import gplx.*; import gplx.fsdb.*; +public class Fsd_fil_itm { + public int Id() {return id;} public Fsd_fil_itm Id_(int v) {id = v; return this;} private int id; + public int Owner() {return owner;} public Fsd_fil_itm Owner_(int v) {owner = v; return this;} private int owner; + public int Ext_id() {return ext_id;} public Fsd_fil_itm Ext_id_(int v) {ext_id = v; return this;} private int ext_id; + public String Name() {return name;} public Fsd_fil_itm Name_(String v) {name = v; return this;} private String name; + public int Db_bin_id() {return bin_db_id;} public Fsd_fil_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; + public int Mnt_id() {return mnt_id;} public Fsd_fil_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; + public Fsd_fil_itm Init(int id, int owner, int ext_id, String name, int bin_db_id) {this.id = id; this.owner = owner; this.ext_id = ext_id; this.name = name; this.bin_db_id = bin_db_id; return this;} + public static final int Null_id = 0; + public static final Fsd_fil_itm Null = new Fsd_fil_itm().Init(Null_id, 0, 0, "", Fsd_bin_tbl.Null_db_bin_id); +} diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java new file mode 100644 index 000000000..f62a3d51e --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java @@ -0,0 +1,96 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; +public class Fsd_fil_tbl { + private String tbl_name = "file_data_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_owner_id, fld_name, fld_xtn_id, fld_ext_id, fld_size, fld_modified, fld_hash, fld_bin_db_id; + private String Idx_owner; + private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "fsdb_fil"; + fld_prefix = "fil_"; + } + fld_id = flds.Add_int(fld_prefix + "id"); + fld_owner_id = flds.Add_int(fld_prefix + "owner_id"); + fld_xtn_id = flds.Add_int(fld_prefix + "xtn_id"); + fld_ext_id = flds.Add_int(fld_prefix + "ext_id"); + fld_bin_db_id = flds.Add_int(fld_prefix + "bin_db_id"); // group ints at beginning of table + fld_name = flds.Add_str(fld_prefix + "name", 255); + fld_size = flds.Add_long(fld_prefix + "size"); + fld_modified = flds.Add_str(fld_prefix + "modified", 14); // stored as yyyyMMddHHmmss + fld_hash = flds.Add_str(fld_prefix + "hash", 40); + Idx_owner = Db_meta_idx.Bld_idx_name(tbl_name, "owner"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id) + , Db_meta_idx.new_unique_by_name(tbl_name, Idx_owner, fld_owner_id, fld_name, fld_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_update = stmt_select_by_name = null; + } + public void Insert(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_id, id) + .Val_int(fld_owner_id, owner_id) + .Val_int(fld_xtn_id, xtn_id) + .Val_int(fld_ext_id, ext_id) + .Val_int(fld_bin_db_id, bin_db_id) + .Val_str(fld_name, name) + .Val_long(fld_size, size) + .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified)) + .Val_str(fld_hash, hash) + .Exec_insert(); + } + public void Update(int id, int owner_id, String name, int xtn_id, int ext_id, long size, DateAdp modified, String hash, int bin_db_id) { + if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_id)); + stmt_update.Clear() + .Val_int(fld_owner_id, owner_id) + .Val_int(fld_xtn_id, xtn_id) + .Val_int(fld_ext_id, ext_id) + .Val_int(fld_bin_db_id, bin_db_id) + .Val_str(fld_name, name) + .Val_long(fld_size, size) + .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified)) + .Val_str(fld_hash, hash) + .Crt_int(fld_id, id) + .Exec_update(); + } + public Fsd_fil_itm Select_itm_by_name(int dir_id, String fil_name) { + if (stmt_select_by_name == null) { + Db_qry_select qry = Db_qry_select.new_().From_(tbl_name).Cols_(flds.To_str_ary()).Where_(Db_crt_.eq_many_(fld_owner_id, fld_name)).Indexed_by_(Idx_owner); + stmt_select_by_name = conn.Rls_reg(conn.Stmt_new(qry)); + } + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select_by_name.Clear() + .Crt_int(fld_owner_id, dir_id) + .Crt_str(fld_name, fil_name) + .Exec_select_as_rdr(); + return rdr.Move_next() + ? new Fsd_fil_itm().Init(rdr.Read_int(fld_id), rdr.Read_int(fld_owner_id), rdr.Read_int(fld_ext_id), rdr.Read_str(fld_name), rdr.Read_int(fld_bin_db_id)) + : Fsd_fil_itm.Null; + } + finally {rdr.Rls();} + } +} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_xtn_img_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java similarity index 71% rename from 400_xowa/src/gplx/fsdb/Fsdb_xtn_img_itm.java rename to 400_xowa/src/gplx/fsdb/data/Fsd_img_itm.java index 7f235b043..ff0d2ecd5 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_xtn_img_itm.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_img_itm.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.fsdb; import gplx.*; -public class Fsdb_xtn_img_itm { +package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; +public class Fsd_img_itm { public int Id() {return id;} public void Id_(int v) {this.id = v;} private int id; public int W() {return w;} public void W_(int v) {this.w = v;} private int w; public int H() {return h;} public void H_(int v) {this.h = v;} private int h; - public int Db_bin_id() {return bin_db_id;} public Fsdb_xtn_img_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; - public Fsdb_xtn_img_itm Init_by_load(int id, int w, int h) {this.id = id; this.w = w; this.h = h; return this;} - public static final Fsdb_xtn_img_itm Null = new Fsdb_xtn_img_itm(); + public int Db_bin_id() {return bin_db_id;} public Fsd_img_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; + public Fsd_img_itm Init_by_load(int id, int w, int h) {this.id = id; this.w = w; this.h = h; return this;} + public static final Fsd_img_itm Null = new Fsd_img_itm(); public static final int Bits_default = 8; } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java new file mode 100644 index 000000000..b43401250 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java @@ -0,0 +1,41 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +public class Fsd_thm_itm { + protected Fsd_thm_itm() {} + public void Ctor(int id, int owner_id, int w, double time, int page, int h, long size, String modified, String hash) { + this.id = id; this.owner_id = owner_id; this.width = w; this.thumbtime = time; this.page = page; this.height = h; this.size = size; this.modified = modified; this.hash = hash; + } + public int Id() {return id;} public Fsd_thm_itm Id_(int v) {id = v; return this;} private int id; + public Fsd_fil_itm Owner() {return owner;} public Fsd_thm_itm Owner_(Fsd_fil_itm v) {owner = v; return this;} private Fsd_fil_itm owner = Fsd_fil_itm.Null; + public int Owner_id() {return owner_id;} public Fsd_thm_itm Owner_id_(int v) {owner_id = v; return this;} private int owner_id; + public int Width() {return width;} public Fsd_thm_itm Width_(int v) {width = v; return this;} private int width; + public double Thumbtime() {return thumbtime;} public Fsd_thm_itm Thumbtime_(double v) {thumbtime = v; return this;} private double thumbtime; + public int Page() {return page;} public Fsd_thm_itm Page_(int v) {page = v; return this;} private int page; + public int Height() {return height;} public Fsd_thm_itm Height_(int v) {height = v; return this;} private int height; + public long Size() {return size;} public Fsd_thm_itm Size_(long v) {size = v; return this;} private long size; + public String Modified() {return modified;} public Fsd_thm_itm Modified_(String v) {modified = v; return this;} private String modified; + public String Hash() {return hash;} public Fsd_thm_itm Hash_(String v) {hash = v; return this;} private String hash; + public int Dir_id() {return dir_id;} public Fsd_thm_itm Dir_id_(int v) {dir_id = v; return this;} private int dir_id; + public int Db_bin_id() {return bin_db_id;} public Fsd_thm_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; + public int Mnt_id() {return mnt_id;} public Fsd_thm_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; + public static Fsd_thm_itm new_() {return new Fsd_thm_itm();} // NOTE: Owner is null by default + public static Fsd_thm_itm load_() {return new Fsd_thm_itm().Owner_(new Fsd_fil_itm());} // NOTE: Owner is new'd b/c load will use owner.Ext_id + public static final Fsd_thm_itm Null = new Fsd_thm_itm(); + public static final Fsd_thm_itm[] Ary_empty = new Fsd_thm_itm[0]; +} diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java new file mode 100644 index 000000000..35d64e61f --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java @@ -0,0 +1,147 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; +import gplx.fsdb.meta.*; +public class Fsd_thm_tbl { + private String tbl_name = "file_data_thm"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash, fld_thumbtime; + private Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_w; + private Fsm_atr_fil atr_fil; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, Fsm_atr_fil atr_fil) { + this.conn = new_conn; flds.Clear(); this.atr_fil = atr_fil; + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "fsdb_xtn_thm"; + fld_prefix = "thm_"; + } + fld_id = flds.Add_int(fld_prefix + "id"); + fld_owner_id = flds.Add_int(fld_prefix + "owner_id"); + fld_w = flds.Add_int(fld_prefix + "w"); + fld_h = flds.Add_int(fld_prefix + "h"); + fld_time = flds.Add_double(fld_prefix + "time"); + fld_page = flds.Add_int(fld_prefix + "page"); + fld_bin_db_id = flds.Add_int(fld_prefix + "bin_db_id"); + fld_size = flds.Add_long(fld_prefix + "size"); + fld_modified = flds.Add_str(fld_prefix + "modified", 14); // stored as yyyyMMddHHmmss + fld_hash = flds.Add_str(fld_prefix + "hash", 40); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id) + , Db_meta_idx.new_unique_by_tbl(tbl_name, "owner", fld_owner_id, fld_id, fld_w, fld_time, fld_page) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_select_by_fil_w = null; + schema_thm_page_init = true; + } + private boolean Schema_thm_page() { + if (schema_thm_page_init) { + schema_thm_page = atr_fil.Abc_mgr().Cfg_mgr().Schema_thm_page(); + schema_thm_page_init = false; + if (schema_thm_page) { + fld_thumbtime = Db_meta_fld.Key_null; + } + else { + fld_time = Db_meta_fld.Key_null; + fld_page = Db_meta_fld.Key_null; + } + } + return schema_thm_page; + } private boolean schema_thm_page, schema_thm_page_init = true; + public void Insert(int id, int thm_owner_id, int width, int height, double thumbtime, int page, int bin_db_id, long size, DateAdp modified, String hash) { + if (stmt_insert == null) { + String tmp_fld_time = this.Schema_thm_page() ? fld_time : fld_thumbtime; + stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, fld_id, fld_owner_id, fld_w, fld_h, tmp_fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash)); + } + stmt_insert.Clear() + .Val_int(fld_id, id) + .Val_int(fld_owner_id, thm_owner_id) + .Val_int(fld_w, width) + .Val_int(fld_h, height); + if (this.Schema_thm_page()) { + stmt_insert.Val_double (fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime)); + stmt_insert.Val_int (fld_page, gplx.xowa.files.Xof_doc_page.Db_save_int(page)); + } + else + stmt_insert.Val_int (fld_thumbtime, gplx.xowa.files.Xof_doc_thumb.Db_save_int(thumbtime)); + stmt_insert + .Val_int(fld_bin_db_id, bin_db_id) + .Val_long(fld_size, size) + .Val_str(fld_modified, Sqlite_engine_.X_date_to_str(modified)) + .Val_str(fld_hash, hash) + .Exec_insert(); + } + private Db_stmt Select_by_fil_w_stmt() { + Db_qry_select qry = Db_qry_.select_().From_(tbl_name).Cols_all_(); + gplx.core.criterias.Criteria crt + = this.Schema_thm_page() + ? Db_crt_.eq_many_(fld_owner_id, fld_w, fld_time, fld_page) + : Db_crt_.eq_many_(fld_owner_id, fld_w, fld_thumbtime) + ; + qry.Where_(crt); + return conn.Stmt_new(qry); + } + public boolean Select_itm_by_fil_width(int owner_id, Fsd_thm_itm thm) { + if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Rls_reg(Select_by_fil_w_stmt()); + Db_rdr rdr = Db_rdr_.Null; + try { + stmt_select_by_fil_w.Clear() + .Crt_int(fld_owner_id, owner_id) + .Crt_int(fld_w, thm.Width()) + ; + if (this.Schema_thm_page()) { + stmt_select_by_fil_w.Crt_double(fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_double(thm.Thumbtime())); + stmt_select_by_fil_w.Crt_int(fld_page, gplx.xowa.files.Xof_doc_page.Db_save_int(thm.Page())); + } + else { + stmt_select_by_fil_w.Crt_int(fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_int(thm.Thumbtime())); + } + rdr = stmt_select_by_fil_w.Exec_select_as_rdr(); + return rdr.Move_next() + ? Ctor_by_load(thm, rdr, this.Schema_thm_page()) + : false; + } + finally {rdr.Rls();} + } + private boolean Ctor_by_load(Fsd_thm_itm itm, Db_rdr rdr, boolean schema_thm_page) { + int id = rdr.Read_int(fld_id); + int owner_id = rdr.Read_int(fld_owner_id); + int width = rdr.Read_int(fld_w); + int height = rdr.Read_int(fld_h); + long size = rdr.Read_long(fld_size); + String modified = rdr.Read_str(fld_modified); + String hash = rdr.Read_str(fld_hash); + int bin_db_id = rdr.Read_int(fld_bin_db_id); + double time = 0; + int page = 0; + if (schema_thm_page) { + time = gplx.xowa.files.Xof_doc_thumb.Db_load_double(rdr, fld_time); + page = gplx.xowa.files.Xof_doc_page.Db_load_int(rdr, fld_page); + } + else { + time = gplx.xowa.files.Xof_doc_thumb.Db_load_int(rdr, fld_thumbtime); + page = gplx.xowa.files.Xof_doc_page.Null; + } + itm.Ctor(id, owner_id, width, time, page, height, size, modified, hash); + itm.Db_bin_id_(bin_db_id); + return true; + } + public static final DateAdp Modified_null = null; + public static final String Hash_null = ""; +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java new file mode 100644 index 000000000..b2b8d7320 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java @@ -0,0 +1,94 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +import gplx.fsdb.data.*; +public class Fsm_abc_mgr implements RlsAble { + private Db_conn conn; + public Fsm_atr_mgr Atr_mgr() {return atr_mgr;} private final Fsm_atr_mgr atr_mgr = new Fsm_atr_mgr(); + public Fsm_bin_mgr Bin_mgr() {return bin_mgr;} private final Fsm_bin_mgr bin_mgr = new Fsm_bin_mgr(); + public Fsm_cfg_mgr Cfg_mgr() {return cfg_mgr;} private final Fsm_cfg_mgr cfg_mgr = new Fsm_cfg_mgr(); + public int Next_id() {return cfg_mgr.Next_id();} + private static final String Db_conn_bldr_type = "gplx.fsdb.abc"; + public void Init_for_db(boolean version_is_1, Io_url dir) { + Io_url abc_url = dir.GenSubFil("fsdb.abc.sqlite3"); + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, abc_url); + boolean created = conn_data.Created(); + conn = conn_data.Conn(); + atr_mgr.Init_for_db(conn, created, version_is_1, dir, this); + bin_mgr.Init_for_db(conn, created, version_is_1, dir); + cfg_mgr.Init_for_db(conn, created, version_is_1); + if (created) { + this.Txn_save(); // immediately save new entries in atr,cfg + } + else { + if (!cfg_mgr.Patch_next_id()) Fsdb_db_abc_mgr_.Patch_next_id(this, dir); + } + } + public void Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); + rv.Db_bin_id_(bin_db_id); + int fil_id = atr_mgr.Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_db_id, bin_len, bin_rdr); + bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr); + bin_mgr.Increment(bin_len); + } + public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); + rv.Db_bin_id_(bin_db_id); + int thm_id = atr_mgr.Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr); + bin_len = bin_mgr.Insert(bin_db_id, thm_id, Fsd_bin_tbl.Owner_tid_thm, bin_len, bin_rdr); + bin_mgr.Increment(bin_len); + } + public void Img_insert(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr, int img_w, int img_h) { + int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); + rv.Db_bin_id_(bin_db_id); + int fil_id = atr_mgr.Img_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr); + bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr); + bin_mgr.Increment(bin_len); + } + public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsd_thm_itm thm) { + Fsd_fil_itm fil_itm = atr_mgr.Fil_select(dir, fil); + return atr_mgr.Thm_select(fil_itm.Id(), thm); + } + public Fsd_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) { + return atr_mgr.Fil_select(dir, fil); + } + public void Txn_open() { + conn.Txn_mgr().Txn_bgn_if_none(); + atr_mgr.Txn_open(); + bin_mgr.Txn_open(); + } + public void Txn_save() {atr_mgr.Txn_save(); bin_mgr.Txn_save(); cfg_mgr.Txn_save();} + public void Rls() {atr_mgr.Rls(); bin_mgr.Rls(); cfg_mgr.Rls(); conn.Conn_term();} + public static final String Cfg_tbl_v1 = "fsdb_cfg", Cfg_tbl_v2 = "file_meta_cfg"; +} +class Fsdb_db_abc_mgr_ { + public static void Patch_next_id(Fsm_abc_mgr abc_mgr, Io_url dir) { + if (!String_.Eq(dir.NameOnly(), "fsdb.user")) return; + Fsm_atr_mgr atr_mgr = abc_mgr.Atr_mgr(); + Fsm_cfg_mgr cfg_mgr = abc_mgr.Cfg_mgr(); + int last_id = -1; + if (atr_mgr.Len() > 0) { + Fsm_atr_fil atr_fil = atr_mgr.Get_at(0); + int max_fil_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(fil_id) AS MaxId FROM fsdb_fil;", -1); + int max_thm_id = Db_conn_.Select_fld0_as_int_or(atr_fil.Conn(), "SELECT Max(thm_id) AS MaxId FROM fsdb_xtn_thm;", -1); + last_id = max_fil_id > max_thm_id ? max_fil_id : max_thm_id; + } + cfg_mgr.Patch_next_id_exec(last_id); + } +} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java similarity index 51% rename from 400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java rename to 400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java index e5f02dabe..268e325d6 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java @@ -15,31 +15,36 @@ 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.fsdb; import gplx.*; +package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*; import gplx.core.primitives.*; import gplx.cache.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; -public class Fsdb_db_atr_fil implements RlsAble { +import gplx.fsdb.data.*; +public class Fsm_atr_fil implements RlsAble { private Gfo_cache_mgr_bry dir_cache = new Gfo_cache_mgr_bry(); - private Fsdb_dir_tbl tbl_dir; private Fsdb_fil_tbl tbl_fil; private Fsdb_xtn_thm_tbl tbl_thm; - public Fsdb_db_atr_fil(Fsdb_db_abc_mgr abc_mgr, Io_url url, boolean create) { + private final Fsd_dir_tbl tbl_dir = new Fsd_dir_tbl(); private final Fsd_fil_tbl tbl_fil = new Fsd_fil_tbl(); private Fsd_thm_tbl tbl_thm = new Fsd_thm_tbl(); + private static final String Db_conn_bldr_type = "gplx.fsdb.fsm_atr_fil"; + public Fsm_atr_fil(Fsm_abc_mgr abc_mgr, Io_url io_url) { this.abc_mgr = abc_mgr; - Db_url connect = create ? Db_url__sqlite.make_(url) : Db_url__sqlite.load_(url); - conn = Db_conn_.new_and_open_(connect); - Sqlite_engine_.Pragma_page_size_4096(conn); - tbl_dir = new Fsdb_dir_tbl(conn, create); - tbl_fil = new Fsdb_fil_tbl(conn, create); - tbl_thm = new Fsdb_xtn_thm_tbl(this, conn, create); + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, io_url); + boolean created = conn_data.Created(); conn = conn_data.Conn(); + boolean version_is_1 = Bool_.Y; + tbl_dir.Conn_(conn, created, version_is_1); + tbl_fil.Conn_(conn, created, version_is_1); + tbl_thm.Conn_(conn, created, version_is_1, this); } - public Fsdb_db_abc_mgr Abc_mgr() {return abc_mgr;} private Fsdb_db_abc_mgr abc_mgr; + public Fsm_abc_mgr Abc_mgr() {return abc_mgr;} private Fsm_abc_mgr abc_mgr; public Db_conn Conn() {return conn;} private Db_conn conn; public int Id() {return id;} private int id; public Io_url Url() {return url;} private Io_url url; public String Path_bgn() {return path_bgn;} private String path_bgn; - public byte Cmd_mode() {return cmd_mode;} public Fsdb_db_atr_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public byte Cmd_mode() {return cmd_mode;} public Fsm_atr_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public void Ctor_by_load(int id, Io_url url, String path_bgn, byte cmd_mode) { + this.id = id; + this.url = url; + this.path_bgn = path_bgn; + this.cmd_mode = cmd_mode; + } public void Rls() { - tbl_dir.Rls(); - tbl_fil.Rls(); - tbl_thm.Rls(); conn.Txn_mgr().Txn_end_all(); conn.Conn_term(); } @@ -49,57 +54,48 @@ public class Fsdb_db_atr_fil implements RlsAble { public void Txn_save() { conn.Txn_mgr().Txn_end_all(); } - public Fsdb_fil_itm Fil_select(byte[] dir, byte[] fil) { + public Fsd_fil_itm Fil_select(byte[] dir, byte[] fil) { Int_obj_ref dir_id_obj = (Int_obj_ref)dir_cache.Get_or_null(dir); int dir_id = -1; if (dir_id_obj == null) { - Fsdb_dir_itm dir_itm = tbl_dir.Select_itm(String_.new_utf8_(dir)); - dir_id = dir_itm == Fsdb_dir_itm.Null ? -1 : dir_itm.Id(); + Fsd_dir_itm dir_itm = tbl_dir.Select_itm(String_.new_utf8_(dir)); + dir_id = dir_itm == Fsd_dir_itm.Null ? -1 : dir_itm.Id(); dir_cache.Add(dir, Int_obj_ref.new_(dir_id)); } else dir_id = dir_id_obj.Val(); - if (dir_id == Int_.Neg1) return Fsdb_fil_itm.Null; + if (dir_id == Int_.Neg1) return Fsd_fil_itm.Null; return tbl_fil.Select_itm_by_name(dir_id, String_.new_utf8_(fil)); } - public boolean Thm_select(int owner_id, Fsdb_xtn_thm_itm thm) { + public boolean Thm_select(int owner_id, Fsd_thm_itm thm) { return tbl_thm.Select_itm_by_fil_width(owner_id, thm); } - public int Fil_insert(Fsdb_fil_itm rv, String dir, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + public int Fil_insert(Fsd_fil_itm rv, String dir, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int dir_id = Dir_id__get_or_insert(dir); - int fil_id = Fil_id__get_or_insert(Fsdb_xtn_tid_.Tid_none, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len); + int fil_id = Fil_id__get_or_insert(Xtn_tid_none, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len); rv.Id_(fil_id).Owner_(dir_id); return fil_id; } - public int Img_insert(Fsdb_xtn_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + public int Img_insert(Fsd_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int dir_id = Dir_id__get_or_insert(dir); - int fil_id = Fil_id__get_or_insert(Fsdb_xtn_tid_.Tid_img, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len); + int fil_id = Fil_id__get_or_insert(Xtn_tid_img, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len); rv.Id_(fil_id); return fil_id; } - public int Thm_insert(Fsdb_xtn_thm_itm rv, String dir, String fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + public int Thm_insert(Fsd_thm_itm rv, String dir, String fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int dir_id = Dir_id__get_or_insert(dir); - int fil_id = Fil_id__get_or_insert(Fsdb_xtn_tid_.Tid_thm, dir_id, fil, ext_id, modified, hash, Fsdb_bin_tbl.Null_db_bin_id, Fsdb_bin_tbl.Null_size); // NOTE: bin_db_id must be set to NULL + int fil_id = Fil_id__get_or_insert(Xtn_tid_thm, dir_id, fil, ext_id, modified, hash, Fsd_bin_tbl.Null_db_bin_id, Fsd_bin_tbl.Null_size); // NOTE: bin_db_id must be set to NULL int thm_id = abc_mgr.Next_id(); tbl_thm.Insert(thm_id, fil_id, thm_w, thm_h, thumbtime, page, bin_db_id, bin_len, modified, hash); rv.Id_(thm_id).Owner_id_(fil_id).Dir_id_(dir_id); return thm_id; } - public static Fsdb_db_atr_fil load_(Fsdb_db_abc_mgr abc_mgr, DataRdr rdr, Io_url dir) { - Io_url url = dir.GenSubFil(rdr.ReadStr(Fsdb_db_atr_tbl.Fld_url)); - Fsdb_db_atr_fil rv = new Fsdb_db_atr_fil(abc_mgr, url, false); - rv.id = rdr.ReadInt(Fsdb_db_atr_tbl.Fld_uid); - rv.url = url; - rv.path_bgn = rdr.ReadStr(Fsdb_db_atr_tbl.Fld_path_bgn); - rv.cmd_mode = Db_cmd_mode.Ignore; - return rv; - } - public static Fsdb_db_atr_fil make_(Fsdb_db_abc_mgr abc_mgr, int id, Io_url url, String path_bgn) { - Fsdb_db_atr_fil rv = new Fsdb_db_atr_fil(abc_mgr, url, true); + public static Fsm_atr_fil make_(Fsm_abc_mgr abc_mgr, int id, Io_url url, String path_bgn) { + Fsm_atr_fil rv = new Fsm_atr_fil(abc_mgr, url); rv.id = id; rv.url = url; rv.path_bgn = path_bgn; - rv.cmd_mode = Db_cmd_mode.Create; + rv.cmd_mode = Db_cmd_mode.Tid_create; return rv; } private int Dir_id__get_or_insert(String dir_str) { @@ -112,8 +108,8 @@ public class Fsdb_db_atr_fil implements RlsAble { dir_cache.Del(dir_bry); } if (rv == -1) { - Fsdb_dir_itm itm = tbl_dir.Select_itm(dir_str); - if (itm == Fsdb_dir_itm.Null) { + Fsd_dir_itm itm = tbl_dir.Select_itm(dir_str); + if (itm == Fsd_dir_itm.Null) { rv = abc_mgr.Next_id(); tbl_dir.Insert(rv, dir_str, 0); // 0: always assume root owner } @@ -125,19 +121,20 @@ public class Fsdb_db_atr_fil implements RlsAble { return rv; } private int Fil_id__get_or_insert(int xtn_tid, int dir_id, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len) { - Fsdb_fil_itm fil_itm = tbl_fil.Select_itm_by_name(dir_id, fil); + Fsd_fil_itm fil_itm = tbl_fil.Select_itm_by_name(dir_id, fil); int fil_id = fil_itm.Id(); - if (fil_id == Fsdb_fil_itm.Null_id) { // new item + if (fil_id == Fsd_fil_itm.Null_id) { // new item fil_id = abc_mgr.Next_id(); tbl_fil.Insert(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, modified, hash, bin_db_id); } else { // existing item - if ( fil_itm.Db_bin_id() == Fsdb_bin_tbl.Null_db_bin_id // prv row was previously inserted by thumb - && xtn_tid != Fsdb_xtn_tid_.Tid_thm // cur row is not thumb + if ( fil_itm.Db_bin_id() == Fsd_bin_tbl.Null_db_bin_id // prv row was previously inserted by thumb + && xtn_tid != Xtn_tid_thm // cur row is not thumb ) { tbl_fil.Update(fil_id, dir_id, fil, xtn_tid, ext_id, bin_len, modified, hash, bin_db_id); // update props; note that thumb inserts null props, whereas file will insert real props (EX: bin_db_id) } } return fil_id; } + private static final int Xtn_tid_none = 0, Xtn_tid_thm = 1, Xtn_tid_img = 2; } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java new file mode 100644 index 000000000..29968c678 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java @@ -0,0 +1,76 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.cache.*; +import gplx.fsdb.data.*; +public class Fsm_atr_mgr implements RlsAble { + private Fsm_atr_tbl tbl = new Fsm_atr_tbl(); + private Fsm_atr_fil[] itms; private Fsm_atr_fil itms_0; + public int Len() {return itms.length;} + public Fsm_atr_fil Get_at(int i) {return i == Id_0 ? itms_0 : itms[i];} + public Fsd_fil_itm Fil_select(byte[] dir, byte[] fil) {return itms_0.Fil_select(dir, fil);} + public boolean Thm_select(int owner_id, Fsd_thm_itm thm) {return itms_0.Thm_select(owner_id, thm);} + public int Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + return itms_0.Fil_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, modified, hash, bin_db_id, bin_len, bin_rdr); + } + public int Img_insert(Fsd_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + return itms_0.Img_insert(rv, dir, fil, ext_id, img_w, img_h, modified, hash, bin_db_id, bin_len, bin_rdr); + } + public int Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int width, int height, double thumbtime, int page, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + return itms_0.Thm_insert(rv, String_.new_utf8_(dir), String_.new_utf8_(fil), ext_id, width, height, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr); + } + public void Txn_open() { + int len = itms.length; + for (int i = 0; i < len; i++) { + Fsm_atr_fil itm = itms[i]; + itm.Txn_open(); + } + } + public void Txn_save() { + tbl.Commit_all(itms); + int len = itms.length; + for (int i = 0; i < len; i++) { + Fsm_atr_fil itm = itms[i]; + itm.Txn_save(); + } + } + public void Rls() { + int len = itms.length; + for (int i = 0; i < len; i++) { + Fsm_atr_fil itm = itms[i]; + itm.Rls(); + } + } + public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir, Fsm_abc_mgr abc_mgr) { + tbl.Conn_(conn, created, version_is_1); + if (created) { + Fsm_atr_fil itm = Fsm_atr_fil.make_(abc_mgr, Id_0, url_(dir, Id_0), Path_bgn_0); + this.itms = new Fsm_atr_fil[] {itm}; + this.itms_0 = itm; + } + else { + this.itms = tbl.Select_all(abc_mgr, dir); + this.itms_0 = this.itms[0]; + } + } + private static Io_url url_(Io_url dir, int id) { + return dir.GenSubFil_ary("fsdb.atr.", Int_.Xto_str_pad_bgn(id, 2), ".sqlite3"); + } + public static final int Id_0 = 0; + public static final String Path_bgn_0 = ""; +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java new file mode 100644 index 000000000..126019710 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java @@ -0,0 +1,79 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; +public class Fsm_atr_tbl { + private String tbl_name = "file_meta_atr"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_uid, fld_url, fld_path_bgn; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + if (version_is_1) { + tbl_name = "fsdb_db_atr"; + } + fld_uid = flds.Add_int("uid"); + fld_url = flds.Add_str("url", 255); + fld_path_bgn = flds.Add_str("path_bgn", 255); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_uid) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid); + } + public Fsm_atr_fil[] Select_all(Fsm_abc_mgr abc_mgr, Io_url dir) { + ListAdp rv = ListAdp_.new_(); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select_as_rdr(); + while (rdr.Move_next()) { + Io_url url = dir.GenSubFil(rdr.Read_str(fld_url)); + Fsm_atr_fil itm = new Fsm_atr_fil(abc_mgr, url); + itm.Ctor_by_load + ( rdr.Read_int(fld_uid) + , url + , rdr.Read_str(fld_path_bgn) + , Db_cmd_mode.Tid_ignore + ); + rv.Add(itm); + } + } + finally {rdr.Rls();} + return (Fsm_atr_fil[])rv.Xto_ary(Fsm_atr_fil.class); + } + public void Commit_all(Fsm_atr_fil[] ary) { + stmt_bldr.Batch_bgn(); + try { + int len = ary.length; + for (int i = 0; i < len; i++) + Commit_itm(ary[i]); + } finally {stmt_bldr.Batch_end();} + } + private void Commit_itm(Fsm_atr_fil itm) { + Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); + switch (itm.Cmd_mode()) { + case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_uid, itm.Id()) .Val_str(fld_url, itm.Url().NameAndExt()).Val_str(fld_path_bgn, itm.Path_bgn()).Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear() .Val_str(fld_url, itm.Url().NameAndExt()).Val_str(fld_path_bgn, itm.Path_bgn()).Crt_int(fld_uid, itm.Id()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Id()).Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Cmd_mode()); + } + itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); + } +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.java new file mode 100644 index 000000000..1766e66f4 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_fil.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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +import gplx.fsdb.data.*; +public class Fsm_bin_fil implements RlsAble { + public Fsm_bin_fil(int id, Io_url url, long bin_len, long bin_max, byte cmd_mode) { + this.id = id; this.url = url; this.bin_len = bin_len; this.bin_max = bin_max; this.cmd_mode = cmd_mode; + } + public int Id() {return id;} private final int id; + public Io_url Url() {return url;} private final Io_url url; + public long Bin_max() {return bin_max;} private long bin_max; + public void Bin_max_(long v) { + bin_max = v; + if (cmd_mode == Db_cmd_mode.Tid_ignore) cmd_mode = Db_cmd_mode.Tid_update; + } + public long Bin_len() {return bin_len;} private long bin_len; + public void Bin_len_(long v) { + bin_len = v; + if (cmd_mode == Db_cmd_mode.Tid_ignore) cmd_mode = Db_cmd_mode.Tid_update; + } + public byte Cmd_mode() {return cmd_mode;} public Fsm_bin_fil Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public static final Fsm_bin_fil[] Ary_empty = new Fsm_bin_fil[0]; + private Fsd_bin_tbl bin_tbl = new Fsd_bin_tbl(); private Db_conn conn; + public static Fsm_bin_fil make_(int id, Io_url url, long bin_len, long bin_max) { + Fsm_bin_fil rv = new Fsm_bin_fil(id, url, bin_len, bin_max, Db_cmd_mode.Tid_create); + rv.Conn(); // force table create + return rv; + } + private static final String Db_conn_bldr_type = "gplx.fsdb.fsm_bin"; + public Db_conn Conn() { + if (conn == null) { + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, url); + conn = conn_data.Conn(); + bin_tbl.Conn_(conn, conn_data.Created(), Bool_.Y); + } + return conn; + } + public long Insert(int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {this.Conn(); return bin_tbl.Insert_rdr(bin_id, owner_tid, bin_len, bin_rdr);} + public boolean Get_to_url(int id, Io_url url) {this.Conn(); return bin_tbl.Select_to_url(id, url);} + public Io_stream_rdr Get_as_rdr(int id) {return bin_tbl.Select_as_rdr(this.Conn(), id);} + public void Rls() {if (conn != null) conn.Conn_term();} +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java new file mode 100644 index 000000000..4e022e3b4 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java @@ -0,0 +1,94 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; +public class Fsm_bin_mgr implements RlsAble { + private Io_url dir; + private final Fsm_bin_tbl tbl = new Fsm_bin_tbl(); + private Fsm_bin_fil[] fil_ary = Fsm_bin_fil.Ary_empty; private int fil_ary_len = 0; + private Fsm_bin_fil fil_cur; + public int Len() {return fil_ary.length;} + public long Db_bin_max() {return db_bin_max;} + public int Insert_to_bin() {return insert_to_bin;} public Fsm_bin_mgr Insert_to_bin_(int v) {insert_to_bin = v; return this;} private int insert_to_bin = Fsm_mnt_mgr.Insert_to_bin_null; + public Fsm_bin_mgr Db_bin_max_(long v) { + db_bin_max = v; + for (int i = 0; i < fil_ary_len; i++) + fil_ary[i].Bin_max_(v); + return this; + } private long db_bin_max = Io_mgr.Len_mb * Long_.Xby_int(188); + public Fsm_bin_fil Get_at(int i) {return fil_ary[i];} + private Fsm_bin_fil Get_cur() {return fil_ary_len == 0 ? null : fil_ary[fil_ary_len - 1];} + public void Txn_open() { + Get_cur().Conn().Txn_mgr().Txn_bgn_if_none(); + } + public void Txn_save() { + tbl.Commit_all(fil_ary); + Get_cur().Conn().Txn_mgr().Txn_end_all(); + } + public void Rls() { + int len = fil_ary.length; + for (int i = 0; i < len; i++) { + Fsm_bin_fil itm = fil_ary[i]; + itm.Rls(); + } + } + public int Get_id_for_insert(long bin_len) { + if (insert_to_bin != Fsm_mnt_mgr.Insert_to_bin_null) return insert_to_bin; // insert_to_bin specified; return it + if (fil_cur.Bin_len() > fil_cur.Bin_max()) + Itms_add(0); + return fil_cur.Id(); + } + public void Increment(long bin_len) { + long new_bin_len = fil_cur.Bin_len() + bin_len; + fil_cur.Bin_len_(new_bin_len); + } + public long Insert(int db_id, int bin_id, byte owner_tid, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + Fsm_bin_fil bin_fil = fil_ary[db_id]; + return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr); + } + public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir) { + this.dir = dir; + tbl.Conn_(conn, created, version_is_1); + if (created) + this.Itms_add(0); + else { + fil_ary = tbl.Select_all(dir); + fil_ary_len = this.fil_ary.length; + fil_cur = this.fil_ary[fil_ary_len - 1]; + } + } + private void Itms_add(long bin_len) { + Fsm_bin_fil cur = Get_cur(); + if (cur != null) { + cur.Conn().Txn_mgr().Txn_end_all(); + cur.Conn().Conn_term(); + } + int new_itms_len = fil_ary_len + 1; + Fsm_bin_fil[] new_itms = new Fsm_bin_fil[new_itms_len]; + for (int i = 0; i < fil_ary_len; i++) + new_itms[i] = fil_ary[i]; + fil_cur = Fsm_bin_fil.make_(fil_ary_len, url_(dir, fil_ary_len), bin_len, db_bin_max); + fil_ary = new_itms; + fil_ary_len = new_itms_len; + fil_ary[fil_ary_len - 1] = fil_cur; + this.Txn_open(); + } + private static Io_url url_(Io_url dir, int id) { + return dir.GenSubFil_ary("fsdb.bin.", Int_.Xto_str_pad_bgn(id, 4), ".sqlite3"); + } +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java new file mode 100644 index 000000000..80e0acf1a --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java @@ -0,0 +1,79 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; +public class Fsm_bin_tbl { + private String tbl_name = "file_meta_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_uid, fld_url, fld_bin_len, fld_bin_max; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + if (version_is_1) { + tbl_name = "fsdb_db_bin"; + } + fld_uid = flds.Add_int("uid"); + fld_url = flds.Add_str("url", 255); + fld_bin_len = flds.Add_long("bin_len"); + fld_bin_max = flds.Add_long("bin_max"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_uid) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid); + } + public Fsm_bin_fil[] Select_all(Io_url dir) { + ListAdp rv = ListAdp_.new_(); + Db_qry qry = Db_qry_select.new_().From_(tbl_name).Cols_all_().Where_(Db_crt_.eq_many_(Db_meta_fld.Ary_empy)).OrderBy_asc_(fld_uid); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = conn.Stmt_new(qry).Clear().Exec_select_as_rdr(); + while (rdr.Move_next()) { + Fsm_bin_fil itm = new Fsm_bin_fil + ( rdr.Read_int(fld_uid) + , dir.GenSubFil(rdr.Read_str(fld_url)) + , rdr.Read_long(fld_bin_len) + , rdr.Read_long(fld_bin_max) + , Db_cmd_mode.Tid_ignore + ); + rv.Add(itm); + } + } finally {rdr.Rls();} + return (Fsm_bin_fil[])rv.Xto_ary(Fsm_bin_fil.class); + } + public void Commit_all(Fsm_bin_fil[] ary) { + stmt_bldr.Batch_bgn(); + try { + int len = ary.length; + for (int i = 0; i < len; i++) + Commit_itm(ary[i]); + } finally {stmt_bldr.Batch_end();} + } + private void Commit_itm(Fsm_bin_fil itm) { + Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); + switch (itm.Cmd_mode()) { + case Db_cmd_mode.Tid_create: stmt.Clear().Crt_int(fld_uid, itm.Id()) .Val_str(fld_url, itm.Url().NameAndExt()).Val_long(fld_bin_len, itm.Bin_len()).Val_long(fld_bin_max, itm.Bin_max()).Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear() .Val_str(fld_url, itm.Url().NameAndExt()).Val_long(fld_bin_len, itm.Bin_len()).Val_long(fld_bin_max, itm.Bin_max()).Crt_int(fld_uid, itm.Id()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Id()).Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Cmd_mode()); + } + itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); + } +} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java similarity index 53% rename from 400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java rename to 400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java index a6df17fde..fb27148da 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java @@ -15,11 +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.fsdb; import gplx.*; -import gplx.dbs.*; -public class Fsdb_cfg_mgr { - private HashAdp grps = HashAdp_.new_(); - private Fsdb_cfg_tbl cfg_tbl; +package gplx.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.*; +import gplx.fsdb.meta.*; +public class Fsm_cfg_mgr { + private final Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(); + private final HashAdp grps = HashAdp_.new_(); public int Next_id() {return next_id++;} private int next_id = 1; public boolean Schema_thm_page() {return schema_thm_page;} private boolean schema_thm_page = true; public boolean Patch_next_id() {return patch_next_id;} private boolean patch_next_id = true; @@ -33,7 +34,7 @@ public class Fsdb_cfg_mgr { } public void Rls() {cfg_tbl.Rls();} private void Update_next_id() {cfg_tbl.Update("core", "next_id", Int_.Xto_str(next_id));} - public Fsdb_cfg_mgr Update(String grp, String key, String new_val) { + public Fsm_cfg_mgr Update(String grp, String key, String new_val) { String cur_val = cfg_tbl.Select_as_str_or(grp, key, null); if (cur_val == null) cfg_tbl.Insert(grp, key, new_val); @@ -41,38 +42,36 @@ public class Fsdb_cfg_mgr { cfg_tbl.Update(grp, key, new_val); return this; } - public Fsdb_cfg_grp Grps_get_or_load(String grp_key) { - Fsdb_cfg_grp grp = (Fsdb_cfg_grp)grps.Fetch(grp_key); + public Db_cfg_grp Grps_get_or_load(String grp_key) { + Db_cfg_grp grp = (Db_cfg_grp)grps.Fetch(grp_key); if (grp == null) { grp = cfg_tbl.Select_as_grp(grp_key); grps.Add(grp_key, grp); } return grp; } - public Fsdb_cfg_grp Grps_get_or_add(String grp_key) { // TEST: - Fsdb_cfg_grp grp = (Fsdb_cfg_grp)grps.Fetch(grp_key); + public Db_cfg_grp Grps_get_or_add(String grp_key) { // TEST: + Db_cfg_grp grp = (Db_cfg_grp)grps.Fetch(grp_key); if (grp == null) { - grp = new Fsdb_cfg_grp(grp_key); + grp = new Db_cfg_grp(grp_key); grps.Add(grp_key, grp); } return grp; } - public static Fsdb_cfg_mgr load_(Fsdb_db_abc_mgr abc_mgr, Db_conn p) {return new Fsdb_cfg_mgr().Init_by_load(p);} - public static Fsdb_cfg_mgr make_(Fsdb_db_abc_mgr abc_mgr, Db_conn p) {return new Fsdb_cfg_mgr().Init_by_make(p);} - private Fsdb_cfg_mgr Init_by_load(Db_conn p) { - this.cfg_tbl = new Fsdb_cfg_tbl_sql().Ctor(p, false); - Fsdb_cfg_grp core_grp = Grps_get_or_load(Grp_core); - this.next_id = core_grp.Get_int_or(Key_next_id, -1); if (next_id == -1) throw Err_.new_("next_id not found in fsdb_cfg"); - this.schema_thm_page = core_grp.Get_yn_or_n(Key_schema_thm_page); - this.patch_next_id = core_grp.Get_yn_or_n(Key_patch_next_id); - return this; - } - private Fsdb_cfg_mgr Init_by_make(Db_conn p) { - this.cfg_tbl = new Fsdb_cfg_tbl_sql().Ctor(p, true); - this.cfg_tbl.Insert(Grp_core, Key_next_id , "1"); // start next_id at 1 - this.cfg_tbl.Insert(Grp_core, Key_schema_thm_page , "y"); // new dbs automatically have page and time in fsdb_xtn_tm - this.cfg_tbl.Insert(Grp_core, Key_patch_next_id , "y"); // new dbs automatically have correct next_id - return this; + public static Fsm_cfg_mgr new_() {return new Fsm_cfg_mgr();} + public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) { + cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + if (created) { + cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_next_id , "1"); // start next_id at 1 + cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_schema_thm_page , "y"); // new dbs automatically have page and time in fsdb_xtn_tm + cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_patch_next_id , "y"); // new dbs automatically have correct next_id + } + else { + Db_cfg_grp core_grp = Grps_get_or_load(Grp_core); + this.next_id = core_grp.Get_int_or(Key_next_id, -1); if (next_id == -1) throw Err_.new_("next_id not found in fsdb_cfg"); + this.schema_thm_page = core_grp.Get_yn_or_n(Key_schema_thm_page); + this.patch_next_id = core_grp.Get_yn_or_n(Key_patch_next_id); + } } public static final String Grp_core = "core"; public static final String Key_next_id = "next_id", Key_schema_thm_page = "schema.thm.page", Key_patch_next_id = "patch.next_id"; diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_id_itm.java b/400_xowa/src/gplx/fsdb/meta/Fsm_id_itm.java new file mode 100644 index 000000000..8c833fd78 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_id_itm.java @@ -0,0 +1,24 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +public class Fsm_id_itm { + public Fsm_id_itm(String key, int id, int version) {this.key = key; this.id = id; this.version = version;} + public String Key() {return key;} private final String key; + public int Id() {return id;} private final int id; + public int Version() {return version;} private final int version; +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java new file mode 100644 index 000000000..9e489b9dd --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_itm.java @@ -0,0 +1,24 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +public class Fsm_mnt_itm { + public Fsm_mnt_itm(int id, String name, String url) {this.id = id; this.name = name; this.url = url;} + public int Id() {return id;} private final int id; + public String Name() {return name;} private final String name; + public String Url() {return url;} private final String url; +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java new file mode 100644 index 000000000..3898a1e47 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java @@ -0,0 +1,130 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.core.primitives.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +import gplx.fsdb.data.*; import gplx.fsdb.meta.*; +public class Fsm_mnt_mgr implements GfoInvkAble { + private final Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(); private final Fsm_mnt_tbl mnt_tbl = new Fsm_mnt_tbl(); + private Fsm_abc_mgr[] ary; private int ary_len = 0; + private static final String Db_conn_bldr_type_mnt = "gplx.fsdb.mnt"; + public void Init_by_wiki(Io_url db_dir, boolean version_is_1) { + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type_mnt, db_dir.GenSubFil("wiki.mnt.sqlite3")); + Fsm_mnt_itm[] mnts = Mnts__load_or_make(conn_data, version_is_1); + ary_len = mnts.length; + ary = new Fsm_abc_mgr[ary_len]; + for (int i = 0; i < ary_len; i++) { + Fsm_mnt_itm itm = mnts[i]; + Fsm_abc_mgr abc_mgr = new Fsm_abc_mgr(); + ary[i] = abc_mgr; + if (version_is_1) { + Io_url abc_url = db_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3"); + abc_mgr.Init_for_db(version_is_1, abc_url.OwnerDir()); + } + else + throw Err_.not_implemented_(); + } + if (conn_data.Created()) Fsm_mnt_mgr.Patch(this); + insert_to_mnt = cfg_tbl.Select_as_int_or_fail("core", "mnt.insert_idx"); + if (ary_len > 0) { + Db_cfg_grp cfg_grp = this.Mnts__at(0).Cfg_mgr().Grps_get_or_load(Xof_fsdb_mgr_cfg.Grp_xowa); + boolean use_thumb_w = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w, Bool_.N); + boolean fix_default = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_fix_default, Bool_.N); + patch_upright_tid = Xof_patch_upright_tid_.Merge(use_thumb_w, fix_default); + } + else // TEST: no cfg dbs + patch_upright_tid = Xof_patch_upright_tid_.Tid_all; + } + public Fsm_abc_mgr Mnts__at(int i) {return ary[i];} + public Fsm_bin_fil Bins__at(int mnt_id, int bin_db_id) {return ary[mnt_id].Bin_mgr().Get_at(bin_db_id);} + public Fsd_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) { + for (int i = 0; i < ary_len; i++) { + Fsd_fil_itm rv = ary[i].Fil_select_bin(dir, fil, is_thumb, width, thumbtime); + if (rv != Fsd_fil_itm.Null && rv.Db_bin_id() != Fsd_bin_tbl.Null_db_bin_id) { // NOTE: mnt_0 can have thumb, but mnt_1 can have itm; check for itm with Db_bin_id; DATE:2013-11-16 + rv.Mnt_id_(i); + return rv; + } + } + return Fsd_fil_itm.Null; + } + public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsd_thm_itm thm) { + for (int i = 0; i < ary_len; i++) { + boolean rv = ary[i].Thm_select_bin(dir, fil, thm); + if (rv) { + thm.Mnt_id_(i); + return rv; + } + } + return false; + } + public int Insert_to_mnt() {return insert_to_mnt;} public Fsm_mnt_mgr Insert_to_mnt_(int v) {insert_to_mnt = v; return this;} private int insert_to_mnt = Mnt_idx_user; + public void Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + ary[insert_to_mnt].Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr); + } + public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_len, bin_rdr); + } + public void Img_insert(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + ary[insert_to_mnt].Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h); + } + public void Bin_db_max_(long v) { + for (int i = 0; i < ary_len; i++) + ary[i].Bin_mgr().Db_bin_max_(v); + } + public void Insert_to_bin_(int v) { + for (int i = 0; i < ary_len; i++) + ary[i].Bin_mgr().Insert_to_bin_(v); + } + public int Patch_upright() {return patch_upright_tid;} private int patch_upright_tid = Xof_patch_upright_tid_.Tid_all; + public void Txn_open() { + for (int i = 0; i < ary_len; i++) + ary[i].Txn_open(); + } + public void Txn_save() { + for (int i = 0; i < ary_len; i++) + ary[i].Txn_save(); + } + public void Rls() { + for (int i = 0; i < ary_len; i++) + ary[i].Rls(); + cfg_tbl.Rls(); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_bin_db_max_in_mb_)) this.Bin_db_max_(m.ReadLong("v") * Io_mgr.Len_mb); + else if (ctx.Match(k, Invk_insert_to_mnt_)) insert_to_mnt = m.ReadInt("v"); + else if (ctx.Match(k, Invk_insert_to_bin_)) this.Insert_to_bin_(m.ReadInt("v")); + else return GfoInvkAble_.Rv_unhandled; + return this; + } private static final String Invk_bin_db_max_in_mb_ = "bin_db_max_in_mb_", Invk_insert_to_mnt_ = "insert_to_mnt_", Invk_insert_to_bin_ = "insert_to_bin_"; + public static final int Mnt_idx_main = 0, Mnt_idx_user = 1, Insert_to_bin_null = -1; + public static void Patch(Fsm_mnt_mgr mnt_mgr) { + mnt_mgr.Mnts__at(Fsm_mnt_mgr.Mnt_idx_main).Cfg_mgr() + .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_fix_defaults , "y") + .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_packed , "y") + .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w , "y") + .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y") + ; + } + private Fsm_mnt_itm[] Mnts__load_or_make(Db_conn_bldr_data conn_data, boolean version_is_1) { + Db_conn conn = conn_data.Conn(); boolean created = conn_data.Created(); + cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + mnt_tbl.Conn_(conn, created, version_is_1); + if (created) cfg_tbl.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user)); + return mnt_tbl.Select_all(); + } +} diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java new file mode 100644 index 000000000..048e0bd3b --- /dev/null +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java @@ -0,0 +1,65 @@ +/* +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.fsdb.meta; import gplx.*; import gplx.fsdb.*; +import gplx.dbs.*; +public class Fsm_mnt_tbl { + private String tbl_name = "file_meta_mnt"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_name, fld_url; + private Db_conn conn; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "fsdb_mnt"; + fld_prefix = "mnt_"; + } + fld_id = flds.Add_int(fld_prefix + "id"); + fld_name = flds.Add_str(fld_prefix + "name", 255); + fld_url = flds.Add_str(fld_prefix + "url", 255); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_id) + ); + conn.Exec_create_tbl_and_idx(meta); + this.Insert(Fsm_mnt_mgr.Mnt_idx_main, "fsdb.main", "fsdb.main"); + this.Insert(Fsm_mnt_mgr.Mnt_idx_user, "fsdb.user", "fsdb.user"); + } + } + public void Insert(int id, String name, String url) { + Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); + stmt.Clear().Val_int(fld_id, id).Val_str(fld_name, name).Val_str(fld_url, url).Exec_insert(); + } + public void Update(int id, String name, String url) { + Db_stmt stmt = conn.Stmt_update_exclude(tbl_name, flds, fld_id); + stmt.Clear().Val_str(fld_name, name).Val_str(fld_url, url).Crt_int(fld_id, id).Exec_update(); + } + public Fsm_mnt_itm[] Select_all() { + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); + Db_rdr rdr = Db_rdr_.Null; + ListAdp list = ListAdp_.new_(); + try { + rdr = stmt.Clear().Exec_select_as_rdr(); + while (rdr.Move_next()) { + Fsm_mnt_itm itm = new Fsm_mnt_itm(rdr.Read_int(fld_id), rdr.Read_str(fld_name), rdr.Read_str(fld_url)); + list.Add(itm); + } + } + finally {rdr.Rls();} + return (Fsm_mnt_itm[])list.Xto_ary_and_clear(Fsm_mnt_itm.class); + } +} diff --git a/400_xowa/src/gplx/php/Php_evaluator.java b/400_xowa/src/gplx/php/Php_evaluator.java index bcf34c0be..c0085e768 100644 --- a/400_xowa/src/gplx/php/Php_evaluator.java +++ b/400_xowa/src/gplx/php/Php_evaluator.java @@ -249,8 +249,7 @@ public class Php_evaluator implements Php_tkn_wkr { msg_log.Add_itm_many(itm, src, bgn, end, args); } public static final Gfo_msg_itm Expecting_itm_failed = Gfo_msg_itm_.new_warn_(Php_parser.Log_nde, "expecting_itm_failed", "expecting_itm ~{0} but got ~{1} instead"); - static final byte Mode_key_bgn = 1, Mode_key_end = 2, Mode_expect = 3, Mode_suspend = 4, Mode_val = 5, Mode_ary_subs = 6, Mode_ary_dlm = 7, Mode_ary_term = 8, Mode_brack_itm = 9; - + private static final byte Mode_key_bgn = 1, Mode_key_end = 2, Mode_expect = 3, Mode_suspend = 4, Mode_val = 5, Mode_ary_subs = 6, Mode_ary_dlm = 7, Mode_ary_term = 8, Mode_brack_itm = 9; } class Php_scanner_frame { public Php_scanner_frame(Php_itm_ary ary) {this.ary = ary;} diff --git a/400_xowa/src/gplx/srls/dsvs/Dsv_fld_parser_.java b/400_xowa/src/gplx/srls/dsvs/Dsv_fld_parser_.java index 1e814cc28..41096ad64 100644 --- a/400_xowa/src/gplx/srls/dsvs/Dsv_fld_parser_.java +++ b/400_xowa/src/gplx/srls/dsvs/Dsv_fld_parser_.java @@ -19,10 +19,39 @@ package gplx.srls.dsvs; import gplx.*; import gplx.srls.*; public class Dsv_fld_parser_ { public static final Dsv_fld_parser Bry_parser = Dsv_fld_parser_bry._; public static final Dsv_fld_parser Int_parser = Dsv_fld_parser_int._; + public static final Dsv_fld_parser Line_parser__comment_is_pipe = new Dsv_fld_parser_line(Byte_ascii.Pipe); public static Err err_fld_unhandled(Dsv_fld_parser parser, Dsv_wkr_base wkr, int fld_idx, byte[] src, int bgn, int end) { throw Err_.new_fmt_("fld unhandled; parser={0} wkr={1} fld_idx={2} val={3}", ClassAdp_.NameOf_obj(parser), ClassAdp_.NameOf_obj(wkr), fld_idx, String_.new_utf8_(src, bgn, end)); } } +class Dsv_fld_parser_line implements Dsv_fld_parser { + private byte row_dlm = Byte_ascii.NewLine; private final byte comment_dlm; + public Dsv_fld_parser_line(byte comment_dlm) {this.comment_dlm = comment_dlm;} + public void Init(byte fld_dlm, byte row_dlm) { + this.row_dlm = row_dlm; + } + public int Parse(Dsv_tbl_parser parser, Dsv_wkr_base wkr, byte[] src, int pos, int src_len, int fld_idx, int fld_bgn) { + while (true) { + boolean pos_is_last = pos == src_len; + byte b = pos_is_last ? row_dlm : src[pos]; + if (b == comment_dlm) { + pos = Bry_finder.Find_fwd_until(src, pos, src_len, row_dlm); + if (pos == Bry_finder.Not_found) + pos = src_len; + } + else if (b == row_dlm) { + boolean pass = wkr.Write_bry(parser, fld_idx, src, fld_bgn, pos); + if (!pass) throw Dsv_fld_parser_.err_fld_unhandled(this, wkr, fld_idx, src, fld_bgn, pos); + wkr.Commit_itm(parser, pos); + int rv = pos + 1; // row_dlm is always 1 byte + parser.Update_by_row(rv); + return rv; + } + else + ++pos; + } + } +} class Dsv_fld_parser_bry implements Dsv_fld_parser { private byte fld_dlm = Byte_ascii.Pipe, row_dlm = Byte_ascii.NewLine; public void Init(byte fld_dlm, byte row_dlm) { diff --git a/400_xowa/src/gplx/xowa/Xoa_app.java b/400_xowa/src/gplx/xowa/Xoa_app.java index 5de9408ac..f1758f1d6 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app.java +++ b/400_xowa/src/gplx/xowa/Xoa_app.java @@ -16,195 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa; import gplx.*; -import gplx.core.btries.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.threads.*; -import gplx.xowa.apps.*; import gplx.xowa.apps.caches.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.apis.*; import gplx.xowa.urls.encoders.*; -import gplx.xowa.langs.*; import gplx.xowa.specials.*; import gplx.xowa.cfgs2.*; -import gplx.xowa.wikis.*; import gplx.xowa.users.*; import gplx.xowa.gui.*; import gplx.xowa.cfgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.tocs.*; import gplx.xowa.fmtrs.*; import gplx.xowa.html.*; -import gplx.xowa.parsers.*; import gplx.xowa.parsers.amps.*; import gplx.xowa.parsers.tblws.*; -import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.math.*; -import gplx.xowa.parsers.logs.*; import gplx.xowa.servers.tcp.*; import gplx.xowa.servers.http.*; -public class Xoa_app implements GfoInvkAble { - public Xoa_app(Gfo_usr_dlg usr_dlg, Io_url root_dir, Io_url user_dir, String bin_dir_name) { - this.usr_dlg = usr_dlg; - Io_url.Http_file_str_encoder = encoder_mgr.Fsys(); - log_wtr = usr_dlg.Log_wtr(); - cfg_mgr = new Xoa_cfg_mgr(this); - api_root = new Xoapi_root(this); - url_cmd_eval = new Xoa_fsys_eval(this); - fsys_mgr = new Xoa_fsys_mgr(bin_dir_name, root_dir); - launcher = new Launcher_app_mgr(this); - fsys_mgr.Init_by_app(launcher); - user = new Xou_user(this, user_dir); - log_wtr.Log_dir_(user.Fsys_mgr().App_temp_dir().GenSubDir("log")); - lang_mgr = new Xoa_lang_mgr(this); - wiki_mgr = new Xoa_wiki_mgr(this); - gui_mgr = new Xoa_gui_mgr(this); - bldr = new Xob_bldr(this); - file_mgr.Init_app(this, usr_dlg); - href_parser = new Xoh_href_parser(encoder_mgr.Href(), url_parser.Url_parser()); - sanitizer = new Xop_sanitizer(parser_amp_mgr, msg_log); - user_mgr = new Xou_user_mgr(this, user); - sys_cfg = new Xoa_sys_cfg(this); - cur_redirect = new Xoa_cur(this); - shell = new Xoa_shell(this); - setup_mgr = new Xoi_setup_mgr(this); - gfs_mgr = new Xoa_gfs_mgr(this); - xtn_mgr = new Xow_xtn_mgr().Ctor_by_app(this); - hive_mgr = new Xoa_hive_mgr(this); - tcp_server.App_ctor(this); - fmtr_mgr = new Xoa_fmtr_mgr(this); - log_mgr = new Xop_log_mgr(this); - http_server = new Http_server_mgr(this); - cfg_regy = new Xocfg_regy(this); - html_mgr = new Xoh_html_mgr(this); -// queue_file = new Xop_queue_mgr(this); - } - public NumberParser Utl_num_parser() {return utl_num_parser;} private NumberParser utl_num_parser = new NumberParser(); - public void Init() { - stage = Xoa_stage_.Tid_init; - launcher.Init(); - xtn_mgr.Init_by_app(this); - log_wtr.Init(); - gui_mgr.Init_by_app(); - user.Init_by_app(); - file_mgr.Init_by_app(); - wiki_mgr.Init_by_app(); - gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this); - ctg_mgr.Init_by_app(this); - setup_mgr.Init_by_app(this); - thread_mgr.Usr_dlg_(usr_dlg); - html_mgr.Init_by_app(this); - api_root.Init_by_app(this); - } - public boolean Launch_done() {return stage == Xoa_stage_.Tid_launch;} - public void Launch() { - if (Launch_done()) return; - stage = Xoa_stage_.Tid_launch; - user.Cfg_mgr().Setup_mgr().Setup_run_check(this); log_bfr.Add("app.upgrade.done"); - gplx.xowa.users.prefs.Prefs_converter._.Check(this); - user.Wiki().Init_assert(); // NOTE: must assert wiki and load langs first, else will be asserted during Portal_mgr().Init(), which will cause IndexOutOfBounds; DATE:2014-10-04 - } - public byte Stage() {return stage;} public Xoa_app Stage_(byte v) {stage = v; return this;} private byte stage = Xoa_stage_.Tid_ctor; - public boolean Term_cbk() { - usr_dlg.Log_many("", "", "term:bgn"); - if (setup_mgr.Cmd_mgr().Working()) { - if (!gui_mgr.Kit().Ask_yes_no("", "", "An import is in progress. Are you sure you want to exit?")) return false; - } - gui_mgr.Browser_win().Usr_dlg().Canceled_y_(); - user.App_term(); usr_dlg.Log_many("", "", "term:app_term"); - log_wtr.Term(); usr_dlg.Log_many("", "", "term:log_wtr"); - log_mgr.Rls(); usr_dlg.Log_many("", "", "term:log_mgr"); - if (Scrib_core.Core() != null) {Scrib_core.Core().Term(); usr_dlg.Log_many("", "", "term:scrib");} - wiki_mgr.Rls(); usr_dlg.Log_many("", "", "term:wiki_mgr"); - return true; - } - public Xoa_wiki_mgr Wiki_mgr() {return wiki_mgr;} private Xoa_wiki_mgr wiki_mgr; - public Xou_user_mgr User_mgr() {return user_mgr;} private Xou_user_mgr user_mgr; - public Xof_file_mgr File_mgr() {return file_mgr;} private Xof_file_mgr file_mgr = new Xof_file_mgr(); - public Xoa_lang_mgr Lang_mgr() {return lang_mgr;} private Xoa_lang_mgr lang_mgr; - public Xoa_gui_mgr Gui_mgr() {return gui_mgr;} private Xoa_gui_mgr gui_mgr; - public Xou_user User() {return user;} private Xou_user user; - public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr; - public Xow_xtn_mgr Xtn_mgr() {return xtn_mgr;} private Xow_xtn_mgr xtn_mgr; - public Xoapi_root Api_root() {return api_root;} private Xoapi_root api_root; - public Xop_tkn_mkr Tkn_mkr() {return tkn_mkr;} private Xop_tkn_mkr tkn_mkr = new Xop_tkn_mkr(); - public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} private Gfo_usr_dlg usr_dlg; - public Gfo_log_wtr Log_wtr() {return log_wtr;} private Gfo_log_wtr log_wtr; - public Xoa_gfs_mgr Gfs_mgr() {return gfs_mgr;} private Xoa_gfs_mgr gfs_mgr; - public Xoa_special_mgr Special_mgr() {return special_mgr;} private Xoa_special_mgr special_mgr = new gplx.xowa.specials.Xoa_special_mgr(); - public Xoh_html_mgr Html_mgr() {return html_mgr;} private Xoh_html_mgr html_mgr; - public Xop_log_mgr Log_mgr() {return log_mgr;} private Xop_log_mgr log_mgr; - public Xoa_shell Shell() {return shell;} private Xoa_shell shell; - public byte Mode() {return mode;} public Xoa_app Mode_(byte v) {mode = v; return this;} private byte mode = Xoa_app_.Mode_console; - public Xop_amp_mgr Parser_amp_mgr() {return parser_amp_mgr;} private Xop_amp_mgr parser_amp_mgr = new Xop_amp_mgr(); - public Xoa_thread_mgr Thread_mgr() {return thread_mgr;} private Xoa_thread_mgr thread_mgr = new Xoa_thread_mgr(); - public Url_encoder_mgr Encoder_mgr() {return encoder_mgr;} private Url_encoder_mgr encoder_mgr = new Url_encoder_mgr(); - public Xoa_fsys_mgr Fsys_mgr() {return fsys_mgr;} private Xoa_fsys_mgr fsys_mgr; - public Xoa_hive_mgr Hive_mgr() {return hive_mgr;} private Xoa_hive_mgr hive_mgr; - public Xoa_url_parser Url_parser() {return url_parser;} private Xoa_url_parser url_parser = new Xoa_url_parser(); - public Xoh_href_parser Href_parser() {return href_parser;} private Xoh_href_parser href_parser; - public Xop_sanitizer Sanitizer() {return sanitizer;} private Xop_sanitizer sanitizer; - public Xop_xatr_parser Xatr_parser() {return xatr_parser;} private Xop_xatr_parser xatr_parser = new Xop_xatr_parser(); - public Xop_xnde_tag_regy Xnde_tag_regy() {return xnde_tag_regy;} private Xop_xnde_tag_regy xnde_tag_regy = new Xop_xnde_tag_regy(); - public Xof_math_subst_regy Math_subst_regy() {return math_subst_regy;} private Xof_math_subst_regy math_subst_regy = new Xof_math_subst_regy(); - public Gfo_usr_dlg Gui_wtr() {return gui_mgr.Browser_win().Usr_dlg();} - public Launcher_app_mgr Launcher() {return launcher;} private Launcher_app_mgr launcher; - public Gfo_async_mgr Async_mgr() {return async_mgr;} private Gfo_async_mgr async_mgr = new Gfo_async_mgr(); - - public Xoi_setup_mgr Setup_mgr() {return setup_mgr;} private Xoi_setup_mgr setup_mgr; - public Gfo_msg_log Msg_log() {return msg_log;} private Gfo_msg_log msg_log = new Gfo_msg_log(Xoa_app_.Name); - public Gfo_msg_log Msg_log_null() {return msg_log_null;} private Gfo_msg_log msg_log_null = new Gfo_msg_log("null_log"); - - public Xoh_file_main_wkr File_main_wkr() {return file_main_wkr;} private Xoh_file_main_wkr file_main_wkr = new Xoh_file_main_wkr(); - public Btrie_slim_mgr Utl_trie_tblw_ws() {return utl_trie_tblw_ws;} private Btrie_slim_mgr utl_trie_tblw_ws = Xop_tblw_ws_itm.trie_(); - public Bry_bfr_mkr Utl_bry_bfr_mkr() {return utl_bry_bfr_mkr;} Bry_bfr_mkr utl_bry_bfr_mkr = new Bry_bfr_mkr(); - public Gfo_fld_rdr Utl_fld_rdr() {return utl_fld_rdr;} Gfo_fld_rdr utl_fld_rdr = Gfo_fld_rdr.xowa_(); - public Gfo_log_bfr Log_bfr() {return log_bfr;} private Gfo_log_bfr log_bfr = new Gfo_log_bfr(); - public Xoa_sys_cfg Sys_cfg() {return sys_cfg;} private Xoa_sys_cfg sys_cfg; - public Bry_fmtr Tmp_fmtr() {return tmp_fmtr;} Bry_fmtr tmp_fmtr = Bry_fmtr.new_(""); - public boolean Xwiki_missing(byte[] wiki_key) {return user.Wiki().Xwiki_mgr().Get_by_key(wiki_key) == null;} // NOTE: only the user_wiki has a full list of all wikis b/c it has xwiki objects; wiki_mgr does not, b/c it has heavier wiki objects which are loaded dynamically; - public boolean Xwiki_exists(byte[] wiki_key) {return user.Wiki().Xwiki_mgr().Get_by_key(wiki_key) != null;} - public Xoa_ctg_mgr Ctg_mgr() {return ctg_mgr;} private Xoa_ctg_mgr ctg_mgr = new Xoa_ctg_mgr(); - public Xoa_fsys_eval Url_cmd_eval() {return url_cmd_eval;} Xoa_fsys_eval url_cmd_eval; - public Xoa_cur Cur_redirect() {return cur_redirect;} private Xoa_cur cur_redirect; - public Xoa_cfg_mgr Cfg_mgr() {return cfg_mgr;} private Xoa_cfg_mgr cfg_mgr; - public Xocfg_regy Cfg_regy() {return cfg_regy;} private Xocfg_regy cfg_regy; - public Io_stream_zip_mgr Zip_mgr() {return zip_mgr;} Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr(); - public Xoa_cache_mgr Cache_mgr() {return cache_mgr;} private Xoa_cache_mgr cache_mgr = new Xoa_cache_mgr(); - - public Xosrv_server Tcp_server() {return tcp_server;} private Xosrv_server tcp_server = new Xosrv_server(); - public Http_server_mgr Http_server() {return http_server;} private Http_server_mgr http_server; - - private Xoa_fmtr_mgr fmtr_mgr; - public void Reset_all() { - this.Free_mem(true); - gplx.xowa.xtns.scribunto.Scrib_core.Core_invalidate(); - Env_.GarbageCollect(); - } - public void Free_mem(boolean clear_ctx) { - utl_bry_bfr_mkr.Clear(); - msg_log.Clear(); - wiki_mgr.Free_mem(clear_ctx); - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_gui)) return gui_mgr; - else if (ctx.Match(k, Invk_api)) return api_root; - else if (ctx.Match(k, Invk_bldr)) return bldr; - else if (ctx.Match(k, Invk_wikis)) return wiki_mgr; - else if (ctx.Match(k, Invk_fsys)) return fsys_mgr; - else if (ctx.Match(k, Invk_files)) return file_mgr; - else if (ctx.Match(k, Invk_langs)) return lang_mgr; - else if (ctx.Match(k, Invk_users)) return user_mgr; - else if (ctx.Match(k, Invk_user)) return user; - else if (ctx.Match(k, Invk_sys_cfg)) return sys_cfg; - else if (ctx.Match(k, Invk_cur)) return cur_redirect; - else if (ctx.Match(k, Invk_html)) return html_mgr; - else if (ctx.Match(k, Invk_shell)) return shell; - else if (ctx.Match(k, Invk_log)) return log_wtr; - else if (ctx.Match(k, Invk_setup)) return setup_mgr; - else if (ctx.Match(k, Invk_scripts)) return gfs_mgr; - else if (ctx.MatchPriv(k, Invk_term_cbk)) return this.Term_cbk(); - else if (ctx.Match(k, Invk_xtns)) return xtn_mgr; - else if (ctx.Match(k, Invk_ctg_mgr)) return ctg_mgr; - else if (ctx.Match(k, Invk_cfgs)) return cfg_mgr; - else if (ctx.Match(k, Invk_usr_dlg)) return usr_dlg; - else if (ctx.Match(k, Invk_specials)) return special_mgr; - else if (ctx.Match(k, Invk_server)) return tcp_server; - else if (ctx.Match(k, Invk_http_server)) return http_server; - else if (ctx.Match(k, Invk_app)) return this; - else if (ctx.Match(k, Invk_xowa)) return this; - else if (ctx.Match(k, Invk_fmtrs)) return fmtr_mgr; - else if (ctx.Match(k, Invk_cfg)) return cfg_regy; - else return GfoInvkAble_.Rv_unhandled; - } - public static final String Invk_gui = "gui", Invk_bldr = "bldr", Invk_wikis = "wikis", Invk_files = "files", Invk_langs = "langs", Invk_users = "users" - , Invk_sys_cfg = "sys_cfg", Invk_fsys = "fsys", Invk_cur = "cur", Invk_shell = "shell", Invk_log = "log" - , Invk_setup = "setup", Invk_scripts = "scripts", Invk_user = "user", Invk_xtns = "xtns", Invk_ctg_mgr = "ctg_mgr" - , Invk_cfgs = "cfgs", Invk_app = "app", Invk_xowa = "xowa", Invk_usr_dlg = "usr_dlg", Invk_specials = "specials", Invk_html = "html" - , Invk_server = "tcp_server", Invk_http_server = "http_server" - , Invk_fmtrs = "fmtrs" - , Invk_cfg = "cfg" - , Invk_api = "api" - ; - public static final String Invk_term_cbk = "term_cbk"; +import gplx.xowa.apps.fsys.*; +import gplx.xowa.files.caches.*; import gplx.xowa.files.imgs.*; +import gplx.xowa.wmfs.*; +public interface Xoa_app { + Xoa_fsys_mgr Fsys_mgr(); + Xof_cache_mgr File_mgr__cache_mgr(); + Xof_img_mgr File_mgr__img_mgr(); + Xowmf_mgr Wmf_mgr(); } diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 897cf0aa7..3973e422a 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -16,15 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa; import gplx.*; -import gplx.gfui.*; import gplx.xowa.users.*; +import gplx.dbs.*; import gplx.gfui.*; +import gplx.xowa.apps.*; import gplx.xowa.langs.*; import gplx.xowa.users.*; import gplx.xowa.hdumps.*; import gplx.xowa.hdumps.core.*; +import gplx.xowa.urls.encoders.*; public class Xoa_app_ { public static void Run(String... args) { Xoa_app_boot_mgr boot_mgr = new Xoa_app_boot_mgr(); boot_mgr.Run(args); } public static final String Name = "xowa"; - public static final String Version = "2.2.1.1"; + public static final String Version = "2.2.4.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys; public static String User_agent = ""; @@ -36,6 +38,15 @@ public class Xoa_app_ { rv.Log_wtr().Queue_enabled_(true); return rv; } + + public static byte Mode = Xoa_app_.Mode_console; + public static Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public static void Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v;} private static Gfo_usr_dlg usr_dlg; + public static Bry_bfr_mkr Utl_bry_bfr_mkr() {return utl_bry_bfr_mkr;} private static final Bry_bfr_mkr utl_bry_bfr_mkr = new Bry_bfr_mkr(); + public static Url_encoder_mgr Utl_encoder_mgr() {return encoder_mgr;} private static final Url_encoder_mgr encoder_mgr = new Url_encoder_mgr(); + + public static Xoa_gfs_mgr Gfs_mgr() {return gfs_mgr;} public static void Gfs_mgr_(Xoa_gfs_mgr v) {gfs_mgr = v;} private static Xoa_gfs_mgr gfs_mgr; +// public static Xoa_lang_mgr Lang_mgr() {return lang_mgr;} public static void Lang_mgr_(Xoa_lang_mgr v) {lang_mgr = v;} private static Xoa_lang_mgr lang_mgr; + public static final byte Mode_console = 0, Mode_gui = 1, Mode_http = 2; } class Xoa_app_boot_mgr { @@ -113,7 +124,7 @@ class Xoa_app_boot_mgr { } private void Run_app(App_cmd_mgr args_mgr) { boolean app_mode_gui = false; - Xoa_app app = null; + Xoae_app app = null; try { // init vars Io_url jar_dir = Env_.AppUrl().OwnerDir(); @@ -133,7 +144,8 @@ class Xoa_app_boot_mgr { app_mode_gui = String_.Eq(app_mode, "gui"); // init app - app = new Xoa_app(usr_dlg, root_dir, user_dir, Xoa_app_.Op_sys); usr_dlg.Log_wtr().Queue_enabled_(false); log_wtr.Log_msg_to_session_fmt("app.init"); + Db_conn_bldr.I.Reg_default_sqlite(); + app = new Xoae_app(usr_dlg, root_dir, user_dir, Xoa_app_.Op_sys); usr_dlg.Log_wtr().Queue_enabled_(false); log_wtr.Log_msg_to_session_fmt("app.init"); app.Fsys_mgr().Wiki_dir_(wiki_dir); try { app.Sys_cfg().Lang_(System_lang()); @@ -142,10 +154,10 @@ class Xoa_app_boot_mgr { app.Tcp_server().Rdr_port_(server_port_recv).Wtr_port_(server_port_send); app.Http_server().Port_(http_server_port); app.Http_server().Home_(http_server_home); - app.Init(); chkpoint = "init_gfs"; + app.Init_by_app(); chkpoint = "init_gfs"; } catch (Exception e) {usr_dlg.Warn_many("", "", "app init failed: ~{0} ~{1}", chkpoint, Err_.Message_gplx(e));} - app.Gui_wtr().Log_wtr_(app.Log_wtr()); // NOTE: log_wtr must be set for cmd-line (else process will fail); + app.Usr_dlg().Log_wtr_(app.Log_wtr()); // NOTE: log_wtr must be set for cmd-line (else process will fail); // run gfs gplx.xowa.users.prefs.Prefs_rename_mgr._.Check(app.User().Fsys_mgr().App_data_cfg_user_fil()); @@ -162,14 +174,14 @@ class Xoa_app_boot_mgr { if (String_.Eq(app_mode, "server")) app.Tcp_server().Run(); else if (String_.Eq(app_mode, "http_server")) { - app.Mode_(Xoa_app_.Mode_http); + Xoa_app_.Mode = Xoa_app_.Mode_http; app.Http_server().Run(); } else { if (cmd_text != null) ConsoleAdp._.WriteLine_utf8(Object_.Xto_str_strict_or_empty(app.Gfs_mgr().Run_str(cmd_text))); if (app_mode_gui) { - app.Mode_(Xoa_app_.Mode_gui); + Xoa_app_.Mode = Xoa_app_.Mode_gui; app.Gui_mgr().Run(); chkpoint = "run"; } else // teardown app, else lua will keep process running diff --git a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java index a10be37df..fffd5bff9 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java @@ -18,36 +18,36 @@ along with this program. If not, see . package gplx.xowa; import gplx.*; import gplx.xowa.apps.*; public class Xoa_app_fxt { - public static Xoa_app app_() { + public static Xoae_app app_() { Io_mgr._.InitEngine_mem(); - return app_(Io_url_.mem_dir_("mem/xowa/"), "linux"); + return app_("linux", Io_url_.mem_dir_("mem/xowa/")); } - public static Xoa_app app_(Io_url root_dir, String op_sys) { + public static Xoae_app app_(String op_sys, Io_url root_dir) { Io_url user_dir = root_dir.GenSubDir_nest("user", "test_user"); Gfo_log_wtr_base._.Log_dir_(user_dir.GenSubDir_nest("tmp", "current")); - Xoa_app app = new Xoa_app(Gfo_usr_dlg_base.test_(), root_dir, user_dir, op_sys); + Xoae_app app = new Xoae_app(Gfo_usr_dlg_base.test_(), root_dir, user_dir, op_sys); app.Setup_mgr().Dump_mgr().Data_storage_format_(gplx.ios.Io_stream_.Tid_file); // TEST: set data_storage_format to file, else bldr tests will fails (expects plain text) GfsCore._.Clear(); // NOTE: must clear - GfsCore._.AddCmd(app, Xoa_app.Invk_app); // NOTE: must add app to GfsCore; app.Gfs_mgr() always adds current app to GfsCore; note this causes old test to leave behind GfsCore for new test - GfsCore._.AddCmd(app, Xoa_app.Invk_xowa); // add alias for app; DATE:2014-06-09 + GfsCore._.AddCmd(app, Xoae_app.Invk_app); // NOTE: must add app to GfsCore; app.Gfs_mgr() always adds current app to GfsCore; note this causes old test to leave behind GfsCore for new test + GfsCore._.AddCmd(app, Xoae_app.Invk_xowa); // add alias for app; DATE:2014-06-09 return app; } - public static Xow_wiki wiki_tst_(Xoa_app app) {return wiki_(app, "en.wikipedia.org");} - public static Xow_wiki wiki_(Xoa_app app, String key) {return wiki_(app, key, app.Lang_mgr().Lang_en());} - public static Xow_wiki wiki_(Xoa_app app, String key, Xol_lang lang) { + public static Xowe_wiki wiki_tst_(Xoae_app app) {return wiki_(app, "en.wikipedia.org");} + public static Xowe_wiki wiki_(Xoae_app app, String key) {return wiki_(app, key, app.Lang_mgr().Lang_en());} + public static Xowe_wiki wiki_(Xoae_app app, String key, Xol_lang lang) { Io_url wiki_dir = app.Fsys_mgr().Wiki_dir().GenSubDir(key); - Xow_wiki rv = new Xow_wiki(app, wiki_dir, Xow_ns_mgr_.default_(lang.Case_mgr()), lang); + Xowe_wiki rv = new Xowe_wiki(app, wiki_dir, Xow_ns_mgr_.default_(lang.Case_mgr()), lang); rv.File_mgr().Meta_mgr().Depth_(2); // TEST: written for 2 depth rv.Props().Main_page_(Xoa_page_.Main_page_bry); // TEST: default to Main Page (nothing tests loading Main Page from wiki.gfs) rv.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_main).Subpages_enabled_(true); app.Wiki_mgr().Add(rv); return rv; } - public static void Init_gui(Xoa_app app) { + public static void Init_gui(Xoae_app app, Xowe_wiki wiki) { app.Gui_mgr().Browser_win().Init_by_kit(gplx.gfui.Mem_kit._); - app.Gui_mgr().Browser_win().Tab_mgr().Tabs_new_init(Xoa_page.Empty); + app.Gui_mgr().Browser_win().Tab_mgr().Tabs_new_init(wiki, Xoae_page.Empty); } - public static Xob_bldr bldr_(Xoa_app app) { + public static Xob_bldr bldr_(Xoae_app app) { Xob_bldr rv = new Xob_bldr(app); rv.Sort_mem_len_(Io_mgr.Len_kb).Dump_fil_len_(Io_mgr.Len_kb).Make_fil_len_(Io_mgr.Len_kb); return rv; diff --git a/400_xowa/src/gplx/xowa/Xoa_test_.java b/400_xowa/src/gplx/xowa/Xoa_test_.java index 16787313d..99e5712ab 100644 --- a/400_xowa/src/gplx/xowa/Xoa_test_.java +++ b/400_xowa/src/gplx/xowa/Xoa_test_.java @@ -16,9 +16,21 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa; import gplx.*; +import gplx.dbs.*; public class Xoa_test_ { - public static boolean Db_skip() {return Bool_.N;} - public static boolean Fsdb_is_mem = false; + public static boolean Db_skip() {return Bool_.N;} + public static boolean Db_is_mem_dflt() {return Bool_.Y;} + public static void Db_init(Io_url sqlite_url) {Db_init(Db_is_mem_dflt(), sqlite_url);} + public static void Db_init(boolean db_is_mem, Io_url sqlite_url) { + if (db_is_mem) { + Io_mgr._.InitEngine_mem(); + Db_conn_bldr.I.Reg_default_mem(); + } + else { + Io_mgr._.DeleteDirDeep(sqlite_url); + Db_conn_bldr.I.Reg_default_sqlite(); + } + } public static Io_url Url_root() {return Io_url_.Usr().GenSubDir_nest("xowa", "dev", "tst", "400_xowa");} public static Io_url Url_wiki_enwiki() {return Url_root().GenSubDir_nest("root", "wiki", "en.wikipedia.org");} public static Io_url Url_file_enwiki() {return Url_root().GenSubDir_nest("root", "file", "en.wikipedia.org");} diff --git a/400_xowa/src/gplx/xowa/Xoae_app.java b/400_xowa/src/gplx/xowa/Xoae_app.java new file mode 100644 index 000000000..1519ad53c --- /dev/null +++ b/400_xowa/src/gplx/xowa/Xoae_app.java @@ -0,0 +1,215 @@ +/* +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; import gplx.*; +import gplx.core.btries.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.threads.*; +import gplx.xowa.apps.*; import gplx.xowa.apps.caches.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.apis.*; import gplx.xowa.urls.encoders.*; import gplx.xowa.apps.progs.*; +import gplx.xowa.langs.*; import gplx.xowa.specials.*; import gplx.xowa.cfgs2.*; +import gplx.xowa.files.caches.*; import gplx.xowa.files.imgs.*; +import gplx.xowa.wikis.*; import gplx.xowa.users.*; import gplx.xowa.gui.*; import gplx.xowa.cfgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.tocs.*; import gplx.xowa.fmtrs.*; import gplx.xowa.html.*; +import gplx.xowa.parsers.*; import gplx.xowa.parsers.amps.*; import gplx.xowa.parsers.tblws.*; +import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.math.*; +import gplx.xowa.parsers.logs.*; import gplx.xowa.servers.tcp.*; import gplx.xowa.servers.http.*; +import gplx.xowa.wmfs.*; +public class Xoae_app implements Xoa_app, GfoInvkAble { + public Xoae_app(Gfo_usr_dlg usr_dlg, Io_url root_dir, Io_url user_dir, String bin_dir_name) { + Xoa_app_.Usr_dlg_(usr_dlg); + Io_url.Http_file_str_encoder = Xoa_app_.Utl_encoder_mgr().Fsys(); + fsys_mgr = new Xoa_fsys_mgr(bin_dir_name, root_dir); + log_wtr = usr_dlg.Log_wtr(); + cfg_mgr = new Xoa_cfg_mgr(this); + api_root = new Xoapi_root(this); + user = new Xou_user(this, user_dir); + url_cmd_eval = new Xoa_fsys_eval(fsys_mgr, user.Fsys_mgr()); + fsys_mgr.Init_by_app(prog_mgr); + log_wtr.Log_dir_(user.Fsys_mgr().App_temp_dir().GenSubDir("log")); + lang_mgr = new Xoa_lang_mgr(this); + wiki_mgr = new Xoa_wiki_mgr(this); + gui_mgr = new Xoa_gui_mgr(this); + bldr = new Xob_bldr(this); + file_mgr.Ctor_by_app(this); + href_parser = new Xoh_href_parser(Xoa_app_.Utl_encoder_mgr().Href(), url_parser.Url_parser()); + sanitizer = new Xop_sanitizer(parser_amp_mgr, msg_log); + user_mgr = new Xou_user_mgr(this, user); + sys_cfg = new Xoa_sys_cfg(this); + cur_redirect = new Xoa_cur(this); + shell = new Xoa_shell(this); + setup_mgr = new Xoi_setup_mgr(this); + Xoa_app_.Gfs_mgr_(new Xoa_gfs_mgr(this, fsys_mgr, user.Fsys_mgr())); + xtn_mgr = new Xow_xtn_mgr().Ctor_by_app(this); + hive_mgr = new Xoa_hive_mgr(this); + tcp_server.App_ctor(this); + fmtr_mgr = new Xoa_fmtr_mgr(this); + log_mgr = new Xop_log_mgr(this); + http_server = new Http_server_mgr(this); + cfg_regy = new Xocfg_regy(this); + html_mgr = new Xoh_html_mgr(this); +// queue_file = new Xop_queue_mgr(this); + } + public byte Mode() {return Xoa_app_.Mode;} + public Xoa_fsys_mgr Fsys_mgr() {return fsys_mgr;} private final Xoa_fsys_mgr fsys_mgr; + public Xof_cache_mgr File_mgr__cache_mgr() {return file_mgr.Cache_mgr();} + public Xof_img_mgr File_mgr__img_mgr() {return file_mgr.Img_mgr();} + public Xowmf_mgr Wmf_mgr() {return wmf_mgr;} private final Xowmf_mgr wmf_mgr = new Xowmf_mgr(); + + + public Xoa_wiki_mgr Wiki_mgr() {return wiki_mgr;} private Xoa_wiki_mgr wiki_mgr; + public Xou_user_mgr User_mgr() {return user_mgr;} private Xou_user_mgr user_mgr; + public Xof_file_mgr File_mgr() {return file_mgr;} private Xof_file_mgr file_mgr = new Xof_file_mgr(); + public Xoa_lang_mgr Lang_mgr() {return lang_mgr;} private Xoa_lang_mgr lang_mgr; + public Xoa_gui_mgr Gui_mgr() {return gui_mgr;} private Xoa_gui_mgr gui_mgr; + public Xou_user User() {return user;} private Xou_user user; + public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr; + public Xow_xtn_mgr Xtn_mgr() {return xtn_mgr;} private Xow_xtn_mgr xtn_mgr; + public Xoapi_root Api_root() {return api_root;} private Xoapi_root api_root; + public Xop_tkn_mkr Tkn_mkr() {return tkn_mkr;} private Xop_tkn_mkr tkn_mkr = new Xop_tkn_mkr(); + public Gfo_usr_dlg Usr_dlg() {return Xoa_app_.Usr_dlg();} + public Gfo_log_wtr Log_wtr() {return log_wtr;} private Gfo_log_wtr log_wtr; + public Xoa_gfs_mgr Gfs_mgr() {return Xoa_app_.Gfs_mgr();} + public Xoa_special_mgr Special_mgr() {return special_mgr;} private Xoa_special_mgr special_mgr = new gplx.xowa.specials.Xoa_special_mgr(); + public Xoh_html_mgr Html_mgr() {return html_mgr;} private Xoh_html_mgr html_mgr; + public Xop_log_mgr Log_mgr() {return log_mgr;} private Xop_log_mgr log_mgr; + public Xoa_shell Shell() {return shell;} private Xoa_shell shell; + public Xoa_thread_mgr Thread_mgr() {return thread_mgr;} private Xoa_thread_mgr thread_mgr = new Xoa_thread_mgr(); + public Xoa_hive_mgr Hive_mgr() {return hive_mgr;} private Xoa_hive_mgr hive_mgr; + public Xoa_url_parser Url_parser() {return url_parser;} private Xoa_url_parser url_parser = new Xoa_url_parser(); + public Xoh_href_parser Href_parser() {return href_parser;} private Xoh_href_parser href_parser; + public Xop_sanitizer Sanitizer() {return sanitizer;} private Xop_sanitizer sanitizer; + public Xop_xatr_parser Xatr_parser() {return xatr_parser;} private Xop_xatr_parser xatr_parser = new Xop_xatr_parser(); + public Xop_xnde_tag_regy Xnde_tag_regy() {return xnde_tag_regy;} private Xop_xnde_tag_regy xnde_tag_regy = new Xop_xnde_tag_regy(); + public Xof_math_subst_regy Math_subst_regy() {return math_subst_regy;} private Xof_math_subst_regy math_subst_regy = new Xof_math_subst_regy(); + public Xoa_prog_mgr Prog_mgr() {return prog_mgr;} private final Xoa_prog_mgr prog_mgr = new Xoa_prog_mgr(); + public Gfo_async_mgr Async_mgr() {return async_mgr;} private Gfo_async_mgr async_mgr = new Gfo_async_mgr(); + + public Xoi_setup_mgr Setup_mgr() {return setup_mgr;} private Xoi_setup_mgr setup_mgr; + public Gfo_msg_log Msg_log() {return msg_log;} private Gfo_msg_log msg_log = new Gfo_msg_log(Xoa_app_.Name); + public Gfo_msg_log Msg_log_null() {return msg_log_null;} private Gfo_msg_log msg_log_null = new Gfo_msg_log("null_log"); + + public Xoh_file_main_wkr File_main_wkr() {return file_main_wkr;} private Xoh_file_main_wkr file_main_wkr = new Xoh_file_main_wkr(); + public Btrie_slim_mgr Utl_trie_tblw_ws() {return utl_trie_tblw_ws;} private Btrie_slim_mgr utl_trie_tblw_ws = Xop_tblw_ws_itm.trie_(); + public Bry_bfr_mkr Utl_bry_bfr_mkr() {return Xoa_app_.Utl_bry_bfr_mkr();} + public Gfo_fld_rdr Utl_fld_rdr() {return utl_fld_rdr;} Gfo_fld_rdr utl_fld_rdr = Gfo_fld_rdr.xowa_(); + public Gfo_log_bfr Log_bfr() {return log_bfr;} private Gfo_log_bfr log_bfr = new Gfo_log_bfr(); + public Xoa_sys_cfg Sys_cfg() {return sys_cfg;} private Xoa_sys_cfg sys_cfg; + public Bry_fmtr Tmp_fmtr() {return tmp_fmtr;} Bry_fmtr tmp_fmtr = Bry_fmtr.new_(""); + public boolean Xwiki_missing(byte[] wiki_key) {return user.Wiki().Xwiki_mgr().Get_by_key(wiki_key) == null;} // NOTE: only the user_wiki has a full list of all wikis b/c it has xwiki objects; wiki_mgr does not, b/c it has heavier wiki objects which are loaded dynamically; + public boolean Xwiki_exists(byte[] wiki_key) {return user.Wiki().Xwiki_mgr().Get_by_key(wiki_key) != null;} + public Xoa_ctg_mgr Ctg_mgr() {return ctg_mgr;} private Xoa_ctg_mgr ctg_mgr = new Xoa_ctg_mgr(); + public Xoa_fsys_eval Url_cmd_eval() {return url_cmd_eval;} Xoa_fsys_eval url_cmd_eval; + public Xoa_cur Cur_redirect() {return cur_redirect;} private Xoa_cur cur_redirect; + public Xoa_cfg_mgr Cfg_mgr() {return cfg_mgr;} private Xoa_cfg_mgr cfg_mgr; + public Xocfg_regy Cfg_regy() {return cfg_regy;} private Xocfg_regy cfg_regy; + public Io_stream_zip_mgr Zip_mgr() {return zip_mgr;} Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr(); + public Xoa_cache_mgr Cache_mgr() {return cache_mgr;} private Xoa_cache_mgr cache_mgr = new Xoa_cache_mgr(); + + public Xosrv_server Tcp_server() {return tcp_server;} private Xosrv_server tcp_server = new Xosrv_server(); + public Http_server_mgr Http_server() {return http_server;} private Http_server_mgr http_server; + public Xop_amp_mgr Parser_amp_mgr() {return parser_amp_mgr;} private Xop_amp_mgr parser_amp_mgr = new Xop_amp_mgr(); + + private Xoa_fmtr_mgr fmtr_mgr; + public NumberParser Utl_num_parser() {return utl_num_parser;} private NumberParser utl_num_parser = new NumberParser(); + public void Init_by_app() { + stage = Xoa_stage_.Tid_init; + prog_mgr.Init_by_app(url_cmd_eval); + xtn_mgr.Init_by_app(this); + log_wtr.Init(); + gui_mgr.Init_by_app(); + user.Init_by_app(this); + file_mgr.Init_by_app(this); + wiki_mgr.Init_by_app(); + gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this); + ctg_mgr.Init_by_app(this); + setup_mgr.Init_by_app(this); + thread_mgr.Usr_dlg_(Xoa_app_.Usr_dlg()); + html_mgr.Init_by_app(this); + api_root.Init_by_app(this); + } + public boolean Launch_done() {return stage == Xoa_stage_.Tid_launch;} + public void Launch() { + if (Launch_done()) return; + stage = Xoa_stage_.Tid_launch; + user.Cfg_mgr().Setup_mgr().Setup_run_check(this); log_bfr.Add("app.upgrade.done"); + gplx.xowa.users.prefs.Prefs_converter._.Check(this); + user.Wiki().Init_assert(); // NOTE: must assert wiki and load langs first, else will be asserted during Portal_mgr().Init(), which will cause IndexOutOfBounds; DATE:2014-10-04 + } + public byte Stage() {return stage;} public Xoae_app Stage_(byte v) {stage = v; return this;} private byte stage = Xoa_stage_.Tid_ctor; + public boolean Term_cbk() { + Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg(); + usr_dlg.Log_many("", "", "term:bgn"); + if (setup_mgr.Cmd_mgr().Working()) { + if (!gui_mgr.Kit().Ask_yes_no("", "", "An import is in progress. Are you sure you want to exit?")) return false; + } + gui_mgr.Browser_win().Usr_dlg().Canceled_y_(); + user.App_term(); usr_dlg.Log_many("", "", "term:app_term"); + log_wtr.Term(); usr_dlg.Log_many("", "", "term:log_wtr"); + log_mgr.Rls(); usr_dlg.Log_many("", "", "term:log_mgr"); + if (Scrib_core.Core() != null) {Scrib_core.Core().Term(); usr_dlg.Log_many("", "", "term:scrib");} + wiki_mgr.Rls(); usr_dlg.Log_many("", "", "term:wiki_mgr"); + return true; + } + public void Reset_all() { + this.Free_mem(true); + gplx.xowa.xtns.scribunto.Scrib_core.Core_invalidate(); + Env_.GarbageCollect(); + } + public void Free_mem(boolean clear_ctx) { + this.Utl_bry_bfr_mkr().Clear(); + msg_log.Clear(); + wiki_mgr.Free_mem(clear_ctx); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_gui)) return gui_mgr; + else if (ctx.Match(k, Invk_api)) return api_root; + else if (ctx.Match(k, Invk_bldr)) return bldr; + else if (ctx.Match(k, Invk_wikis)) return wiki_mgr; + else if (ctx.Match(k, Invk_fsys)) return fsys_mgr; + else if (ctx.Match(k, Invk_files)) return file_mgr; + else if (ctx.Match(k, Invk_langs)) return lang_mgr; + else if (ctx.Match(k, Invk_users)) return user_mgr; + else if (ctx.Match(k, Invk_user)) return user; + else if (ctx.Match(k, Invk_sys_cfg)) return sys_cfg; + else if (ctx.Match(k, Invk_cur)) return cur_redirect; + else if (ctx.Match(k, Invk_html)) return html_mgr; + else if (ctx.Match(k, Invk_shell)) return shell; + else if (ctx.Match(k, Invk_log)) return log_wtr; + else if (ctx.Match(k, Invk_setup)) return setup_mgr; + else if (ctx.Match(k, Invk_scripts)) return Xoa_app_.Gfs_mgr(); + else if (ctx.MatchPriv(k, Invk_term_cbk)) return this.Term_cbk(); + else if (ctx.Match(k, Invk_xtns)) return xtn_mgr; + else if (ctx.Match(k, Invk_ctg_mgr)) return ctg_mgr; + else if (ctx.Match(k, Invk_cfgs)) return cfg_mgr; + else if (ctx.Match(k, Invk_usr_dlg)) return Xoa_app_.Usr_dlg(); + else if (ctx.Match(k, Invk_specials)) return special_mgr; + else if (ctx.Match(k, Invk_server)) return tcp_server; + else if (ctx.Match(k, Invk_http_server)) return http_server; + else if (ctx.Match(k, Invk_app)) return this; + else if (ctx.Match(k, Invk_xowa)) return this; + else if (ctx.Match(k, Invk_fmtrs)) return fmtr_mgr; + else if (ctx.Match(k, Invk_cfg)) return cfg_regy; + else return GfoInvkAble_.Rv_unhandled; + } + public static final String Invk_gui = "gui", Invk_bldr = "bldr", Invk_wikis = "wikis", Invk_files = "files", Invk_langs = "langs", Invk_users = "users" + , Invk_sys_cfg = "sys_cfg", Invk_fsys = "fsys", Invk_cur = "cur", Invk_shell = "shell", Invk_log = "log" + , Invk_setup = "setup", Invk_scripts = "scripts", Invk_user = "user", Invk_xtns = "xtns", Invk_ctg_mgr = "ctg_mgr" + , Invk_cfgs = "cfgs", Invk_app = "app", Invk_xowa = "xowa", Invk_usr_dlg = "usr_dlg", Invk_specials = "specials", Invk_html = "html" + , Invk_server = "tcp_server", Invk_http_server = "http_server" + , Invk_fmtrs = "fmtrs" + , Invk_cfg = "cfg" + , Invk_api = "api" + ; + public static final String Invk_term_cbk = "term_cbk"; +} diff --git a/400_xowa/src/gplx/xowa/apis/Xoapi_root.java b/400_xowa/src/gplx/xowa/apis/Xoapi_root.java index 8f8dfb508..20b11583e 100644 --- a/400_xowa/src/gplx/xowa/apis/Xoapi_root.java +++ b/400_xowa/src/gplx/xowa/apis/Xoapi_root.java @@ -18,29 +18,33 @@ along with this program. If not, see . package gplx.xowa.apis; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.gui.cmds.*; public class Xoapi_root implements GfoInvkAble { - private Xoa_app app; - public Xoapi_root(Xoa_app app) {usr_api.Ctor_by_app(app);} - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; + public Xoapi_root(Xoae_app app) { + usr_api.Ctor_by_app(app); + bldr_api.Ctor_by_app(app); + } + public void Init_by_kit(Xoae_app app) { this.app = app; app_api.Init_by_kit(app); - nav.Init_by_kit(app); + nav_api.Init_by_kit(app); gui_api.Init_by_kit(app); html_api.Init_by_kit(app); net_api.Init_by_kit(app); usr_api.Init_by_kit(app); xtns_api.Init_by_kit(app); } - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { Io_url img_dir = app.User().Fsys_mgr().App_img_dir().GenSubDir_nest("window", "portal"); html_api.Page().Toggle_mgr().Img_dir_(img_dir); } - public Xoapi_app App() {return app_api;} private Xoapi_app app_api = new Xoapi_app(); - public Xoapi_nav Nav() {return nav;} private Xoapi_nav nav = new Xoapi_nav(); - public Xoapi_gui Gui() {return gui_api;} private Xoapi_gui gui_api = new Xoapi_gui(); - public Xoapi_html Html() {return html_api;} private Xoapi_html html_api = new Xoapi_html(); - public Xoapi_net Net() {return net_api;} private Xoapi_net net_api = new Xoapi_net(); - public Xoapi_usr Usr() {return usr_api;} private Xoapi_usr usr_api = new Xoapi_usr(); - public Xoapi_xtns Xtns() {return xtns_api;} private Xoapi_xtns xtns_api = new Xoapi_xtns(); + public Xoapi_app App() {return app_api;} private final Xoapi_app app_api = new Xoapi_app(); + public Xoapi_nav Nav() {return nav_api;} private final Xoapi_nav nav_api = new Xoapi_nav(); + public Xoapi_gui Gui() {return gui_api;} private final Xoapi_gui gui_api = new Xoapi_gui(); + public Xoapi_html Html() {return html_api;} private final Xoapi_html html_api = new Xoapi_html(); + public Xoapi_bldr Bldr() {return bldr_api;} private final Xoapi_bldr bldr_api = new Xoapi_bldr(); + public Xoapi_net Net() {return net_api;} private final Xoapi_net net_api = new Xoapi_net(); + public Xoapi_usr Usr() {return usr_api;} private final Xoapi_usr usr_api = new Xoapi_usr(); + public Xoapi_xtns Xtns() {return xtns_api;} private final Xoapi_xtns xtns_api = new Xoapi_xtns(); private void Exec(String key) { Xog_cmd_itm cmd_itm = app.Gui_mgr().Cmd_mgr().Get_or_null(key); if (cmd_itm == null) app.Usr_dlg().Warn_many("", "", "could not find cmd; key=~{0}", key); @@ -48,7 +52,8 @@ public class Xoapi_root implements GfoInvkAble { } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_app)) return app_api; - else if (ctx.Match(k, Invk_nav)) return nav; + else if (ctx.Match(k, Invk_bldr)) return bldr_api; + else if (ctx.Match(k, Invk_nav)) return nav_api; else if (ctx.Match(k, Invk_gui)) return gui_api; else if (ctx.Match(k, Invk_html)) return html_api; else if (ctx.Match(k, Invk_net)) return net_api; @@ -59,6 +64,6 @@ public class Xoapi_root implements GfoInvkAble { } private static final String Invk_exec = "exec" - , Invk_app = "app", Invk_nav = "nav", Invk_gui = "gui", Invk_html = "html", Invk_net = "net", Invk_usr = "usr", Invk_xtns = "xtns" + , Invk_app = "app", Invk_bldr = "bldr", Invk_nav = "nav", Invk_gui = "gui", Invk_html = "html", Invk_net = "net", Invk_usr = "usr", Invk_xtns = "xtns" ; } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java index 9d9865d35..876147125 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_app.java @@ -20,7 +20,7 @@ import gplx.xowa.gui.views.*; import gplx.xowa.apis.xowa.envs.*; import gplx.xowa.apis.xowa.startups.*; public class Xoapi_app implements GfoInvkAble { private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { win = app.Gui_mgr().Browser_win(); } public void Exit() {win.App__exit();} diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java similarity index 55% rename from 140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java rename to 400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java index e4e7a8851..9b8ef6516 100644 --- a/140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_bldr.java @@ -15,19 +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.dbs; import gplx.*; -public class Db_engine_regy { - private final HashAdp hash = HashAdp_.new_(); - public Db_engine_regy() {} - Db_engine_regy(int dflt) { - this.Add(Db_engine_null._) - .Add(TdbEngine._) - .Add(Mysql_engine._) - .Add(Postgres_engine._) - .Add(Sqlite_engine._) - ; +package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; +import gplx.xowa.apis.xowa.bldrs.*; +public class Xoapi_bldr implements GfoInvkAble { + public void Ctor_by_app(Xoa_app app) {wikis.Ctor_by_app(app);} + public Xoapi_bldr_wikis Wikis() {return wikis;} private final Xoapi_bldr_wikis wikis = new Xoapi_bldr_wikis(); + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_wikis)) return wikis; + else return GfoInvkAble_.Rv_unhandled; } - public Db_engine_regy Add(Db_engine engine) {hash.Add(engine.Tid(), engine); return this;} - public Db_engine Get(String key) {return (Db_engine)hash.FetchOrFail(key);} - public static final Db_engine_regy _ = new Db_engine_regy(1); + private static final String Invk_wikis = "wikis"; } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_gui.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_gui.java index 6b07777c9..78699b08b 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_gui.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_gui.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.gui.*; public class Xoapi_gui implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { browser.Init_by_kit(app); font.Init_by_kit(app); page.Init_by_kit(app); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java index 83c74848d..d46141ed6 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.html.*; public class Xoapi_html implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { tidy.Init_by_kit(app); modules.Init_by_kit(app); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_nav.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_nav.java index 3fc5698fa..e3e3fda53 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_nav.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_nav.java @@ -20,7 +20,7 @@ import gplx.xowa.gui.views.*; import gplx.xowa.apis.xowa.navs.*; public class Xoapi_nav implements GfoInvkAble { private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { win = app.Gui_mgr().Browser_win(); wiki.Init_by_kit(app); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_net.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_net.java index f907df01f..68d879624 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_net.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_net.java @@ -19,7 +19,7 @@ package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa public class Xoapi_net implements GfoInvkAble, GfoEvObj { public Xoapi_net() {this.ev_mgr = GfoEvMgr.new_(this);} public GfoEvMgr EvMgr() {return ev_mgr;} private GfoEvMgr ev_mgr; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public boolean Enabled() {return enabled;} private boolean enabled = true; public void Enabled_(boolean v) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_usr.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_usr.java index f07ea48d6..7f2c7a4f9 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_usr.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_usr.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.usrs.*; public class Xoapi_usr implements GfoInvkAble { - public void Ctor_by_app(Xoa_app app) { + public void Ctor_by_app(Xoae_app app) { bookmarks.Ctor_by_app(app); history.Ctor_by_app(app); logs.Ctor_by_app(app); } - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { bookmarks.Init_by_kit(app); history.Init_by_kit(app); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_xtns.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_xtns.java index 8b60eb822..46a26e6b4 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_xtns.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_xtns.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.xtns.*; public class Xoapi_xtns implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { scribunto.Init_by_kit(app); } public Xoapi_scribunto Scribunto() {return scribunto;} private final Xoapi_scribunto scribunto = new Xoapi_scribunto(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java new file mode 100644 index 000000000..9ac13f175 --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/Xoapi_bldr_wikis.java @@ -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 . +*/ +package gplx.xowa.apis.xowa.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; +import gplx.xowa.apis.xowa.bldrs.filters.*; +public class Xoapi_bldr_wikis implements GfoInvkAble { + public void Ctor_by_app(Xoa_app app) {filters.Ctor_by_app(app);} + public Xoapi_filters Filters() {return filters;} private final Xoapi_filters filters = new Xoapi_filters(); + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_filters)) return filters; + else return GfoInvkAble_.Rv_unhandled; + } + private static final String Invk_filters = "filters"; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java new file mode 100644 index 000000000..84a2ef48d --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/Xoapi_filters.java @@ -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 . +*/ +package gplx.xowa.apis.xowa.bldrs.filters; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*; +import gplx.xowa.apis.xowa.bldrs.filters.dansguardians.*; +public class Xoapi_filters implements GfoInvkAble { + public void Ctor_by_app(Xoa_app app) {dansguardians.Ctor_by_app(app);} + public Xoapi_dansguardians Dansguardians() {return dansguardians;} private final Xoapi_dansguardians dansguardians = new Xoapi_dansguardians(); + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_dansguardians)) return dansguardians; + else return GfoInvkAble_.Rv_unhandled; + } + private static final String Invk_dansguardians = "dansguardians"; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java new file mode 100644 index 000000000..ed2acf468 --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardians.java @@ -0,0 +1,76 @@ +/* +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.apis.xowa.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*; import gplx.xowa.apis.xowa.bldrs.filters.*; +import gplx.ios.*; import gplx.xowa.bldrs.filters.dansguardians.*; +public class Xoapi_dansguardians implements GfoInvkAble { + public void Ctor_by_app(Xoa_app app) { + root_dir = app.Fsys_mgr().Bin_xowa_dir().GenSubDir_nest("cfg", "bldr", "filter"); + } + public boolean Enabled() {return enabled;} private boolean enabled = Bool_.N; + public Io_url Root_dir() {return root_dir;} private Io_url root_dir; + public int Score_init() {return score_init;} private int score_init = 0; + public int Score_fail() {return score_fail;} private int score_fail = 0; + public boolean Case_match() {return case_match;} private boolean case_match = Bool_.N; + public boolean Wildcard_enabled() {return wildcard_enabled;} private boolean wildcard_enabled = Bool_.N; + public byte[] Wildcard_char() {return wildcard_char;} private byte[] wildcard_char = Byte_ascii.Space_bry; + public byte[][] Wildcard_list() {return wildcard_list;} private byte[][] wildcard_list = Bry_.Ary(Byte_ascii.Space_bry);// \s,.!?:;'"-() /@#$%^&*()[]{}<>_+=|\~` + public int Target_tid() {return target_tid;} private int target_tid = Dg_match_mgr.Target_tid_wikitext; + public boolean Log_enabled() {return log_enabled;} private boolean log_enabled = Bool_.Y; + public Dg_match_mgr New_mgr(String domain_str, Io_url wiki_root_dir) { + if (!enabled) return null; + Io_url log_url = wiki_root_dir.GenSubFil("dansguardian_log.sqlite3"); + Dg_match_mgr rv = new Dg_match_mgr(root_dir.GenSubDir(domain_str), score_init, score_fail, case_match, log_enabled, log_url); + return rv; + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_enabled)) return Yn.Xto_str(enabled); + else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v"); + else if (ctx.Match(k, Invk_root_dir)) return root_dir.Raw(); + else if (ctx.Match(k, Invk_root_dir_)) root_dir = m.ReadIoUrl("v"); + else if (ctx.Match(k, Invk_score_init)) return Int_.Xto_str(score_init); + else if (ctx.Match(k, Invk_score_init_)) score_init = m.ReadInt("v"); + else if (ctx.Match(k, Invk_score_fail)) return Int_.Xto_str(score_fail); + else if (ctx.Match(k, Invk_score_fail_)) score_fail = m.ReadInt("v"); + else if (ctx.Match(k, Invk_case_match)) return Yn.Xto_str(case_match); + else if (ctx.Match(k, Invk_case_match_)) case_match = m.ReadYn("v"); + else if (ctx.Match(k, Invk_wildcard_enabled)) return Yn.Xto_str(wildcard_enabled); + else if (ctx.Match(k, Invk_wildcard_enabled_)) wildcard_enabled = m.ReadYn("v"); + else if (ctx.Match(k, Invk_wildcard_char)) return String_.new_utf8_(wildcard_char); + else if (ctx.Match(k, Invk_wildcard_char_)) wildcard_char = m.ReadBry("v"); + else if (ctx.Match(k, Invk_wildcard_list)) return ""; + else if (ctx.Match(k, Invk_wildcard_list_)) {} + else if (ctx.Match(k, Invk_target_tid)) return Int_.Xto_str(target_tid); + else if (ctx.Match(k, Invk_target_tid_)) target_tid = m.ReadInt("v"); + else if (ctx.Match(k, Invk_log_enabled)) return Yn.Xto_str(log_enabled); + else if (ctx.Match(k, Invk_log_enabled_)) log_enabled = m.ReadYn("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + private static final String + Invk_enabled = "enabled" , Invk_enabled_ = "enabled_" + , Invk_root_dir = "root_dir" , Invk_root_dir_ = "root_dir_" + , Invk_score_init = "score_init" , Invk_score_init_ = "score_init_" + , Invk_score_fail = "score_fail" , Invk_score_fail_ = "score_fail_" + , Invk_case_match = "case_match" , Invk_case_match_ = "case_match_" + , Invk_wildcard_enabled = "wildcard_enabled" , Invk_wildcard_enabled_ = "wildcard_enabled_" + , Invk_wildcard_char = "wildcard_char" , Invk_wildcard_char_ = "wildcard_char_" + , Invk_wildcard_list = "wildcard_list" , Invk_wildcard_list_ = "wildcard_list_" + , Invk_target_tid = "target_tid" , Invk_target_tid_ = "target_tid_" + , Invk_log_enabled = "log_enabled" , Invk_log_enabled_ = "log_enabled_" + ; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java new file mode 100644 index 000000000..64678af5f --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/bldrs/filters/titles/Xoapi_titles.java @@ -0,0 +1,49 @@ +/* +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.apis.xowa.bldrs.filters.titles; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.bldrs.*; import gplx.xowa.apis.xowa.bldrs.filters.*; +public class Xoapi_titles implements GfoInvkAble { + public void Init_by_kit(Xoae_app app) { +// wordlist_dir = app.Fsys_mgr().Bin_xtns_dir().GenSubDir_nest("xowa", "DansGuardian"); + } + public boolean Enabled() {return enabled;} private boolean enabled = Bool_.Y; + public Io_url Wordlist_dir() {return wordlist_dir;} private Io_url wordlist_dir; + public int Score_init() {return score_init;} private int score_init = 0; + public int Score_pass() {return score_pass;} private int score_pass = 0; + public boolean Log_enabled() {return log_enabled;} private boolean log_enabled = Bool_.Y; + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_enabled)) return Yn.Xto_str(enabled); + else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v"); + else if (ctx.Match(k, Invk_wordlist_dir)) return Int_.Xto_str(score_init); + else if (ctx.Match(k, Invk_wordlist_dir_)) wordlist_dir= m.ReadIoUrl("v"); + else if (ctx.Match(k, Invk_score_init)) return Int_.Xto_str(score_init); + else if (ctx.Match(k, Invk_score_init_)) score_init = m.ReadInt("v"); + else if (ctx.Match(k, Invk_score_pass)) return Int_.Xto_str(score_pass); + else if (ctx.Match(k, Invk_score_pass_)) score_pass = m.ReadInt("v"); + else if (ctx.Match(k, Invk_log_enabled)) return Yn.Xto_str(enabled); + else if (ctx.Match(k, Invk_log_enabled_)) log_enabled = m.ReadYn("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + private static final String + Invk_enabled = "enabled" , Invk_enabled_ = "enabled_" + , Invk_wordlist_dir = "wordlist_dir" , Invk_wordlist_dir_ = "wordlist_dir_" + , Invk_score_init = "score_init" , Invk_score_init_ = "score_init_" + , Invk_score_pass = "score_pas" , Invk_score_pass_ = "score_pass_" + , Invk_log_enabled = "log_enabled" , Invk_log_enabled_ = "log_enabled_" + ; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/envs/Xoapi_env.java b/400_xowa/src/gplx/xowa/apis/xowa/envs/Xoapi_env.java index df8567b53..c402fff9a 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/envs/Xoapi_env.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/envs/Xoapi_env.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apis.xowa.envs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; public class Xoapi_env implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) {} + public void Init_by_kit(Xoae_app app) {} public String Version_previous() {return version_previous;} private String version_previous = ""; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_version_previous)) return version_previous; diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_browser.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_browser.java index 099c2226a..c2335b08a 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_browser.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_browser.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.browsers.*; public class Xoapi_browser implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { url.Init_by_kit(app); search.Init_by_kit(app); tabs.Init_by_kit(app); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_font.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_font.java index cabbb154e..da7e4d7d5 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_font.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_font.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.cfgs.gui.*; import gplx.xowa.html.*; public class Xoapi_font implements GfoInvkAble { - private Xoa_app app; - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; + public void Init_by_kit(Xoae_app app) { this.app = app; } public void Increase() {Adj(1);} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_page.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_page.java index 2126e0ba7..bd4bb654e 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_page.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/Xoapi_page.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.pages.*; public class Xoapi_page implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { view.Init_by_kit(app); selection.Init_by_kit(app); edit.Init_by_kit(app); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_find.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_find.java index 0a44fbf6b..8f6b1d1ed 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_find.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_find.java @@ -19,7 +19,7 @@ package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; imp import gplx.gfui.*; import gplx.xowa.pages.*; import gplx.xowa.gui.*; import gplx.xowa.gui.views.*; public class Xoapi_find implements GfoInvkAble { private Xog_find_box find_box; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { find_box = new Xog_find_box(app); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { @@ -39,9 +39,9 @@ public class Xoapi_find implements GfoInvkAble { , Invk_find_bwd = "find_bwd", Invk_find_fwd = "find_fwd", Invk_case_toggle = "case_toggle", Invk_wrap_toggle = "wrap_toggle"; } class Xog_find_box { - private Xoa_app app; private Xog_win_itm win; private GfuiTextBox find_box; + private Xoae_app app; private Xog_win_itm win; private GfuiTextBox find_box; private boolean dir_fwd = true, case_match = false, wrap_search = true; - public Xog_find_box(Xoa_app app) { + public Xog_find_box(Xoae_app app) { this.app = app; this.win = app.Gui_mgr().Browser_win(); this.find_box = win.Find_box(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_html_box.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_html_box.java index 6964cda18..aa67a0d92 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_html_box.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_html_box.java @@ -23,7 +23,7 @@ public class Xoapi_html_box implements GfoInvkAble, GfoEvMgrOwner { evMgr = GfoEvMgr.new_(this); } public GfoEvMgr EvMgr() {return evMgr;} private GfoEvMgr evMgr; - public void Init_by_kit(Xoa_app app) {this.win = app.Gui_mgr().Browser_win();} + public void Init_by_kit(Xoae_app app) {this.win = app.Gui_mgr().Browser_win();} public byte Load_tid() {return load_tid;} private byte load_tid; public void Focus() { Xog_tab_itm tab = win.Active_tab(); if (tab == Xog_tab_itm_.Null) return; diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_info.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_info.java index 94e4985cc..f7026567b 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_info.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_info.java @@ -18,13 +18,13 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.views.*; public class Xoapi_info implements Gfo_usr_dlg_ui_opt, GfoInvkAble { - public void Init_by_kit(Xoa_app app) {this.app = app;} private Xoa_app app; + public void Init_by_kit(Xoae_app app) {this.app = app;} private Xoae_app app; private Xog_win_itm Win() {return app.Gui_mgr().Browser_win();} public void Focus() {this.Win().Info_box().Focus();} public void Clear() {app.Usr_dlg().Ui_wkr().Clear();} public void Launch() { Io_url session_fil = app.Log_wtr().Session_fil(); - app.Launcher().App_view_text().Run(session_fil); + app.Prog_mgr().App_view_text().Run(session_fil); } public boolean Warn_enabled() {return warn_enabled;} private boolean warn_enabled; public boolean Note_enabled() {return note_enabled;} private boolean note_enabled; diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog.java index 75e72f0c6..ebe530aed 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.views.*; public class Xoapi_prog implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) {this.app = app;} private Xoa_app app; + public void Init_by_kit(Xoae_app app) {this.app = app;} private Xoae_app app; private Xog_win_itm Win() {return app.Gui_mgr().Browser_win();} public void Focus() {this.Win().Prog_box().Focus();} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog_log.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog_log.java index 418d81f5a..3edf3e1af 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog_log.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_prog_log.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.views.*; public class Xoapi_prog_log implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) {this.app = app;} private Xoa_app app; + public void Init_by_kit(Xoae_app app) {this.app = app;} private Xoae_app app; public void Show() {app.Gui_mgr().Show_prog();} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_show)) this.Show(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_search.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_search.java index d021575a6..9da0d9503 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_search.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_search.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.views.*; public class Xoapi_search implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) {this.app = app;} private Xoa_app app; + public void Init_by_kit(Xoae_app app) {this.app = app;} private Xoae_app app; private GfuiTextBox Search_box() {return app.Gui_mgr().Browser_win().Search_box();} private Xog_win_itm Win() {return app.Gui_mgr().Browser_win();} public void Focus() {this.Search_box().Focus_select_all();} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_tabs.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_tabs.java index 811d13400..a2f9e8877 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_tabs.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_tabs.java @@ -19,7 +19,7 @@ package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; imp import gplx.xowa.gui.views.*; public class Xoapi_tabs implements GfoInvkAble { private Xog_tab_mgr tab_mgr; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { this.tab_mgr = app.Gui_mgr().Browser_win().Tab_mgr(); } private boolean Active_tab_is_null() {return tab_mgr.Active_tab_is_null();} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java index d6aad3745..f2defd7b9 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/browsers/Xoapi_url.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.views.*; public class Xoapi_url implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) {this.app = app;} private Xoa_app app; + public void Init_by_kit(Xoae_app app) {this.app = app;} private Xoae_app app; private GfuiTextBox Url_box() {return app.Gui_mgr().Browser_win().Url_box();} public void Focus() {this.Url_box().Focus_select_all();} public void Exec() {Exec_wkr(Bool_.N, this.Url_box().Text());} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_edit.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_edit.java index 7450a79ae..6c2c8fcd1 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_edit.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_edit.java @@ -19,7 +19,7 @@ package gplx.xowa.apis.xowa.gui.pages; import gplx.*; import gplx.xowa.*; import import gplx.xowa.gui.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*; public class Xoapi_edit implements GfoInvkAble { private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { win = app.Gui_mgr().Browser_win(); } private boolean Active_tab_is_null() {return win.Tab_mgr().Active_tab_is_null();} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_selection.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_selection.java index 90f0afe5b..9192997f1 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_selection.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_selection.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.*; import gplx.xowa.gui.views.*; public class Xoapi_selection implements GfoInvkAble { - private Xoa_app app; private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; private Xog_win_itm win; + public void Init_by_kit(Xoae_app app) { this.app = app; win = app.Gui_mgr().Browser_win(); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java index 685586500..7ce2527c2 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.gui.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.gui.*; import gplx.gfui.*; import gplx.xowa.gui.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*; public class Xoapi_view implements GfoInvkAble { - private Xoa_app app; private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; private Xog_win_itm win; + public void Init_by_kit(Xoae_app app) { this.app = app; this.win = app.Gui_mgr().Browser_win(); } private boolean Active_tab_is_null() {return win.Tab_mgr().Active_tab_is_null();} @@ -36,7 +36,7 @@ public class Xoapi_view implements GfoInvkAble { public void Save_as() { if (this.Active_tab_is_null()) return; Xog_tab_itm tab = win.Tab_mgr().Active_tab(); - String file_name = app.Encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html"; + String file_name = Xoa_app_.Utl_encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html"; String file_url = app.Gui_mgr().Kit().New_dlg_file(Gfui_kit_.File_dlg_type_save, "Select file to save to:").Init_file_(file_name).Ask(); if (String_.Len_eq_0(file_url)) return; Io_mgr._.SaveFilStr(file_url, tab.Html_box().Text()); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_modules.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_modules.java index 2b9d8dfeb..a6c778fb9 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_modules.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_modules.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.modules.*; public class Xoapi_modules implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { popups.Init_by_app(app); } public Xoapi_collapsible Collapsible() {return collapsible;} private Xoapi_collapsible collapsible = new Xoapi_collapsible(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_tidy.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_tidy.java index d9ee5e475..10a4e057a 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_tidy.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_tidy.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.html.tidy.*; public class Xoapi_tidy implements GfoInvkAble { - private Xoa_app app; - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; + public void Init_by_kit(Xoae_app app) { this.app = app; } public void Toggle() { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java index e8b33a530..d81bf5605 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java @@ -24,9 +24,9 @@ public class Xoapi_toggle_itm implements GfoInvkAble { public byte[] Elem_display() {return elem_display;} private byte[] elem_display = Bry_.Empty; public byte[] Html_toggle_hdr_cls() {return html_toggle_hdr_cls;} public Xoapi_toggle_itm Html_toggle_hdr_cls_(byte[] v) {html_toggle_hdr_cls = v; return this;} private byte[] html_toggle_hdr_cls = Bry_.Empty; public boolean Visible() {return visible;} private boolean visible; - public Xoapi_toggle_itm Init(Xow_wiki wiki) { + public Xoapi_toggle_itm Init(Xowe_wiki wiki) { if (Img_src_y == null) { - Io_url img_dir = wiki.App().User().Fsys_mgr().App_img_dir().GenSubDir_nest("window", "portal"); + Io_url img_dir = wiki.Appe().User().Fsys_mgr().App_img_dir().GenSubDir_nest("window", "portal"); Img_src_y = img_dir.GenSubFil("twisty_down.png").To_http_file_bry(); Img_src_n = img_dir.GenSubFil("twisty_right.png").To_http_file_bry(); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_collapsible.java b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_collapsible.java index 0cbd30ae8..1e614e107 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_collapsible.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_collapsible.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.*; public class Xoapi_collapsible implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public boolean Collapsed() {return collapsed;} private boolean collapsed; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_navframe.java b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_navframe.java index 6e3e040b3..9f310f674 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_navframe.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_navframe.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.*; public class Xoapi_navframe implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public boolean Collapsed() {return collapsed;} private boolean collapsed; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_popups.java b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_popups.java index 5c1a04300..f137bebef 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_popups.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_popups.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.*; import gplx.xowa.html.modules.popups.*; public class Xoapi_popups implements GfoInvkAble, GfoEvMgrOwner { - private Xoa_app app; + private Xoae_app app; public Xoapi_popups() { evMgr = GfoEvMgr.new_(this); } public GfoEvMgr EvMgr() {return evMgr;} private GfoEvMgr evMgr; - public void Init_by_app(Xoa_app app) {this.app = app;} + public void Init_by_app(Xoae_app app) {this.app = app;} public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = true; public int Show_init_word_count() {return show_init_word_count;} private int show_init_word_count = Dflt_show_init_word_count; public int Show_more_word_count() {return show_more_word_count;} private int show_more_word_count = Dflt_show_more_word_count; @@ -52,11 +52,11 @@ public class Xoapi_popups implements GfoInvkAble, GfoEvMgrOwner { public byte[] Html_fmtr_next_sect_fmt() {return html_fmtr_next_sect;} private byte[] html_fmtr_next_sect = Dflt_html_fmtr_next_sect; public byte[] Html_fmtr_next_sect_fmt_dflt() {return html_fmtr_next_sect_dflt;} private byte[] html_fmtr_next_sect_dflt = Dflt_html_fmtr_next_sect; public void Show_more(String popup_id) { - Xow_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Page().Wiki(); + Xowe_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Wiki(); wiki.Html_mgr().Module_mgr().Popup_mgr().Show_more(popup_id); } public void Show_all(String popup_id) { - Xow_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Page().Wiki(); + Xowe_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Wiki(); wiki.Html_mgr().Module_mgr().Popup_mgr().Show_all(popup_id); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_toc.java b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_toc.java index b7c42cac3..e5e773557 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_toc.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/modules/Xoapi_toc.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.*; public class Xoapi_toc implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public boolean Collapsed() {return collapsed;} private boolean collapsed = false; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/skins/Xoapi_skin_app_base.java b/400_xowa/src/gplx/xowa/apis/xowa/html/skins/Xoapi_skin_app_base.java index c975dbcc6..f84be4ea7 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/skins/Xoapi_skin_app_base.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/skins/Xoapi_skin_app_base.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apis.xowa.html.skins; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.html.*; public class Xoapi_skin_app_base implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public boolean Sidebar_home_enabled() {return sidebar_home_enabled;} public void Sidebar_home_enabled_(boolean v) {sidebar_home_enabled = v;} private boolean sidebar_home_enabled; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/navs/Xoapi_wiki.java b/400_xowa/src/gplx/xowa/apis/xowa/navs/Xoapi_wiki.java index e8f1767e5..828144b66 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/navs/Xoapi_wiki.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/navs/Xoapi_wiki.java @@ -19,14 +19,14 @@ package gplx.xowa.apis.xowa.navs; import gplx.*; import gplx.xowa.*; import gplx import gplx.xowa.gui.views.*; public class Xoapi_wiki implements GfoInvkAble { private Xog_win_itm win; - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { win = app.Gui_mgr().Browser_win(); } public void Random() {win.Page__navigate_by_url_bar("Special:Random");} public void Sandbox() {win.Page__navigate_by_url_bar("Project:Sandbox");} public void Main_page() { win.Tab_mgr().Active_tab_assert(); // force an active tab in case all tabs are closed; needed for win.Active_page() below; DATE:2014-09-17 - win.Page__navigate_by_url_bar(win.Active_page().Wiki().Domain_str() + Xoh_href_parser.Href_wiki_str); // NOTE: add "/wiki/" to generate non-page like url; EX: "home" -> "home/wiki/" which will be interpreted as a url, as opposed to "home" which will be intrepretted as page; DATE:2014-04-14 + win.Page__navigate_by_url_bar(win.Active_tab().Wiki().Domain_str() + Xoh_href_parser.Href_wiki_str); // NOTE: add "/wiki/" to generate non-page like url; EX: "home" -> "home/wiki/" which will be interpreted as a url, as opposed to "home" which will be intrepretted as page; DATE:2014-04-14 } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_main_page)) this.Main_page(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/startups/Xoapi_startups.java b/400_xowa/src/gplx/xowa/apis/xowa/startups/Xoapi_startups.java index 113df01ba..f0c112fe5 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/startups/Xoapi_startups.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/startups/Xoapi_startups.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.startups; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.apis.xowa.startups.tabs.*; public class Xoapi_startups implements GfoInvkAble { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { } public Xoapi_startup_tabs Tabs() {return tabs;} private Xoapi_startup_tabs tabs = new Xoapi_startup_tabs(); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/apis/xowa/startups/tabs/Xoapi_startup_tabs.java b/400_xowa/src/gplx/xowa/apis/xowa/startups/tabs/Xoapi_startup_tabs.java index 60830c101..8d2d1475f 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/startups/tabs/Xoapi_startup_tabs.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/startups/tabs/Xoapi_startup_tabs.java @@ -41,7 +41,7 @@ public class Xoapi_startup_tabs implements GfoInvkAble { , Invk_previous = "previous", Invk_previous_ = "previous_" , Invk_custom_is_expr = "custom_is_expr", Invk_custom_is_expr_ = "custom_is_expr_" ; - public String[] Calc_startup_strs(Xoa_app app) { + public String[] Calc_startup_strs(Xoae_app app) { ListAdp rv = ListAdp_.new_(); String xowa_home = gplx.xowa.users.Xouc_pages_mgr.Page_xowa; if (manual == null) { @@ -68,7 +68,7 @@ public class Xoapi_startup_tabs implements GfoInvkAble { list.Add(itm); } } - private static void Add_xowa_home_if_new_version(ListAdp rv, Xoa_app app, String xowa_home) { + private static void Add_xowa_home_if_new_version(ListAdp rv, Xoae_app app, String xowa_home) { if (gplx.xowa.apps.versions.Xoa_version_.Compare(app.Api_root().App().Env().Version_previous(), Xoa_app_.Version) == CompareAble_.Less) { boolean xowa_home_exists = false; int len = rv.Count(); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_bookmarks.java b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_bookmarks.java index e655f6e17..985e7af96 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_bookmarks.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_bookmarks.java @@ -18,22 +18,22 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.usrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.gui.history.*; import gplx.xowa.gui.views.*; public class Xoapi_bookmarks implements GfoInvkAble { - private Xoa_app app; private Xog_win_itm win; - public void Ctor_by_app(Xoa_app app) {this.app = app;} - public void Init_by_kit(Xoa_app app) {this.win = app.Gui_mgr().Browser_win();} + private Xoae_app app; private Xog_win_itm win; + public void Ctor_by_app(Xoae_app app) {this.app = app;} + public void Init_by_kit(Xoae_app app) {this.win = app.Gui_mgr().Browser_win();} public boolean Enabled() {return enabled;} private boolean enabled = true; public void Enabled_(boolean v) {enabled = v;} public void Add(String url_str) { if (!enabled) return; Xog_tab_itm tab = win.Active_tab(); if (tab == Xog_tab_itm_.Null) return; - Xoa_page page = tab.Page(); + Xowe_wiki wiki = tab.Wiki(); Xoae_page page = tab.Page(); byte[] wiki_domain = null, ttl_full_txt = null; if (url_str == null) { - wiki_domain = page.Wiki().Domain_bry(); + wiki_domain = wiki.Domain_bry(); ttl_full_txt = page.Ttl().Full_txt(); } else { - Xoa_url url = Xoa_url_parser.Parse_from_url_bar(app, page.Wiki(), url_str); + Xoa_url url = Xoa_url_parser.Parse_from_url_bar(app, wiki, url_str); wiki_domain = url.Wiki_bry(); ttl_full_txt = url.Page_bry(); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_history.java b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_history.java index 418126d8f..0d6b9d6db 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_history.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_history.java @@ -18,9 +18,9 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.usrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.gui.views.*; public class Xoapi_history implements GfoInvkAble { - private Xoa_app app; private Xog_win_itm win; - public void Ctor_by_app(Xoa_app app) {this.app = app;} - public void Init_by_kit(Xoa_app app) {this.win = app.Gui_mgr().Browser_win();} + private Xoae_app app; private Xog_win_itm win; + public void Ctor_by_app(Xoae_app app) {this.app = app;} + public void Init_by_kit(Xoae_app app) {this.win = app.Gui_mgr().Browser_win();} public boolean Enabled() {return enabled;} private boolean enabled = true; public void Enabled_(boolean v) {enabled = v;} public void Goto_recent() {win.Page__navigate_by_url_bar(app.User().History_mgr().Get_at_last());} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_logs.java b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_logs.java index b372de4e7..2f959d0e6 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_logs.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/usrs/Xoapi_logs.java @@ -18,9 +18,9 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.usrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.gui.views.*; public class Xoapi_logs implements GfoInvkAble { - private Xoa_app app; - public void Ctor_by_app(Xoa_app app) {this.app = app;} - public void Init_by_kit(Xoa_app app) {} + private Xoae_app app; + public void Ctor_by_app(Xoae_app app) {this.app = app;} + public void Init_by_kit(Xoae_app app) {} public boolean Enabled() {return app.Log_wtr().Enabled();} public void Enabled_(boolean v) { app.Log_wtr().Enabled_(v); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/xtns/Xoapi_scribunto.java b/400_xowa/src/gplx/xowa/apis/xowa/xtns/Xoapi_scribunto.java index 57eeedd38..304f630f3 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/xtns/Xoapi_scribunto.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/xtns/Xoapi_scribunto.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.apis.xowa.xtns; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.engines.*; public class Xoapi_scribunto implements GfoInvkAble { - private Xoa_app app; - public void Init_by_kit(Xoa_app app) { + private Xoae_app app; + public void Init_by_kit(Xoae_app app) { this.app = app; } public void Engine_(byte v) { diff --git a/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java b/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java index a9bf0d8b0..08fb7ac58 100644 --- a/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/Xoa_gfs_mgr.java @@ -17,37 +17,38 @@ along with this program. If not, see . */ package gplx.xowa.apps; import gplx.*; import gplx.xowa.*; import gplx.gfs.*; -import gplx.xowa.users.*; +import gplx.xowa.users.*; import gplx.xowa.apps.fsys.*; public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr { - public Xoa_gfs_mgr(Xoa_app app) { - this.app = app; - GfsCore._.AddCmd(app, Xoa_app.Invk_app); - GfsCore._.AddCmd(app, Xoa_app.Invk_xowa); - eval_mgr = new Xoa_app_eval(app); - } private Xoa_app app; - public Xoa_app_eval Eval_mgr() {return eval_mgr;} private Xoa_app_eval eval_mgr; + private final GfoInvkAble root_invk; private final Xoa_fsys_mgr app_fsys_mgr; private final Xou_fsys_mgr usr_fsys_mgr; + public Xoa_gfs_mgr(GfoInvkAble root_invk, Xoa_fsys_mgr app_fsys_mgr, Xou_fsys_mgr usr_fsys_mgr) { + this.root_invk = root_invk; this.app_fsys_mgr = app_fsys_mgr; this.usr_fsys_mgr = usr_fsys_mgr; + GfsCore._.AddCmd(root_invk, Xoae_app.Invk_app); + GfsCore._.AddCmd(root_invk, Xoae_app.Invk_xowa); + } + public GfoInvkAble Root_invk() {return root_invk;} + public Xoa_fsys_mgr App_fsys_mgr() {return app_fsys_mgr;} + public Xoa_app_eval Eval_mgr() {return eval_mgr;} private final Xoa_app_eval eval_mgr = new Xoa_app_eval(); private void Run_url_by_type(String type) { - Xou_fsys_mgr fsys_mgr = app.User().Fsys_mgr(); - Io_url app_data_dir = fsys_mgr.App_data_dir(); + Io_url app_data_dir = usr_fsys_mgr.App_data_dir(); Io_url url = null; if (String_.Eq(type, "user_system_cfg")) url = app_data_dir.GenSubFil_nest("cfg", "user_system_cfg.gfs"); - else if (String_.Eq(type, "xowa_cfg_custom")) url = fsys_mgr.App_data_cfg_custom_fil(); - else if (String_.Eq(type, "xowa_cfg_user")) url = fsys_mgr.App_data_cfg_user_fil(); - else if (String_.Eq(type, "xowa_cfg_os")) {url = app.Fsys_mgr().Bin_data_os_cfg_fil(); Xoa_gfs_mgr_.Cfg_os_assert(url);} - else if (String_.Eq(type, "xowa_cfg_app")) url = app.Fsys_mgr().Root_dir().GenSubFil("xowa.gfs"); + else if (String_.Eq(type, "xowa_cfg_custom")) url = usr_fsys_mgr.App_data_cfg_custom_fil(); + else if (String_.Eq(type, "xowa_cfg_user")) url = usr_fsys_mgr.App_data_cfg_user_fil(); + else if (String_.Eq(type, "xowa_cfg_os")) {url = app_fsys_mgr.Bin_data_os_cfg_fil(); Xoa_gfs_mgr_.Cfg_os_assert(url);} + else if (String_.Eq(type, "xowa_cfg_app")) url = app_fsys_mgr.Root_dir().GenSubFil("xowa.gfs"); else throw Err_mgr._.fmt_(GRP_KEY, "invalid_gfs_type", "invalid gfs type: ~{0}", type); try {Run_url(url);} catch (Exception e) { // gfs is corrupt; may happen if multiple XOWAs opened, and "Close all" chosen in OS; DATE:2014-07-01 if (!String_.Eq(type, "xowa")) // check if user.gfs Io_mgr._.MoveFil(url, url.GenNewNameOnly(url.NameOnly() + "-" + DateAdp_.Now().XtoStr_fmt_yyyyMMdd_HHmmss())); // move file - app.Usr_dlg().Warn_many("", "", "invalid gfs; obsoleting: src=~{0} err=~{1}", url.Raw(), Err_.Message_gplx(e)); + Gfo_usr_dlg_._.Warn_many("", "", "invalid gfs; obsoleting: src=~{0} err=~{1}", url.Raw(), Err_.Message_gplx(e)); } } public GfoMsg Parse_root_msg(String v) {return gplx.gfs.Gfs_msg_bldr._.ParseToMsg(v);} public Gfs_wtr Wtr() {return wtr;} private Gfs_wtr wtr = new Gfs_wtr(); public void Run_url(Io_url url) { Run_url_for(GfsCore._.Root(), url); - app.Log_wtr().Log_msg_to_session_fmt("gfs.done: ~{0}", url.Raw()); + Gfo_usr_dlg_._.Log_wtr().Log_msg_to_session_fmt("gfs.done: ~{0}", url.Raw()); } public void Run_url_for(GfoInvkAble invk, Io_url url) { String raw = Io_mgr._.LoadFilStr_args(url).MissingIgnored_().Exec(); if (String_.Len_eq_0(raw)) return; @@ -58,7 +59,7 @@ public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr { public Object Run_str_for(GfoInvkAble invk, GfoMsg root_msg) { try { int sub_msgs_len = root_msg.Subs_count(); - GfsCtx ctx = GfsCtx.new_().Fail_if_unhandled_(Fail_if_unhandled).Usr_dlg_(app.Usr_dlg()); + GfsCtx ctx = GfsCtx.new_().Fail_if_unhandled_(Fail_if_unhandled).Usr_dlg_(Gfo_usr_dlg_._); Object rv = null; for (int i = 0; i < sub_msgs_len; i++) { GfoMsg sub_msg = root_msg.Subs_getAt(i); @@ -66,13 +67,13 @@ public class Xoa_gfs_mgr implements GfoInvkAble, GfoInvkRootWkr { } return rv; } catch (Exception e) { - app.Usr_dlg().Warn_many("", "", "error while executing script: err=~{0}", Err_.Message_gplx(e)); + Gfo_usr_dlg_._.Warn_many("", "", "error while executing script: err=~{0}", Err_.Message_gplx(e)); return GfoInvkAble_.Rv_error; } } public GfoEvObj Get_owner_as_event_obj(String cmd) { GfoMsg cur_msg = Parse_root_msg(cmd).Subs_getAt(0); // ignore root_msg which is "" - GfoInvkAble cur_invk = app; + GfoInvkAble cur_invk = root_invk; while (true) { if (cur_msg.Subs_count() == 0) return (GfoEvObj)cur_invk; // terminal msg; return cur_invk cur_invk = (GfoInvkAble)GfoInvkAble_.InvkCmd(cur_invk, cur_msg.Key()); diff --git a/400_xowa/src/gplx/xowa/apps/Xoa_shell.java b/400_xowa/src/gplx/xowa/apps/Xoa_shell.java index 0dabb1e11..e17cd1537 100644 --- a/400_xowa/src/gplx/xowa/apps/Xoa_shell.java +++ b/400_xowa/src/gplx/xowa/apps/Xoa_shell.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.apps; import gplx.*; import gplx.xowa.*; public class Xoa_shell implements GfoInvkAble { - public Xoa_shell(Xoa_app app) {this.app = app;} private Xoa_app app; + public Xoa_shell(Xoae_app app) {this.app = app;} private Xoae_app app; public boolean Fetch_page_exec_async() {return fetch_page_exec_async;} private boolean fetch_page_exec_async = true; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_fetch_page)) return Fetch_page(m); diff --git a/400_xowa/src/gplx/xowa/apps/Xoa_shell_tst.java b/400_xowa/src/gplx/xowa/apps/Xoa_shell_tst.java index 658d17072..c4ba1806c 100644 --- a/400_xowa/src/gplx/xowa/apps/Xoa_shell_tst.java +++ b/400_xowa/src/gplx/xowa/apps/Xoa_shell_tst.java @@ -20,7 +20,7 @@ import org.junit.*; public class Xoa_shell_tst { @Test public void Fetch_page() { // PURPOSE.fix: fetch_page failed with nullRef; DATE:2013-04-12 Xop_fxt parser_fxt = new Xop_fxt(); - Xoa_app app = parser_fxt.App(); Xow_wiki wiki = parser_fxt.Wiki(); + Xoae_app app = parser_fxt.App(); Xowe_wiki wiki = parser_fxt.Wiki(); parser_fxt.Init_page_create("A", "test"); // need to create page in order for html output to gen wiki.Html_mgr().Page_wtr_mgr().Html_capable_(true); // need to set html_capable in order for div_home to load Xoa_gfs_mgr.Msg_parser_init(); diff --git a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java index 2bc8ac3b4..450fa9ef1 100644 --- a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java +++ b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java @@ -16,27 +16,27 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.apps.fsys; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; -import gplx.core.primitives.*; +import gplx.core.primitives.*; import gplx.xowa.users.*; public class Xoa_fsys_eval implements Bry_fmtr_eval_mgr { - public Xoa_fsys_eval(Xoa_app app) {this.app = app;} private Xoa_app app; + private final Xoa_fsys_mgr app_fsys_mgr; private final Xou_fsys_mgr usr_fsys_mgr; + public Xoa_fsys_eval(Xoa_fsys_mgr app_fsys_mgr, Xou_fsys_mgr usr_fsys_mgr) {this.app_fsys_mgr = app_fsys_mgr; this.usr_fsys_mgr = usr_fsys_mgr;} public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = true; public byte[] Eval(byte[] cmd) { - Object o = hash.Get_by_bry(cmd); - if (o == null) return null; + Object o = hash.Get_by_bry(cmd); if (o == null) return null; byte val = ((Byte_obj_val)o).Val(); switch (val) { - case Tid_bin_plat_dir: return app.Fsys_mgr().Bin_plat_dir().RawBry(); - case Tid_user_temp_dir: return app.User().Fsys_mgr().App_temp_dir().RawBry(); - case Tid_xowa_root_dir: return app.Fsys_mgr().Root_dir().RawBry(); - case Tid_user_cfg_dir: return app.User().Fsys_mgr().App_data_cfg_dir().RawBry(); + case Tid_xowa_root_dir: return app_fsys_mgr.Root_dir().RawBry(); + case Tid_bin_plat_dir: return app_fsys_mgr.Bin_plat_dir().RawBry(); + case Tid_user_temp_dir: return usr_fsys_mgr.App_temp_dir().RawBry(); + case Tid_user_cfg_dir: return usr_fsys_mgr.App_data_cfg_dir().RawBry(); default: throw Err_mgr._.unhandled_(val); } } private static final byte Tid_bin_plat_dir = 0, Tid_user_temp_dir = 1, Tid_xowa_root_dir = 2, Tid_user_cfg_dir = 3; private static final Hash_adp_bry hash = Hash_adp_bry.ci_ascii_() - .Add_str_byte("bin_plat_dir", Tid_bin_plat_dir) - .Add_str_byte("user_temp_dir", Tid_user_temp_dir) - .Add_str_byte("xowa_root_dir", Tid_xowa_root_dir) - .Add_str_byte("user_cfg_dir", Tid_user_cfg_dir) + .Add_str_byte("bin_plat_dir" , Tid_bin_plat_dir) + .Add_str_byte("user_temp_dir" , Tid_user_temp_dir) + .Add_str_byte("xowa_root_dir" , Tid_xowa_root_dir) + .Add_str_byte("user_cfg_dir" , Tid_user_cfg_dir) ; } diff --git a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_mgr.java b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_mgr.java index 9c7df894b..b46f366bc 100644 --- a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_mgr.java @@ -17,36 +17,32 @@ along with this program. If not, see . */ package gplx.xowa.apps.fsys; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; public class Xoa_fsys_mgr implements GfoInvkAble { - public Xoa_fsys_mgr() {} // DRD public Xoa_fsys_mgr(String plat_name, Io_url root_dir) { Init_by_boot(plat_name, root_dir); } public Io_url Root_dir() {return root_dir;} private Io_url root_dir; public byte[] Root_dir_bry() {return root_dir_bry;} private byte[] root_dir_bry; public Io_url File_dir() {return file_dir;} private Io_url file_dir; - public Io_url Wiki_dir() {return wiki_dir;} private Io_url wiki_dir; + public Io_url Wiki_dir() {return wiki_dir;} public void Wiki_dir_(Io_url v) {wiki_dir = v;} private Io_url wiki_dir; public Io_url Bin_plat_dir() {return bin_plat_dir;} private Io_url bin_plat_dir; public Io_url Bin_any_dir() {return bin_any_dir;} private Io_url bin_any_dir; - public Io_url Bin_xowa_dir() {return bin_any_dir.GenSubDir("xowa");} + public Io_url Bin_xowa_dir() {return bin_xowa_dir;} private Io_url bin_xowa_dir; public Io_url Bin_xtns_dir() {return bin_xtns_dir;} private Io_url bin_xtns_dir; public Io_url Cfg_lang_core_dir() {return cfg_lang_core_dir;} private Io_url cfg_lang_core_dir; public Io_url Cfg_wiki_core_dir() {return cfg_wiki_core_dir;} private Io_url cfg_wiki_core_dir; public Io_url Bin_data_os_cfg_fil() {return bin_plat_dir.GenSubFil_nest("xowa", "cfg", Xoa_gfs_mgr.Cfg_os);} - public void Init_by_boot(String plat_name, Io_url root_dir) { + private void Init_by_boot(String plat_name, Io_url root_dir) { this.root_dir = root_dir; root_dir_bry = root_dir.To_http_file_bry(); file_dir = root_dir.GenSubDir("file"); bin_plat_dir = root_dir.GenSubDir("bin").GenSubDir(plat_name); bin_any_dir = root_dir.GenSubDir("bin").GenSubDir("any"); + bin_xowa_dir = bin_any_dir.GenSubDir("xowa"); bin_xtns_dir = bin_any_dir.GenSubDir_nest("xowa", "xtns"); cfg_lang_core_dir = bin_any_dir.GenSubDir_nest("xowa", "cfg", "lang", "core"); cfg_wiki_core_dir = bin_any_dir.GenSubDir_nest("xowa", "cfg", "wiki", "core"); Wiki_dir_ (root_dir.GenSubDir("wiki")); } - public Xoa_fsys_mgr Wiki_dir_(Io_url v) { - wiki_dir = v; - return this; - } public void Init_by_app(GfoInvkAble app_mgr_invk) {// for gfs and app.launcher this.app_mgr_invk = app_mgr_invk; } private GfoInvkAble app_mgr_invk; @@ -56,5 +52,4 @@ public class Xoa_fsys_mgr implements GfoInvkAble { else return GfoInvkAble_.Rv_unhandled; } private static final String Invk_apps = "apps", Invk_root_dir = "root_dir"; - public static final String DirName_wiki = "wiki", DirName_user = "user"; } diff --git a/400_xowa/src/gplx/xowa/apps/fsys/Launcher_app_mgr.java b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java similarity index 62% rename from 400_xowa/src/gplx/xowa/apps/fsys/Launcher_app_mgr.java rename to 400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java index 38ad5ad2b..9be7cd96f 100644 --- a/400_xowa/src/gplx/xowa/apps/fsys/Launcher_app_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java @@ -15,33 +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.apps.fsys; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; -public class Launcher_app_mgr implements GfoInvkAble { - public Launcher_app_mgr(Xoa_app app) {this.app = app;} private Xoa_app app; - public void Init() { - Xoa_fsys_eval cmd_eval = app.Url_cmd_eval(); - ProcessAdp.ini_(this, app.Gui_wtr(), app_query_img_size , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}imagemagick\\identify", "-ping -format \"<{%w,%h}>\" \"~{file}\"", "file"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_resize_img , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "\"~{source}\" -coalesce -resize ~{width}x~{height} \"~{target}\"", "source", "target", "width", "height"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_convert_svg_to_png , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}inkscape\\inkscape", "-z -w ~{width} -f \"~{source}\" -e \"~{target}\"", "source", "target", "width").Thread_kill_name_("inkscape.exe"); // // -z=without-gui; -w=width; -f=file -e=export-png - ProcessAdp.ini_(this, app.Gui_wtr(), app_convert_tex_to_dvi , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\latex", "-quiet -output-directory=~{temp_dir} -job-name=xowa_temp ~{tex_file}", "tex_file", "temp_dir"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_convert_dvi_to_png , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\dvipng", "~{dvi_file} -o ~{png_file} -q* -T tight -bg Transparent", "dvi_file", "png_file", "temp_dir"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_convert_djvu_to_tiff , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}djvulibre\\ddjvu", "-format=tiff -page=1 \"~{source}\" \"~{target}\"", "source", "target"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_decompress_bz2 , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir - ProcessAdp.ini_(this, app.Gui_wtr(), app_decompress_bz2_by_stdout, cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -so \"~{src}\"", "src"); // x=extract; -so=stdout - ProcessAdp.ini_(this, app.Gui_wtr(), app_decompress_zip , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir - ProcessAdp.ini_(this, app.Gui_wtr(), app_decompress_gz , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir - ProcessAdp.ini_(this, app.Gui_wtr(), app_lua , cmd_eval, ProcessAdp.Run_mode_async , 0 , "~{<>bin_plat_dir<>}lua\\lua", "", ""); - ProcessAdp.ini_(this, app.Gui_wtr(), app_lilypond , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\lilypond.exe", "\"-dsafe=#t\" -dbackend=ps --png --header=texidoc -dmidi-extension=midi \"~{file}\"", "file"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_abc2ly , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\python.exe", "abc2ly.py -s \"--output=~{target}\" \"~{source}\"", "source", "target"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_trim_img , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "-trim \"~{source}\" \"~{target}\"", "source", "target"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_convert_midi_to_ogg , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}timidity\\timidity", "-Ov \"--output-file=~{target}\" \"~{source}\"", "source", "target"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_view_web , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); - ProcessAdp.ini_(this, app.Gui_wtr(), app_view_text , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); +package gplx.xowa.apps.progs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; +import gplx.xowa.apps.fsys.*; +public class Xoa_prog_mgr implements GfoInvkAble { + public void Init_by_app(Xoa_fsys_eval cmd_eval) { + Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg(); + ProcessAdp.ini_(this, usr_dlg, app_query_img_size , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}imagemagick\\identify", "-ping -format \"<{%w,%h}>\" \"~{file}\"", "file"); + ProcessAdp.ini_(this, usr_dlg, app_resize_img , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "\"~{source}\" -coalesce -resize ~{width}x~{height} \"~{target}\"", "source", "target", "width", "height"); + ProcessAdp.ini_(this, usr_dlg, app_convert_svg_to_png , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}inkscape\\inkscape", "-z -w ~{width} -f \"~{source}\" -e \"~{target}\"", "source", "target", "width").Thread_kill_name_("inkscape.exe"); // // -z=without-gui; -w=width; -f=file -e=export-png + ProcessAdp.ini_(this, usr_dlg, app_convert_tex_to_dvi , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\latex", "-quiet -output-directory=~{temp_dir} -job-name=xowa_temp ~{tex_file}", "tex_file", "temp_dir"); + ProcessAdp.ini_(this, usr_dlg, app_convert_dvi_to_png , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\dvipng", "~{dvi_file} -o ~{png_file} -q* -T tight -bg Transparent", "dvi_file", "png_file", "temp_dir"); + ProcessAdp.ini_(this, usr_dlg, app_convert_djvu_to_tiff , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}djvulibre\\ddjvu", "-format=tiff -page=1 \"~{source}\" \"~{target}\"", "source", "target"); + ProcessAdp.ini_(this, usr_dlg, app_decompress_bz2 , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir + ProcessAdp.ini_(this, usr_dlg, app_decompress_bz2_by_stdout , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -so \"~{src}\"", "src"); // x=extract; -so=stdout + ProcessAdp.ini_(this, usr_dlg, app_decompress_zip , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir + ProcessAdp.ini_(this, usr_dlg, app_decompress_gz , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir + ProcessAdp.ini_(this, usr_dlg, app_lua , cmd_eval, ProcessAdp.Run_mode_async , 0 , "~{<>bin_plat_dir<>}lua\\lua", "", ""); + ProcessAdp.ini_(this, usr_dlg, app_lilypond , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\lilypond.exe", "\"-dsafe=#t\" -dbackend=ps --png --header=texidoc -dmidi-extension=midi \"~{file}\"", "file"); + ProcessAdp.ini_(this, usr_dlg, app_abc2ly , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\python.exe", "abc2ly.py -s \"--output=~{target}\" \"~{source}\"", "source", "target"); + ProcessAdp.ini_(this, usr_dlg, app_trim_img , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "-trim \"~{source}\" \"~{target}\"", "source", "target"); + ProcessAdp.ini_(this, usr_dlg, app_convert_midi_to_ogg , cmd_eval, ProcessAdp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}timidity\\timidity", "-Ov \"--output-file=~{target}\" \"~{source}\"", "source", "target"); + ProcessAdp.ini_(this, usr_dlg, app_view_web , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); + ProcessAdp.ini_(this, usr_dlg, app_view_text , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); int cmds_view_file_by_ext_len = cmds_view_file_by_ext.length; for (int i= 0; i < cmds_view_file_by_ext_len; i++) { ProcessAdp cmd = new ProcessAdp(); cmds_view_file_by_ext [i] = cmd; - ProcessAdp.ini_(this, app.Gui_wtr(), cmd , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{file}\"", "file"); + ProcessAdp.ini_(this, usr_dlg, cmd , cmd_eval, ProcessAdp.Run_mode_async , 0 , "cmd", "/c start \"~{file}\"", "file"); } } public ProcessAdp App_query_img_size() {return app_query_img_size;} private ProcessAdp app_query_img_size = new ProcessAdp(); diff --git a/400_xowa/src/gplx/xowa/apps/setups/Xoa_setup_mgr.java b/400_xowa/src/gplx/xowa/apps/setups/Xoa_setup_mgr.java index 8355e34d4..846aa4276 100644 --- a/400_xowa/src/gplx/xowa/apps/setups/Xoa_setup_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/setups/Xoa_setup_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.apps.setups; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.versions.*; public class Xoa_setup_mgr { - public static void Delete_old_files(Xoa_app app) { + public static void Delete_old_files(Xoae_app app) { String version_previous = app.Api_root().App().Env().Version_previous(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); Io_url root_dir = app.Fsys_mgr().Root_dir(); diff --git a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java index 24b245ae4..9f6e1ab49 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java @@ -17,12 +17,12 @@ along with this program. If not, see . */ package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; import gplx.core.strings.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*; public class Db_mgr_fxt { public Db_mgr_fxt Ctor_fsys() {bldr_fxt = new Xob_fxt().Ctor(Xoa_test_.Url_root().GenSubDir("root")); return this;} public Db_mgr_fxt Ctor_mem() {bldr_fxt = new Xob_fxt().Ctor_mem(); return this;} private Xob_fxt bldr_fxt; public Xodb_page page_(int id, String modified_on, boolean type_redirect, int text_len) {return new Xodb_page().Id_(id).Modified_on_(DateAdp_.parse_gplx(modified_on)).Type_redirect_(type_redirect).Text_len_(text_len);} - public Xow_wiki Wiki() {return bldr_fxt.Wiki();} + public Xowe_wiki Wiki() {return bldr_fxt.Wiki();} public Xob_bldr Bldr() {return bldr_fxt.Bldr();} public Db_mgr_fxt doc_ary_(Xodb_page... v) {bldr_fxt.doc_ary_(v); return this;} public Xodb_page doc_(int id, String date, String title, String text) {return bldr_fxt.doc_(id, date, title, text);} @@ -34,7 +34,7 @@ public class Db_mgr_fxt { public Db_mgr_fxt Exec_run(Xob_cmd cmd) {bldr_fxt.Run_cmds(cmd); return this;} public Db_mgr_fxt Exec_run(Xobd_parser_wkr wkr) {bldr_fxt.Run(wkr); return this;} public void Init_page_insert(Int_obj_ref page_id_next, int ns_id, String[] ttls) { - Xow_wiki wiki = this.Wiki(); + Xowe_wiki wiki = this.Wiki(); Xodb_page_tbl tbl_page = wiki.Db_mgr_as_sql().Tbl_page(); Db_stmt stmt = Db_stmt_.Null; try { @@ -50,7 +50,7 @@ public class Db_mgr_fxt { } finally {stmt.Rls();} } public void Test_load_ttl(int ns_id, String ttl_str, Xodb_page expd) { - Xow_wiki wiki = bldr_fxt.Wiki(); + Xowe_wiki wiki = bldr_fxt.Wiki(); Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id); byte[] ttl_bry = Bry_.new_ascii_(ttl_str); wiki.Db_mgr_as_sql().Load_mgr().Load_by_ttl(actl, ns, ttl_bry); @@ -60,13 +60,13 @@ public class Db_mgr_fxt { Tfds.Eq(expd.Text_len(), actl.Text_len()); } private Xodb_page actl = new Xodb_page(); public void Test_load_page(int ns_id, int page_id, String expd) { - Xow_wiki wiki = bldr_fxt.Wiki(); + Xowe_wiki wiki = bldr_fxt.Wiki(); Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id); wiki.Db_mgr_as_sql().Load_mgr().Load_page(actl.Id_(page_id), ns, false); Tfds.Eq(expd, String_.new_ascii_(actl.Text())); } public void Test_search(String search_word_str, int... expd) { - Xow_wiki wiki = bldr_fxt.Wiki(); + Xowe_wiki wiki = bldr_fxt.Wiki(); ListAdp rv = ListAdp_.new_(); byte[] search_word_bry = Bry_.new_ascii_(search_word_str); wiki.Db_mgr_as_sql().Load_mgr().Load_search(Cancelable_.Never, rv, search_word_bry, 100); @@ -82,7 +82,7 @@ public class Db_mgr_fxt { return rv; } public void Test_category_v1(String ctg_name_str, int... expd) { - Xow_wiki wiki = bldr_fxt.Wiki(); + Xowe_wiki wiki = bldr_fxt.Wiki(); byte[] ctg_name_bry = Bry_.new_ascii_(ctg_name_str); Xoctg_view_ctg ctg = new Xoctg_view_ctg(); wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_v1(ctg, ctg_name_bry); @@ -102,7 +102,7 @@ public class Db_mgr_fxt { return (int[])list.Xto_ary_and_clear(int.class); } public void Test_category_v2(String ctg_name_str, int... expd) { - Xow_wiki wiki = bldr_fxt.Wiki(); + Xowe_wiki wiki = bldr_fxt.Wiki(); byte[] ctg_name_bry = Bry_.new_ascii_(ctg_name_str); Xoctg_data_ctg ctg = new Xoctg_data_ctg(ctg_name_bry); wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_v2(ctg, ctg_name_bry); @@ -127,8 +127,8 @@ public class Db_mgr_fxt { } public void Init_db_sqlite() {Init_db_sqlite(Xoa_test_.Url_wiki_enwiki().GenSubFil_nest("en.wikipedia.org.sqlite3"));} public void Init_db_sqlite(Io_url url) { - Xow_wiki wiki = this.Wiki(); - Db_conn_pool_old._.Clear(); + Xowe_wiki wiki = this.Wiki(); + Db_conn_pool.I.Clear(); Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql(); db_mgr.Data_storage_format_(gplx.ios.Io_stream_.Tid_file); db_mgr.Init_by_ns_map(""); @@ -140,141 +140,7 @@ public class Db_mgr_fxt { conn.Exec_qry(Db_qry_delete.new_all_("text")); conn.Exec_qry(Db_qry_delete.new_all_("category")); conn.Exec_qry(Db_qry_delete.new_all_("categorylinks")); - } String dsv_db; - public void Init_db_tdb() { - Io_mgr._.InitEngine_mem(); - this.Ctor_mem(); - if (dsv_db == null) dsv_db = dsv_db_(); - // mem/xowa/bin/any/sql/xowa/xowa.sqlite3 - Io_url url = Io_url_.mem_fil_("mem/tdb/en.wikipedia.org/xowa.tdb"); - Io_mgr._.SaveFilStr(url, dsv_db); - Io_url url2 = Io_url_.mem_fil_("mem/xowa/bin/any/sql/xowa/xowa.sqlite3"); - Io_mgr._.SaveFilStr(url2, dsv_db); - this.Wiki().Db_mgr_create_as_sql();// .("gplx_key=tdb;url=" + url.Raw()); - this.Wiki().Db_mgr_as_sql().Init_by_ns_map(""); } - private static String dsv_db_() { - String_bldr sb = String_bldr_.new_(); - dsv_tbl_files(sb); - dsv_tbl_tables(sb); - dsv_tbl_xowa_cfg(sb); - dsv_tbl_xowa_db(sb); - dsv_tbl_xowa_ns(sb); - dsv_tbl_page(sb); - dsv_tbl_text(sb); - dsv_tbl_category(sb); - dsv_tbl_categorylinks(sb); - return sb.Xto_str_and_clear(); - } - private static void Add_lines_w_crlf(String_bldr sb, String... ary) { - int len = ary.length; - for (int i = 0; i < len; i++) { - sb.Add(ary[i]); - sb.Add(String_.CrLf); - } - } - private static void dsv_tbl_files(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "_files, ,\" \",#" - , "================================, ,\" \",//" - , "int,string,string, ,\" \",$" - , "id,url,format, ,\" \",@" - , "================================, ,\" \",//" - , "1,,dsv" - , "2,,dsv" - ); - } - private static void dsv_tbl_tables(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "_tables, ,\" \",#" - , "================================, ,\" \",//" - , "int,string,int, ,\" \",$" - , "id,name,file_id, ,\" \",@" - , "================================, ,\" \",//" - , "1,xowa_cfg,1" - , "2,xowa_db,1" - , "3,xowa_ns,1" - , "4,page,1" - , "5,text,1" - , "6,category,1" - , "7,categorylinks,1" -// , "8,site_stats,1" -// , "9,wdata_qids,1" -// , "10,wdata_pids,1" - ); - } - private static void dsv_tbl_xowa_cfg(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "xowa_cfg, ,\" \",#" - , "================================, ,\" \",//" - , "string,string,string, ,\" \",$" - , "cfg_grp,cfg_key,cfg_val, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_xowa_db(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "xowa_db, ,\" \",#" - , "================================, ,\" \",//" - , "int,byte,string, ,\" \",$" - , "db_id,db_type,db_url, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_xowa_ns(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "xowa_ns, ,\" \",#" - , "================================, ,\" \",//" - , "int,string,byte,bool,int, ,\" \",$" - , "ns_id,ns_name,ns_case,ns_is_alias,ns_count, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_page(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "page, ,\" \",#" - , "================================, ,\" \",//" - , "int,int,string,byte,string,int,int,int, ,\" \",$" - , "page_id,page_namespace,page_title,page_is_redirect,page_touched,page_len,page_random_int,page_file_idx, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_text(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "text, ,\" \",#" - , "================================, ,\" \",//" - , "int,string, ,\" \",$" - , "page_id,old_text, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_categorylinks(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "categorylinks, ,\" \",#" - , "================================, ,\" \",//" - , "int,int,string,string,int,byte, ,\" \",$" - , "cl_from,cl_to,cl_to_id,cl_sortkey,cl_timestamp,cl_type_id, ,\" \",@" - , "================================, ,\" \",//" - ); - } - private static void dsv_tbl_category(String_bldr sb) { - Add_lines_w_crlf(sb - , "================================, ,\" \",//" - , "category, ,\" \",#" - , "================================, ,\" \",//" - , "int,int,int,int,byte,int, ,\" \",$" - , "cat_id,cat_pages,cat_subcats,cat_files,cat_hidden,cat_file_idx, ,\" \",@" - , "================================, ,\" \",//" - ); - } public void Rls() { this.Wiki().Db_mgr().Rls(); } diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java index fefba84c8..f142eaf10 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java @@ -29,15 +29,15 @@ public class Xob_base_fxt { return this; } @gplx.Virtual public void Clear_hook() {} - public Xob_base_fxt Init_(Xob_bldr bldr, Xow_wiki wiki) {this.bldr = bldr; this.wiki = wiki; return this;} - public Xoa_app App() {return app;} private Xoa_app app; + public Xob_base_fxt Init_(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki; return this;} + public Xoae_app App() {return app;} private Xoae_app app; public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public GfoInvkAble Bldr_itm() {return bldr_itm;} GfoInvkAble bldr_itm; public Xodb_page page_(String ttl) {return page_(ttl, "");} public Xodb_page page_(String ttl, String text) {return new Xodb_page().Ttl_(Bry_.new_utf8_(ttl), wiki.Ns_mgr()).Text_(Bry_.new_utf8_(text));} public Io_fil_chkr meta_(String url, String data) {return new Io_fil_chkr(Io_url_.mem_fil_(url), data);} - public void Init_fxts(Xob_bldr bldr, Xow_wiki wiki, Xob_base_fxt... fxt_ary) { + public void Init_fxts(Xob_bldr bldr, Xowe_wiki wiki, Xob_base_fxt... fxt_ary) { int fxt_ary_len = fxt_ary.length; for (int i = 0; i < fxt_ary_len; i++) fxt_ary[i].Init_(bldr, wiki); diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java index eaf19e047..cdcb554cc 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java @@ -18,15 +18,15 @@ along with this program. If not, see . package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.imports.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.bldrs.imports.*; import gplx.xowa.bldrs.oimgs.*; -import gplx.xowa.bldrs.wikis.redirects.*; import gplx.xowa.bldrs.wikis.images.*; import gplx.xowa.files.wiki_orig.*; -import gplx.xowa.bldrs.files.*; +import gplx.xowa.bldrs.wikis.redirects.*; import gplx.xowa.bldrs.wikis.images.*; +import gplx.xowa.bldrs.files.*; import gplx.xowa.files.origs.*; public class Xob_cmd_mgr implements GfoInvkAble { public Xob_cmd_mgr(Xob_bldr bldr) {this.bldr = bldr;} private Xob_bldr bldr; public void Clear() {list.Clear(); dump_rdrs.Clear();} public int Len() {return list.Count();} ListAdp list = ListAdp_.new_(); public Xob_cmd Get_at(int i) {return (Xob_cmd)list.FetchAt(i);} public Xob_cmd Add(Xob_cmd cmd) {list.Add(cmd); return cmd;} - public GfoInvkAble Add_cmd(Xow_wiki wiki, String cmd_key) { + public GfoInvkAble Add_cmd(Xowe_wiki wiki, String cmd_key) { if (String_.Eq(cmd_key, Xob_init_txt.KEY)) return Add(new Xob_init_txt(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_init_sql.KEY)) return Add(new Xob_init_sql(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_term_txt.KEY)) return Add(new Xob_term_txt(bldr, wiki)); @@ -56,7 +56,7 @@ public class Xob_cmd_mgr implements GfoInvkAble { else if (String_.Eq(cmd_key, Xob_xfer_update_cmd.KEY_oimg)) return Add(new Xob_xfer_update_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_diff_regy_exec_cmd.KEY_oimg)) return Add(new Xob_diff_regy_exec_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_diff_regy_make_cmd.KEY_oimg)) return Add(new Xob_diff_regy_make_cmd(bldr, wiki)); - else if (String_.Eq(cmd_key, Xof_wiki_orig_cmd.KEY_oimg)) return Add(new Xof_wiki_orig_cmd(bldr, wiki)); + else if (String_.Eq(cmd_key, Xob_orig_tbl_bldr.KEY_oimg)) return Add(new Xob_orig_tbl_bldr(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_download_wkr.KEY_oimg)) return Add(new Xob_download_wkr(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_page_regy_cmd.KEY_oimg)) return Add(new Xob_page_regy_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_cmd_exec_sql.KEY)) return Add(new Xob_cmd_exec_sql(bldr, wiki)); @@ -78,17 +78,17 @@ public class Xob_cmd_mgr implements GfoInvkAble { else if (String_.Eq(cmd_key, Xobc_deploy_copy.KEY)) return Add(new Xobc_deploy_copy(bldr, wiki)); else throw Err_.unhandled(cmd_key); } - private Xobd_wkr Xml_rdr_direct_add(Xow_wiki wiki, Xobd_wkr wkr) { + private Xobd_wkr Xml_rdr_direct_add(Xowe_wiki wiki, Xobd_wkr wkr) { Xobd_rdr dump_rdr = Xml_rdr_get(wiki); dump_rdr.Wkr_add(wkr); return wkr; } - private Xobd_parser_wkr Xml_rdr_parser_add(Xow_wiki wiki, Xobd_parser_wkr wkr) { + private Xobd_parser_wkr Xml_rdr_parser_add(Xowe_wiki wiki, Xobd_parser_wkr wkr) { Xobd_rdr dump_rdr = Xml_rdr_get(wiki); dump_rdr.Page_parser_assert().Wkr_add(wkr); return wkr; } - private Xobd_rdr Xml_rdr_get(Xow_wiki wiki) { + private Xobd_rdr Xml_rdr_get(Xowe_wiki wiki) { byte[] wiki_key = wiki.Domain_bry(); Xobd_rdr rv = (Xobd_rdr)dump_rdrs.Fetch(dump_rdrs_ref.Val_(wiki_key)); if (rv == null) { @@ -117,7 +117,7 @@ public class Xob_cmd_mgr implements GfoInvkAble { throw Err_.new_fmt_("cmd not found; key=~{0}", cmd_key); } private Object Add_many(GfoMsg m) { - Xow_wiki wiki = Wiki_get_or_make(m); + Xowe_wiki wiki = Wiki_get_or_make(m); wiki.Lang().Init_by_load_assert(); // NOTE: must check that lang is loaded; else case_mgr will not initialize; DATE:2013-05-11 int args_len = m.Args_count(); String[] cmds = new String[args_len - 1]; // -1 b/c 1st arg is wiki @@ -127,17 +127,17 @@ public class Xob_cmd_mgr implements GfoInvkAble { } return Add_many(wiki, cmds); } - public Object Add_many(Xow_wiki wiki, String... cmds) { + public Object Add_many(Xowe_wiki wiki, String... cmds) { int len = cmds.length; if (len == 0) throw Err_mgr._.fmt_(GRP_KEY, Invk_add_many, "add_many cannot have 0 cmds"); Object rv = null; for (int i = 0; i < len; i++) rv = Add_cmd(wiki, cmds[i]); return rv; } - private Xow_wiki Wiki_get_or_make(GfoMsg m) { + private Xowe_wiki Wiki_get_or_make(GfoMsg m) { byte[] wiki_key = m.ReadBry("v"); Xoa_wiki_mgr wiki_mgr = bldr.App().Wiki_mgr(); - Xow_wiki rv = wiki_mgr.Get_by_key_or_make(wiki_key); + Xowe_wiki rv = wiki_mgr.Get_by_key_or_make(wiki_key); rv.Lang().Init_by_load(); return rv; } diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java index c5bdc642b..01a9939dd 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java @@ -16,29 +16,29 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs; import gplx.*; import gplx.xowa.*; -import gplx.ios.*; +import gplx.ios.*; import gplx.xowa.tdbs.*; public class Xob_fxt { public Xob_fxt Ctor_mem() { Io_mgr._.InitEngine_mem(); return Ctor(Io_url_.mem_dir_("mem/xowa/")); } public Xob_fxt Ctor(Io_url root_dir) { - app = Xoa_app_fxt.app_(root_dir, "linux"); + app = Xoa_app_fxt.app_("linux", root_dir); wiki = Xoa_app_fxt.wiki_tst_(app); bldr = Xoa_app_fxt.bldr_(app); return this; } - public Xoa_app App() {return app;} private Xoa_app app; + public Xoae_app App() {return app;} private Xoae_app app; public Xob_bldr Bldr() {return bldr;} private Xob_bldr bldr; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; - public Io_url fil_ns_title(int ns_id, int idx) {return wiki.Fsys_mgr().Url_ns_fil(Xow_dir_info_.Tid_ttl, ns_id, idx);} - public Io_url fil_ns_page(int ns_id, int idx) {return wiki.Fsys_mgr().Url_ns_fil(Xow_dir_info_.Tid_page, ns_id, idx);} - public Io_url fil_ns_sttl(int ns_id, int idx) {return wiki.Fsys_mgr().Url_ns_fil(Xow_dir_info_.Tid_search_ttl, ns_id, idx);} - public Io_url fil_site(byte tid, int idx) {return wiki.Fsys_mgr().Url_site_fil(tid, idx);} - public Io_url fil_site_ctg(int idx) {return wiki.Fsys_mgr().Url_site_fil(Xow_dir_info_.Tid_category, idx);} - public Io_url fil_site_id(int idx) {return wiki.Fsys_mgr().Url_site_fil(Xow_dir_info_.Tid_id, idx);} - public Io_url fil_reg(byte tid) {return wiki.Fsys_mgr().Url_site_reg(tid);} - public Io_url fil_reg(int ns_id, byte tid) {return wiki.Fsys_mgr().Url_ns_reg(Int_.Xto_str_pad_bgn(ns_id, 3), tid);} + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; + public Io_url fil_ns_title(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_ttl, ns_id, idx);} + public Io_url fil_ns_page(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_page, ns_id, idx);} + public Io_url fil_ns_sttl(int ns_id, int idx) {return wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_search_ttl, ns_id, idx);} + public Io_url fil_site(byte tid, int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(tid, idx);} + public Io_url fil_site_ctg(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_category, idx);} + public Io_url fil_site_id(int idx) {return wiki.Tdb_fsys_mgr().Url_site_fil(Xotdb_dir_info_.Tid_id, idx);} + public Io_url fil_reg(byte tid) {return wiki.Tdb_fsys_mgr().Url_site_reg(tid);} + public Io_url fil_reg(int ns_id, byte tid) {return wiki.Tdb_fsys_mgr().Url_ns_reg(Int_.Xto_str_pad_bgn(ns_id, 3), tid);} public Xob_fxt Fil_expd(Io_url url, String... expd) { String text = String_.Concat_lines_nl_skip_last(expd); // skipLast b/c if trailing line wanted, easier to pass in extra argument for "" expd_list.Add(new Io_fil_chkr(url, text)); @@ -142,8 +142,8 @@ public class Xob_fxt { } Io_fil[] wiki_() { ListAdp rv = ListAdp_.new_(); - wiki_fil_add(rv, wiki.Fsys_mgr().Ns_dir()); - wiki_fil_add(rv, wiki.Fsys_mgr().Site_dir()); + wiki_fil_add(rv, wiki.Tdb_fsys_mgr().Ns_dir()); + wiki_fil_add(rv, wiki.Tdb_fsys_mgr().Site_dir()); rv.Sort(); return (Io_fil[])rv.Xto_ary(Io_fil.class); } diff --git a/400_xowa/src/gplx/xowa/bldrs/aria2/Aria2_lib_mgr.java b/400_xowa/src/gplx/xowa/bldrs/aria2/Aria2_lib_mgr.java index 101a13b77..49397553d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/aria2/Aria2_lib_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/aria2/Aria2_lib_mgr.java @@ -19,9 +19,9 @@ package gplx.xowa.bldrs.aria2; import gplx.*; import gplx.xowa.*; import gplx.xo import gplx.xowa.apps.fsys.*; public class Aria2_lib_mgr implements GfoInvkAble { public ProcessAdp Lib() {return lib;} private ProcessAdp lib = new ProcessAdp(); - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { Xoa_fsys_eval cmd_eval = app.Url_cmd_eval(); - ProcessAdp.ini_(this, app.Gui_wtr(), lib, cmd_eval, ProcessAdp.Run_mode_sync_block, Int_.MaxValue + ProcessAdp.ini_(this, app.Usr_dlg(), lib, cmd_eval, ProcessAdp.Run_mode_sync_block, Int_.MaxValue , "~{<>bin_plat_dir<>}aria2" + Op_sys.Cur().Fsys_dir_spr_str() + "aria2c" , Lib_args_fmt , "wiki_abrv", "wiki_date", "wiki_type"); diff --git a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr.java b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr.java index d16e686f2..bc5ed9683 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr.java +++ b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.core.strings.*; public class Xob_wiki_cfg_bldr implements GfoInvkAble { - public Xob_wiki_cfg_bldr(Xob_bldr bldr) {this.app = bldr.App();} private Xoa_app app; + public Xob_wiki_cfg_bldr(Xob_bldr bldr) {this.app = bldr.App();} private Xoae_app app; public void Exec() { int len = hash.Count(); for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java index 2434dff5e..a537582c5 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java @@ -156,7 +156,7 @@ class Xob_wiki_cfg_bldr_fxt { wiki_cfg_bldr.Clear(); hash.Clear(); return this; - } private Xoa_app app; Xob_wiki_cfg_bldr wiki_cfg_bldr; OrderedHash hash = OrderedHash_.new_(); + } private Xoae_app app; Xob_wiki_cfg_bldr wiki_cfg_bldr; OrderedHash hash = OrderedHash_.new_(); public Xob_wiki_cfg_bldr_fxt Init_cmd(String wiki, String key, String text) { wiki_cfg_bldr.Itms_get_or_new(wiki).Itms_add(key, text); return this; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java index a9cc2db2d..a9b897ee9 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd.java @@ -16,10 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; public class Xob_diff_regy_exec_cmd extends Xob_itm_basic_base implements Xob_cmd { private Io_url sql_dir; - public Xob_diff_regy_exec_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_diff_regy_exec_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.diff_regy.exec"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -47,7 +48,7 @@ class Xob_diff_regy_sql_runner { public String Wiki_domain() {return wiki_domain;} private String wiki_domain; public int Fsdb_db_id() {return fsdb_db_id;} private int fsdb_db_id; public byte Fsdb_db_tid() {return fsdb_db_tid;} private byte fsdb_db_tid; - public void Exec(Xoa_app app, Io_url url) { + public void Exec(Xoae_app app, Io_url url) { Parse_url(url); Run_sql(app); } @@ -58,17 +59,17 @@ class Xob_diff_regy_sql_runner { fsdb_db_id = Int_.parse_(parts[1]); fsdb_db_tid = Fsdb_db_tid_.Xto_tid(parts[2]); } - public void Run_sql(Xoa_app app) { - Xow_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_utf8_(wiki_domain)); + public void Run_sql(Xoae_app app) { + Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_utf8_(wiki_domain)); app.Usr_dlg().Prog_many("", "", "running sql: url=~{0}", url.NameAndExt()); Db_conn conn = Get_provider(wiki, fsdb_db_id, fsdb_db_tid); conn.Exec_sql(Io_mgr._.LoadFilStr(url)); if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin) conn.Exec_sql("VACUUM;"); } - public static Db_conn Get_provider(Xow_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) { + public static Db_conn Get_provider(Xowe_wiki wiki, int fsdb_db_id, byte fsdb_db_tid) { wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); - Fsdb_db_abc_mgr abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Abc_mgr_at(0); + Fsm_abc_mgr abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0); if (fsdb_db_tid == Fsdb_db_tid_.Tid_bin) return abc_mgr.Bin_mgr().Get_at(fsdb_db_id).Conn(); else if (fsdb_db_tid == Fsdb_db_tid_.Tid_atr) @@ -80,3 +81,21 @@ class Xob_diff_regy_sql_runner { return String_.Format("{0}-{1}-{2}.sql", wiki_domain, Int_.Xto_str_pad_bgn(fsdb_db_id, 3), fsdb_db_type); } } +class Fsdb_db_tid_ { + public static final byte Tid_cfg = 0, Tid_atr = 1, Tid_bin = 2; + public static final String Key_cfg = "cfg", Key_atr = "atr", Key_bin = "bin"; + public static byte Xto_tid(String s) { + if (String_.Eq(s, Key_cfg)) return Tid_cfg; + else if (String_.Eq(s, Key_atr)) return Tid_atr; + else if (String_.Eq(s, Key_bin)) return Tid_bin; + else throw Err_.unhandled(s); + } + public static String Xto_key(byte v) { + switch (v) { + case Tid_cfg: return Key_cfg; + case Tid_atr: return Key_atr; + case Tid_bin: return Key_bin; + default: throw Err_.unhandled(v); + } + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java index 02c77f440..966abb50f 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_exec_cmd_tst.java @@ -25,8 +25,8 @@ public class Xob_diff_regy_exec_cmd_tst { fxt.Test_parse_url("/file/enwiki-001-atr.sql", "enwiki", 1, Fsdb_db_tid_.Tid_atr); } // @Test public void Smoke() { -// Xoa_app app = Xoa_app_fxt.app_(Io_url_.new_dir_("C:\\xowa\\"), "wnt"); -// Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); +// Xoae_app app = Xoa_app_fxt.app_(Io_url_.new_dir_("C:\\xowa\\"), "wnt"); +// Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); // Xob_diff_regy_make_cmd cmd = new Xob_diff_regy_make_cmd(app.Bldr(), wiki); // cmd.Cmd_run(); // } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java index 0fe9be81e..f275ca927 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_diff_regy_make_cmd.java @@ -17,8 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.engines.sqlite.*; public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_diff_regy_make_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_diff_regy_make_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.diff_regy.make"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java index 0220545c6..e3f3eb912 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_download_wkr.java @@ -23,7 +23,7 @@ public class Xob_download_wkr extends Xob_itm_basic_base implements Xob_cmd { private String dump_src = null; private Io_url dump_trg_zip = null, dump_trg_bin = null; private boolean unzip = true; - public Xob_download_wkr(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_download_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.download"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { @@ -40,7 +40,7 @@ public class Xob_download_wkr extends Xob_itm_basic_base implements Xob_cmd { } public void Cmd_run() { usr_dlg.Note_many("", "", "downloading file: now=~{0} src=~{1} trg=~{2}", DateAdp_.Now().XtoStr_fmt_yyyyMMdd_HHmmss(), dump_src, dump_trg_zip.OwnerDir()); - IoEngine_xrg_downloadFil download_wkr = app.File_mgr().Download_mgr().Download_wkr().Download_xrg(); + IoEngine_xrg_downloadFil download_wkr = app.Wmf_mgr().Download_wkr().Download_xrg(); download_wkr.Src_last_modified_query_(false).Init(dump_src, dump_trg_zip); if (!download_wkr.Exec()) usr_dlg.Warn_many("", "", "download failed: src=~{0} trg=~{1} err=~{2}", dump_src, dump_trg_zip.Raw(), Err_.Message_gplx_brief(download_wkr.Rslt_err())); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java index 7c08cfdc0..b3374c17d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java @@ -16,8 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.fsdb.*; import gplx.ios.*; import gplx.xowa.files.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.dbs.tbls.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +import gplx.xowa.wikis.*; import gplx.xowa.dbs.*; import gplx.fsdb.*; import gplx.ios.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.fsdb.data.*; import gplx.fsdb.meta.*; public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { private int select_interval = 2500, progress_interval = 1, commit_interval = 1, delete_interval = 5000; private int exec_count, exec_count_max = Int_.MaxValue; @@ -32,27 +35,26 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { private long time_bgn; private Xodb_xowa_cfg_tbl tbl_cfg; private Db_conn conn; private Db_stmt db_select_stmt; private Xof_bin_mgr src_mgr; - private Xof_fsdb_mgr_sql trg_fsdb_mgr; private Fsdb_mnt_mgr trg_mnt_mgr; - private ListAdp temp_files = ListAdp_.new_(); - private Fsdb_xtn_img_itm tmp_img_itm = new Fsdb_xtn_img_itm(); private Fsdb_xtn_thm_itm tmp_thm_itm = Fsdb_xtn_thm_itm.new_(); private Fsdb_fil_itm tmp_fil_itm = new Fsdb_fil_itm(); + private Xof_fsdb_mgr__sql trg_fsdb_mgr; private Fsm_mnt_mgr trg_mnt_mgr; + private Fsd_img_itm tmp_img_itm = new Fsd_img_itm(); private Fsd_thm_itm tmp_thm_itm = Fsd_thm_itm.new_(); private Fsd_fil_itm tmp_fil_itm = new Fsd_fil_itm(); private boolean app_restart_enabled = false; - private Xof_fsdb_mgr_sql src_fsdb_mgr; - public Xob_fsdb_make(Xob_bldr bldr, Xow_wiki wiki) { + private Xof_fsdb_mgr__sql src_fsdb_mgr; + public Xob_fsdb_make(Xob_bldr bldr, Xowe_wiki wiki) { this.Cmd_ctor(bldr, wiki); - trg_fsdb_mgr = new Xof_fsdb_mgr_sql(wiki); + trg_fsdb_mgr = new Xof_fsdb_mgr__sql(); trg_fsdb_mgr.Init_by_wiki(wiki); - src_fsdb_mgr = new Xof_fsdb_mgr_sql(wiki); + src_fsdb_mgr = new Xof_fsdb_mgr__sql(); src_fsdb_mgr.Init_by_wiki(wiki); src_mgr = src_fsdb_mgr.Bin_mgr(); trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr(); - trg_mnt_mgr.Insert_to_mnt_(Fsdb_mnt_mgr.Mnt_idx_main); // NOTE: do not delete; mnt_mgr default to Mnt_idx_user; DATE:2014-04-25 - Fsdb_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: always patch again; fsdb_make may be run separately without lnki_temp; DATE:2014-04-26 + trg_mnt_mgr.Insert_to_mnt_(Fsm_mnt_mgr.Mnt_idx_main); // NOTE: do not delete; mnt_mgr default to Mnt_idx_user; DATE:2014-04-25 + Fsm_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: always patch again; fsdb_make may be run separately without lnki_temp; DATE:2014-04-26 poll_mgr = new Xobu_poll_mgr(bldr.App()); } public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.fsdb_make"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { - ((Xof_bin_wkr_http_wmf)src_fsdb_mgr.Bin_mgr().Get_or_new(Xof_bin_wkr_.Key_http_wmf)).Fail_timeout_(1000); // NOTE: set Fail_timeout here; DATE:2014-06-21; NOTE: do not put in ctor, or else will be 1st wkr; DATE:2014-06-28 + ((Xof_bin_wkr__http_wmf)src_fsdb_mgr.Bin_mgr().Wkrs__get_or_new(Xof_bin_wkr_.Key_http_wmf)).Fail_timeout_(1000); // NOTE: set Fail_timeout here; DATE:2014-06-21; NOTE: do not put in ctor, or else will be 1st wkr; DATE:2014-06-28 this.wiki_key = wiki.Domain_bry(); wiki.Init_assert(); poll_interval = poll_mgr.Poll_interval(); @@ -201,15 +203,15 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { } } private void Download(Xodb_tbl_oimg_xfer_itm itm) { - byte[] wiki = itm.Orig_repo() == Xof_repo_itm.Repo_local ? wiki_key : Xow_wiki_.Domain_commons_bry; - itm.Orig_wiki_(wiki); + byte[] wiki = itm.Orig_repo_id() == Xof_repo_itm.Repo_local ? wiki_key : Xow_domain_.Domain_bry_commons; + itm.Orig_repo_name_(wiki); Io_stream_rdr bin_rdr = Io_stream_rdr_.Null; if ((exec_count % progress_interval) == 0) { int time_elapsed = Env_.TickCount_elapsed_in_sec(time_bgn); usr_dlg.Prog_many("", "", "prog: num=~{0} err=~{1} time=~{2} rate=~{3} page=~{4} lnki=~{5} ttl=~{6}", exec_count, exec_fail, time_elapsed, Math_.Div_safe_as_int(exec_count, time_elapsed), page_id_val, lnki_id_val, String_.new_utf8_(itm.Orig_ttl())); } try { - bin_rdr = src_mgr.Find_as_rdr(temp_files, Xof_exec_tid.Tid_wiki_page, itm); + bin_rdr = src_mgr.Find_as_rdr(Xof_exec_tid.Tid_wiki_page, itm); if (bin_rdr == Io_stream_rdr_.Null) Download_fail(itm); else { @@ -230,16 +232,16 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { int db_uid = -1; if (itm.File_is_orig()) { if (itm.Lnki_ext().Id_is_image()) { - trg_fsdb_mgr.Img_insert(tmp_img_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Orig_w(), itm.Orig_h(), Sqlite_engine_.Date_null, Fsdb_xtn_thm_tbl.Hash_null, rdr.Len(), rdr); + trg_fsdb_mgr.Mnt_mgr().Img_insert(tmp_img_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Orig_w(), itm.Orig_h(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr); db_uid = tmp_img_itm.Id(); } else { - trg_fsdb_mgr.Fil_insert(tmp_fil_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext_id(), Sqlite_engine_.Date_null, Fsdb_xtn_thm_tbl.Hash_null, rdr.Len(), rdr); + trg_fsdb_mgr.Mnt_mgr().Fil_insert(tmp_fil_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr); db_uid = tmp_fil_itm.Id(); } } else { - trg_fsdb_mgr.Thm_insert(tmp_thm_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Html_w(), itm.Html_h(), itm.Lnki_thumbtime(), itm.Lnki_page(), Sqlite_engine_.Date_null, Fsdb_xtn_thm_tbl.Hash_null, rdr.Len(), rdr); + trg_fsdb_mgr.Mnt_mgr().Thm_insert(tmp_thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext_id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Sqlite_engine_.Date_null, Fsd_thm_tbl.Hash_null, rdr.Len(), rdr); db_uid = tmp_thm_itm.Id(); } if (app.Mode() == Xoa_app_.Mode_gui) @@ -262,16 +264,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { if (exit_after_commit) exit_now = true; } - private void Delete_files() { - int len = temp_files.Count(); - for (int i = 0;i < len; i++) { - Io_url url = (Io_url)temp_files.FetchAt(i); - try {Io_mgr._.DeleteFil(url);} - catch (Exception e) { - usr_dlg.Warn_many("", "", "failed to delete temp file: idx=~{0} url=~{1} exc=~{2}", i, url.Raw(), Err_.Message_gplx(e)); - } - } - temp_files.Clear(); + private void Delete_files() {// TODO: purge /xowa/file/ dir to free up hard disk space } @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_progress_interval_)) progress_interval = m.ReadInt("v"); @@ -316,16 +309,20 @@ class Xodb_tbl_oimg_xfer_itm extends Xof_fsdb_itm { public int Lnki_id() {ret rv.lnki_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_id); rv.lnki_page_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_page_id); rv.lnki_ext_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_ext); - rv.Orig_repo_ (rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo)); - rv.File_is_orig_ (rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte); + rv.File_is_orig_ (rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte); byte[] ttl = rdr.ReadBryByStr(Xob_xfer_regy_tbl.Fld_lnki_ttl); - rv.Orig_ttl_(ttl); + rv.Ctor_by_orig + ( rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo) + , ttl + , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_w) + , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_h) + , Bry_.Empty + ); rv.Lnki_ttl_(ttl); - rv.Orig_size_(rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_h)); rv.Html_size_(rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h)); // set html_size as file_size (may try to optimize later by removing similar thumbs (EX: 220,221 -> 220)) rv.Lnki_size_(rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h)); // set lnki_size; Xof_bin_mgr uses lnki_size; rv.Lnki_page_ (Xof_doc_page.Db_load_int(rdr, Xob_xfer_regy_tbl.Fld_lnki_page)); - rv.Lnki_thumbtime_ (Xof_doc_thumb.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time)); + rv.Lnki_time_ (Xof_doc_thumb.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time)); return rv; } } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java index 11c455d87..e0021e35a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_cmd.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_lnki_regy_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_lnki_regy_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_lnki_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_regy"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java index d9acf9eda..9932183fb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_regy_tbl.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; +import gplx.dbs.engines.sqlite.*; class Xob_lnki_regy_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, boolean wiki_ns_for_file_is_case_match_all) { diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java index 80b497fc2..c43da5d38 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; +import gplx.dbs.engines.sqlite.*; class Xob_lnki_temp_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_page_id, Fld_lnki_ttl, Fld_lnki_commons_ttl, Fld_lnki_ext, Fld_lnki_type, Fld_lnki_src_tid, Fld_lnki_w, Fld_lnki_h, Fld_lnki_upright, Fld_lnki_time, Fld_lnki_page);} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java index 3e4a83bf5..3f34cdf4c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java @@ -18,17 +18,18 @@ along with this program. If not, see . package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.pages.*; import gplx.xowa.wikis.*; -import gplx.xowa.bldrs.oimgs.*; import gplx.fsdb.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.gui.*; +import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.*; import gplx.xowa.gui.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.hdumps.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*; -public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_logger { +import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*; +public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink_logger { private Db_conn conn; private Db_stmt stmt; private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump; private Xop_log_invoke_wkr invoke_wkr; private Xop_log_property_wkr property_wkr; private int[] ns_ids = Int_.Ary(Xow_ns_.Id_main);// , Xow_ns_.Id_category, Xow_ns_.Id_template - private boolean wiki_ns_file_is_case_match_all = true; private Xow_wiki commons_wiki; + private boolean wiki_ns_file_is_case_match_all = true; private Xowe_wiki commons_wiki; private Xob_hdump_bldr hdump_bldr; private long hdump_max = Io_mgr.Len_gb; - public Xob_lnki_temp_wkr(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_lnki_temp_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_temp"; @Override public byte Init_redirect() {return Bool_.N_byte;} @Override public int[] Init_ns_ary() {return ns_ids;} @@ -49,25 +50,25 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log @Override protected void Cmd_bgn_end() { wiki_ns_file_is_case_match_all = Wiki_ns_for_file_is_case_match_all(wiki); // NOTE: must call after wiki.init wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read).Ctgs_enabled_(false); // disable categories else progress messages written (also for PERF) - commons_wiki = app.Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry); + commons_wiki = app.Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons); Xop_log_mgr log_mgr = ctx.App().Log_mgr(); log_mgr.Log_dir_(wiki.Fsys_mgr().Root_dir()); // put log in wiki dir, instead of user.temp invoke_wkr = this.Invoke_wkr(); // set member reference invoke_wkr = log_mgr.Make_wkr_invoke(); property_wkr = this.Property_wkr(); // set member reference property_wkr = log_mgr.Make_wkr_property(); - wiki.App().Wiki_mgr().Wdata_mgr().Enabled_(wdata_enabled); + wiki.Appe().Wiki_mgr().Wdata_mgr().Enabled_(wdata_enabled); if (!xtn_ref_enabled) gplx.xowa.xtns.cite.References_nde.Enabled = false; gplx.xowa.xtns.gallery.Gallery_xnde.Log_wkr = log_mgr.Make_wkr().Save_src_str_(Bool_.Y); gplx.xowa.xtns.imaps.Imap_xnde.Log_wkr = log_mgr.Make_wkr(); gplx.xowa.Xop_xnde_wkr.Timeline_log_wkr = log_mgr.Make_wkr(); gplx.xowa.xtns.scores.Score_xnde.Log_wkr = log_mgr.Make_wkr(); gplx.xowa.xtns.hieros.Hiero_xnde.Log_wkr = log_mgr.Make_wkr(); - Xof_fsdb_mgr_sql trg_fsdb_mgr = new Xof_fsdb_mgr_sql(wiki); + Xof_fsdb_mgr__sql trg_fsdb_mgr = new Xof_fsdb_mgr__sql(); trg_fsdb_mgr.Init_by_wiki(wiki); - Fsdb_mnt_mgr trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr(); - trg_mnt_mgr.Insert_to_mnt_(Fsdb_mnt_mgr.Mnt_idx_main); - Fsdb_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: see fsdb_make; DATE:2014-04-26 + Fsm_mnt_mgr trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr(); + trg_mnt_mgr.Insert_to_mnt_(Fsm_mnt_mgr.Mnt_idx_main); + Fsm_mnt_mgr.Patch(trg_mnt_mgr); // NOTE: see fsdb_make; DATE:2014-04-26 if (gen_hdump) { hdump_bldr = new Xob_hdump_bldr(wiki.Db_mgr_as_sql(), conn, hdump_max); hdump_bldr.Bld_init(); @@ -80,10 +81,10 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log byte[] ttl_bry = ttl.Page_db(); byte page_tid = Xow_page_tid.Identify(wiki.Domain_tid(), ns.Id(), ttl_bry); if (page_tid != Xow_page_tid.Tid_wikitext) return; // ignore js, css, lua, json - Xoa_page page = ctx.Cur_page(); + Xoae_page page = ctx.Cur_page(); page.Clear(); page.Ttl_(ttl).Revision_data().Id_(db_page.Id()); - page.Lnki_redlinks_mgr().Clear(); + page.Redlink_lnki_list().Clear(); if (ns.Id_tmpl()) parser.Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), wiki.Ns_mgr().Ns_template(), ttl_bry, page_src); else { @@ -106,7 +107,8 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log } @Override public void Exec_end_hook() { if (gen_hdump) hdump_bldr.Bld_term(); - wiki.App().Log_mgr().Txn_end(); + Gfo_usr_dlg_._.Warn_many("", "", invoke_wkr.Err_filter_mgr().Print()); + wiki.Appe().Log_mgr().Txn_end(); conn.Txn_mgr().Txn_end(); } public void Wkr_exec(Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte lnki_src_tid) { @@ -148,25 +150,25 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xop_lnki_log if (property_wkr == null) property_wkr = bldr.App().Wiki_mgr().Wdata_mgr().Property_wkr_or_new(); return property_wkr; } - public static byte[] Xto_commons(boolean wiki_ns_file_is_case_match_all, Xow_wiki commons_wiki, byte[] ttl_bry) { + public static byte[] Xto_commons(boolean wiki_ns_file_is_case_match_all, Xowe_wiki commons_wiki, byte[] ttl_bry) { if (!wiki_ns_file_is_case_match_all) return null; // return "" if wiki matches common Xoa_ttl ttl = Xoa_ttl.parse_(commons_wiki, Xow_ns_.Id_file, ttl_bry); byte[] rv = ttl.Page_db(); return Bry_.Eq(rv, ttl_bry) ? null : rv; } - public static boolean Wiki_ns_for_file_is_case_match_all(Xow_wiki wiki) { + public static boolean Wiki_ns_for_file_is_case_match_all(Xowe_wiki wiki) { return wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all; } } class Xob_lnki_temp_wkr_ { - public static int[] Ns_ids_by_aliases(Xow_wiki wiki, String[] aliases) { + public static int[] Ns_ids_by_aliases(Xowe_wiki wiki, String[] aliases) { int[] rv = Xob_lnki_temp_wkr_.Ids_by_aliases(wiki.Ns_mgr(), aliases); int aliases_len = aliases.length; int ids_len = rv.length; for (int i = 0; i < aliases_len; i++) { String alias = aliases[i]; int id = i < ids_len ? rv[i] : -1; - wiki.App().Usr_dlg().Note_many("", "", "ns: ~{0} <- ~{1}", Int_.Xto_str_fmt(id, "0000"), alias); + wiki.Appe().Usr_dlg().Note_many("", "", "ns: ~{0} <- ~{1}", Int_.Xto_str_fmt(id, "0000"), alias); } if (aliases_len != ids_len) throw Err_.new_fmt_("mismatch in aliases and ids: {0} vs {1}", aliases_len, ids_len); return rv; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java index ff5d61f8e..84ee81769 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr_tst.java @@ -31,9 +31,9 @@ public class Xob_lnki_temp_wkr_tst { } class Xob_lnki_temp_wkr_fxt { private boolean wiki_ns_file_is_case_match_all; - private Xow_wiki commons_wiki; + private Xowe_wiki commons_wiki; public Xob_lnki_temp_wkr_fxt Init_Xto_commons(boolean wiki_ns_file_is_case_match_all) { - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); this.wiki_ns_file_is_case_match_all = wiki_ns_file_is_case_match_all; this.commons_wiki = Xoa_app_fxt.wiki_tst_(app); // commons_wiki will default to Xow_ns.Id_file of case_match_1st return this; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java index 95af1f0af..b315ac1f7 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.qrys.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.origs.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_orig_qry_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_orig_qry_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "oimg.orig_qry"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { -// Xof_qry_mgr qry_mgr = new Xof_qry_mgr(); +// Xof_orig_mgr qry_mgr = new Xof_orig_mgr(); Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn(); Xob_bmk_mgr bmk = new Xob_bmk_mgr(); bmk.Init(conn, this.Cmd_key(), true, false, true); @@ -53,12 +53,12 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd { } public DataRdr Select(Db_conn p, byte prv_repo_id, byte[] prv_ttl) { String sql = String_.Concat_lines_nl_skip_last - ( "SELECT lnki_ttl" - , "FROM orig_regy" - , "WHERE lnki_repo >= '" + Byte_.Xto_str(prv_repo_id) + "'" - , "AND lnki_ttl > '" + prv_ttl + "'" - , "AND oimg_orig_page_id = -1;" - ); + ( "SELECT lnki_ttl" + , "FROM orig_regy" + , "WHERE lnki_repo >= '" + Byte_.Xto_str(prv_repo_id) + "'" + , "AND lnki_ttl > '" + prv_ttl + "'" + , "AND oimg_orig_page_id = -1;" + ); Db_qry select_qry = Db_qry_sql.rdr_(sql); return p.Exec_qry_as_rdr(select_qry); } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java index 0bdb10bb0..872669ec6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_cmd.java @@ -16,17 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd { private boolean repo_0_is_remote = false; - public Xob_orig_regy_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_orig_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.orig_regy"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { Db_conn conn = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Conn(); Xob_orig_regy_tbl.Create_table(conn); - Xow_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry).Init_assert(); - Xow_wiki repo_0 = wiki, repo_1 = commons_wiki; + Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons).Init_assert(); + Xowe_wiki repo_0 = wiki, repo_1 = commons_wiki; if (repo_0_is_remote) { // NOTE: default is false; local_wiki will be preferred over commons_wiki repo_0 = commons_wiki; repo_1 = wiki; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java index 95fcdc154..dfbe3e5af 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_regy_tbl.java @@ -16,10 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.repos.*; +import gplx.dbs.engines.sqlite.*; class Xob_orig_regy_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} - public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, Xodb_db_file file_registry_db, boolean repo_0_is_remote, Xow_wiki repo_0_wiki, Xow_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) { + public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, Xodb_db_file file_registry_db, boolean repo_0_is_remote, Xowe_wiki repo_0_wiki, Xowe_wiki repo_1_wiki, boolean wiki_ns_for_file_is_case_match_all) { usr_dlg.Prog_many("", "", "inserting lnki_regy"); p.Exec_sql(Sql_create_data); Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_ttl_local); @@ -27,9 +28,9 @@ class Xob_orig_regy_tbl { Io_url repo_0_dir = repo_0_wiki.Fsys_mgr().Root_dir(), repo_1_dir = repo_1_wiki.Fsys_mgr().Root_dir(); byte repo_0_tid = Xof_repo_itm.Repo_local, repo_1_tid = Xof_repo_itm.Repo_remote; boolean local_is_remote = Bry_.Eq(repo_0_wiki.Domain_bry(), repo_1_wiki.Domain_bry()); - Xow_wiki local_wiki = repo_0_wiki; + Xowe_wiki local_wiki = repo_0_wiki; if ( repo_0_is_remote // .gfs manually marked specifes repo_0 as remote - || ( Bry_.Eq(repo_0_wiki.Domain_bry(), Xow_wiki_.Domain_commons_bry) // repo_0 = commons; force repo_0 to be remote; else all orig_repo will be 1; DATE:2014-02-01 + || ( Bry_.Eq(repo_0_wiki.Domain_bry(), Xow_domain_.Domain_bry_commons) // repo_0 = commons; force repo_0 to be remote; else all orig_repo will be 1; DATE:2014-02-01 && local_is_remote // repo_0 = repo_1 ) ) { @@ -48,7 +49,7 @@ class Xob_orig_regy_tbl { Sqlite_engine_.Db_detach(p, "page_db"); Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_xfer_temp); } - private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_conn cur, Xow_wiki local_wiki, byte repo_tid, Io_url join) { + private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_conn cur, Xowe_wiki local_wiki, byte repo_tid, Io_url join) { usr_dlg.Note_many("", "", "inserting page for xowa.wiki.image: ~{0}", join.OwnerDir().NameOnly()); boolean wiki_has_cs_file = repo_tid == Xof_repo_itm.Repo_remote && local_wiki.Ns_mgr().Ns_file().Case_match() == Xow_ns_case_.Id_all; String lnki_ttl_fld = wiki_has_cs_file ? "Coalesce(o.lnki_commons_ttl, o.lnki_ttl)" : "o.lnki_ttl"; // NOTE: use lnki_commons_ttl if [[File]] is cs PAGE:en.d:water EX:[[image:wikiquote-logo.png|50px|none|alt=]]; DATE:2014-09-05 @@ -59,7 +60,7 @@ class Xob_orig_regy_tbl { cur.Exec_sql(String_.Format(Sql_update_repo_redirect, repo_tid, lnki_ttl_fld)); Sqlite_engine_.Db_detach(cur, "image_db"); } - private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_conn p, Xow_wiki local_wiki, Io_url repo_remote_dir) { + private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_conn p, Xowe_wiki local_wiki, Io_url repo_remote_dir) { p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_mark_dupes); // orig_regy: find dupes; see note in SQL p.Exec_sql(Xob_orig_regy_tbl.Sql_cs_update_ttls); // orig_regy: update lnki_ttl with lnki_commons_ttl Create_data_for_repo(usr_dlg, p, local_wiki, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java index 7147e7595..6452228da 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_cmd.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.xowa.wikis.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.repos.*; public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_page_regy_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_page_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} private boolean build_commons = false; public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.page_regy"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { - Xow_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry).Init_assert(); + Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons).Init_assert(); Db_conn page_regy_provider = Xodb_db_file.init__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn(); commons_wiki.Init_assert(); if (build_commons) { diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java index 6964271b3..1e194839c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java @@ -16,10 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.xowa.files.repos.*; class Xob_page_regy_tbl { public static void Reset_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} - public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, byte repo_tid, Xow_wiki wiki) { + public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, byte repo_tid, Xowe_wiki wiki) { Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Fsys_mgr().Get_url(Xodb_file_tid.Tid_core)); Create_data__insert_redirect(usr_dlg, p, repo_tid, wiki.Fsys_mgr().Root_dir().GenSubFil(Xodb_db_file.Name__wiki_redirect)); } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java index ff6bd59ef..dec2da665 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_unzip_wkr.java @@ -20,7 +20,7 @@ public class Xob_unzip_wkr { private ProcessAdp decompress_bz2, decompress_zip, decompress_gz, process; public int Process_exit_code() {return process.Exit_code();} public byte Process_run_mode() {return process_run_mode;} public Xob_unzip_wkr Process_run_mode_(byte v) {process_run_mode = v; return this;} private byte process_run_mode = ProcessAdp.Run_mode_async; - public Xob_unzip_wkr Init(Xoa_app app) {return Init(app.Launcher().App_decompress_bz2(), app.Launcher().App_decompress_zip(), app.Launcher().App_decompress_gz());} + public Xob_unzip_wkr Init(Xoae_app app) {return Init(app.Prog_mgr().App_decompress_bz2(), app.Prog_mgr().App_decompress_zip(), app.Prog_mgr().App_decompress_gz());} public Xob_unzip_wkr Init(ProcessAdp decompress_bz2, ProcessAdp decompress_zip, ProcessAdp decompress_gz) { this.decompress_bz2 = decompress_bz2; this.decompress_zip = decompress_zip; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java index 8c9e3df83..8591c0a67 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_cmd.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_xfer_regy_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_xfer_regy_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_xfer_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_regy"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java index f2f62f058..d36f8b54e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_xfer_regy_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p) { @@ -33,7 +33,7 @@ public class Xob_xfer_regy_tbl { ; return p.Exec_qry_as_rdr(qry); } - public static Db_stmt Select_by_page_id_stmt(Db_conn p) {return p.New_stmt(Db_qry_sql.rdr_(Sql_select));} + public static Db_stmt Select_by_page_id_stmt(Db_conn p) {return p.Stmt_new(Db_qry_sql.rdr_(Sql_select));} public static DataRdr Select_by_page_id(Db_stmt stmt, int page_id, int limit) {return stmt.Val_int(page_id).Val_int(limit).Exec_select();} private static final String Sql_select = String_.Concat_lines_nl diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java index 0ecb48194..d538e15a6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_regy_update_cmd.java @@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_xfer_regy_update_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_xfer_regy_update_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_regy_update"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -32,13 +33,13 @@ public class Xob_xfer_regy_update_cmd extends Xob_itm_basic_base implements Xob_ } private void Copy_atrs_to_make_db(Db_conn make_db_provider) { wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); - Fsdb_db_abc_mgr fsdb_abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Abc_mgr_at(0); // 0 = fsdb.main + Fsm_abc_mgr fsdb_abc_mgr = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0); // 0 = fsdb.main Io_url fsdb_atr_url = fsdb_abc_mgr.Atr_mgr().Get_at(0).Url(); // 0 = fsdb.atr.00 Sqlite_engine_.Tbl_create_and_delete(make_db_provider, Xob_fsdb_regy_tbl.Tbl_name, Xob_fsdb_regy_tbl.Tbl_sql); Sqlite_engine_.Db_attach(make_db_provider, "fsdb_db", fsdb_atr_url.Raw()); make_db_provider.Txn_mgr().Txn_bgn(); make_db_provider.Exec_sql(Xob_fsdb_regy_tbl.Insert_fsdb_fil); - String insert_sql_fsdb_thm = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Abc_mgr_at(0).Cfg_mgr().Schema_thm_page() // Cfg_get(Fsdb_cfg_mgr.Grp_core).Get_yn_or_n(Fsdb_cfg_mgr.Key_schema_thm_page) + String insert_sql_fsdb_thm = wiki.File_mgr().Fsdb_mgr().Mnt_mgr().Mnts__at(0).Cfg_mgr().Schema_thm_page() // Cfg_get(Fsm_cfg_mgr.Grp_core).Get_yn_or_n(Fsm_cfg_mgr.Key_schema_thm_page) ? Xob_fsdb_regy_tbl.Insert_fsdb_thm : Xob_fsdb_regy_tbl.Insert_fsdb_thm_v0 ; diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java index 60b1f069a..ced767021 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java @@ -16,10 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.xowa.dbs.*; +import gplx.xowa.files.*; import gplx.xowa.files.exts.*; +import gplx.xowa.bldrs.oimgs.*; public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cmd { private byte[] ext_rules_key = Bry_.Empty; - public Xob_xfer_temp_cmd_orig(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_xfer_temp_cmd_orig(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.orig"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { @@ -58,11 +60,11 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm conn.Txn_mgr().Txn_end_all(); } private long[] Calc_ext_max() { - Xoft_rule_grp ext_rules = wiki.App().File_mgr().Ext_rules().Get_or_new(ext_rules_key); + Xof_rule_grp ext_rules = wiki.Appe().File_mgr().Ext_rules().Get_or_new(ext_rules_key); long[] rv = new long[Xof_ext_.Id__max]; for (int i = 0; i < Xof_ext_.Id__max; i++) { byte[] ext = Xof_ext_.Get_ext_by_id_(i); - Xoft_rule_itm ext_rule = ext_rules.Get_or_null(ext); + Xof_rule_itm ext_rule = ext_rules.Get_or_null(ext); long max = ext_rule == null ? 0 : ext_rule.Make_max(); rv[i] = max; } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java index 8ed68dd74..7cd9061f5 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_thumb.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_xfer_temp_cmd_thumb extends Xob_itm_basic_base implements Xob_cmd { - public Xob_xfer_temp_cmd_thumb(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_xfer_temp_cmd_thumb(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.xfer_temp.thumb"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java index da82cbc92..2aa736630 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import org.junit.*; -import gplx.stores.*; import gplx.xowa.files.*; +import gplx.stores.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; public class Xob_xfer_temp_itm_tst { private Xob_xfer_temp_itm_fxt fxt = new Xob_xfer_temp_itm_fxt(); @Before public void init() {fxt.Reset();} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java index 546b2e909..6d524d9b0 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; class Xob_xfer_temp_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_lnki_id, Fld_lnki_page_id, Fld_orig_repo, Fld_orig_page_id, Fld_lnki_ttl, Fld_orig_redirect_src, Fld_lnki_ext, Fld_lnki_type, Fld_orig_media_type, Fld_file_is_orig, Fld_orig_w, Fld_orig_h, Fld_file_w, Fld_file_h, Fld_html_w, Fld_html_h, Fld_lnki_time, Fld_lnki_page, Fld_lnki_count);} diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java b/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java index 845e52744..f439086d8 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xobu_poll_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; public class Xobu_poll_mgr implements GfoInvkAble { - public Xobu_poll_mgr(Xoa_app app) {this.app = app;} private Xoa_app app; + public Xobu_poll_mgr(Xoae_app app) {this.app = app;} private Xoae_app app; public int Poll_interval() {return poll_interval;} private int poll_interval = 1000; private Io_url poll_file; public void Poll() { diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr.java new file mode 100644 index 000000000..910f4f245 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr.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.bldrs.filters.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.xowa.wikis.ttls.*; +public class Xob_ttl_filter_mgr { + private boolean exclude_is_empty = true, include_is_empty = true; + private final Xob_ttl_filter_mgr_srl srl = new Xob_ttl_filter_mgr_srl(); + private Hash_adp_bry exclude_hash = Hash_adp_bry.cs_(), include_hash = Hash_adp_bry.cs_(); + public void Clear() { + exclude_hash.Clear(); + include_hash.Clear(); + exclude_is_empty = include_is_empty = true; + } + public boolean Match_include(byte[] src) {return include_is_empty ? false : include_hash.Has(src);} + public boolean Match_exclude(byte[] src) {return exclude_is_empty ? false : exclude_hash.Has(src);} + public void Load(boolean exclude, Io_url url) { + byte[] src = Io_mgr._.LoadFilBry_loose(url); + if (Bry_.Len_gt_0(src)) Load(exclude, src); + } + public void Load(boolean exclude, byte[] src) { + Hash_adp_bry hash = exclude ? exclude_hash : include_hash; + srl.Init(hash).Load_by_bry(src); + if (exclude) + exclude_is_empty = exclude_hash.Count() == 0; + else + include_is_empty = include_hash.Count() == 0; + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl.java b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl.java new file mode 100644 index 000000000..622e50bbb --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl.java @@ -0,0 +1,39 @@ +/* +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.bldrs.filters.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.srls.dsvs.*; +class Xob_ttl_filter_mgr_srl extends Dsv_wkr_base { + private byte[] ttl; private Hash_adp_bry hash; + public Xob_ttl_filter_mgr_srl Init(Hash_adp_bry hash) {this.hash = hash; return this;} + @Override public Dsv_fld_parser[] Fld_parsers() {return new Dsv_fld_parser[] {Dsv_fld_parser_.Line_parser__comment_is_pipe};} + @Override public boolean Write_bry(Dsv_tbl_parser parser, int fld_idx, byte[] src, int bgn, int end) { + switch (fld_idx) { + case 0: + if (end - bgn == 0) return true; // ignore blank lines + if (src[bgn] == Byte_ascii.Pipe) return true; // ignore lines starting with pipe; EX: "| some comment" + ttl = Bry_.Mid(src, bgn, end); + return true; + default: return false; + } + } + @Override public void Commit_itm(Dsv_tbl_parser parser, int pos) { + if (ttl == null) return; + hash.Add(ttl, ttl); + ttl = null; + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl_tst.java b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl_tst.java new file mode 100644 index 000000000..b103b77e1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_srl_tst.java @@ -0,0 +1,54 @@ +/* +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.bldrs.filters.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import org.junit.*; +public class Xob_ttl_filter_mgr_srl_tst { + @Before public void init() {fxt.Clear();} private final Xob_ttl_filter_mgr_srl_fxt fxt = new Xob_ttl_filter_mgr_srl_fxt(); + @Test public void One() {fxt.Test_parse("a" , 1, "a");} + @Test public void Two() {fxt.Test_parse("a\nb" , 2, "a", "b");} + @Test public void Comment() {fxt.Test_parse("|x" , 0);} + @Test public void Comment_many() {fxt.Test_parse("|x||" , 0);} + @Test public void Blank() {fxt.Test_parse("\n" , 0);} + @Test public void Mix() { + fxt.Test_parse(String_.Concat_lines_nl_skip_last + ( "|comment 1" + , "a" + , "" + , "|comment 2" + , "b" + ) + , 2, "a", "b") + ;} +} +class Xob_ttl_filter_mgr_srl_fxt { + private final Xob_ttl_filter_mgr_srl mgr = new Xob_ttl_filter_mgr_srl(); + private final Hash_adp_bry hash = Hash_adp_bry.cs_(); + public void Clear() { + hash.Clear(); + } + public void Test_parse(String src, int expd_count, String... expd_itms) { + mgr.Init(hash); + mgr.Load_by_bry(Bry_.new_utf8_(src)); + Tfds.Eq(expd_count, hash.Count()); + int expd_len = expd_itms.length; + for (int i = 0; i < expd_len; ++i) { + String expd_itm = expd_itms[i]; + Tfds.Eq_true(hash.Has(Bry_.new_utf8_(expd_itm))); + } + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_tst.java b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_tst.java new file mode 100644 index 000000000..8542815d6 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/core/Xob_ttl_filter_mgr_tst.java @@ -0,0 +1,51 @@ +/* +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.bldrs.filters.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import org.junit.*; +public class Xob_ttl_filter_mgr_tst { + @Before public void init() {fxt.Clear();} private final Xob_ttl_filter_mgr_fxt fxt = new Xob_ttl_filter_mgr_fxt(); + @Test public void One() { + fxt.Init_load_exclude("A"); + fxt.Init_load_include("B"); + fxt.Test_match_exclude_y("A"); + fxt.Test_match_exclude_n("B", "C"); + fxt.Test_match_include_y("B"); + fxt.Test_match_include_n("A", "C"); + } +} +class Xob_ttl_filter_mgr_fxt { + private final Xob_ttl_filter_mgr mgr = new Xob_ttl_filter_mgr(); + public void Clear() { + mgr.Clear(); + } + public void Init_load_exclude(String itm) {mgr.Load(Bool_.Y, Bry_.new_utf8_(itm));} + public void Init_load_include(String itm) {mgr.Load(Bool_.N, Bry_.new_utf8_(itm));} + public void Test_match_exclude_y(String... itms) {Test_match(Bool_.Y, Bool_.Y, itms);} + public void Test_match_exclude_n(String... itms) {Test_match(Bool_.Y, Bool_.N, itms);} + public void Test_match_include_y(String... itms) {Test_match(Bool_.N, Bool_.Y, itms);} + public void Test_match_include_n(String... itms) {Test_match(Bool_.N, Bool_.N, itms);} + private void Test_match(boolean exclude, boolean expd, String... itms) { + for (String itm : itms) { + byte[] itm_bry = Bry_.new_utf8_(itm); + if (exclude) + Tfds.Eq(expd, mgr.Match_exclude(itm_bry), itm); + else + Tfds.Eq(expd, mgr.Match_include(itm_bry), itm); + } + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Crt__match_base.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Crt__match_base.java new file mode 100644 index 000000000..6bafdd312 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Crt__match_base.java @@ -0,0 +1,47 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.core.criterias.*; +class Crt__match_exact implements Criteria { + public Crt__match_exact(boolean negated, byte[][] ary) {this.negated = negated; Val_as_bry_ary_(ary);} + public byte Tid() {return Tid_match_exact;} + public String To_str_name() {return "MATCH_EXACT";} + public boolean Matches(Object comp_obj) { + if (ary_len == 0) return false; // empty array never matches + byte[] comp = (byte[])comp_obj; + boolean rv = false; + for (int i = 0; i < ary_len; i++) { + byte[] val = ary[i]; + if (Bry_.Eq(val, comp)) { + rv = true; + break; + } + } + return negated ? !rv : rv; + } + public boolean Negated() {return negated;} private boolean negated; + public byte[][] Val_as_bry_ary() {return ary;} protected byte[][] ary; protected int ary_len; + protected void Val_as_bry_ary_(byte[][] v) { + this.ary = v; + ary_len = v.length; + } + public void Val_as_obj_(Object v) {Val_as_bry_ary_((byte[][])v);} + public void Val_from_args(HashAdp args) {throw Err_.not_implemented_();} + public String XtoStr() {return String_.Concat_any(this.To_str_name(), " ", String_.Ary(ary));} + public byte Tid_match_exact = 12; +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_file.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_file.java new file mode 100644 index 000000000..5821e81d7 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_file.java @@ -0,0 +1,85 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.core.primitives.*; +class Dg_file { + public Dg_file(int id, String rel_path, Dg_rule[] lines) {this.id = id; this.rel_path = rel_path; this.lines = lines;} + public int Id() {return id;} private final int id; + public String Rel_path() {return rel_path;} private final String rel_path; // EX: goodphrases/weighted_general + public Dg_rule[] Lines() {return lines;} private final Dg_rule[] lines; +} +class Dg_rule {// EX: < wikipedia ><-30> + private final Hash_adp_bry word_idx_hash = Hash_adp_bry.cs_(); + public Dg_rule(int file_id, int id, int idx, int tid, byte[] key, int score, Dg_word[] words) { + this.file_id = file_id; + this.id = id; this.idx = idx; this.tid = tid; this.key = key; this.score = score; this.words = words; + if (words != null) { // static rules will have null byte[][] + int words_len = words.length; + for (int i = 0; i < words_len; ++i) { + Dg_word word = words[i]; + word_idx_hash.Add_bry_obj(word.Raw(), Int_obj_ref.new_(i)); + } + } + } + public int File_id() {return file_id;} private final int file_id; + public int Id() {return id;} private final int id; + public int Idx() {return idx;} private final int idx; + public int Tid() {return tid;} private final int tid; + public byte[] Key() {return key;} private final byte[] key; + public Dg_word[] Words() {return words;} private final Dg_word[] words; + public Hash_adp_bry Word_idx_hash() {return word_idx_hash;} + public int Score() {return score;} private final int score; + public static final int + Tid_rule = 0 + , Tid_comment = 1 + , Tid_blank = 3 + , Tid_invalid = 4 + ; + public static final Dg_rule + Itm_comment = new Dg_rule(-1, -1, -1, Tid_comment, null, -1, null) + , Itm_blank = new Dg_rule(-1, -1, -1, Tid_blank, null, -1, null) + , Itm_invalid = new Dg_rule(-1, -1, -1, Tid_invalid, null, -1, null) + ; + public static final int Score_banned = 0; +} +class Dg_word { + public Dg_word(byte[] raw) {this.raw = raw;} + public byte[] Raw() {return raw;} private final byte[] raw; + public static String Ary_concat(Dg_word[] ary, Bry_bfr bfr, byte dlm) { + if (ary == null) return String_.Empty; + int len = ary.length; + if (len == 0) return String_.Empty; + bfr.Add_byte_apos(); + for (int i = 0; i < len; ++i) { + Dg_word itm = ary[i]; + if (i != 0) bfr.Add_byte(dlm); + bfr.Add(itm.Raw()); + } + bfr.Add_byte_apos(); + return bfr.Xto_str_and_clear(); + } + public static Dg_word[] Ary_new_by_str_ary(String[] ary) { + int ary_len = ary.length; + Dg_word[] rv = new Dg_word[ary_len]; + for (int i = 0; i < ary_len; ++i) { + String raw = ary[i]; + rv[i] = new Dg_word(Bry_.new_utf8_(raw)); + } + return rv; + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java new file mode 100644 index 000000000..7a35009c3 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_log_mgr.java @@ -0,0 +1,164 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.dbs.*; +class Dg_log_mgr { + private Db_conn conn; + private final Dg_file_tbl tbl_file = new Dg_file_tbl(); + private final Dg_rule_tbl tbl_rule = new Dg_rule_tbl(); + private final Dg_page_score_tbl tbl_page_score = new Dg_page_score_tbl(); + private final Dg_page_rule_tbl tbl_page_rule = new Dg_page_rule_tbl(); + private final Bry_bfr tmp_bfr = Bry_bfr.reset_(16); + public void Init(Io_url db_url) { + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", db_url); + conn = conn_data.Conn(); boolean created = conn_data.Created(); + tbl_file.Conn_(conn, created); + tbl_rule.Conn_(conn, created); + tbl_page_score.Conn_(conn, created); + tbl_page_rule.Conn_(conn, created); + conn.Txn_mgr().Txn_bgn(); + } + public void Insert_file(Dg_file file) {tbl_file.Insert(file.Id(), file.Rel_path(), file.Lines().length);} + public void Insert_rule(Dg_rule rule) {tbl_rule.Insert(rule.File_id(), rule.Id(), rule.Idx(), rule.Score(), Dg_word.Ary_concat(rule.Words(), tmp_bfr, Byte_ascii.Tilde));} + public void Insert_page_score(int log_tid, int page_id, int page_ns, byte[] page_ttl, int page_len, int page_score, int page_rule_count, int clude_type) { + tbl_page_score.Insert(log_tid, page_id, page_ns, page_ttl, page_len, page_score, page_rule_count, clude_type); + } + public void Insert_page_rule(int log_tid, int page_id, int rule_id, int rule_score_total) {tbl_page_rule.Insert(log_tid, page_id, rule_id, rule_score_total);} + public void Commit() {conn.Txn_mgr().Txn_end_all_bgn_if_none();} + public void Rls() {conn.Txn_mgr().Txn_end_all();} +} +class Dg_file_tbl { + private String tbl_name = "dg_file"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_file_id, fld_file_path, fld_rule_count; + private Db_conn conn; private Db_stmt stmt_insert; + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_file_id = flds.Add_int("file_id"); + fld_file_path = flds.Add_str("file_path", 512); + fld_rule_count = flds.Add_int("rule_count"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "file_id", fld_file_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + } + public void Insert(int file_id, String file_path, int rule_count) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_file_id , file_id) + .Val_str(fld_file_path , file_path) + .Val_int(fld_rule_count , rule_count) + .Exec_insert(); + } +} +class Dg_rule_tbl { + private String tbl_name = "dg_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_file_id, fld_rule_id, fld_rule_idx, fld_rule_score, fld_rule_text; + private Db_conn conn; private Db_stmt stmt_insert; + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_file_id = flds.Add_int("file_id"); + fld_rule_id = flds.Add_int("rule_id"); + fld_rule_idx = flds.Add_int("rule_idx"); + fld_rule_score = flds.Add_int("rule_score"); + fld_rule_text = flds.Add_str("rule_text", 1024); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + } + public void Insert(int file_id, int rule_id, int rule_idx, int rule_score, String rule_text) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_file_id , file_id) + .Val_int(fld_rule_id , rule_id) + .Val_int(fld_rule_idx , rule_idx) + .Val_int(fld_rule_score , rule_score) + .Val_str(fld_rule_text , rule_text) + .Exec_insert(); + } +} +class Dg_page_score_tbl { + private String tbl_name = "dg_page_score"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_log_tid, fld_page_id, fld_page_ns, fld_page_ttl, fld_page_len, fld_page_score, fld_page_rule_count, fld_clude_type; + private Db_conn conn; private Db_stmt stmt_insert; + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_log_tid = flds.Add_int("log_tid"); // title or text + fld_page_id = flds.Add_int("page_id"); + fld_page_ns = flds.Add_int("page_ns"); + fld_page_ttl = flds.Add_int("page_ttl"); + fld_page_len = flds.Add_int("page_len"); + fld_page_score = flds.Add_int("page_score"); + fld_page_rule_count = flds.Add_int("page_rule_count"); + fld_clude_type = flds.Add_int("page_clude_type"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + } + public void Insert(int log_tid, int page_id, int page_ns, byte[] page_ttl, int page_len, int page_score, int page_rule_count, int clude_type) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_log_tid , log_tid) + .Val_int(fld_page_id , page_id) + .Val_int(fld_page_ns , page_ns) + .Val_bry_as_str(fld_page_ttl, page_ttl) + .Val_int(fld_page_len , page_len) + .Val_int(fld_page_score , page_score) + .Val_int(fld_page_rule_count, page_rule_count) + .Val_int(fld_clude_type , clude_type) + .Exec_insert(); + } +} +class Dg_page_rule_tbl { + private String tbl_name = "dg_page_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_log_tid, fld_page_id, fld_rule_id, fld_rule_score_total; + private Db_conn conn; private Db_stmt stmt_insert; + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_log_tid = flds.Add_int("log_tid"); // title or text + fld_page_id = flds.Add_int("page_id"); + fld_rule_id = flds.Add_int("rule_id"); + fld_rule_score_total = flds.Add_int("rule_score_total"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + } + public void Insert(int log_tid, int page_id, int rule_id, int rule_score_total) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_log_tid , log_tid) + .Val_int(fld_page_id , page_id) + .Val_int(fld_rule_id , rule_id) + .Val_int(fld_rule_score_total , rule_score_total) + .Exec_insert(); + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java new file mode 100644 index 000000000..500bbbf3d --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java @@ -0,0 +1,164 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import gplx.core.primitives.*; import gplx.core.btries.*; +import gplx.xowa.bldrs.filters.core.*; +public class Dg_match_mgr { + private int score_init, score_fail; private boolean log_enabled, case_match; + private final Btrie_slim_mgr btrie = Btrie_slim_mgr.cs_(); + private final OrderedHash rules = OrderedHash_.new_bry_(); + private final OrderedHash rule_group_hash = OrderedHash_.new_bry_(), rule_tally_hash = OrderedHash_.new_bry_(); + private final Dg_parser parser = new Dg_parser(); + private final Xob_ttl_filter_mgr ttl_filter_mgr = new Xob_ttl_filter_mgr(); + private final Dg_log_mgr log_mgr = new Dg_log_mgr(); + public Dg_match_mgr(Io_url root_dir, int score_init, int score_fail, boolean case_match, boolean log_enabled, Io_url log_url) { + this.score_init = score_init; this.score_fail = score_fail; this.case_match = case_match; this.log_enabled = log_enabled; + if (log_enabled) log_mgr.Init(log_url); + ttl_filter_mgr.Load(Bool_.N, root_dir.GenSubFil("xowa.title.include.txt")); + ttl_filter_mgr.Load(Bool_.Y, root_dir.GenSubFil("xowa.title.exclude.txt")); + Io_url dg_root_url = root_dir.GenSubDir("dansguardian"); + Dg_file[] files = parser.Parse_dir(dg_root_url); Gfo_usr_dlg_._.Plog_many("", "", "import.dg.rules: url=~{0} files=~{1}", dg_root_url, files.length); + Init_by_files(files); + if (log_enabled) log_mgr.Commit(); + } + public void Clear() { + btrie.Clear(); + rules.Clear(); + rule_group_hash.Clear(); + rule_tally_hash.Clear(); + } + private void Init_by_files(Dg_file[] files) { + for (Dg_file file : files) { + Dg_rule[] rules = file.Lines(); + if (log_enabled) log_mgr.Insert_file(file); + for (Dg_rule rule : rules) + Init_by_rule(rule); + } + } + @gplx.Internal protected void Init_by_rule(Dg_rule rule) { + if (rule.Tid() != Dg_rule.Tid_rule) return; + if (log_enabled) log_mgr.Insert_rule(rule); + Dg_word[] words = rule.Words(); + for (Dg_word word : words) { + Dg_rule_group rule_group = Get_rule_group_or_new(word.Raw()); + rule_group.Rules_list().Add(rule); + btrie.Add_obj(word.Raw(), rule_group); + } + } + private Dg_rule_group Get_rule_group_or_new(byte[] word) { + Dg_rule_group rv = (Dg_rule_group)rule_group_hash.Fetch(word); + if (rv == null) { + rv = new Dg_rule_group(word); + rule_group_hash.Add(word, rv); + } + return rv; + } + private Dg_rule_tally Get_rule_tally_or_new(byte[] key, Dg_rule rule) { + Dg_rule_tally rv = (Dg_rule_tally)rule_tally_hash.Fetch(key); + if (rv == null) { + rv = new Dg_rule_tally(rule); + rule_tally_hash.Add(key, rv); + } + return rv; + } + public boolean Match(int log_tid, int page_id, int page_ns, byte[] page_ttl, byte[] page_ttl_db, Xol_lang lang, byte[] src) { + int src_len = src.length; + int clude_type = 0; + if (ttl_filter_mgr.Match_include(page_ttl_db)) clude_type = -1; + else if (ttl_filter_mgr.Match_exclude(page_ttl_db)) clude_type = 1; + if (clude_type != 0) { + log_mgr.Insert_page_score(log_tid, page_id, page_ns, page_ttl, src_len, 0, 0, clude_type); + return clude_type == 1; + } + if (!case_match) { + src = lang.Case_mgr().Case_build_lower(src); + src_len = src.length; + } + rules.Clear(); + rule_tally_hash.Clear(); + int pos = 0; + int score_cur = score_init; + while (pos < src_len) { + Object o = btrie.Match_bgn(src, pos, src_len); + if (o == null) + ++pos; + else { + Dg_rule_group rule_group = (Dg_rule_group)o; + Dg_rule[] rules_ary = rule_group.Rules_ary(); + for (Dg_rule rule : rules_ary) { + Dg_rule_tally rule_tally = Get_rule_tally_or_new(rule.Key(), rule); + rule_tally.Process(rule_group.Word()); + } + ++pos; + } + } + int rule_tally_len = rule_tally_hash.Count(); if (rule_tally_len == 0) return false; + int rule_match_count = 0; + for (int i = 0; i < rule_tally_len; ++i) { + Dg_rule_tally rule_tally = (Dg_rule_tally)rule_tally_hash.FetchAt(i); + int min_results = rule_tally.Results_pass_count(); + if (min_results > 0) { + int rule_score = rule_tally.Rule().Score(); + int rule_score_total = rule_score * min_results; + if (log_enabled) log_mgr.Insert_page_rule(log_tid, page_id, rule_tally.Rule().Id(), rule_score_total); + if (rule_score == Dg_rule.Score_banned) {score_cur = Int_.MaxValue; break;} + score_cur += rule_score_total; + ++rule_match_count; + } + } + boolean rv = score_cur > score_fail; + if (rv && log_enabled) log_mgr.Insert_page_score(log_tid, page_id, page_ns, page_ttl, src_len, score_cur, rule_match_count, 0); + return rv; + } + public void Rls() {log_mgr.Rls();} + public void Commit() {if (log_enabled) log_mgr.Commit();} + public static final int Target_tid_title = 1, Target_tid_wikitext = 2; +} +class Dg_rule_group { + public Dg_rule_group(byte[] word) {this.word = word;} + public byte[] Word() {return word;} private final byte[] word; + public ListAdp Rules_list() {return rules_list;} private final ListAdp rules_list = ListAdp_.new_(); + public Dg_rule[] Rules_ary() { + if (rules_ary == null) + rules_ary = (Dg_rule[])rules_list.Xto_ary_and_clear(Dg_rule.class); + return rules_ary; + } private Dg_rule[] rules_ary; +} +class Dg_rule_tally { + public Dg_rule_tally(Dg_rule rule) { + this.rule = rule; + Dg_word[] words = rule.Words(); + this.results_len = words.length; + this.results = new int[results_len]; + } + public Dg_rule Rule() {return rule;} private final Dg_rule rule; + public int[] Results() {return results;} private final int[] results; private final int results_len; + public void Process(byte[] word) { + Int_obj_ref idx = (Int_obj_ref)rule.Word_idx_hash().Get_by_bry(word); + int idx_val = idx.Val(); + results[idx_val] = results[idx_val] + 1; + } + public int Results_pass_count() { + int rv = Int_.MaxValue; + for (int i = 0; i < results_len; ++i) { + int result = results[i]; + if (rv > result) rv = result; + } + return rv; + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr_tst.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr_tst.java new file mode 100644 index 000000000..5ed6930d0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr_tst.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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import org.junit.*; import gplx.dbs.*; +public class Dg_match_mgr_tst { + @Before public void init() {fxt.Clear();} private Dg_match_mgr_fxt fxt = new Dg_match_mgr_fxt(); + @Test public void One() { + fxt.Init_line(100, "a"); + fxt.Test_match_many_y("a", "ab", "ba", "abc"); + fxt.Test_match_many_n("b"); + } +} +class Dg_match_mgr_fxt { + private Dg_match_mgr match_mgr; + private final ListAdp rule_list = ListAdp_.new_(); + public void Clear() { + Db_conn_bldr.I.Reg_default_mem(); + Io_url root_dir = Io_url_.mem_dir_("mem/dg/"); + match_mgr = new Dg_match_mgr(root_dir.GenSubDir("words"), 1, 0, Bool_.Y, Bool_.Y, root_dir.GenSubDir("log")); + rule_list.Clear(); + } + public void Init_line(int score, String... words) { + Dg_rule line = new Dg_rule(-1, -1, -1, Dg_rule.Tid_rule, Bry_.new_ascii_("key"), score, Dg_word.Ary_new_by_str_ary(words)); + rule_list.Add(line); + } + public void Test_match_many_y(String... words) {Test_match_many(Bool_.Y, words);} + public void Test_match_many_n(String... words) {Test_match_many(Bool_.N, words);} + public void Test_match_many(boolean expd, String... words) { + int words_len = words.length; + for (int i = 0; i < words_len; ++i) + Test_match_one(expd, words[i]); + } + public void Test_match_one(boolean expd, String word_str) { + match_mgr.Clear(); + int rule_list_len = rule_list.Count(); + for (int j = 0; j < rule_list_len; ++j) { + Dg_rule rule = (Dg_rule)rule_list.FetchAt(j); + match_mgr.Init_by_rule(rule); + } + byte[] word_bry = Bry_.new_utf8_(word_str); + Tfds.Eq(expd, match_mgr.Match(1, 101, 0, Bry_.Empty, Bry_.Empty, null, word_bry), (expd ? "pass:" : "fail:") + word_str); + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java new file mode 100644 index 000000000..253cecea2 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser.java @@ -0,0 +1,95 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +class Dg_parser { + private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; private final Bry_bfr key_bldr = Bry_bfr.reset_(32); + private final ListAdp files = ListAdp_.new_(), lines = ListAdp_.new_(), words = ListAdp_.new_(); + private int next_id = 0; + public Dg_file[] Parse_dir(Io_url dir) { + Io_url[] fil_urls = Io_mgr._.QueryDir_args(dir).Recur_(true).ExecAsUrlAry(); + this.usr_dlg = Gfo_usr_dlg_._; + files.Clear(); + int len = fil_urls.length; + for (int i = 0; i < len; ++i) { + Io_url fil_url = fil_urls[i]; + byte[] fil_src = Io_mgr._.LoadFilBry_loose(fil_url); + Dg_file file = Parse_fil(i, fil_url.GenRelUrl_orEmpty(dir), fil_src); + if (file != null) files.Add(file); + } + return (Dg_file[])files.Xto_ary_and_clear(Dg_file.class); + } + private Dg_file Parse_fil(int file_idx, String rel_path, byte[] src) { + int line_idx = 0; int line_bgn = 0; int src_len = src.length; + lines.Clear(); + int file_id = ++next_id; + while (line_bgn < src_len) { + ++line_idx; + int line_end = Bry_finder.Find_fwd(src, Byte_ascii.NewLine, line_bgn); if (line_end == Bry_finder.Not_found) line_end = src_len; + Dg_rule line = Parse_line(rel_path, file_id, line_idx, src, line_bgn, line_end); + if (line.Tid() != Dg_rule.Tid_invalid) + lines.Add(line); + line_bgn = line_end + 1; + } + return new Dg_file(file_id, rel_path, (Dg_rule[])lines.Xto_ary_and_clear(Dg_rule.class)); + } + public Dg_rule Parse_line(String rel_path, int file_id, int line_idx, byte[] src, int line_bgn, int line_end) { + int score = Dg_rule.Score_banned; + int brack_bgn = line_bgn; + if (line_end - line_bgn <= 1) return Dg_rule.Itm_blank; // ignore blank lines; EX: "" + if (src[line_bgn] == Byte_ascii.Hash) return Dg_rule.Itm_comment; // ignore lines starting with hash; EX: "# comment" + while (brack_bgn < line_end) { // look for terms bracketed by "<>" + if (src[brack_bgn] != Byte_ascii.Lt) {Warn("dg.invalid_line.term must start with angle_bgn", rel_path, line_idx, src, line_bgn, line_end); return Dg_rule.Itm_invalid;} + int brack_end = Bry_finder.Find_fwd(src, Byte_ascii.Gt, brack_bgn); + if (brack_end == Bry_finder.Not_found) {Warn("dg.invalid_line.angle_end not found", rel_path, line_idx, src, line_bgn, line_end); return Dg_rule.Itm_invalid;} + byte[] word = Bry_.Mid(src, brack_bgn + 1, brack_end); + words.Add(word); + int next_pos = brack_end + 1; + if (next_pos == line_end) { + score = Dg_rule.Score_banned; + break; + } + byte next = src[next_pos]; + if (next == Byte_ascii.Comma) + brack_bgn = brack_end + 2; + else { + brack_bgn = brack_end + 1; + if (src[brack_bgn] != Byte_ascii.Lt) {Warn("dg.invalid_line.wrong_term_dlm", rel_path, line_idx, src, line_bgn, line_end); break;} + brack_end = Bry_finder.Find_fwd(src, Byte_ascii.Gt, brack_bgn); + if (brack_end == Bry_finder.Not_found) {Warn("dg.invalid_line.score not found", rel_path, line_idx, src, line_bgn, line_end); break;} + int parse_score = Bry_.Xto_int_or(src, brack_bgn + 1, brack_end, Int_.MinValue); + if (parse_score == Int_.MinValue) {Warn("dg.invalid_line.score is invalid", rel_path, line_idx, src, line_bgn, line_end); break;} + score = parse_score; + break; + } + } + byte[] key = key_bldr.Add_int_variable(file_id).Add_byte_dot().Add_int_variable(line_idx).Xto_bry_and_clear(); + return new Dg_rule(file_id, ++next_id, line_idx, Dg_rule.Tid_rule, key, score, Ary_new_by_ary((byte[][])words.Xto_ary_and_clear(byte[].class))); + } + private static Dg_word[] Ary_new_by_ary(byte[][] ary) { + int ary_len = ary.length; + Dg_word[] rv = new Dg_word[ary_len]; + for (int i = 0; i < ary_len; ++i) { + byte[] raw = ary[i]; + rv[i] = new Dg_word(raw); + } + return rv; + } + private void Warn(String err_msg, String rel_path, int line_idx, byte[] src, int line_bgn, int line_end) { + usr_dlg.Warn_many("", "", err_msg + "; file=~{0} line_idx=~{1} line=~{2}", rel_path, line_idx, String_.new_utf8_(src, line_bgn, line_end)); + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java new file mode 100644 index 000000000..b6466816f --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_parser_tst.java @@ -0,0 +1,57 @@ +/* +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.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; +import org.junit.*; +public class Dg_parser_tst { + @Before public void init() {fxt.Init();} private Dg_parser_fxt fxt = new Dg_parser_fxt(); + @Test public void One() {fxt.Test_parse_line("<123>", fxt.Make_line(123, "a"));} + @Test public void Many() {fxt.Test_parse_line(",,<-123>", fxt.Make_line(-123, "a", "b", "c"));} + @Test public void Score_0() {fxt.Test_parse_line("<0>", fxt.Make_line(Dg_rule.Score_banned, "a"));} + @Test public void Noscore() {fxt.Test_parse_line("", fxt.Make_line(Dg_rule.Score_banned, "a"));} + @Test public void Noscore_2() {fxt.Test_parse_line(",", fxt.Make_line(Dg_rule.Score_banned, "a", "b"));} + @Test public void Comment() {fxt.Test_parse_line("# comment", Dg_rule.Itm_comment);} + @Test public void Blank() {fxt.Test_parse_line("", Dg_rule.Itm_blank);} + @Test public void Invalid_line_bgn() {fxt.Test_parse_line(" <1>", Dg_rule.Itm_invalid);} + @Test public void Dangling_word() {fxt.Test_parse_line("<12", fxt.Make_line(Dg_rule.Score_banned, "a"));} + @Test public void Invalid_dlm() {fxt.Test_parse_line(" <1>", fxt.Make_line(Dg_rule.Score_banned, "a"));} + @Test public void Invalid_dlm_2() {fxt.Test_parse_line(",<2>", fxt.Make_line(Dg_rule.Score_banned, "a", "b"));} + @Test public void Invalid_score() {fxt.Test_parse_line("<1a>", fxt.Make_line(Dg_rule.Score_banned, "a"));} +// @Test public void Parse_dir() { +// Dg_parser parser = new Dg_parser(); +// Gfo_usr_dlg_._ = Xoa_app_.usr_dlg_console_(); +// parser.Parse_dir(Io_url_.new_dir_("C:\\xowa\\bin\\any\\xowa\\bldr\\filters\simple.wikipedia.org\\Dansguardian\\\\")); +// } +} +class Dg_parser_fxt { + private final Dg_parser parser = new Dg_parser(); private final Bry_bfr bfr = Bry_bfr.reset_(32); + private final Bry_bfr tmp_bfr = Bry_bfr.reset_(16); + public void Init() {} + public Dg_rule Make_line(int score, String... words) {return new Dg_rule(-1, -1, -1, Dg_rule.Tid_rule, null, score, Dg_word.Ary_new_by_str_ary(words));} + public void Test_parse_line(String str, Dg_rule expd) { + byte[] src = Bry_.new_utf8_(str); + Dg_rule actl = parser.Parse_line("rel_path", 0, 0, src, 0, src.length); + Tfds.Eq_str_lines(Xto_str(bfr, expd), Xto_str(bfr, actl)); + } + private String Xto_str(Bry_bfr bfr, Dg_rule line) { + bfr .Add_str("score=").Add_int_variable(line.Score()).Add_byte_nl() + .Add_str("words=").Add_str(String_.Concat_with_str(";", Dg_word.Ary_concat(line.Words(), tmp_bfr, Byte_ascii.Tick))).Add_byte_nl() + ; + return bfr.Xto_str_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java index 4e7a4d44b..06a195b33 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.dbs.*; public class Xob_cmd_exec_sql implements Xob_cmd { - private Xow_wiki wiki; private int file_idx = -1; private String sql; - public Xob_cmd_exec_sql(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki;} + private Xowe_wiki wiki; private int file_idx = -1; private String sql; + public Xob_cmd_exec_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;} public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.exec_sql"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql(); Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java index f553a77d8..6123fe3e6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_cfg.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.ios.*; -import gplx.xowa.ctgs.*; +import gplx.xowa.ctgs.*; import gplx.xowa.tdbs.*; public class Xob_import_cfg { - public Xob_import_cfg(Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; private boolean src_fil_is_bz2 = true; + public Xob_import_cfg(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki; private boolean src_fil_is_bz2 = true; public byte Category_version() {return category_version;} public Xob_import_cfg Category_version_(byte v) {category_version = v; return this;} private byte category_version = Xoa_ctg_mgr.Version_1; public Io_url Src_fil_xml() {return src_fil_xml;} public Xob_import_cfg Src_fil_xml_(Io_url v) {src_fil_xml = v; src_fil_is_bz2 = Bool_.N; return this;} private Io_url src_fil_xml; @@ -32,26 +32,26 @@ public class Xob_import_cfg { } public gplx.ios.Io_stream_rdr Src_rdr() { if (src_fil_xml == null && src_fil_bz2 == null) { // will usually be null; non-null when user specifies src through command-line - Io_url url = Xow_fsys_mgr.Find_file_or_fail(wiki.Fsys_mgr().Root_dir(), "*", ".xml", ".bz2"); + Io_url url = Xotdb_fsys_mgr.Find_file_or_fail(wiki.Fsys_mgr().Root_dir(), "*", ".xml", ".bz2"); if (String_.Eq(url.Ext(), ".xml")) Src_fil_xml_(url); else Src_fil_bz2_(url); } if (src_fil_is_bz2) { - Chk_file_ext(wiki.App(), src_fil_bz2, ".bz2", "xml"); - Xoa_app app = wiki.App(); + Chk_file_ext(wiki.Appe(), src_fil_bz2, ".bz2", "xml"); + Xoae_app app = wiki.Appe(); if (app.Setup_mgr().Dump_mgr().Import_bz2_by_stdout()) { - ProcessAdp process = app.Launcher().App_decompress_bz2_by_stdout(); + ProcessAdp process = app.Prog_mgr().App_decompress_bz2_by_stdout(); return Io_stream_rdr_process.new_(process.Exe_url(), src_fil_bz2, process.Xto_process_bldr_args(src_fil_bz2.Raw())); } else return gplx.ios.Io_stream_rdr_.bzip2_(src_fil_bz2); } else { - Chk_file_ext(wiki.App(), src_fil_xml, ".xml", "bz2"); + Chk_file_ext(wiki.Appe(), src_fil_xml, ".xml", "bz2"); return gplx.ios.Io_stream_rdr_.file_(src_fil_xml); } } - private static void Chk_file_ext(Xoa_app app, Io_url fil, String expd_ext, String alt_ext) { + private static void Chk_file_ext(Xoae_app app, Io_url fil, String expd_ext, String alt_ext) { if (!String_.Eq(fil.Ext(), expd_ext)) app.Usr_dlg().Warn_many("", "", "File extension is not " + expd_ext + ". Please use '.src_" + alt_ext + "_fil_' instead; file=~{0}", fil.Raw()); } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java index 50014d4c5..3c46e7647 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_import_marker.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.gfui.*; public class Xob_import_marker { - public static void Import_bgn(Xow_wiki wiki) {Io_mgr._.SaveFilStr(url_(wiki), "XOWA has created this file to indicate that an import is in progress. This file will be deleted once the import is completed.");} - public static void Import_end(Xow_wiki wiki) {Io_mgr._.DeleteFil_args(url_(wiki)).MissingFails_off().Exec();} - public static boolean Check(Xow_wiki wiki) { + public static void Import_bgn(Xowe_wiki wiki) {Io_mgr._.SaveFilStr(url_(wiki), "XOWA has created this file to indicate that an import is in progress. This file will be deleted once the import is completed.");} + public static void Import_end(Xowe_wiki wiki) {Io_mgr._.DeleteFil_args(url_(wiki)).MissingFails_off().Exec();} + public static boolean Check(Xowe_wiki wiki) { Io_url url = url_(wiki); if (!Io_mgr._.ExistsFil(url)) return true; - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); app.Usr_dlg().Log_many("", "", "import.marker: marker found: url=~{0}", url.Raw()); byte[] incompete_msg_bry = app.User().Msg_mgr().Val_by_key_args(Bry_.new_ascii_("api-xowa.import.core.incomplete"), wiki.Domain_str()); int rslt = app.Gui_mgr().Kit().Ask_yes_no_cancel("", "", String_.new_utf8_(incompete_msg_bry)); @@ -34,7 +34,7 @@ public class Xob_import_marker { default: throw Err_.unhandled(rslt); } } - private static Io_url url_(Xow_wiki wiki) { + private static Io_url url_(Xowe_wiki wiki) { return wiki.Fsys_mgr().Root_dir().GenSubFil(wiki.Domain_str() + "-import.lock"); } } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java index 456c487bd..615d18792 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java @@ -18,13 +18,13 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.bldrs.xmls.*; public abstract class Xob_init_base implements Xob_cmd, GfoInvkAble { - public Xob_init_base Ctor(Xob_bldr bldr, Xow_wiki wiki) {this.bldr = bldr; this.wiki = wiki; this.usr_dlg = wiki.App().Usr_dlg(); return this;} private Xob_bldr bldr; Xow_wiki wiki; Gfo_usr_dlg usr_dlg; + public Xob_init_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki; this.usr_dlg = wiki.Appe().Usr_dlg(); return this;} private Xob_bldr bldr; Xowe_wiki wiki; Gfo_usr_dlg usr_dlg; public abstract String Cmd_key(); - public abstract void Cmd_ini_wdata(Xob_bldr bldr, Xow_wiki wiki); - public abstract void Cmd_run_end(Xow_wiki wiki); + public abstract void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki); + public abstract void Cmd_run_end(Xowe_wiki wiki); public void Cmd_ini(Xob_bldr bldr) { // add other cmds; EX: wikidata Xob_import_marker.Import_bgn(wiki); - if (wdata_enabled == Bool_.__byte) wdata_enabled = wiki.Domain_tid() == Xow_wiki_domain_.Tid_wikidata ? Bool_.Y_byte : Bool_.N_byte; // if wdata_enabled not explicitly set, set it to y if wiki is "www.wikidata.org" + if (wdata_enabled == Bool_.__byte) wdata_enabled = wiki.Domain_tid() == Xow_domain_.Tid_int_wikidata ? Bool_.Y_byte : Bool_.N_byte; // if wdata_enabled not explicitly set, set it to y if wiki is "www.wikidata.org" if (wdata_enabled == Bool_.Y_byte) // if wdata_enabled, auto-add wdata_wkrs bldr this.Cmd_ini_wdata(bldr, wiki); } private byte wdata_enabled = Bool_.__byte; @@ -36,9 +36,9 @@ public abstract class Xob_init_base implements Xob_cmd, GfoInvkAble { this.Cmd_run_end(wiki); // save site info } public void Cmd_end() { - wiki.App().Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // dirty wiki list so that next refresh will load itm - if (wiki.App().Setup_mgr().Dump_mgr().Css_wiki_update()) { - Io_url url = wiki.App().User().Fsys_mgr().Wiki_html_dir(wiki.Domain_str()).GenSubFil(Xoa_css_extractor.Css_wiki_name); + wiki.Appe().Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // dirty wiki list so that next refresh will load itm + if (wiki.Appe().Setup_mgr().Dump_mgr().Css_wiki_update()) { + Io_url url = wiki.Appe().User().Fsys_mgr().Wiki_html_dir(wiki.Domain_str()).GenSubFil(Xoa_css_extractor.Css_wiki_name); usr_dlg.Log_many("", "", "deleting css: ~{0}", url.Raw()); Io_mgr._.DeleteFil_args(url).MissingFails_off().Exec(); } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java index db327b0ce..4ac502b60 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base_tst.java @@ -20,7 +20,7 @@ import org.junit.*; import gplx.xowa.html.portal.*; import gplx.xowa.wikis.xwiki public class Xob_init_base_tst { @Before public void init() {fxt.Clear();} private Xob_init_base_fxt fxt = new Xob_init_base_fxt(); @Test public void Dirty_wiki_itms() { - Xoa_app app = fxt.App(); Xow_wiki wiki = fxt.Wiki(); + Xoae_app app = fxt.App(); Xowe_wiki wiki = fxt.Wiki(); Xoa_available_wikis_mgr wikis_list = fxt.App().Gui_mgr().Html_mgr().Portal_mgr().Wikis(); Tfds.Eq("", wikis_list.Itms_as_html()); // assert Xow_xwiki_itm xwiki_itm = app.User().Wiki().Xwiki_mgr().Add_full("en.wikipedia.org", "en.wikipedia.org"); @@ -38,6 +38,6 @@ class Xob_init_base_fxt { } Io_mgr._.InitEngine_mem(); } - public Xoa_app App() {return app;} private Xoa_app app; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xoae_app App() {return app;} private Xoae_app app; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java index 352ae0d9e..16824b72d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql.java @@ -18,15 +18,15 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.dbs.*; import gplx.xowa.xtns.wdatas.imports.*; public class Xob_init_sql extends Xob_init_base { - public Xob_init_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);} + public Xob_init_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.init"; - @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xow_wiki wiki) { + @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki) { bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_qid_sql.KEY); bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_pid_sql.KEY); } - @Override public void Cmd_run_end(Xow_wiki wiki) { - if (Xodb_mgr_sql.Find_core_url(wiki) != null) throw wiki.App().Bldr().Usr_dlg().Fail_many("", "", "directory must not contain any sqlite3 files: ~{0}", wiki.Fsys_mgr().Root_dir().Raw()); - String ns_map = wiki.App().Setup_mgr().Dump_mgr().Db_ns_map(); + @Override public void Cmd_run_end(Xowe_wiki wiki) { + if (Xodb_mgr_sql.Find_core_url(wiki) != null) throw wiki.Appe().Bldr().Usr_dlg().Fail_many("", "", "directory must not contain any sqlite3 files: ~{0}", wiki.Fsys_mgr().Root_dir().Raw()); + String ns_map = wiki.Appe().Setup_mgr().Dump_mgr().Db_ns_map(); Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql(); db_mgr.Init_by_ns_map(ns_map); // NOTE: must Init after Xob_siteinfo_parser b/c Xob_siteinfo_parser will create new ns itms db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "db_mgr.data_storage_format", Xoi_dump_mgr.Wtr_tid_to_str(db_mgr.Data_storage_format())); // NOTE: insert data_storage_format at init stage, not at term stage; bldr will reload wiki, and will default to gz since setting is not saved; DATE:2013-10-27 diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java index 0f6c9ad40..754144804 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_sql_tst.java @@ -27,11 +27,11 @@ public class Xob_init_sql_tst { class Xob_init_sql_fxt { public void Clear() { fxt.Ctor_fsys(); - app = fxt.Wiki().App(); + app = fxt.Wiki().Appe(); wiki = fxt.Wiki(); } Db_mgr_fxt fxt = new Db_mgr_fxt(); - public Xoa_app App() {return app;} private Xoa_app app; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xoae_app App() {return app;} private Xoae_app app; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public void Init_fsys() { Io_url wiki_dir = wiki.Fsys_mgr().Root_dir(); Io_url[] fils = Io_mgr._.QueryDir_fils(wiki_dir); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java index 1da921de2..1aabda2f6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_txt.java @@ -18,11 +18,11 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.xtns.wdatas.imports.*; public class Xob_init_txt extends Xob_init_base { - public Xob_init_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);} + public Xob_init_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY;} public static final String KEY = "core.init"; - @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xow_wiki wiki) { + @Override public void Cmd_ini_wdata(Xob_bldr bldr, Xowe_wiki wiki) { bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_qid_txt.KEY); bldr.Cmd_mgr().Add_cmd(wiki, Xob_wdata_pid_txt.KEY); } - @Override public void Cmd_run_end(Xow_wiki wiki) {} + @Override public void Cmd_run_end(Xowe_wiki wiki) {} } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java index 933284974..f331da7eb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java @@ -17,18 +17,20 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.ios.*; import gplx.xowa.bldrs.wikis.redirects.*; +import gplx.xowa.bldrs.filters.dansguardians.*; public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble { private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; private Io_stream_zip_mgr zip_mgr; private byte data_storage_format; private boolean redirect_id_enabled; - private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_conn page_provider; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr; + private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_conn page_conn; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr; private int page_count_all, page_count_main = 0; private int txn_commit_interval = 100000; // 100 k private DateAdp modified_latest = DateAdp_.MinValue; private Xop_redirect_mgr redirect_mgr; private Xob_redirect_tbl redirect_tbl; - public Xob_page_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + private boolean dg_enabled = Bool_.N; private Dg_match_mgr dg_match_mgr; // private Xob_ttl_filter_mgr ttl_filter_mgr; + public Xob_page_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.page"; public void Wkr_bgn(Xob_bldr bldr) { // init local variables - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); app.Bldr().Parser().Trie_tab_del_(); // disable swapping for \t zip_mgr = app.Zip_mgr(); redirect_mgr = wiki.Redirect_mgr(); @@ -38,16 +40,20 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv db_mgr = wiki.Db_mgr_as_sql(); db_mgr.Data_storage_format_(data_storage_format); fsys_mgr = db_mgr.Fsys_mgr(); - page_provider = fsys_mgr.Conn_page(); - page_stmt = db_mgr.Tbl_page().Insert_stmt(page_provider); - page_provider.Txn_mgr().Txn_bgn_if_none(); + page_conn = fsys_mgr.Conn_page(); + page_stmt = db_mgr.Tbl_page().Insert_stmt(page_conn); + page_conn.Txn_mgr().Txn_bgn_if_none(); text_stmts_mgr = new Xob_text_stmts_mgr(db_mgr, fsys_mgr); if (idx_mode.Tid_is_bgn()) Idx_create(); if (redirect_id_enabled) { - redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), app.Encoder_mgr().Url_ttl()).Create_table(); + redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table(); redirect_tbl.Conn().Txn_mgr().Txn_bgn_if_none(); } + + // dansguardian + dg_match_mgr = app.Api_root().Bldr().Wikis().Filters().Dansguardians().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir()); + dg_enabled = dg_match_mgr != null; } public void Wkr_run(Xodb_page page) { int page_id = page.Id(); @@ -61,6 +67,9 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv Xow_ns ns = page.Ns(); int random_int = ns.Count() + 1; ns.Count_(random_int); + if (dg_enabled) { + if (dg_match_mgr.Match(1, page_id, ns.Id(), page.Ttl_wo_ns(), page.Ttl_w_ns(), wiki.Lang(), text)) return; + } text = zip_mgr.Zip(data_storage_format, text); int text_stmt_idx = text_stmts_mgr.Stmt_by_ns(ns.Bldr_file_idx(), text.length); // NOTE: was text.length, but want text_len which is original page_len, not compressed; DATE:2014-08-04 Db_stmt text_stmt = text_stmts_mgr.Stmt_at(text_stmt_idx); @@ -80,25 +89,27 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv if (page_count_all % txn_commit_interval == 0) { Db_conn conn = text_stmts_mgr.Conn_at(text_stmt_idx); conn.Txn_mgr().Txn_end_all_bgn_if_none(); + if (dg_enabled) dg_match_mgr.Commit(); } } public void Wkr_end() { + if (dg_enabled) dg_match_mgr.Rls(); usr_dlg.Log_many("", "", "import.page: insert done; committing pages; pages=~{0}", page_count_all); - page_provider.Txn_mgr().Txn_end_all(); + page_conn.Txn_mgr().Txn_end_all(); page_stmt.Rls(); text_stmts_mgr.Rls(); usr_dlg.Log_many("", "", "import.page: updating core stats"); Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); db_mgr.Tbl_site_stats().Update(page_count_main, page_count_all, ns_mgr.Ns_file().Count()); // save page stats db_mgr.Tbl_xowa_ns().Insert(ns_mgr); // save ns - db_mgr.Tbl_xowa_db().Commit_all(page_provider, db_mgr.Fsys_mgr().Files_ary()); // save dbs; note that dbs can be saved again later + db_mgr.Tbl_xowa_db().Commit_all(db_mgr.Fsys_mgr().Files_ary()); // save dbs; note that dbs can be saved again later db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); if (idx_mode.Tid_is_end()) Idx_create(); if (redirect_id_enabled) { redirect_tbl.Conn().Txn_mgr().Txn_end_all(); Xodb_file core_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core); redirect_tbl.Update_trg_redirect_id(core_file.Url(), 1); - redirect_tbl.Update_src_redirect_id(core_file.Url(), page_provider); + redirect_tbl.Update_src_redirect_id(core_file.Url(), page_conn); } } private void Idx_create() { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java index 4d5de3534..10166aece 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java @@ -16,20 +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.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.ios.*; +import gplx.ios.*; import gplx.xowa.tdbs.*; public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble { - public Xob_page_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_page_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Wkr_key() {return KEY;} public static final String KEY = "core.make_page"; public void Wkr_ini(Xob_bldr bldr) {} public void Wkr_bgn(Xob_bldr bldr) { - redirect_mgr = wiki.Redirect_mgr(); page_storage_type = wiki.App().Setup_mgr().Dump_mgr().Data_storage_format(); - fsys_mgr = wiki.Fsys_mgr(); + redirect_mgr = wiki.Redirect_mgr(); page_storage_type = wiki.Appe().Setup_mgr().Dump_mgr().Data_storage_format(); + fsys_mgr = wiki.Tdb_fsys_mgr(); make_dir = fsys_mgr.Ns_dir(); if (Io_mgr._.QueryDir_args(make_dir).DirOnly_().ExecAsUrlAry().length > 0) throw bldr.Usr_dlg().Fail_many("xowa.bldr.itm", "dir_empty", "dir_must_be_empty: ~{0}", make_dir.Raw()); this.Init_dump(KEY, make_dir); - this.data_rpt_typ = stat_mgr.GetOrNew(Xow_dir_info_.Tid_page); + this.data_rpt_typ = stat_mgr.GetOrNew(Xotdb_dir_info_.Tid_page); ttl_wtr_mgr = new Xob_tmp_wtr_mgr(new Xob_tmp_wtr_wkr__ttl(temp_dir, dump_fil_len)); - } private Xow_fsys_mgr fsys_mgr; Xop_redirect_mgr redirect_mgr; + } private Xotdb_fsys_mgr fsys_mgr; Xop_redirect_mgr redirect_mgr; int page_file_len = 512 * Io_mgr.Len_kb, title_file_len = 64 * Io_mgr.Len_kb; Xob_tmp_wtr_mgr ttl_wtr_mgr; Xob_xdat_file_wtr[] page_wtr_regy = new Xob_xdat_file_wtr[Ns_ordinal_max]; static final int Ns_ordinal_max = Xow_ns_mgr_.Ordinal_max; // ASSUME: no more than 128 ns in a wiki Xob_stat_type data_rpt_typ; Xob_stat_mgr stat_mgr = new Xob_stat_mgr(); byte page_storage_type; @@ -54,7 +54,7 @@ public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvk public void Wkr_end() { Flush_page(page_wtr_regy); ttl_wtr_mgr.Flush_all(bldr.Usr_dlg()); - Xobdc_merger.Ns(bldr.Usr_dlg(), ttl_wtr_mgr.Regy(), Xow_dir_info_.Name_title, temp_dir, make_dir, sort_mem_len, Io_line_rdr_key_gen_.last_pipe, new Io_sort_cmd_ns(bldr.Usr_dlg())); + Xobdc_merger.Ns(bldr.Usr_dlg(), ttl_wtr_mgr.Regy(), Xotdb_dir_info_.Name_title, temp_dir, make_dir, sort_mem_len, Io_line_rdr_key_gen_.last_pipe, new Io_sort_cmd_ns(bldr.Usr_dlg())); ttl_wtr_mgr.Rls_all(); if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir); } @@ -62,7 +62,7 @@ public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvk Xob_xdat_file_wtr Page_wtr_get(Xow_ns ns) { Xob_xdat_file_wtr rv = page_wtr_regy[ns.Ord()]; if (rv == null) { - rv = Xob_xdat_file_wtr.new_by_tid_(page_file_len, fsys_mgr.Ns_dir().GenSubDir_nest(ns.Num_str()), Xow_dir_info_.Tid_page, page_storage_type).Ns_ord_idx_(ns.Ord()); + rv = Xob_xdat_file_wtr.new_by_tid_(page_file_len, fsys_mgr.Ns_dir().GenSubDir_nest(ns.Num_str()), Xotdb_dir_info_.Tid_page, page_storage_type).Ns_ord_idx_(ns.Ord()); page_wtr_regy[ns.Ord()] = rv; } return rv; diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java index ce1a893f2..c67a0c36a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java @@ -18,15 +18,15 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.core.primitives.*; import gplx.ios.*; -import gplx.xowa.dbs.*; +import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*; public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble { public abstract String Wkr_key(); public abstract Io_make_cmd Make_cmd_site(); public void Wkr_ini(Xob_bldr bldr) {} public void Wkr_bgn(Xob_bldr bldr) { - make_dir = wiki.Fsys_mgr().Ns_dir(); + make_dir = wiki.Tdb_fsys_mgr().Ns_dir(); this.Init_dump(this.Wkr_key(), make_dir); - lang = wiki.Lang(); // wiki.App().Lang_mgr().Lang_en(); // NOTE: was .Lang_en which is wrong (should match lang of wiki); DATE:2013-05-11 + lang = wiki.Lang(); // wiki.Appe().Lang_mgr().Lang_en(); // NOTE: was .Lang_en which is wrong (should match lang of wiki); DATE:2013-05-11 tmp_wtr_mgr = new Xob_tmp_wtr_mgr(new Xob_tmp_wtr_wkr__ttl(temp_dir, dump_fil_len)); if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) // if sqlite, hard-code to ns_main; aggregates all ns into one ns_main = wiki.Ns_mgr().Ns_main(); @@ -55,12 +55,12 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_ public void Wkr_end() { tmp_wtr_mgr.Flush_all(bldr.Usr_dlg()); dump_bfr.ClearAndReset(); - Xobdc_merger.Ns(bldr.Usr_dlg(), tmp_wtr_mgr.Regy(), Xow_dir_info_.Name_search_ttl, temp_dir, make_dir, sort_mem_len, Io_line_rdr_key_gen_.first_pipe, this.Make_cmd_site()); + Xobdc_merger.Ns(bldr.Usr_dlg(), tmp_wtr_mgr.Regy(), Xotdb_dir_info_.Name_search_ttl, temp_dir, make_dir, sort_mem_len, Io_line_rdr_key_gen_.first_pipe, this.Make_cmd_site()); tmp_wtr_mgr.Rls_all(); if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir); if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) { Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr(); - wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Conn_core(), db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07 + wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07 } } public void Wkr_print() {} diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java index 88a09b565..e8895b172 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import org.junit.*; +import org.junit.*; import gplx.xowa.tdbs.*; public class Xob_search_base_tst { @Test public void Split() { tst_Split("a", "a"); @@ -38,7 +38,7 @@ public class Xob_search_base_tst { , "b|!!!!#;!!!!%|!!!!$;!!!!%" , "" ) - .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xow_dir_info_.Tid_search_ttl) + .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xotdb_dir_info_.Tid_search_ttl) , "0|a|b|2" , "" ) diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java index 84d45125e..5811b449e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java @@ -16,16 +16,16 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { - public Xob_search_sql_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_search_sql_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_search_sql;} public static final String KEY_search_sql = "import.sql.search_title.cmd"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} public void Cmd_run() {this.Exec(wiki);} public void Cmd_end() {} public void Cmd_print() {} - public void Exec(Xow_wiki wiki) { + public void Exec(Xowe_wiki wiki) { usr_dlg.Log_many("", "", "search_title.cmd: initing wiki"); if (!Env_.Mode_testing()) wiki.Init_assert(); Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr(); @@ -76,7 +76,7 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { search_provider.Txn_mgr().Txn_end_all_bgn_if_none(); search_temp_tbl.Make_data(usr_dlg, search_provider); search_provider.Txn_mgr().Txn_bgn_if_none(); - wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Conn_core(), db_fs.Files_ary()); + wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary()); search_provider.Txn_mgr().Txn_end_all(); } private int commit_interval = 100000, progress_interval = 10000; private void Commit(Db_conn search_provider) { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java index ace23d64d..293081b81 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java @@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { - public Xob_search_sql_wkr(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} private Xodb_mgr_sql db_mgr = null; + public Xob_search_sql_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} private Xodb_mgr_sql db_mgr = null; @Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.search_title.wkr"; @Override public gplx.ios.Io_make_cmd Make_cmd_site() {return this;} public Io_sort_cmd Make_dir_(Io_url v) {return this;} // noop diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java index 592b4e2a0..1d09469a4 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_txt.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; public class Xob_search_txt extends Xob_search_base { - public Xob_search_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_search_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} @Override public String Wkr_key() {return KEY;} public static final String KEY = "core.make_search_title"; @Override public gplx.ios.Io_make_cmd Make_cmd_site() { return new Xob_make_cmd_site(bldr.Usr_dlg(), this.make_dir, this.make_fil_len); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java index efd8bee8c..5f8da6b4c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java @@ -19,13 +19,13 @@ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx. import gplx.xowa.xtns.wdatas.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.xmls.*; public abstract class Xob_term_base implements Xob_cmd, GfoInvkAble { - public Xob_term_base Ctor(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki; return this;} private Xow_wiki wiki; + public Xob_term_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki; return this;} private Xowe_wiki wiki; public abstract String Cmd_key(); public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} public void Cmd_run() {} public void Cmd_end() { - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); app.Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // NOTE: dirty wiki list so that next refresh will load itm app.Free_mem(false); // clear cache, else import will load new page with old items from cache; DATE:2013-11-21 wiki.Props().Main_page_update(wiki); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java index efc5184c1..e517fe02c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.dbs.*; public class Xob_term_sql extends Xob_term_base { - public Xob_term_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xow_wiki wiki; + public Xob_term_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xowe_wiki wiki; @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.term"; @Override public void Cmd_end_hook() { Io_mgr._.DeleteDirDeep(wiki.Fsys_mgr().Tmp_dir()); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java index d9dcc084b..8d9ae42db 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_txt.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; public class Xob_term_txt extends Xob_term_base { - public Xob_term_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xow_wiki wiki; + public Xob_term_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki); this.wiki = wiki;} private Xowe_wiki wiki; @Override public String Cmd_key() {return KEY;} public static final String KEY = "core.term"; @Override public void Cmd_end_hook() { - Io_mgr._.SaveFilBry(wiki.Fsys_mgr().Cfg_wiki_core_fil(), wiki.Cfg_wiki_core().Build_gfs()); + Io_mgr._.SaveFilBry(wiki.Tdb_fsys_mgr().Cfg_wiki_core_fil(), wiki.Cfg_wiki_core().Build_gfs()); } } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java index e390980ff..7035d3824 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java @@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.xowa.bldrs.*; +import gplx.xowa.bldrs.*; import gplx.xowa.tdbs.*; public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd { - public Xobc_core_calc_stats(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xobc_core_calc_stats(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY;} public static final String KEY = "core.calc_stats"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -37,7 +37,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd int count_main = Calc_count_articles(wiki.Ns_mgr().Ns_main()); int count_file = Calc_count_articles(wiki.Ns_mgr().Ns_file()); Bry_bfr bfr = Bry_bfr.new_(); - Gen_call(Bool_.Y, bfr, Xow_wiki.Invk_stats); + Gen_call(Bool_.Y, bfr, Xowe_wiki.Invk_stats); Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_articles_, count_main); Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_files_, count_file); Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_pages_, total); @@ -66,7 +66,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd } } int Calc_counts(Xow_ns ns) { - Io_url reg_url = wiki.Fsys_mgr().Url_ns_reg(ns.Num_str(), Xow_dir_info_.Tid_ttl); + Io_url reg_url = wiki.Tdb_fsys_mgr().Url_ns_reg(ns.Num_str(), Xotdb_dir_info_.Tid_ttl); Xowd_regy_mgr reg_mgr = new Xowd_regy_mgr(reg_url); int files_ary_len = reg_mgr.Files_ary().length; int count = 0; @@ -76,7 +76,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd return count; } int Calc_count_articles(Xow_ns ns) { - Io_url hive_dir = wiki.Fsys_mgr().Root_dir().GenSubDir_nest(Xow_dir_info_.Name_ns, ns.Num_str(), Xow_dir_info_.Name_title); + Io_url hive_dir = wiki.Fsys_mgr().Root_dir().GenSubDir_nest(Xotdb_dir_info_.Name_ns, ns.Num_str(), Xotdb_dir_info_.Name_title); return Calc_count_articles_dir(ns, hive_dir); } int Calc_count_articles_dir(Xow_ns ns, Io_url dir) { @@ -94,7 +94,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd return count; } int Calc_count_articles_fil(Xow_ns ns, Io_url fil) { - if (String_.Eq(fil.NameAndExt(), Xow_dir_info_.Name_reg_fil)) return 0; + if (String_.Eq(fil.NameAndExt(), Xotdb_dir_info_.Name_reg_fil)) return 0; int rv = 0; byte[] bry = Io_mgr._.LoadFilBry(fil); Xob_xdat_file xdat_file = new Xob_xdat_file().Parse(bry, bry.length, fil); @@ -108,5 +108,5 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd return rv; } static final String GRP_KEY = "xowa.bldr.calc_stats"; - public static Io_url Wiki_gfs_url(Xow_wiki wiki) {return wiki.Fsys_mgr().Root_dir().GenSubFil_nest("cfg", "wiki_stats.gfs");} + public static Io_url Wiki_gfs_url(Xowe_wiki wiki) {return wiki.Fsys_mgr().Root_dir().GenSubFil_nest("cfg", "wiki_stats.gfs");} } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java index 4be449c0f..b603dac23 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java @@ -22,7 +22,7 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd { private String bz2_cmd; private boolean delete_all, delete_tmp; private Criteria_ioMatch[] delete_by_match_ary; - public Xobc_core_cleanup(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xobc_core_cleanup(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY;} public static final String KEY = "core.cleanup"; public Xobc_core_cleanup Delete_sqlite3_(boolean v){delete_sqlite3 = v; return this;} private boolean delete_sqlite3; public Xobc_core_cleanup Delete_xml_(boolean v) {delete_xml = v; return this;} private boolean delete_xml; @@ -103,8 +103,8 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd { for (int i = 0; i < dirs_len; i++) Io_mgr._.DeleteDirDeep(dirs[i]); } - public static void Delete_wiki_sql(Xow_wiki wiki) { - Gfo_usr_dlg usr_dlg = wiki.App().Usr_dlg(); Io_url wiki_root_dir = wiki.Fsys_mgr().Root_dir(); + public static void Delete_wiki_sql(Xowe_wiki wiki) { + Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); Io_url wiki_root_dir = wiki.Fsys_mgr().Root_dir(); if (wiki.Db_mgr().Tid() == gplx.xowa.dbs.Xodb_mgr_sql.Tid_sql) // NOTE: must check; if empty dir (or text db) than db_mgr will be txt wiki.Db_mgr_as_sql().Fsys_mgr().Rls(); // NOTE: if sqlite files, must rls; Io_url[] sqlite3_files = Io_mgr._.QueryDir_args(wiki_root_dir).FilPath_("*.sqlite3").ExecAsUrlAry(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java index bd8c57e9c..49a0667ea 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_decompress_bz.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.ios.*; import gplx.threads.*; import gplx.xowa.bldrs.*; public class Xobc_core_decompress_bz extends Xob_itm_basic_base implements Xob_cmd { - public Xobc_core_decompress_bz(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xobc_core_decompress_bz(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY;} public static final String KEY = "core.decompress_bz2"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -39,14 +39,14 @@ public class Xobc_core_decompress_bz extends Xob_itm_basic_base implements Xob_c trg = bldr.App().Fsys_mgr().Wiki_dir().GenSubFil_nest(wiki.Domain_str(), v.NameOnly()); // NOTE: NameOnly() will take "enwiki.xml.bz2" and make it "enwiki.xml" } Io_url src, trg; static final String GRP_KEY = "xowa.bldr.cmd.decompress_bz2"; - public static boolean Decompress(Xoa_app app, String src_fil, Io_url trg_fil) { + public static boolean Decompress(Xoae_app app, String src_fil, Io_url trg_fil) { Io_mgr._.CreateDirIfAbsent(trg_fil.OwnerDir()); // 7zip will fail if dir does not exist - ProcessAdp decompress = app.Launcher().App_decompress_bz2(); + ProcessAdp decompress = app.Prog_mgr().App_decompress_bz2(); decompress.Prog_dlg_(app.Usr_dlg()).Run_mode_(ProcessAdp.Run_mode_async); decompress.Run(src_fil, trg_fil, trg_fil.OwnerDir().Xto_api()); while (decompress.Exit_code() == ProcessAdp.Exit_init) { String size = gplx.ios.Io_size_.Xto_str(Io_mgr._.QueryFil(trg_fil).Size()); - app.Gui_wtr().Prog_many(GRP_KEY, "decompress", "decompressing: ~{0}", size); + app.Usr_dlg().Prog_many(GRP_KEY, "decompress", "decompressing: ~{0}", size); ThreadAdp_.Sleep(1000); } return true; diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java index 8f0db83c6..51ba08f47 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java @@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.ios.*; +import gplx.ios.*; import gplx.xowa.tdbs.*; public class Xobc_core_make_id extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble { - public Xobc_core_make_id(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xobc_core_make_id(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Wkr_key() {return KEY;} public static final String KEY = "core.make_id"; public void Wkr_ini(Xob_bldr bldr) {} public void Wkr_bgn(Xob_bldr bldr) { - this.Init_dump(KEY, wiki.Fsys_mgr().Site_dir().GenSubDir(Xow_dir_info_.Name_id)); + this.Init_dump(KEY, wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_id)); } public void Wkr_run(Xodb_page page) { byte[] ttl = page.Ttl_wo_ns(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java index 3e6390f5a..97d906656 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import org.junit.*; -import gplx.ios.*; +import gplx.ios.*; import gplx.xowa.tdbs.*; public class Xobc_tst { @Before public void init() {fxt = new Xob_fxt().Ctor_mem();} private Xob_fxt fxt; // @After public void term() {fxt.Wiki().Ctx().Sys_load_tmpls_(true);} // commented during wiki.Ctx() removal; DATE:2014-04-22 @@ -40,7 +40,7 @@ public class Xobc_tst { , "!!!!$|!!!!!|!!!!!|0|!!!!)|Title 2a" , "" ) - .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xow_dir_info_.Tid_ttl) + .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xotdb_dir_info_.Tid_ttl) , "0|Title 1|Title 2a|2" , "" ) @@ -64,7 +64,7 @@ public class Xobc_tst { , "!!!!$|!!!!!|!!!!!|0|!!!!#|↑" , "" ) - .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xow_dir_info_.Tid_ttl) + .Fil_expd(fxt.fil_reg(Xow_ns_.Id_main, Xotdb_dir_info_.Tid_ttl) , "0|!|↑|2" , "" ) @@ -85,7 +85,7 @@ public class Xobc_tst { , "!!!!#|!!!!!|!!!!!|0|!!!!'|A" , "" ) - .Fil_expd(fxt.fil_reg(Xow_ns_.Id_template, Xow_dir_info_.Tid_ttl) + .Fil_expd(fxt.fil_reg(Xow_ns_.Id_template, Xotdb_dir_info_.Tid_ttl) , "0|A|A|1" , "" ) @@ -103,7 +103,7 @@ public class Xobc_tst { , "!!!!$|!!!!!|!!!!!|0|!!!!\"|!!!!+|B" , "" ) - .Fil_expd(fxt.fil_reg(Xow_dir_info_.Tid_id) + .Fil_expd(fxt.fil_reg(Xotdb_dir_info_.Tid_id) , "0|!!!!#|!!!!$|2" , "" ) @@ -121,7 +121,7 @@ public class Xobc_tst { , "Z|!!!!#" , "" ) - .Fil_expd(fxt.fil_reg(Xow_dir_info_.Tid_category) + .Fil_expd(fxt.fil_reg(Xotdb_dir_info_.Tid_category) , "0|Y|Z|2" , "" ) @@ -139,7 +139,7 @@ public class Xobc_tst { , "Y|!!!!#|!!!!$" , "" ) - .Fil_expd(fxt.fil_reg(Xow_dir_info_.Tid_category) + .Fil_expd(fxt.fil_reg(Xotdb_dir_info_.Tid_category) , "0|X|Y|2" , "" ) @@ -169,11 +169,11 @@ public class Xobc_tst { , "a", "b", "c"); } private void tst_Parse(String raw, String... expd) { - Xoa_app app = Xoa_app_fxt.app_(); // NOTE: resets mem file system, so must happen first + Xoae_app app = Xoa_app_fxt.app_(); // NOTE: resets mem file system, so must happen first Io_url url = Io_url_.mem_fil_("mem/raw_page.csv"); Io_mgr._.SaveFilStr(url, raw); Xodb_page_raw_parser parser = new Xodb_page_raw_parser(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); parser.Load(Gfo_usr_dlg_base.test_(), wiki, new Xow_ns(Xow_ns_.Id_template, Xow_ns_case_.Id_1st, Bry_.new_utf8_("Template"), false), new Io_url[] {url}, 1 * Io_mgr.Len_kb); ListAdp actl = ListAdp_.new_(); Xodb_page page = new Xodb_page(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java index 220490f21..0db4a30cb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java @@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.dbs.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.dbs.*; public class Xob_category_registry_sql implements Xob_cmd { - public Xob_category_registry_sql(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; + public Xob_category_registry_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki; public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.category_registry"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -37,7 +37,7 @@ public class Xob_category_registry_sql implements Xob_cmd { .Where_(Db_crt_.eq_(Xodb_page_tbl.Fld_page_ns, Xow_ns_.Id_category)) .OrderBy_asc_(Xodb_page_tbl.Fld_page_title); DataRdr rdr = DataRdr_.Null; - Gfo_usr_dlg usr_dlg = wiki.App().Usr_dlg(); + Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); try { rdr = qry.Exec_qry_as_rdr(conn); while (rdr.MoveNextPeer()) { @@ -54,5 +54,5 @@ public class Xob_category_registry_sql implements Xob_cmd { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { return GfoInvkAble_.Rv_unhandled; } - public static Io_url Get_dir_output(Xow_wiki wiki) {return wiki.Fsys_mgr().Tmp_dir().GenSubDir(KEY);} + public static Io_url Get_dir_output(Xowe_wiki wiki) {return wiki.Fsys_mgr().Tmp_dir().GenSubDir(KEY);} } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java index c65b4a2c1..c423a85a7 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java @@ -32,9 +32,9 @@ class Xob_category_registry_sql_fxt { fxt = new Db_mgr_fxt().Ctor_fsys(); fxt.Init_db_sqlite(); wiki = fxt.Wiki(); - app = wiki.App(); + app = wiki.Appe(); } - } Db_mgr_fxt fxt; Xow_wiki wiki; Xoa_app app; Int_obj_ref page_id_next = Int_obj_ref.new_(1); + } Db_mgr_fxt fxt; Xowe_wiki wiki; Xoae_app app; Int_obj_ref page_id_next = Int_obj_ref.new_(1); public void Init_page_insert(String[] ttls) { fxt.Init_page_insert(page_id_next, Xow_ns_.Id_category, ttls); } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java index f6b5944b2..68329e799 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java @@ -19,7 +19,7 @@ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import import gplx.ios.*; public class Xob_categorylinks_sql extends Xob_categorylinks_base { private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; - public Xob_categorylinks_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} + public Xob_categorylinks_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.categorylinks"; @Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Xob_categorylinks_sql_make(sql_parser, wiki, idx_mode);} public static final String Tbl_categorylinks = String_.Concat_lines_nl diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java index 9b05c8f4e..19e1a81a2 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java @@ -18,17 +18,17 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*; public class Xob_categorylinks_sql_make implements Io_make_cmd { - private Xow_wiki wiki; private Sql_file_parser sql_parser; private Db_idx_mode idx_mode; + private Xowe_wiki wiki; private Sql_file_parser sql_parser; private Db_idx_mode idx_mode; private Xodb_mgr_sql db_mgr; - public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xow_wiki wiki, Db_idx_mode idx_mode) { + public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xowe_wiki wiki, Db_idx_mode idx_mode) { this.wiki = wiki; this.sql_parser = sql_parser; this.idx_mode = idx_mode; } public Io_sort_cmd Make_dir_(Io_url v) {return this;} public void Sort_bgn() { - usr_dlg = wiki.App().Usr_dlg(); + usr_dlg = wiki.Appe().Usr_dlg(); db_mgr = Xodb_mgr_sql.Get_or_load(wiki); name_id_rdr = New_registry_rdr(wiki, usr_dlg); - cur_cat_file_max = wiki.App().Setup_mgr().Dump_mgr().Db_categorylinks_max(); + cur_cat_file_max = wiki.Appe().Setup_mgr().Dump_mgr().Db_categorylinks_max(); db_mgr.Delete_by_tid(Xodb_file_tid.Tid_category); Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); @@ -70,7 +70,7 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); Ctg_grp_end(Ttl_last); File_close(); - db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Conn_core(), fsys_mgr.Files_ary()); + db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Files_ary()); if (db_mgr.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null db_mgr.Category_version_update(false); usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", row_count); @@ -132,7 +132,7 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { } } } - private static Io_line_rdr New_registry_rdr(Xow_wiki wiki, Gfo_usr_dlg usr_dlg) { + private static Io_line_rdr New_registry_rdr(Xowe_wiki wiki, Gfo_usr_dlg usr_dlg) { Io_url make_dir = Xob_category_registry_sql.Get_dir_output(wiki); usr_dlg.Prog_many("", "", "loading category_registry files: ~{0}", make_dir.Raw()); Io_url[] urls = Io_mgr._.QueryDir_args(make_dir).ExecAsUrlAry(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java index 17e4d874b..7cbb43ea1 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_txt.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.ios.*; public class Xob_categorylinks_txt extends Xob_categorylinks_base { - public Xob_categorylinks_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} + public Xob_categorylinks_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.link_sql"; @Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Io_sort_fil_basic(bldr.Usr_dlg(), this.Make_url_gen(), make_fil_len);} } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java index b69ea3d5c..dae185aec 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java @@ -16,15 +16,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; -import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.core.flds.*; import gplx.ios.*; +import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.xowa.tdbs.*; public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_parser_wkr, GfoInvkAble { protected Xob_ctg_v1_base() {} // TEST:needed for fxt - public Xob_ctg_v1_base Ctor(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;} + public Xob_ctg_v1_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;} public abstract String Wkr_key(); public abstract Io_sort_cmd Make_sort_cmd(); public OrderedHash Wkr_hooks() {return wkr_hooks;} private OrderedHash wkr_hooks = OrderedHash_.new_bry_(); public void Wkr_bgn(Xob_bldr bldr) { - this.Init_dump(this.Wkr_key(), wiki.Fsys_mgr().Site_dir().GenSubDir(Xow_dir_info_.Name_category)); + this.Init_dump(this.Wkr_key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_category)); Bry_bfr tmp_bfr = bldr.App().Utl_bry_bfr_mkr().Get_b512(); Xol_lang lang = wiki.Lang(); wkr_hooks_add(tmp_bfr, lang.Ns_names()); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java index fa7b32dd2..191e3e619 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java @@ -34,8 +34,8 @@ class Xodb_page_wkr_ctg_fxt { public Xodb_page_wkr_ctg_fxt ini_(String s) {src = Bry_.new_utf8_(s); return this;} public Xodb_page_wkr_ctg_fxt tst_(String... expd) { Xobd_parser mgr = new Xobd_parser(); - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xoae_app app = Xoa_app_fxt.app_(); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); Xob_bldr bldr = Xoa_app_fxt.bldr_(app); Xobd_parser_wkr_ctg_tstr wkr = (Xobd_parser_wkr_ctg_tstr)new Xobd_parser_wkr_ctg_tstr().Ctor(bldr, wiki); byte[] bry = Bry_.new_utf8_("[[Category:"); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java index 431aa38f2..27c2fdc90 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java @@ -22,10 +22,10 @@ public class Xob_ctg_v1_sql extends Xob_ctg_v1_base { @Override public Io_sort_cmd Make_sort_cmd() {return new Xob_ctg_v1_sql_make(wiki);} } class Xob_ctg_v1_sql_make implements Io_make_cmd { - public Xob_ctg_v1_sql_make(Xow_wiki wiki) {this.wiki = wiki; db_mgr = wiki.Db_mgr_as_sql();} private Xow_wiki wiki; Xodb_mgr_sql db_mgr; + public Xob_ctg_v1_sql_make(Xowe_wiki wiki) {this.wiki = wiki; db_mgr = wiki.Db_mgr_as_sql();} private Xowe_wiki wiki; Xodb_mgr_sql db_mgr; public Io_sort_cmd Make_dir_(Io_url v) {return this;} // ignore public void Sort_bgn() { - usr_dlg = wiki.App().Usr_dlg(); + usr_dlg = wiki.Appe().Usr_dlg(); Io_url sql_url = wiki.Fsys_mgr().Root_dir().GenSubFil(Url_sql); Io_mgr._.DeleteFil_args(sql_url).MissingFails_off().Exec(); sql_wtr = Xob_tmp_wtr.new_wo_ns_(Io_url_gen_.fil_(sql_url), Io_mgr.Len_mb); @@ -56,8 +56,8 @@ class Xob_ctg_v1_sql_make implements Io_make_cmd { private static final byte[] Sql_hdr = Bry_.new_ascii_("INSERT INTO 'categorylinks' VALUES"); Bry_fmtr fmtr = Bry_fmtr.new_("(~{page_id},'~{cat_name}','','','','','~{cat_type}')\n", "page_id", "cat_name", "cat_type"); public static final String Url_sql = "xowa_categorylinks.sql"; - private static byte[] Escape_for_sql(Xow_wiki wiki, byte[] bry) { - Bry_bfr bfr = wiki.App().Utl_bry_bfr_mkr().Get_b512(); + private static byte[] Escape_for_sql(Xowe_wiki wiki, byte[] bry) { + Bry_bfr bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_b512(); int len = bry.length; boolean dirty = false; for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java index 266899f7d..f9c694cbc 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_base.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.ios.*; public abstract class Xoctg_hiddencat_parser_base extends Xob_sql_dump_base implements Sql_file_parser_cmd { - public Xoctg_hiddencat_parser_base Ctor(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb; return this;} + public Xoctg_hiddencat_parser_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb; return this;} @Override public String Sql_file_name() {return "page_props";} private static final byte Fld_id = 0, Fld_key = 1, Fld_val = 2; private int cur_id = -1; diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java index a2a3c2893..eebba82c6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xoctg_hiddencat_parser_sql extends Xoctg_hiddencat_parser_base { - public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);} private Db_conn conn; + public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} private Db_conn conn; @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.hiddencat"; @Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) { super.Cmd_bgn_hook(bldr, parser); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java index e083e7c28..1267ad489 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_txt.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.ios.*; public class Xoctg_hiddencat_parser_txt extends Xoctg_hiddencat_parser_base { - public Xoctg_hiddencat_parser_txt(Xob_bldr bldr, Xow_wiki wiki) {this.Ctor(bldr, wiki);} + public Xoctg_hiddencat_parser_txt(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.hiddencat_sql"; @Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) { super.Cmd_bgn_hook(bldr, parser); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java index c868c76b5..db1754fe6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_ttl_wkr.java @@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; -import gplx.ios.*; +import gplx.ios.*; import gplx.xowa.tdbs.*; public class Xoctg_hiddencat_ttl_wkr extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble { - public Xoctg_hiddencat_ttl_wkr(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} private Xob_sql_join_wkr_ctg_hidden join_wkr; + public Xoctg_hiddencat_ttl_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} private Xob_sql_join_wkr_ctg_hidden join_wkr; public String Cmd_key() {return KEY;} public static final String KEY = "ctg.hiddencat_ttl"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { @@ -38,18 +38,18 @@ public class Xoctg_hiddencat_ttl_wkr extends Xob_itm_dump_base implements Xob_cm public void Cmd_print() {} } class Xob_sql_join_wkr_ctg_hidden implements Xob_sql_join_wkr { - public Xob_sql_join_wkr_ctg_hidden(Xoa_app app, Xow_wiki wiki, Io_url temp_dir, Io_url src_sql_dir) { + public Xob_sql_join_wkr_ctg_hidden(Xoae_app app, Xowe_wiki wiki, Io_url temp_dir, Io_url src_sql_dir) { this.app = app; this.wiki = wiki; this.dump_url_gen = Io_url_gen_.dir_(temp_dir.GenSubDir("dump")); this.src_sql_dir = src_sql_dir; - } private Xoa_app app = null; Xow_wiki wiki = null; Io_url src_sql_dir; + } private Xoae_app app = null; Xowe_wiki wiki = null; Io_url src_sql_dir; public Io_url_gen Dump_url_gen() {return dump_url_gen;} Io_url_gen dump_url_gen; public Io_line_rdr New_main_rdr() { Io_url[] urls = Io_mgr._.QueryDir_fils(src_sql_dir); return new Io_line_rdr(app.Usr_dlg(), urls).Key_gen_(Io_line_rdr_key_gen_.first_pipe); } public Io_line_rdr New_join_rdr() { - Io_url make_dir = wiki.Fsys_mgr().Url_site_dir(Xow_dir_info_.Tid_id); + Io_url make_dir = wiki.Tdb_fsys_mgr().Url_site_dir(Xotdb_dir_info_.Tid_id); app.Usr_dlg().Prog_many("", "", "getting id files: ~{0}", make_dir.Raw()); Io_url[] urls = Io_mgr._.QueryDir_args(make_dir).Recur_().FilPath_("*.xdat").ExecAsUrlAry(); return new Io_line_rdr(app.Usr_dlg(), urls).Key_gen_(Io_line_rdr_key_gen_.first_pipe).File_skip_line0_(true); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java index 452fb9777..e87b1a64e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_link_idx_wkr.java @@ -16,17 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; -import gplx.core.flds.*; import gplx.ios.*; import gplx.xowa.ctgs.*; +import gplx.core.flds.*; import gplx.ios.*; import gplx.xowa.ctgs.*; import gplx.xowa.tdbs.*; public class Xoctg_link_idx_wkr extends Xob_idx_base { // NOTE: similar functionality to Xob_make_cmd_site, but more complicated due to p,f,s; not inheriting Io_url src_link_dir; int make_fil_max = Int_.MinValue; - public Xoctg_link_idx_wkr(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xoctg_link_idx_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY;} public static final String KEY = "ctg.link_idx"; @Override public void Cmd_bgn_hook() { this.fld_rdr = this.Fld_rdr(); if (src_link_dir == null) src_link_dir = wiki.Fsys_mgr().Tmp_dir().GenSubDir_nest(Xob_categorylinks_txt.KEY, "make"); if (make_fil_max == Int_.MinValue) make_fil_max = Io_mgr.Len_mb; - make_link_mgr = new Xoctg_make_link_mgr(usr_dlg, make_fil_max, wiki.Fsys_mgr()); - make_main_mgr = new Xoctg_make_main_mgr(usr_dlg, make_fil_max, wiki.Fsys_mgr()); + make_link_mgr = new Xoctg_make_link_mgr(usr_dlg, make_fil_max, wiki.Tdb_fsys_mgr()); + make_main_mgr = new Xoctg_make_main_mgr(usr_dlg, make_fil_max, wiki.Tdb_fsys_mgr()); Io_mgr._.DeleteDirDeep_ary(make_link_mgr.Make_dir(), make_main_mgr.Make_dir()); } Gfo_fld_rdr fld_rdr; Xoctg_make_link_mgr make_link_mgr; @Override public void Cmd_run() { @@ -72,14 +72,14 @@ public class Xoctg_link_idx_wkr extends Xob_idx_base { // NOTE: similar function public static final String Invk_src_link_dir_ = "src_link_dir_", Invk_make_fil_max_ = "make_fil_max_", Invk_delete_temp_ = "delete_temp_"; } class Xoctg_make_link_mgr { - public Xoctg_make_link_mgr(Gfo_usr_dlg usr_dlg, int make_fil_max, Xow_fsys_mgr fsys_mgr) { + public Xoctg_make_link_mgr(Gfo_usr_dlg usr_dlg, int make_fil_max, Xotdb_fsys_mgr fsys_mgr) { this.make_fil_max = make_fil_max; subc_grp = new Xoctg_make_link_grp(Xoa_ctg_mgr.Tid_subc, make_fil_max); file_grp = new Xoctg_make_link_grp(Xoa_ctg_mgr.Tid_file, make_fil_max); page_grp = new Xoctg_make_link_grp(Xoa_ctg_mgr.Tid_page, make_fil_max); make_fil_bfr = Bry_bfr.reset_(make_fil_max); make_fld_wtr = Gfo_fld_wtr.xowa_().Bfr_(make_fil_bfr); - make_dir = fsys_mgr.Url_site_dir(Xow_dir_info_.Tid_category2_link); + make_dir = fsys_mgr.Url_site_dir(Xotdb_dir_info_.Tid_category2_link); make_cmd = new Xob_make_cmd_site(usr_dlg, make_dir, make_fil_max); } Gfo_fld_wtr make_fld_wtr; Bry_bfr make_fil_bfr; int make_fil_max; Xob_make_cmd_site make_cmd; public Io_url Make_dir() {return make_dir;} Io_url make_dir; @@ -154,11 +154,11 @@ class Xoctg_idx_data_link { } } class Xoctg_make_main_mgr { - public Xoctg_make_main_mgr(Gfo_usr_dlg usr_dlg, int make_fil_max, Xow_fsys_mgr fsys_mgr) { + public Xoctg_make_main_mgr(Gfo_usr_dlg usr_dlg, int make_fil_max, Xotdb_fsys_mgr fsys_mgr) { this.make_fil_max = make_fil_max; make_fil_bfr = Bry_bfr.reset_(make_fil_max); make_fld_wtr = Gfo_fld_wtr.xowa_().Bfr_(make_fil_bfr); - make_dir = fsys_mgr.Url_site_dir(Xow_dir_info_.Tid_category2_main); + make_dir = fsys_mgr.Url_site_dir(Xotdb_dir_info_.Tid_category2_main); make_cmd = new Xob_make_cmd_site(usr_dlg, make_dir, make_fil_max); src_dir = fsys_mgr.Tmp_dir().GenSubDir_nest(Xoctg_hiddencat_ttl_wkr.KEY, "make"); hidden_rdr = new Io_line_rdr(usr_dlg, Io_mgr._.QueryDir_fils(src_dir)); diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser.java index d31be7d7d..c14dbbb6b 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser.java @@ -17,13 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.langs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; public class Xob_i18n_parser { - public void Load_msgs(boolean dirty, Xol_lang lang, Io_url i18n_fil) { + public static void Load_msgs(boolean dirty, Xol_lang lang, Io_url i18n_fil) { String i18n_str = Io_mgr._.LoadFilStr_args(i18n_fil).MissingIgnored_().Exec(); if (String_.Len_eq_0(i18n_str)) return; Json_itm_wkr__msgs wkr = new Json_itm_wkr__msgs(); wkr.Ctor(dirty, lang.Msg_mgr()); wkr.Exec(Bry_.new_utf8_(i18n_str)); } - public byte[] Xto_gfs(byte[] raw) { + public static byte[] Xto_gfs(byte[] raw) { Json_itm_wkr__gfs wkr = new Json_itm_wkr__gfs(); wkr.Exec(raw); return wkr.Xto_bry(); diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser_tst.java index 87545d751..e2275abea 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xob_i18n_parser_tst.java @@ -45,21 +45,20 @@ public class Xob_i18n_parser_tst { // } } class Xob_i18n_parser_fxt { - private Xob_i18n_parser parser = new Xob_i18n_parser(); public void Clear() { } public void Test_xto_gfs(String raw, String expd) { - byte[] actl = parser.Xto_gfs(Bry_.new_utf8_(raw)); + byte[] actl = Xob_i18n_parser.Xto_gfs(Bry_.new_utf8_(raw)); Tfds.Eq_str_lines(expd, String_.new_utf8_(actl)); } public void Test_load_msgs_dir(String dir_str) { - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xoae_app app = Xoa_app_fxt.app_(); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); Io_url dir_url = Io_url_.new_dir_(dir_str); Io_url[] fil_urls = Io_mgr._.QueryDir_fils(dir_url); int len = fil_urls.length; for (int i = 0; i < len; ++i) { - parser.Load_msgs(false, wiki.Lang(), fil_urls[i]); + Xob_i18n_parser.Load_msgs(false, wiki.Lang(), fil_urls[i]); } } } diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java index 4b0675ba0..a428b28d0 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang.java @@ -16,21 +16,32 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.langs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; +import gplx.xowa.apps.fsys.*; import gplx.xowa.langs.*; public class Xobc_utl_make_lang implements GfoInvkAble { - public OrderedHash Manual_text_bgn_hash() {return manual_text_bgn_hash;} private OrderedHash manual_text_bgn_hash = OrderedHash_.new_bry_(); - public OrderedHash Manual_text_end_hash() {return manual_text_end_hash;} private OrderedHash manual_text_end_hash = OrderedHash_.new_bry_(); - public Xobc_utl_make_lang(Xoa_app app) { - this.app = app; - kwd_mgr = new Xobc_utl_make_lang_kwds(app); - lang_parser = new Xol_mw_lang_parser(app.Msg_log()); - } private Xoa_app app; Xol_mw_lang_parser lang_parser; + private final Xoa_lang_mgr lang_mgr; private final Xoa_fsys_mgr fsys_mgr; Xol_mw_lang_parser lang_parser; + public Xobc_utl_make_lang(Xoa_lang_mgr lang_mgr, Xoa_fsys_mgr fsys_mgr, Gfo_msg_log msg_log) { + this.lang_mgr = lang_mgr; this.fsys_mgr = fsys_mgr; + kwd_mgr = new Xobc_utl_make_lang_kwds(lang_mgr); + lang_parser = new Xol_mw_lang_parser(msg_log); + } public Xobc_utl_make_lang_kwds Kwd_mgr() {return kwd_mgr;} private Xobc_utl_make_lang_kwds kwd_mgr; + public OrderedHash Manual_text_bgn_hash() {return manual_text_bgn_hash;} private final OrderedHash manual_text_bgn_hash = OrderedHash_.new_bry_(); + public OrderedHash Manual_text_end_hash() {return manual_text_end_hash;} private final OrderedHash manual_text_end_hash = OrderedHash_.new_bry_(); public void Bld_all() { - Io_url lang_root = app.Fsys_mgr().Cfg_lang_core_dir().OwnerDir(); // OwnerDir to get "/lang/" in "/cfg/lang/core/" - lang_parser.Parse_mediawiki(app, lang_root.GenSubDir("mediawiki"), kwd_mgr); + Io_url lang_root = fsys_mgr.Cfg_lang_core_dir().OwnerDir(); // OwnerDir to get "/lang/" in "/cfg/lang/core/" + lang_parser.Parse_mediawiki(lang_mgr, lang_root.GenSubDir("mediawiki"), kwd_mgr); kwd_mgr.Add_words(); - lang_parser.Save_langs(app, lang_root.GenSubDir(Xol_mw_lang_parser.Dir_name_core), manual_text_bgn_hash, manual_text_end_hash); - app.Usr_dlg().Prog_many("", "", "done"); + lang_parser.Save_langs(lang_mgr, lang_root.GenSubDir(Xol_mw_lang_parser.Dir_name_core), manual_text_bgn_hash, manual_text_end_hash); + Gfo_usr_dlg_._.Prog_many("", "", "done"); + } + public void Parse_manual_text(byte[] langs_bry, byte[] text, OrderedHash manual_text) { + OrderedHash langs = lang_mgr.Xto_hash(langs_bry); + int langs_len = langs.Count(); + for (int i = 0; i < langs_len; i++) { + Xoac_lang_itm itm = (Xoac_lang_itm)langs.FetchAt(i); + byte[] key_bry = itm.Key_bry(); + manual_text.Add(key_bry, new byte[][] {key_bry, text}); + } } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_kwds)) return kwd_mgr; @@ -40,13 +51,4 @@ public class Xobc_utl_make_lang implements GfoInvkAble { else return GfoInvkAble_.Rv_unhandled; return this; } private static final String Invk_kwds = "keywords", Invk_manual_text_bgn = "manual_text_bgn", Invk_manual_text_end = "manual_text_end", Invk_build_all = "build_all"; - public void Parse_manual_text(byte[] langs_bry, byte[] text, OrderedHash manual_text) { - OrderedHash langs = app.Lang_mgr().Xto_hash(langs_bry); - int langs_len = langs.Count(); - for (int i = 0; i < langs_len; i++) { - Xoac_lang_itm itm = (Xoac_lang_itm)langs.FetchAt(i); - byte[] key_bry = itm.Key_bry(); - manual_text.Add(key_bry, new byte[][] {key_bry, text}); - } - } } diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_kwds.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_kwds.java index c4fa275f0..1988b2c19 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_kwds.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_kwds.java @@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.langs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; +import gplx.xowa.langs.*; public class Xobc_utl_make_lang_kwds implements GfoInvkAble, Xol_lang_transform { - public Xobc_utl_make_lang_kwds(Xoa_app app) {this.app = app;} private Xoa_app app; - + private final Xoa_lang_mgr lang_mgr; + public Xobc_utl_make_lang_kwds(Xoa_lang_mgr lang_mgr) {this.lang_mgr = lang_mgr;} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_set)) Set(m.ReadBry("langs"), m.ReadBry("text")); else if (ctx.Match(k, Invk_keep_trailing_colon)) Parse_keep_trailing_colon(m.ReadBry("langs"), m.ReadBry("text")); @@ -47,7 +48,7 @@ public class Xobc_utl_make_lang_kwds implements GfoInvkAble, Xol_lang_transform int hash_len = hash.Count(); for (int i = 0; i < hash_len; i++) { Xobcl_kwd_lang cfg_lang = (Xobcl_kwd_lang)hash.FetchAt(i); - Xol_lang lang = app.Lang_mgr().Get_by_key(cfg_lang.Key_bry()); if (lang == null) continue; + Xol_lang lang = lang_mgr.Get_by_key(cfg_lang.Key_bry()); if (lang == null) continue; int cfg_grp_len = cfg_lang.Grps().length; for (int j = 0; j < cfg_grp_len; j++) { Xobcl_kwd_row cfg_grp = cfg_lang.Grps()[j]; @@ -81,9 +82,9 @@ public class Xobc_utl_make_lang_kwds implements GfoInvkAble, Xol_lang_transform return cfg_grp.Itms().length == 0 || cfg_grp.Itms_has(kwd_word); } public void Set(byte[] langs_bry, byte[] kwds) { - OrderedHash langs = app.Lang_mgr().Xto_hash(langs_bry); + OrderedHash langs = lang_mgr.Xto_hash(langs_bry); int langs_len = langs.Count(); - Xol_kwd_mgr kwd_mgr = new Xol_kwd_mgr(app.Lang_mgr().Lang_en()); + Xol_kwd_mgr kwd_mgr = new Xol_kwd_mgr(lang_mgr.Lang_en()); for (int i = 0; i < langs_len; i++) { // Xol_lang_itm lang = (Xol_lang_itm)langs.FetchAt(i); Xol_lang_srl.Load_keywords(kwd_mgr, kwds); @@ -94,7 +95,7 @@ public class Xobc_utl_make_lang_kwds implements GfoInvkAble, Xol_lang_transform public void Parse_keep_trailing_colon(byte[] langs_bry, byte[] kwds) {Parse(langs_bry, kwds, trailing_colons);} private OrderedHash trailing_colons = OrderedHash_.new_bry_(); private void Parse(byte[] langs_bry, byte[] kwds, OrderedHash hash) { Xobcl_kwd_row[] itms = Parse(kwds); - OrderedHash langs = app.Lang_mgr().Xto_hash(langs_bry); + OrderedHash langs = lang_mgr.Xto_hash(langs_bry); int langs_len = langs.Count(); for (int i = 0; i < langs_len; i++) { Xoac_lang_itm itm = (Xoac_lang_itm)langs.FetchAt(i); diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_tst.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_tst.java index e7fed2de6..e27dd4d59 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xobc_utl_make_lang_tst.java @@ -145,9 +145,9 @@ class Xobc_utl_make_lang_fxt { public Xobc_utl_make_lang_kwds Kwd_mgr() {return mgr.Kwd_mgr();} public Xobc_utl_make_lang_fxt Clear() { app = Xoa_app_fxt.app_(); - mgr = new Xobc_utl_make_lang(app); + mgr = new Xobc_utl_make_lang(app.Lang_mgr(), app.Fsys_mgr(), app.Msg_log()); return this; - } private String_bldr sb = String_bldr_.new_(); private Xoa_app app; + } private String_bldr sb = String_bldr_.new_(); private Xoae_app app; public Xobcl_kwd_row row_(String key, String... itms) {return new Xobcl_kwd_row(Bry_.new_ascii_(key), Bry_.Ary(itms));} public void Parse_rows(String raw, Xobcl_kwd_row... expd) {Tfds.Eq_str_lines(Xto_str(expd), Xto_str(Xobc_utl_make_lang_kwds.Parse(Bry_.new_ascii_(raw))));} public void Ini_file_mw_core(String lang, String raw) { @@ -155,7 +155,7 @@ class Xobc_utl_make_lang_fxt { Io_mgr._.SaveFilStr(fil, raw); } public void Tst_file_xo(String lang, String expd) { - Io_url fil = Xol_lang_.xo_lang_fil_(app, lang); + Io_url fil = Xol_lang_.xo_lang_fil_(app.Fsys_mgr(), lang); Tfds.Eq_str_lines(expd, Io_mgr._.LoadFilStr(fil)); } private String Xto_str(Xobcl_kwd_row[] expd) { diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser.java index b59c398a8..ed2bcdea6 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser.java @@ -17,19 +17,17 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.langs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.intl.*; import gplx.php.*; -import gplx.xowa.langs.*; import gplx.xowa.langs.numbers.*; +import gplx.xowa.apps.fsys.*; import gplx.xowa.langs.*; import gplx.xowa.langs.numbers.*; public class Xol_mw_lang_parser { private Php_parser parser = new Php_parser(); private Php_evaluator evaluator; public Xol_mw_lang_parser(Gfo_msg_log msg_log) {evaluator = new Php_evaluator(msg_log);} - public void Bld_all(Xoa_app app) {Bld_all(app, Xol_lang_transform_null._);} - public static final String Dir_name_core = "core"; - public void Bld_all(Xoa_app app, Xol_lang_transform lang_transform) { - Io_url lang_root = app.Fsys_mgr().Cfg_lang_core_dir().OwnerDir(); - Parse_mediawiki(app, lang_root.GenSubDir("mediawiki"), lang_transform); - Save_langs(app, lang_root.GenSubDir(Xol_mw_lang_parser.Dir_name_core), OrderedHash_.new_bry_(), OrderedHash_.new_bry_()); + public void Bld_all(Xoa_lang_mgr lang_mgr, Xoa_fsys_mgr fsys_mgr) {Bld_all(lang_mgr, fsys_mgr, Xol_lang_transform_null._);} + public void Bld_all(Xoa_lang_mgr lang_mgr, Xoa_fsys_mgr fsys_mgr, Xol_lang_transform lang_transform) { + Io_url lang_root = fsys_mgr.Cfg_lang_core_dir().OwnerDir(); + Parse_mediawiki(lang_mgr, lang_root.GenSubDir("mediawiki"), lang_transform); + Save_langs(lang_mgr, lang_root.GenSubDir(Xol_mw_lang_parser.Dir_name_core), OrderedHash_.new_bry_(), OrderedHash_.new_bry_()); } - public void Save_langs(Xoa_app app, Io_url xowa_root, OrderedHash manual_text_bgn, OrderedHash manual_text_end) { - Xoa_lang_mgr lang_mgr = app.Lang_mgr(); + public void Save_langs(Xoa_lang_mgr lang_mgr, Io_url xowa_root, OrderedHash manual_text_bgn, OrderedHash manual_text_end) { int len = lang_mgr.Len(); Gfs_bldr bldr = new Gfs_bldr(); for (int i = 0; i < len; i++) { @@ -59,14 +57,14 @@ public class Xol_mw_lang_parser { byte[][] itm = (byte[][])manual_text_hash.Fetch(Bry_.new_utf8_(lang_key)); if (itm != null) bldr.Bfr().Add(itm[1]); } - public void Parse_mediawiki(Xoa_app app, Io_url mediawiki_root, Xol_lang_transform lang_transform) { + public void Parse_mediawiki(Xoa_lang_mgr lang_mgr, Io_url mediawiki_root, Xol_lang_transform lang_transform) { Bry_bfr bfr = Bry_bfr.new_(); - Parse_file_core_php(app, mediawiki_root, bfr, lang_transform); - Parse_file_xtns_php(app, mediawiki_root, bfr, lang_transform); - Parse_file_json(app, bfr, lang_transform, mediawiki_root.GenSubDir("core_json")); - Parse_file_json(app, bfr, lang_transform, mediawiki_root.GenSubDir("xtns_json")); + Parse_file_core_php(lang_mgr, mediawiki_root, bfr, lang_transform); + Parse_file_xtns_php(lang_mgr, mediawiki_root, bfr, lang_transform); + Parse_file_json(lang_mgr, bfr, lang_transform, mediawiki_root.GenSubDir("core_json")); + Parse_file_json(lang_mgr, bfr, lang_transform, mediawiki_root.GenSubDir("xtns_json")); } - private void Parse_file_core_php(Xoa_app app, Io_url mediawiki_root, Bry_bfr bfr, Xol_lang_transform lang_transform) { + private void Parse_file_core_php(Xoa_lang_mgr lang_mgr, Io_url mediawiki_root, Bry_bfr bfr, Xol_lang_transform lang_transform) { Io_url dir = mediawiki_root.GenSubDir("core_php"); Io_url[] urls = Io_mgr._.QueryDir_fils(dir); int len = urls.length; @@ -76,12 +74,12 @@ public class Xol_mw_lang_parser { String lang_key = String_.Replace(String_.Lower(String_.Mid(url.NameOnly(), 8)), "_", "-"); // 8=Messages.length; lower b/c format is MessagesEn.php (need "en") // if (String_.In(lang_key, "qqq", "enrtl", "bbc", "bbc-latn")) continue; String text = Io_mgr._.LoadFilStr(url); - Xol_lang lang = app.Lang_mgr().Get_by_key_or_new(Bry_.new_utf8_(lang_key)); + Xol_lang lang = lang_mgr.Get_by_key_or_new(Bry_.new_utf8_(lang_key)); this.Parse_core(text, lang, bfr, lang_transform); } catch (Exception exc) {Err_.Noop(exc); Tfds.WriteText("failed to parse " + url.NameOnly() + Err_.Message_gplx_brief(exc) + "\n");} } } - private void Parse_file_xtns_php(Xoa_app app, Io_url mediawiki_root, Bry_bfr bfr, Xol_lang_transform lang_transform) { + private void Parse_file_xtns_php(Xoa_lang_mgr lang_mgr, Io_url mediawiki_root, Bry_bfr bfr, Xol_lang_transform lang_transform) { Io_url dir = mediawiki_root.GenSubDir("xtns_php"); Io_url[] urls = Io_mgr._.QueryDir_fils(dir); int len = urls.length; @@ -90,14 +88,13 @@ public class Xol_mw_lang_parser { try { String text = Io_mgr._.LoadFilStr(url); boolean prepend_hash = String_.Eq("ParserFunctions.i18n.magic", url.NameOnly()); - this.Parse_xtn(text, url, app, bfr, prepend_hash, lang_transform); + this.Parse_xtn(text, url, lang_mgr, bfr, prepend_hash, lang_transform); } catch (Exception exc) {Err_.Noop(exc); Tfds.WriteText("failed to parse " + url.NameOnly() + Err_.Message_gplx_brief(exc));} } } - private void Parse_file_json(Xoa_app app, Bry_bfr bfr, Xol_lang_transform lang_transform, Io_url root_dir) { + private void Parse_file_json(Xoa_lang_mgr lang_mgr, Bry_bfr bfr, Xol_lang_transform lang_transform, Io_url root_dir) { Io_url[] dirs = Io_mgr._.QueryDir_args(root_dir).DirOnly_().ExecAsUrlAry(); int dirs_len = dirs.length; - gplx.xowa.bldrs.langs.Xob_i18n_parser i18n_parser = app.Bldr().I18n_parser(); for (int i = 0; i < dirs_len; i++) { Io_url dir = dirs[i]; Io_url[] fils = Io_mgr._.QueryDir_args(dir).ExecAsUrlAry(); @@ -105,8 +102,8 @@ public class Xol_mw_lang_parser { for (int j = 0; j < fils_len; ++j) { Io_url fil = fils[j]; try { - Xol_lang lang = app.Lang_mgr().Get_by_key_or_new(Bry_.new_utf8_(fil.NameOnly())); - i18n_parser.Load_msgs(true, lang, fil); + Xol_lang lang = lang_mgr.Get_by_key_or_new(Bry_.new_utf8_(fil.NameOnly())); + Xob_i18n_parser.Load_msgs(true, lang, fil); } catch (Exception exc) {Err_.Noop(exc); Tfds.WriteText(String_.Format("failed to parse json file; url={0} err={1}", fil.Raw(), Err_.Message_gplx_brief(exc)));} } } @@ -169,7 +166,7 @@ public class Xol_mw_lang_parser { } // public static String[] Lang_skip = new String[] {"qqq", "enrtl", "akz", "sxu", "test", "mwv", "rup", "hu-formal", "tzm", "bbc", "bbc-latn", "lrc", "ttt", "gom", "gom-latn"}; public static String[] Lang_skip = String_.Ary_empty; - public void Parse_xtn(String text, Io_url url, Xoa_app app, Bry_bfr bfr, boolean prepend_hash, Xol_lang_transform lang_transform) { + public void Parse_xtn(String text, Io_url url, Xoa_lang_mgr lang_mgr, Bry_bfr bfr, boolean prepend_hash, Xol_lang_transform lang_transform) { evaluator.Clear(); parser.Parse_tkns(text, evaluator); ListAdp bry_list = ListAdp_.new_(); @@ -185,7 +182,7 @@ public class Xol_mw_lang_parser { byte[] lang_key = subs[0].Val_obj_bry(); try { if (String_.In(String_.new_utf8_(lang_key), Lang_skip)) continue; - Xol_lang lang = app.Lang_mgr().Get_by_key_or_new(lang_key); + Xol_lang lang = lang_mgr.Get_by_key_or_new(lang_key); Byte_obj_val stub = (Byte_obj_val)o; switch (stub.Val()) { case Tid_messages: @@ -367,4 +364,5 @@ public class Xol_mw_lang_parser { Object o = mw_names.Match_exact(src, 0, src.length); return o == null ? Xow_ns_.Id_null : ((Int_obj_val)o).Val(); } private static Btrie_slim_mgr mw_names; + public static final String Dir_name_core = "core"; } diff --git a/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser_tst.java index 787dec0c1..c3faa22b0 100644 --- a/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/langs/Xol_mw_lang_parser_tst.java @@ -236,21 +236,21 @@ public class Xol_mw_lang_parser_tst { } } class Xol_mw_lang_parser_fxt { - Xoa_app app; Xow_wiki wiki; private Xop_fxt fxt; + Xoae_app app; Xowe_wiki wiki; private Xop_fxt fxt; Xol_mw_lang_parser parser = new Xol_mw_lang_parser(Gfo_msg_log.Test()); Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public void Clear() { if (app == null) { app = Xoa_app_fxt.app_(); - wiki = Xoa_app_fxt.wiki_tst_(app); - fxt = new Xop_fxt(app, wiki); } app.Lang_mgr().Clear();// NOTE: always clear the lang lang = app.Lang_mgr().Get_by_key_or_new(Bry_.new_ascii_("fr")); - GfoInvkAble_.InvkCmd_val(wiki, Xow_wiki.Invk_lang_, Bry_.new_ascii_("fr")); + wiki = Xoa_app_fxt.wiki_(app, "en.wikipedia.org", lang); + fxt = new Xop_fxt(app, wiki); + lang.Kwd_mgr().Clear(); lang.Msg_mgr().Clear(); // NOTE: clear kwds and msgs else they will be printed to file; this line must go last b/c various xtns will fill in kwds dynamically } public Xol_lang Lang() {return lang;} private Xol_lang lang; public void Num_fmt_tst(String raw, String expd) {Tfds.Eq(expd, String_.new_utf8_(lang.Num_mgr().Format_num(Bry_.new_utf8_(raw))));} - public void Run_bld_all() {parser.Bld_all(app);} + public void Run_bld_all() {parser.Bld_all(app.Lang_mgr(), app.Fsys_mgr());} public void Save_file(String path, String... lines) { Io_mgr._.SaveFilStr(Io_url_.mem_fil_(path), String_.Concat_lines_nl(lines)); } @@ -260,7 +260,7 @@ class Xol_mw_lang_parser_fxt { Tfds.Eq_str_lines(expd, actl); } public Xol_mw_lang_parser_fxt Parse_core(String raw) {parser.Parse_core(raw, lang, tmp_bfr, Xol_lang_transform_null._); return this;} - public Xol_mw_lang_parser_fxt Parse_xtn (String raw) {parser.Parse_xtn(raw, Io_url_.Null, app, tmp_bfr, false, Xol_lang_transform_null._); lang.Evt_lang_changed(); return this;} + public Xol_mw_lang_parser_fxt Parse_xtn (String raw) {parser.Parse_xtn(raw, Io_url_.Null, app.Lang_mgr(), tmp_bfr, false, Xol_lang_transform_null._); lang.Evt_lang_changed(); return this;} public Xol_mw_lang_parser_fxt Tst_keyword(int id, boolean case_sensitive, String... words) { Xol_kwd_grp lst = lang.Kwd_mgr().Get_at(id); if (lst == null) throw Err_.new_("list should not be null"); Tfds.Eq(case_sensitive, lst.Case_match()); diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java index 2eeda3000..685db3a1a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java @@ -31,7 +31,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo private Xobu_poll_mgr poll_mgr; private int poll_interval = 5000; private Xob_rate_mgr rate_mgr = new Xob_rate_mgr(); public abstract String Cmd_key(); - @Override protected void Cmd_ctor_end(Xob_bldr bldr, Xow_wiki wiki) { + @Override protected void Cmd_ctor_end(Xob_bldr bldr, Xowe_wiki wiki) { poll_mgr = new Xobu_poll_mgr(bldr.App()); // init in ctor so gfs can invoke methods } public void Cmd_bgn(Xob_bldr bldr) { @@ -54,7 +54,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo bmk_mgr.Reset(); Init_reset(conn); } - bmk_mgr.Load(wiki.App(), this); + bmk_mgr.Load(wiki.Appe(), this); Cmd_bgn_end(); } protected abstract void Cmd_bgn_end(); @@ -214,7 +214,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo private static final String GRP_KEY = "xowa.bldr.parse"; } class Xob_dump_mgr_base_ { - public static void Load_all_tmpls(Gfo_usr_dlg usr_dlg, Xow_wiki wiki, Xob_dump_src_id page_src) { + public static void Load_all_tmpls(Gfo_usr_dlg usr_dlg, Xowe_wiki wiki, Xob_dump_src_id page_src) { ListAdp pages = ListAdp_.new_(); Xow_ns ns_tmpl = wiki.Ns_mgr().Ns_template(); Xow_defn_cache defn_cache = wiki.Cache_mgr().Defn_cache(); @@ -243,7 +243,7 @@ class Xob_dump_bmk_mgr { private Bry_bfr save_bfr = Bry_bfr.reset_(1024); public Io_url Cfg_url() {return cfg_url;} public Xob_dump_bmk_mgr Cfg_url_(Io_url v) {cfg_url = v; return this;} private Io_url cfg_url; public void Reset() {Io_mgr._.DeleteFil(cfg_url);} - public void Load(Xoa_app app, Xob_dump_mgr_base dump_mgr) { + public void Load(Xoae_app app, Xob_dump_mgr_base dump_mgr) { app.Gfs_mgr().Run_url_for(dump_mgr, cfg_url); } public void Save(int ns_id, int db_id, int pg_id) { diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java index 9166d2cfc..9ac39b670 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*; class Xob_dump_src_ttl implements Xob_parse_all_db { private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xodb_file[] text_files_ary; private int text_files_len; private byte redirect; - public Xob_dump_src_ttl Init(Xow_wiki wiki, int limit, byte redirect) { + public Xob_dump_src_ttl Init(Xowe_wiki wiki, int limit, byte redirect) { this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect; page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Fsys_mgr().Conn_core(), limit, redirect); text_files_ary = Init_text_files_ary(db_mgr.Fsys_mgr()); @@ -51,7 +51,7 @@ class Xob_dump_src_id { private Xodb_mgr_sql db_mgr; private byte redirect; private String page_db_url; private int size_max; private Db_stmt text_stmt; int cur_text_db_idx = -1; - public Xob_dump_src_id Init(Xow_wiki wiki, byte redirect, int size_max) { + public Xob_dump_src_id Init(Xowe_wiki wiki, byte redirect, int size_max) { this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect; this.size_max = size_max; page_db_url = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_core).Url().Raw(); @@ -79,7 +79,7 @@ class Xob_dump_src_id { Xodb_file text_db = db_mgr.Fsys_mgr().Get_by_idx(text_db_idx); Db_conn conn = text_db.Conn(); String sql = String_.Format(Sql_select, New_rdr__redirect_clause(redirect)); - text_stmt = conn.New_stmt(Db_qry_sql.rdr_(sql)); + text_stmt = conn.Stmt_new(Db_qry_sql.rdr_(sql)); } return text_stmt.Clear().Val_int(prv_id).Val_int(cur_ns).Exec_select(); } @@ -89,7 +89,7 @@ class Xob_dump_src_id { rv.Id_(rdr.ReadInt(Xodb_page_tbl.Fld_page_id)); rv.Ttl_wo_ns_(rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title)); byte[] old_text = rdr.ReadBry(Xodb_text_tbl.Fld_old_text); - old_text = db_mgr.Wiki().App().Zip_mgr().Unzip(db_mgr.Data_storage_format(), old_text); + old_text = db_mgr.Wiki().Appe().Zip_mgr().Unzip(db_mgr.Data_storage_format(), old_text); rv.Text_(old_text); return rv; } diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java index 8c26678d0..a2a501f01 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd { private Xodb_file[] db_files; - public Xob_text_db_prep(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_text_db_prep(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "wiki.text_db_prep"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java index 93781e93a..967e5833f 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_xfer_update_cmd.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.files.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; import gplx.xowa.bldrs.files.*; public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd { private Io_url prv_url; - public Xob_xfer_update_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_xfer_update_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "oimg.xfer_update"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -28,7 +28,7 @@ public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd { Xodb_db_file cur_file = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()); Db_conn conn = cur_file.Conn(); if (prv_url == null) { - prv_url = wiki.App().Fsys_mgr().File_dir().GenSubFil_nest(wiki.Domain_str(), "bldr", Xodb_db_file.Name__file_make); + prv_url = wiki.Appe().Fsys_mgr().File_dir().GenSubFil_nest(wiki.Domain_str(), "bldr", Xodb_db_file.Name__file_make); } // run sql diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java index 676675d51..6a6952023 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xodb_db_file.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xodb_db_file { Xodb_db_file(Io_url url, Db_conn conn, boolean created) {this.url = url; this.conn = conn; this.created = created;} public Io_url Url() {return url;} private Io_url url; diff --git a/400_xowa/src/gplx/xowa/bldrs/servers/Xob_core_server.java b/400_xowa/src/gplx/xowa/bldrs/servers/Xob_core_server.java index e51bacc21..900accbe8 100644 --- a/400_xowa/src/gplx/xowa/bldrs/servers/Xob_core_server.java +++ b/400_xowa/src/gplx/xowa/bldrs/servers/Xob_core_server.java @@ -20,7 +20,7 @@ import gplx.xowa.setup.maints.*; import gplx.xowa.bldrs.servers.jobs.*; public class Xob_core_server { private Xob_wmf_mgr wmf_mgr; - public Xob_core_server(Xoa_app app) { + public Xob_core_server(Xoae_app app) { wmf_mgr = new Xob_wmf_mgr(app); } public void Server_init() { diff --git a/400_xowa/src/gplx/xowa/bldrs/servers/Xob_wmf_mgr.java b/400_xowa/src/gplx/xowa/bldrs/servers/Xob_wmf_mgr.java index fe5466104..39013c3e4 100644 --- a/400_xowa/src/gplx/xowa/bldrs/servers/Xob_wmf_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/servers/Xob_wmf_mgr.java @@ -19,7 +19,7 @@ package gplx.xowa.bldrs.servers; import gplx.*; import gplx.xowa.*; import gplx. import gplx.xowa.setup.maints.*; public class Xob_wmf_mgr { private Xoa_maint_mgr maint_mgr; - public Xob_wmf_mgr(Xoa_app app) { + public Xob_wmf_mgr(Xoae_app app) { maint_mgr = new Xoa_maint_mgr(app); } public int Sync_interval() {return sync_interval;} public Xob_wmf_mgr Sync_interval_(int v) {sync_interval = v; return this;} private int sync_interval = 60 * 24; // in minutes diff --git a/400_xowa/src/gplx/xowa/bldrs/wiki_cfgs/Xoi_wiki_props_api_tst.java b/400_xowa/src/gplx/xowa/bldrs/wiki_cfgs/Xoi_wiki_props_api_tst.java index 789aadeb2..f8ad0c574 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wiki_cfgs/Xoi_wiki_props_api_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/wiki_cfgs/Xoi_wiki_props_api_tst.java @@ -103,7 +103,7 @@ class Xob_subpage_tst_fxt { mgr.Clear(); hash.Clear(); return this; - } private Xoa_app app; Xob_wiki_cfg_bldr mgr; OrderedHash hash = OrderedHash_.new_(); + } private Xoae_app app; Xob_wiki_cfg_bldr mgr; OrderedHash hash = OrderedHash_.new_(); private Xob_subpage_parser parser = new Xob_subpage_parser(); public Xob_subpage_tst_fxt Init_cmd(String wiki, String key, String text) { // mgr.Itms_get_or_new(wiki).Itms_add(key, text); diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java index d8030c425..86641b54d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java @@ -22,7 +22,7 @@ public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, Gf private Xob_wiki_image_tbl tbl_image = new Xob_wiki_image_tbl(); private byte[] cur_ttl, cur_media_type, cur_minor_mime, cur_timestamp; private int cur_size, cur_width, cur_height, cur_bits, cur_ext_id; private int commit_count = 10000; - public Xob_wiki_image_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_wiki_image_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY;} public static final String KEY = "wiki.image"; public Io_url Src_fil() {return src_fil;} public Xob_wiki_image_sql Src_fil_(Io_url v) {src_fil = v; return this;} private Io_url src_fil; public Sql_file_parser Parser() {return parser;} private Sql_file_parser parser = new Sql_file_parser(); diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java index 43ddbb57b..5cf8a3b43 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*; -import gplx.dbs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; public class Xob_wiki_image_tbl { public Xob_wiki_image_tbl Create_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql); return this;} public Xob_wiki_image_tbl Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_img_name); return this;} diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java index 7ea6430da..d1881760a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java @@ -20,7 +20,7 @@ import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import g public class Xob_redirect_cmd extends Xob_dump_mgr_base { private Db_conn conn; private Xob_redirect_tbl redirect_tbl; private Xodb_mgr_sql db_mgr; private Xop_redirect_mgr redirect_mgr; private Url_encoder encoder; - public Xob_redirect_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_redirect_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY_redirect;} public static final String KEY_redirect = "wiki.redirect"; @Override public int[] Init_ns_ary() {return Int_.Ary(Xow_ns_.Id_file);} // restrict to file ns @Override public byte Init_redirect() {return Bool_.Y_byte;} // restrict to redirects @@ -30,10 +30,9 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base { } @Override protected Db_conn Init_db_file() { this.db_mgr = wiki.Db_mgr_as_sql(); - Xoa_app app = bldr.App(); redirect_mgr = wiki.Redirect_mgr(); - encoder = app.Encoder_mgr().Url_ttl(); - redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), app.Encoder_mgr().Url_ttl()).Create_table(); + encoder = Xoa_app_.Utl_encoder_mgr().Url_ttl(); + redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table(); conn = redirect_tbl.Conn(); conn.Txn_mgr().Txn_bgn_if_none(); return conn; diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java index 8bbe18991..9a5c16c28 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.wikis.redirects; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_redirect_tbl { private Url_encoder encoder; private Db_stmt insert_stmt; public Xob_redirect_tbl(Io_url root_dir, Url_encoder encoder) { diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_siteinfo_parser.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_siteinfo_parser.java index 805fe9c66..56638b347 100644 --- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_siteinfo_parser.java +++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_siteinfo_parser.java @@ -30,7 +30,7 @@ public class Xob_siteinfo_parser { catch (Exception e) {Err_.Noop(e); return null;} finally {rdr.Rls();} } - public static void Siteinfo_parse(Xow_wiki wiki, Gfo_usr_dlg usr_dlg, String siteinfo_str) { + public static void Siteinfo_parse(Xowe_wiki wiki, Gfo_usr_dlg usr_dlg, String siteinfo_str) { XmlDoc xdoc = XmlDoc_.parse_(siteinfo_str); XmlNde root = xdoc.Root(); int root_subs_len = root.SubNdes().Count(); @@ -66,7 +66,7 @@ public class Xob_siteinfo_parser { bgn_pos += wiki_bry.length; // position bgn after "/wiki/" return Bry_.Mid(url, bgn_pos, url.length); } - private static void Siteinfo_parse_ns(Xow_wiki wiki, Gfo_usr_dlg usr_dlg, XmlNde ns_nde) { + private static void Siteinfo_parse_ns(Xowe_wiki wiki, Gfo_usr_dlg usr_dlg, XmlNde ns_nde) { int subs_len = ns_nde.SubNdes().Count(); Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); ns_mgr.Clear(); // NOTE: wipe out any preexisting ns; use siteinfo.xml as definitive list diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java index 763301ddf..2559e6889 100644 --- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java @@ -21,7 +21,7 @@ import gplx.ios.*; public class Xob_xml_parser_tst { @Before public void init() { Io_mgr._.InitEngine_mem(); - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); bldr = new Xob_bldr(app); } private Xow_ns_mgr ns_mgr = Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.Ascii()); @Test public void Basic_docs_1() { diff --git a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp.java b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp.java index 87766a02c..2d2becb36 100644 --- a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp.java +++ b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp.java @@ -35,10 +35,10 @@ public class Xoa_cfg_grp { } return rv; } - public Xoa_cfg_itm Get_itm_by_wiki(byte[] domain, byte wiki_tid) { + public Xoa_cfg_itm Get_itm_by_wiki(byte[] domain, int wiki_tid) { Xoa_cfg_itm rv = (Xoa_cfg_itm)hash.Fetch(domain); if (rv == null) { // match by domain failed; try type - rv = (Xoa_cfg_itm)hash.Fetch(Xow_wiki_domain_.Key_by_tid(wiki_tid)); + rv = (Xoa_cfg_itm)hash.Fetch(Xow_domain_.Tid__get_bry(wiki_tid)); if (rv == null) // match by type failed; try all rv = (Xoa_cfg_itm)hash.Fetch(Xoa_cfg_grp_tid.Key_all_bry); if (rv == null) // match by type failed; try app diff --git a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp_tid.java b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp_tid.java index 9bfe59bd1..ea8c18b49 100644 --- a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp_tid.java +++ b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_grp_tid.java @@ -20,7 +20,7 @@ import gplx.xowa.wikis.*; public class Xoa_cfg_grp_tid { public byte Tid() {return tid;} private byte tid; public byte[] Key() {return key;} private byte[] key; - public byte Wiki_tid() {return wiki_tid;} private byte wiki_tid; + public int Wiki_tid() {return wiki_tid;} private int wiki_tid; public static final byte Tid_null = 0, Tid_all = 1, Tid_type = 2, Tid_wiki = 3, Tid_app = 4; public static final String Key_app_str = "app"; public static final byte[] Key_all_bry = Bry_.new_ascii_("*"), Key_app_bry = Bry_.new_ascii_(Key_app_str); @@ -31,12 +31,12 @@ public class Xoa_cfg_grp_tid { if (Bry_.Eq(key, Key_all_bry)) rv.tid = Tid_all; else if (Bry_.Eq(key, Key_app_bry)) rv.tid = Tid_app; else { - Xow_wiki_domain wiki_type = Xow_wiki_domain_.parse_by_domain(key); - if (wiki_type.Wiki_tid() == Xow_wiki_domain_.Tid_other) + Xow_domain wiki_type = Xow_domain_.parse(key); + if (wiki_type.Domain_tid() == Xow_domain_.Tid_int_other) rv.tid = Tid_wiki; else { rv.tid = Tid_type; - rv.wiki_tid = wiki_type.Wiki_tid(); + rv.wiki_tid = wiki_type.Domain_tid(); } } rv.key = key; diff --git a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr.java b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr.java index c8a3e3a5b..09e3be4de 100644 --- a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr.java +++ b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; public class Xoa_cfg_mgr implements GfoInvkAble { - public Xoa_cfg_mgr(Xoa_app app) {this.app = app;} private OrderedHash hash = OrderedHash_.new_bry_(); - public Xoa_app App() {return app;} private Xoa_app app; + public Xoa_cfg_mgr(Xoae_app app) {this.app = app;} private OrderedHash hash = OrderedHash_.new_bry_(); + public Xoae_app App() {return app;} private Xoae_app app; public Xoa_cfg_itm Get_itm_or_null(byte[] grp_key, byte[] itm_key) { Xoa_cfg_grp grp = (Xoa_cfg_grp)hash.Fetch(grp_key); return grp == null ? null : grp.Get_itm_or_null(itm_key); @@ -38,12 +38,12 @@ public class Xoa_cfg_mgr implements GfoInvkAble { } public void Set_by_app(String grp_key, String val) {Set(Bry_.new_utf8_(grp_key), Xoa_cfg_grp_tid.Key_app_bry, val);} public void Set_by_all(String grp_key, String val) {Set(Bry_.new_utf8_(grp_key), Xoa_cfg_grp_tid.Key_all_bry, val);} - public void Set_by_type(String grp_key, byte tid, String val) {Set(Bry_.new_utf8_(grp_key), Xow_wiki_domain_.Key_by_tid(tid), val);} + public void Set_by_type(String grp_key, byte tid, String val) {Set(Bry_.new_utf8_(grp_key), Xow_domain_.Tid__get_bry(tid), val);} private void Set(byte[] grp_key, byte[] tid_key, String val) { Xoa_cfg_itm itm = Get_itm_or_make(grp_key, tid_key); itm.Val_(val); } - public void Init(Xow_wiki wiki) { + public void Init(Xowe_wiki wiki) { int len = hash.Count(); for (int i = 0; i < len; i++) { Xoa_cfg_grp grp = (Xoa_cfg_grp)hash.FetchAt(i); @@ -65,7 +65,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble { int wiki_count = app.Wiki_mgr().Count(); boolean rv = true; for (int i = 0; i < wiki_count; i++) { - Xow_wiki wiki = app.Wiki_mgr().Get_at(i); + Xowe_wiki wiki = app.Wiki_mgr().Get_at(i); if (all || wiki.Domain_tid() == grp_tid.Wiki_tid()) { if (!Eval_set(wiki, grp.Key_str(), itm.Val())) rv = false; @@ -73,7 +73,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble { } return rv; case Xoa_cfg_grp_tid.Tid_wiki: { - Xow_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(itm.Key()); + Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(itm.Key()); if (wiki == null) return true; // wiki not installed; return true (no error) return Eval_set(wiki, grp.Key_str(), itm.Val()); } diff --git a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr_tst.java b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr_tst.java index 3a227759d..2838ec5fc 100644 --- a/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/cfgs/Xoa_cfg_mgr_tst.java @@ -46,7 +46,7 @@ class Xoa_cfg_mgr_fxt { app = Xoa_app_fxt.app_(); cfg_mgr = app.Cfg_mgr(); // } - } private Xoa_app app; Xoa_cfg_mgr cfg_mgr; + } private Xoae_app app; Xoa_cfg_mgr cfg_mgr; public void Init_cfg_all(String key, String val) {Init_cfg(key, val, Xoa_cfg_grp_tid.Key_all_bry);} public void Init_cfg_app(String key, String val) {Init_cfg(key, val, Xoa_cfg_grp_tid.Key_app_bry);} private void Init_cfg(String key, String val, byte[] tid) { @@ -54,18 +54,18 @@ class Xoa_cfg_mgr_fxt { itm.Val_(val); itm.Db_customized_(false); } - public Xow_wiki Exec_make_wiki(String wiki_key_str) {return Exec_make_wiki(Bry_.new_ascii_(wiki_key_str));} - public Xow_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_key_or_make(wiki_key_bry);} + public Xowe_wiki Exec_make_wiki(String wiki_key_str) {return Exec_make_wiki(Bry_.new_ascii_(wiki_key_str));} + public Xowe_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_key_or_make(wiki_key_bry);} public void Test_init_wiki(String wiki_key_str, String itm_key_str, String expd_val) { byte[] wiki_key_bry = Bry_.new_ascii_(wiki_key_str); - Xow_wiki wiki = Exec_make_wiki(wiki_key_bry); + Xowe_wiki wiki = Exec_make_wiki(wiki_key_bry); wiki.Init_assert(); Test_cfg_get(wiki, itm_key_str, expd_val); } public void Test_cfg_set(String cfg_msg, String wiki_key_str, String prop_key, String expd_val) { byte[] wiki_key_bry = Bry_.new_ascii_(wiki_key_str); app.Gfs_mgr().Run_str_for(app, cfg_msg); - Xow_wiki wiki = Exec_make_wiki(wiki_key_bry); + Xowe_wiki wiki = Exec_make_wiki(wiki_key_bry); Test_cfg_get(wiki, prop_key, expd_val); } private void Test_cfg_get(GfoInvkAble invk, String prop, String expd) { diff --git a/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_gui_mgr.java b/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_gui_mgr.java index fb1ef3c28..2efcbab36 100644 --- a/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_gui_mgr.java +++ b/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_gui_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.cfgs.*; public class Xocfg_gui_mgr implements GfoInvkAble { - public Xocfg_gui_mgr(Xoa_app app) { + public Xocfg_gui_mgr(Xoae_app app) { win_cfg = new Xocfg_win(app); } public Xocfg_win Win() {return win_cfg;} private Xocfg_win win_cfg; diff --git a/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_win.java b/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_win.java index 84ee0c337..653cf5cb1 100644 --- a/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_win.java +++ b/400_xowa/src/gplx/xowa/cfgs/gui/Xocfg_win.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.cfgs.*; public class Xocfg_win implements GfoInvkAble { - public Xocfg_win(Xoa_app app) {} + public Xocfg_win(Xoae_app app) {} public Xol_font_info Font() {return font;} private Xol_font_info font = new Xol_font_info("Arial", 8, gplx.gfui.FontStyleAdp_.Plain); public Bry_fmtr Search_box_fmtr() {return search_box_fmtr;} private Bry_fmtr search_box_fmtr = Bry_fmtr.new_("Special:Allpages?from=", "search"); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_itm_srl.java b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_itm_srl.java index 79a81aeac..416e2f467 100644 --- a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_itm_srl.java +++ b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_itm_srl.java @@ -19,8 +19,8 @@ package gplx.xowa.cfgs2; import gplx.*; import gplx.xowa.*; import gplx.gfui.*; import gplx.xowa.gui.bnds.*; import gplx.gfs.*; import gplx.xowa.apps.*; public class Xocfg_bnd_itm_srl implements GfoInvkAble { - private Xoa_app app; - public Xocfg_bnd_itm_srl(Xoa_app app, String key) { + private Xoae_app app; + public Xocfg_bnd_itm_srl(Xoae_app app, String key) { this.app = app; this.key = key; } @@ -35,13 +35,13 @@ public class Xocfg_bnd_itm_srl implements GfoInvkAble { return this; } private static final String Invk_src_ = "src_", Invk_box_ = "box_", Invk_ipt_ = "ipt_"; - public static String Src(Xoa_app app, int box, IptArg ipt) { // box_('browser').ipt_('mod.c+key.q'); + public static String Src(Xoae_app app, int box, IptArg ipt) { // box_('browser').ipt_('mod.c+key.q'); Gfs_wtr wtr = app.Gfs_mgr().Wtr(); wtr.Add_set_eq(Key_box, Bry_.new_ascii_(Xog_bnd_box_.Xto_sys_str(box))); wtr.Add_set_eq(Key_ipt, Bry_.new_ascii_(ipt.Key())); return wtr.Bfr().Xto_str_and_clear(); } private static final byte[] Key_box = Bry_.new_ascii_("box"), Key_ipt = Bry_.new_ascii_("ipt"); - public static void Src_(Xoa_app app, Xocfg_bnd_itm_srl itm, String v) { + public static void Src_(Xoae_app app, Xocfg_bnd_itm_srl itm, String v) { Xoa_gfs_mgr gfs_mgr = app.Gfs_mgr(); gfs_mgr.Run_str_for(itm, v); Xog_bnd_itm bnd = app.Gui_mgr().Bnd_mgr().Get_or_null(itm.Key()); diff --git a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_mgr.java b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_mgr.java index 89f375f4c..dd2e43512 100644 --- a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_mgr.java +++ b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_bnd_mgr.java @@ -21,12 +21,12 @@ import gplx.xowa.fmtrs.*; public class Xocfg_bnd_mgr implements GfoInvkAble, Gfo_sort_able { private Xog_bnd_mgr_srl bnd_mgr_srl; private Xog_cmd_mgr cmd_mgr; private Xoa_fmtr_sort_mgr sorter; - public Xocfg_bnd_mgr(Xoa_app app) { + public Xocfg_bnd_mgr(Xoae_app app) { this.app = app; this.bnd_mgr = app.Gui_mgr().Bnd_mgr(); this.cmd_mgr = app.Gui_mgr().Cmd_mgr(); bnd_mgr_srl = new Xog_bnd_mgr_srl(app, bnd_mgr); sorter = new Xoa_fmtr_sort_mgr(this); } - public Xoa_app App() {return app;} private Xoa_app app; + public Xoae_app App() {return app;} private Xoae_app app; public Xog_bnd_mgr Bnd_mgr() {return bnd_mgr;} private Xog_bnd_mgr bnd_mgr; private OrderedHash regy; public void Init() { diff --git a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_gui_mgr.java b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_gui_mgr.java index 4407effaf..a3b36b6e9 100644 --- a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_gui_mgr.java +++ b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_gui_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.cfgs2; import gplx.*; import gplx.xowa.*; public class Xocfg_gui_mgr implements GfoInvkAble { - public Xocfg_gui_mgr(Xoa_app app) {bnd_mgr = new Xocfg_bnd_mgr(app);} + public Xocfg_gui_mgr(Xoae_app app) {bnd_mgr = new Xocfg_bnd_mgr(app);} public Xocfg_tab_mgr Tab_mgr() {return tab_mgr;} private Xocfg_tab_mgr tab_mgr = new Xocfg_tab_mgr(); public Xocfg_bnd_mgr Bnd_mgr() {return bnd_mgr;} private Xocfg_bnd_mgr bnd_mgr; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_regy.java b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_regy.java index 447ee3164..ecfe5f09b 100644 --- a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_regy.java +++ b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_regy.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.cfgs2; import gplx.*; import gplx.xowa.*; public class Xocfg_regy implements GfoInvkAble { - public Xocfg_regy(Xoa_app app) { + public Xocfg_regy(Xoae_app app) { app_cfg = new Xocfg_root(app, Xocfg_root_.Tid_app); } public Xocfg_root App() {return app_cfg;} private Xocfg_root app_cfg; diff --git a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_root.java b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_root.java index d8808e0d6..0f9c2c65a 100644 --- a/400_xowa/src/gplx/xowa/cfgs2/Xocfg_root.java +++ b/400_xowa/src/gplx/xowa/cfgs2/Xocfg_root.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.cfgs2; import gplx.*; import gplx.xowa.*; public class Xocfg_root implements GfoInvkAble { - public Xocfg_root(Xoa_app app, byte tid) { + public Xocfg_root(Xoae_app app, byte tid) { this.tid = tid; this.gui_mgr = new Xocfg_gui_mgr(app); } diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoa_ctg_mgr.java b/400_xowa/src/gplx/xowa/ctgs/Xoa_ctg_mgr.java index accdffedc..bfd7e0871 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoa_ctg_mgr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoa_ctg_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; public class Xoa_ctg_mgr implements GfoInvkAble { - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { pagectgs_wtr = new Xoctg_pagelist_wtr().Init_by_app(app); } public boolean Pagecats_grouping_enabled() {return pagecats_grouping_enabled;} private boolean pagecats_grouping_enabled = false; diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_data_cache.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_data_cache.java index 4590d2582..a12d5a4aa 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_data_cache.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_data_cache.java @@ -19,8 +19,8 @@ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; public class Xoctg_data_cache { private Hash_adp_bry regy = Hash_adp_bry.cs_(); // NOTE: changed to cs from ci; cache is hashing page_ttls by ctg_name which is always ttl.Page_txt(); DATE:2014-07-07 public Xoctg_data_ctg Get_or_null(byte[] ctg_name) {return (Xoctg_data_ctg)regy.Get_by_bry(ctg_name);} - public Xoctg_data_ctg Load_or_null(Xow_wiki wiki, byte[] ctg_name) { - Gfo_usr_dlg usr_dlg = wiki.App().Usr_dlg(); + public Xoctg_data_ctg Load_or_null(Xowe_wiki wiki, byte[] ctg_name) { + Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); usr_dlg.Prog_many("", "", "loading file for category: ~{0}", String_.new_utf8_(ctg_name)); Xoctg_data_ctg rv = new Xoctg_data_ctg(ctg_name); boolean found = wiki.Db_mgr().Load_mgr().Load_ctg_v2(rv, ctg_name); if (!found) return null; diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java index 83db6ff66..be235828e 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java @@ -106,16 +106,16 @@ class Xoctg_fmtr_all { default: throw Err_.unhandled(tid); } } - public byte[] Bld_bwd_fwd(Xow_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp) { + public byte[] Bld_bwd_fwd(Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp) { if (view_grp.Total() < grp_max) return Bry_.Empty; Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.N); Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.Y); return bfr.Mkr_rls().Xto_bry_and_clear(); } - private void Html_nav_bry(Bry_bfr bfr, Xow_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp, boolean fill_at_bgn) { + private void Html_nav_bry(Bry_bfr bfr, Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp, boolean fill_at_bgn) { Bry_bfr href_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); - wiki.App().Href_parser().Build_to_bfr(href_bfr, wiki, ttl); + wiki.Appe().Href_parser().Build_to_bfr(href_bfr, wiki, ttl); byte[] arg_idx_lbl = null; byte[] arg_sortkey = null; if (fill_at_bgn) { arg_idx_lbl = url_arg_bgn; @@ -154,6 +154,6 @@ interface Xoctg_fmtr_itm extends Bry_fmtr_arg { int Grp_end_idx(); boolean Grp_end_at_col(); int Col_idx(); void Col_idx_(int col_idx, int col_bgn); - void Init_from_all(Xow_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list, int itms_list_len); + void Init_from_all(Xowe_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list, int itms_list_len); void Init_from_grp(byte[] grp_ttl, int i); } diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java index 250934332..f9f84efa7 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java @@ -17,10 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; class Xoctg_fmtr_grp implements Bry_fmtr_arg { - public void Init_from_all(Xow_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list) { + public void Init_from_all(Xowe_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list) { this.wiki = wiki; this.mgr = mgr; this.itms_fmtr = mgr.Fmtr_itm(); this.itms_list = itms_list; len = itms_list.Len(); itms_fmtr.Init_from_all(wiki, lang, ctg, mgr, itms_list, len); - } private Xow_wiki wiki; Xoctg_fmtr_itm itms_fmtr; Xoctg_view_grp itms_list; int len; Xoctg_fmtr_all mgr; + } private Xowe_wiki wiki; Xoctg_fmtr_itm itms_fmtr; Xoctg_view_grp itms_list; int len; Xoctg_fmtr_all mgr; public void XferAry(Bry_bfr bfr, int xfer_idx) { if (mgr.Grps_enabled()) { if (len == 0) return; diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java index 9ef681382..c8ac9e11a 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java @@ -19,13 +19,13 @@ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.users.history.*; abstract class Xoctg_fmtr_itm_base implements Xoctg_fmtr_itm { - public void Init_from_all(Xow_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list, int itms_list_len) { + public void Init_from_all(Xowe_wiki wiki, Xol_lang lang, Xoctg_view_ctg ctg, Xoctg_fmtr_all mgr, Xoctg_view_grp itms_list, int itms_list_len) { this.wiki = wiki; this.lang = lang; this.ctg = ctg; this.list = itms_list; this.len = itms_list_len; this.msg_mgr = wiki.Msg_mgr(); - href_parser = wiki.App().Href_parser(); + href_parser = wiki.Appe().Href_parser(); html_itm = mgr.Html_itm(); html_itm_missing = mgr.Html_itm_missing(); - history_mgr = wiki.App().User().History_mgr(); - } protected Xow_wiki wiki; Xol_lang lang; Xoctg_view_ctg ctg; protected int len; protected Xoh_href_parser href_parser; protected Bry_fmtr html_itm, html_itm_missing; protected Xoctg_view_grp list; protected Xow_msg_mgr msg_mgr; + history_mgr = wiki.Appe().User().History_mgr(); + } protected Xowe_wiki wiki; Xol_lang lang; Xoctg_view_ctg ctg; protected int len; protected Xoh_href_parser href_parser; protected Bry_fmtr html_itm, html_itm_missing; protected Xoctg_view_grp list; protected Xow_msg_mgr msg_mgr; Xou_history_mgr history_mgr; public void Init_from_grp(byte[] ttl_char_0, int col_bgn) {this.ttl_char_0 = ttl_char_0; this.col_bgn = col_bgn;} private byte[] ttl_char_0; int col_bgn; int col_end; public int Col_idx() {return col_idx;} @@ -57,7 +57,7 @@ abstract class Xoctg_fmtr_itm_base implements Xoctg_fmtr_itm { grp_end_idx = len; grp_end_at_col = true; } - @gplx.Virtual public void Bld_html(Bry_bfr bfr, Xow_wiki wiki, Xoctg_view_itm itm, Xoa_ttl ttl, byte[] ttl_page, Xoh_href_parser href_parser, Bry_fmtr html_itm) { + @gplx.Virtual public void Bld_html(Bry_bfr bfr, Xowe_wiki wiki, Xoctg_view_itm itm, Xoa_ttl ttl, byte[] ttl_page, Xoh_href_parser href_parser, Bry_fmtr html_itm) { byte[] itm_href = href_parser.Build_to_bry(wiki, ttl); byte[] itm_full_ttl = ttl.Full_txt();// NOTE: ttl.Full_txt() to get full ns; EX: Template:A instead of just "A" byte[] itm_atr_cls = Xoh_lnki_wtr.Lnki_cls_visited(history_mgr, wiki.Domain_bry(), ttl.Page_txt()); // NOTE: must be ttl.Page_txt() in order to match Xou_history_mgr.Add @@ -93,7 +93,7 @@ class Xoctg_fmtr_itm_file extends Xoctg_fmtr_itm_base { public static final Xoctg_fmtr_itm_file _ = new Xoctg_fmtr_itm_file(); Xoctg_fmtr_itm_file() {} } class Xoctg_fmtr_itm_subc extends Xoctg_fmtr_itm_base { - @Override public void Bld_html(Bry_bfr bfr, Xow_wiki wiki, Xoctg_view_itm itm, Xoa_ttl ttl, byte[] ttl_page, Xoh_href_parser href_parser, Bry_fmtr html_itm) { + @Override public void Bld_html(Bry_bfr bfr, Xowe_wiki wiki, Xoctg_view_itm itm, Xoa_ttl ttl, byte[] ttl_page, Xoh_href_parser href_parser, Bry_fmtr html_itm) { byte[] itm_href = href_parser.Build_to_bry(wiki, ttl); int sub_ctgs = itm.Subs_ctgs(); int sub_pages = itm.Subs_pages(); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java index 3fa232570..92981cea0 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java @@ -23,8 +23,7 @@ public class Xoctg_html_mgr implements GfoInvkAble { private final Xoctg_fmtr_all mgr_pages = new Xoctg_fmtr_all(Xoa_ctg_mgr.Tid_page); private final Xoctg_fmtr_all mgr_files = new Xoctg_fmtr_all(Xoa_ctg_mgr.Tid_file); public Xoctg_data_cache Data_cache() {return data_cache;} private Xoctg_data_cache data_cache = new Xoctg_data_cache(); - public void Bld_html(Xoa_page page, Bry_bfr bfr) { - Xow_wiki wiki = page.Wiki(); + public void Bld_html(Xowe_wiki wiki, Xoae_page page, Bry_bfr bfr) { Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); try { if (wiki.Db_mgr().Category_version() == Xoa_ctg_mgr.Version_2) @@ -35,19 +34,19 @@ public class Xoctg_html_mgr implements GfoInvkAble { } catch (Exception e) { // ctg error should never cause page to fail tmp_bfr.Mkr_rls(); - page.Wiki().App().Gui_wtr().Warn_many("", "", "failed to generate category: title=~{0} err=~{1}", String_.new_utf8_(page.Ttl().Full_txt()), Err_.Message_gplx_brief(e)); + Xoa_app_.Usr_dlg().Warn_many("", "", "failed to generate category: title=~{0} err=~{1}", String_.new_utf8_(page.Ttl().Full_txt()), Err_.Message_gplx_brief(e)); } } private Xoctg_url url_ctg = new Xoctg_url(); - private void Bld_html_v2(Xow_wiki wiki, Xoa_page page, Bry_bfr bfr) { + private void Bld_html_v2(Xowe_wiki wiki, Xoae_page page, Bry_bfr bfr) { byte[] ttl_bry = page.Ttl().Page_db(); Xoctg_view_ctg view_ctg = new Xoctg_view_ctg().Name_(page.Ttl().Page_txt()); - url_ctg.Parse(wiki.App().Usr_dlg(), page.Url()); + url_ctg.Parse(wiki.Appe().Usr_dlg(), page.Url()); wiki.Db_mgr().Load_mgr().Load_ctg_v2a(view_ctg, url_ctg, ttl_bry, Grp_max_default); Bld_all(bfr, wiki, page.Lang(), view_ctg, Xoa_ctg_mgr.Tid_subc); Bld_all(bfr, wiki, page.Lang(), view_ctg, Xoa_ctg_mgr.Tid_page); Bld_all(bfr, wiki, page.Lang(), view_ctg, Xoa_ctg_mgr.Tid_file); } - public void Get_titles(Gfo_usr_dlg usr_dlg, Xow_wiki wiki, Xoctg_view_ctg ctg) { + public void Get_titles(Gfo_usr_dlg usr_dlg, Xowe_wiki wiki, Xoctg_view_ctg ctg) { title_list.Clear(); Add_titles(title_list, ctg.Subcs()); Add_titles(title_list, ctg.Files()); @@ -79,14 +78,14 @@ public class Xoctg_html_mgr implements GfoInvkAble { title_list.Add(itm); } } - private void Bld_html_v1(Xow_wiki wiki, Xoa_page page, Bry_bfr bfr) { + private void Bld_html_v1(Xowe_wiki wiki, Xoae_page page, Bry_bfr bfr) { Xoctg_view_ctg ctg = new Xoctg_view_ctg().Name_(page.Ttl().Page_txt()); boolean found = wiki.Db_mgr().Load_mgr().Load_ctg_v1(ctg, page.Ttl().Page_db()); if (!found) return; Bld_all(bfr, wiki, page.Lang(), ctg, Xoa_ctg_mgr.Tid_subc); Bld_all(bfr, wiki, page.Lang(), ctg, Xoa_ctg_mgr.Tid_page); Bld_all(bfr, wiki, page.Lang(), ctg, Xoa_ctg_mgr.Tid_file); } - @gplx.Internal protected void Bld_all(Bry_bfr bfr, Xow_wiki wiki, Xol_lang lang, Xoctg_view_ctg view_ctg, byte tid) { + @gplx.Internal protected void Bld_all(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang lang, Xoctg_view_ctg view_ctg, byte tid) { Xoctg_view_grp view_grp = view_ctg.Grp_by_tid(tid); int view_grp_len = view_grp.Itms().length; if (view_grp_len == 0) return; view_grp.End_(view_grp_len); @@ -97,7 +96,7 @@ public class Xoctg_html_mgr implements GfoInvkAble { Xoa_ttl ctg_ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_category, view_ctg.Name()); byte[] all_navs = fmtr_all.Bld_bwd_fwd(wiki, ctg_ttl, view_grp); fmtr_grp.Init_from_all(wiki, lang, view_ctg, fmtr_all, view_grp); - fmtr_all.Html_all().Bld_bfr_many(bfr, fmtr_all.Div_id(), all_label, all_stats, all_navs, lang.Key_bry(), lang.Dir_bry(), fmtr_grp); + fmtr_all.Html_all().Bld_bfr_many(bfr, fmtr_all.Div_id(), all_label, all_stats, all_navs, lang.Key_bry(), lang.Dir_ltr_bry(), fmtr_grp); } public static final int Cols_max = 3; @gplx.Internal protected Xoctg_fmtr_all Fmtr(byte tid) { diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java index 16d80969d..bd386a119 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java @@ -33,7 +33,7 @@ public class Xoctg_html_mgr_tst { byte[] page_bry = Bry_.new_ascii_("A 1"); Xoa_url url = Xoa_url.new_(Bry_.new_ascii_("en.wikipedia.org"), page_bry); Xoa_ttl ttl = Xoa_ttl.parse_(fxt.Wiki(), page_bry); - fxt.Wiki().App().User().History_mgr().Add(url, ttl, page_bry); + fxt.Wiki().Appe().User().History_mgr().Add(url, ttl, page_bry); fxt .Init_itm_page("A_1").Init_ctg_name_("Ctg_1").Init_ctg_pages_(0, 1) .Test_html_all(Xoa_ctg_mgr.Tid_page, String_.Concat_lines_nl_skip_last ( "" @@ -219,8 +219,8 @@ class Xoh_ctg_page_fxt { ctg = new Xoctg_view_ctg(); } return this; - } private Xoa_app app; private Xoctg_html_mgr ctg_html; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + } private Xoae_app app; private Xoctg_html_mgr ctg_html; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public Xoctg_view_ctg Ctg() {return ctg;} private Xoctg_view_ctg ctg; public void Test_bld_rslts_lnk(boolean next, String ctg_str, String expd) { byte[] actl = ctg_html.Fmtr(Xoa_ctg_mgr.Tid_page).Grp_max_(0).Bld_bwd_fwd(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ctg_str)), ctg.Grp_by_tid(Xoa_ctg_mgr.Tid_page)); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java index 44e5e6db4..fb1e7ac03 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java @@ -74,7 +74,7 @@ class Xoctg_idx_mgr_fxt { idx_mgr = new Xoctg_idx_mgr(); } return this; - } private Xoa_app app; Xow_wiki wiki; Xoctg_idx_mgr idx_mgr; static final byte[] Ctg_name = Bry_.new_ascii_("Ctg_test"); + } private Xoae_app app; Xowe_wiki wiki; Xoctg_idx_mgr idx_mgr; static final byte[] Ctg_name = Bry_.new_ascii_("Ctg_test"); public byte[] Make_src(int len) { Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004().Mkr_rls(); bfr.Add_byte_pipe(); // always have leading pipe diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_grp.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_grp.java index f0e7f36ac..a038723c8 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_grp.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_grp.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.msgs.*; public class Xoctg_pagelist_grp implements Bry_fmtr_arg { - public void Init_app(Xoa_app app, boolean type_is_normal, Bry_fmtr fmtr_grp, Bry_fmtr fmtr_itm) { + public void Init_app(Xoae_app app, boolean type_is_normal, Bry_fmtr fmtr_grp, Bry_fmtr fmtr_itm) { this.type_is_normal = type_is_normal; this.fmtr_grp = fmtr_grp; itms.Init_app(app, fmtr_itm); } private Bry_fmtr fmtr_grp; - public void Init_by_wiki(Xow_wiki wiki) { + public void Init_by_wiki(Xowe_wiki wiki) { lbl_ctg_text = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_ctg_tbl_hdr); lbl_ctg_help = Xol_msg_mgr_.Get_msg_val(wiki, wiki.Lang(), Key_pagecategorieslink, Bry_.Ary_empty); lbl_hidden = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_ctg_tbl_hidden); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java index 6504e22d9..7899a1568 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java @@ -19,12 +19,12 @@ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.users.history.*; public class Xoctg_pagelist_itms implements Bry_fmtr_arg { - public void Init_app(Xoa_app app, Bry_fmtr fmtr_itm) { + public void Init_app(Xoae_app app, Bry_fmtr fmtr_itm) { this.href_parser = app.Href_parser(); this.history_mgr = app.User().History_mgr(); this.fmtr_itm = fmtr_itm; } private Xoh_href_parser href_parser; private Xou_history_mgr history_mgr; private Bry_fmtr fmtr_itm; - public void Init_wiki(Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; + public void Init_wiki(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki; public void Itms_clear() {itms.Clear();} private ListAdp itms = ListAdp_.new_(); public void Itms_add(Xodb_page page) {itms.Add(page);} public void XferAry(Bry_bfr bfr, int idx) { diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_mgr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_mgr.java index 59da2f902..fad45d665 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_mgr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_mgr.java @@ -17,13 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; public class Xoctg_pagelist_mgr implements Bry_fmtr_arg { - public Xoctg_pagelist_mgr Init_by_app(Xoa_app app, Xoctg_pagelist_wtr hidden_wtr) { + public Xoctg_pagelist_mgr Init_by_app(Xoae_app app, Xoctg_pagelist_wtr hidden_wtr) { this.fmtr_all = hidden_wtr.Fmtr_all(); grp_normal.Init_app(app, Bool_.Y, hidden_wtr.Fmtr_grp_normal(), hidden_wtr.Fmtr_itm()); grp_hidden.Init_app(app, Bool_.N, hidden_wtr.Fmtr_grp_hidden(), hidden_wtr.Fmtr_itm()); return this; } private Bry_fmtr fmtr_all; - public void Init_by_wiki(Xow_wiki wiki) { + public void Init_by_wiki(Xowe_wiki wiki) { grp_normal.Init_by_wiki(wiki); grp_hidden.Init_by_wiki(wiki); } diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java index f48ea873e..46c6314a7 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr.java @@ -19,12 +19,12 @@ package gplx.xowa.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.history.*; import gplx.xowa.dbs.tbls.*; public class Xoctg_pagelist_wtr { private Xoctg_pagelist_mgr pagelist_mgr = new Xoctg_pagelist_mgr(); - public Xoctg_pagelist_wtr Init_by_app(Xoa_app app) {pagelist_mgr.Init_by_app(app, this); return this;} - public void Write(Bry_bfr bfr, Xow_wiki wiki, Xoa_page page) { + public Xoctg_pagelist_wtr Init_by_app(Xoae_app app) {pagelist_mgr.Init_by_app(app, this); return this;} + public void Write(Bry_bfr bfr, Xowe_wiki wiki, Xoae_page page) { Xodb_page[] page_ary = wiki.Db_mgr().Load_mgr().Load_ctg_list(page.Category_list()); Print_hidden(bfr, wiki, page_ary); } - public void Print_hidden(Bry_bfr bfr, Xow_wiki wiki, Xodb_page[] page_ary) { + public void Print_hidden(Bry_bfr bfr, Xowe_wiki wiki, Xodb_page[] page_ary) { int len = page_ary.length; for (int i = 0; i < len; i++) { Xodb_page page = page_ary[i]; diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java index 7c1afb903..0b16e9f04 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java @@ -63,7 +63,7 @@ class Xoctg_pagelist_mgr_fxt { hidden_wtr = new Xoctg_pagelist_wtr(); hidden_wtr.Init_by_app(app); init_ctgs.Clear(); - } private Xop_fxt fxt; private Xoa_app app; private Xoctg_pagelist_wtr hidden_wtr; + } private Xop_fxt fxt; private Xoae_app app; private Xoctg_pagelist_wtr hidden_wtr; public void Init_ctg_normal(String... ary) {Init_ctg(Bool_.N, ary);} public void Init_ctg_hidden(String... ary) {Init_ctg(Bool_.Y, ary);} public void Init_ctg(boolean hidden, String[] ary) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_file.java b/400_xowa/src/gplx/xowa/dbs/Xodb_file.java index f9d8ae7d9..52610e348 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_file.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_file.java @@ -26,9 +26,9 @@ public class Xodb_file { public long File_len() {return file_len;} public Xodb_file File_len_add(int v) {file_len += v; return this;} private long file_len; public long File_max() {return file_max;} public Xodb_file File_max_(long v) {file_max = v; return this;} private long file_max; public byte Cmd_mode() {return cmd_mode;} public Xodb_file Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; - public Db_url Connect() {return connect;} public Xodb_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect; - public Db_conn Conn() { - if (conn == null) conn = Db_conn_pool_old._.Get_or_new(connect); + public Db_url Connect() {return connect;} public Xodb_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect; + public Db_conn Conn() { + if (conn == null) conn = Db_conn_pool.I.Get_or_new(connect); return conn; } private Db_conn conn; public void Conn_(Db_conn p) {conn = p;} @@ -39,6 +39,6 @@ public class Xodb_file { conn.Conn_term(); } finally {conn = null;} } - public static Xodb_file load_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Ignore);} - public static Xodb_file make_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Create);} + public static Xodb_file load_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_ignore);} + public static Xodb_file make_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_create);} } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java index fafa3ef21..3afc2d222 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.tbls.*; public class Xodb_fsys_mgr { private final Io_url src_dir; private final Io_url trg_dir; private final String wiki_name; public Xodb_fsys_mgr(Io_url src_dir, Io_url trg_dir, String wiki_name) {this.src_dir = src_dir; this.trg_dir = trg_dir; this.wiki_name = wiki_name;} diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java index 8d7898df7..3c87c2ae4 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*; public interface Xodb_load_mgr { - void Load_init (Xow_wiki wiki); + void Load_init (Xowe_wiki wiki); void Load_page (Xodb_page rv, Xow_ns ns, boolean timestamp_enabled); boolean Load_by_id (Xodb_page rv, int id); void Load_by_ids (Cancelable cancelable, ListAdp rv, int bgn, int end); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java index af0732e15..99e31db36 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java @@ -28,18 +28,18 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { search_provider = null; Search_version_init(); } - public void Load_init(Xow_wiki wiki) { + public void Load_init(Xowe_wiki wiki) { Load_init_cfg(wiki); db_mgr.Tbl_site_stats().Select(wiki); db_mgr.Tbl_xowa_ns().Select_all(wiki.Ns_mgr()); } - private void Load_init_cfg(Xow_wiki wiki) { + private void Load_init_cfg(Xowe_wiki wiki) { String_obj_ref version_val = String_obj_ref.null_(); - String version_key = Xoa_gfs_mgr.Build_code(Xow_wiki.Invk_props, Xow_wiki_props.Invk_bldr_version); + String version_key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_props, Xow_wiki_props.Invk_bldr_version); KeyVal[] kv_ary = db_mgr.Tbl_xowa_cfg().Select_kvs(Xodb_mgr_sql.Grp_wiki_init, version_key, version_val); Xodb_upgrade_mgr.Upgrade(db_mgr, kv_ary, version_key, version_val.Val()); Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); - Xoa_gfs_mgr gfs_mgr = wiki.App().Gfs_mgr(); + Xoa_gfs_mgr gfs_mgr = wiki.Appe().Gfs_mgr(); try { int len = kv_ary.length; for (int i = 0; i < len; i++) { @@ -85,7 +85,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { } private void Load_ctg_v2a_ui_sift(Xoctg_view_ctg rv, Xodb_category_itm ctg, ListAdp list) { int len = list.Count(); - Xow_wiki wiki = this.db_mgr.Wiki(); + Xowe_wiki wiki = this.db_mgr.Wiki(); byte prv_tid = Byte_.Max_value_127; Xoctg_view_grp view_grp = null; for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java index 7da876b32..052b1241e 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java @@ -45,9 +45,9 @@ class Xodb_load_mgr_sql_fxt { fxt.Ctor_fsys(); fxt.Init_db_sqlite(); wiki = fxt.Wiki(); - app = wiki.App(); + app = wiki.Appe(); } - } Db_mgr_fxt fxt; Int_obj_ref next_id = Int_obj_ref.new_(1); Xoa_app app; Xow_wiki wiki; + } Db_mgr_fxt fxt; Int_obj_ref next_id = Int_obj_ref.new_(1); Xoae_app app; Xowe_wiki wiki; public Xodb_page[] pages_(Xodb_page... ary) {return ary;} public Xodb_page ctg_(int id, String ttl, boolean hidden, int count_subcs, int count_files, int count_pages) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java index 7280a55b8..4058a92ba 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java @@ -16,24 +16,24 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.flds.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.specials.search.*; +import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.flds.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.specials.search.*; import gplx.xowa.tdbs.*; public class Xodb_load_mgr_txt implements Xodb_load_mgr { - public Xodb_load_mgr_txt(Xow_wiki wiki) { + public Xodb_load_mgr_txt(Xowe_wiki wiki) { this.wiki = wiki; - this.fsys_mgr = wiki.Fsys_mgr(); - } private Xow_wiki wiki; Xow_fsys_mgr fsys_mgr; + this.fsys_mgr = wiki.Tdb_fsys_mgr(); + } private Xowe_wiki wiki; Xotdb_fsys_mgr fsys_mgr; Xob_xdat_file tmp_xdat_file = new Xob_xdat_file(); Xob_xdat_itm tmp_xdat_itm = new Xob_xdat_itm(); - public void Load_init (Xow_wiki wiki) {} + public void Load_init (Xowe_wiki wiki) {} public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {Load_page(rv, rv.Text_db_id(), rv.Db_row_idx(), ns, timestamp_enabled, tmp_xdat_file, tmp_xdat_itm);} - public void Load_page(Xodb_page rv, int txtdb_fil_idx, int txtdb_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) { - Io_url file = fsys_mgr.Url_ns_fil(Xow_dir_info_.Tid_page, ns.Id(), txtdb_fil_idx); + public void Load_page(Xodb_page rv, int txt_fil_idx, int txt_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) { + Io_url file = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns.Id(), txt_fil_idx); byte[] bry = gplx.ios.Io_stream_rdr_.Load_all(file); int bry_len = bry.length; - xdat_file.Clear().Parse(bry, bry_len, file).GetAt(xdat_itm, txtdb_row_idx); + xdat_file.Clear().Parse(bry, bry_len, file).GetAt(xdat_itm, txt_row_idx); Load_page_parse(rv, bry, bry_len, xdat_itm.Itm_bgn(), xdat_itm.Itm_end(), timestamp_enabled); } public boolean Load_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) { // NOTE: ttl must be correct case; EX: "Example title" if (!Env_.Mode_testing() && wiki.Init_needed()) wiki.Init_assert(); // NOTE: need to call assert as wiki_finder (and possibly elsewhere) may call load on commons_wiki without ever asserting; DATE:2013-03-19 - if (!Load_xdat_itm(tmp_xdat_itm, ns, Xow_dir_info_.Tid_ttl, ttl, Xodb_page_.Txt_ttl_pos, Byte_ascii.Tab, true)) return false; + if (!Load_xdat_itm(tmp_xdat_itm, ns, Xotdb_dir_info_.Tid_ttl, ttl, Xodb_page_.Txt_ttl_pos, Byte_ascii.Tab, true)) return false; Xodb_page_.Txt_ttl_load(rv, tmp_xdat_itm.Itm_bry()); rv.Exists_(true); return Bry_.Eq(rv.Ttl_wo_ns(), ttl); @@ -54,14 +54,14 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { if (cancelable.Canceled()) return; Xodb_page itm = (Xodb_page)list.FetchAt(i + bgn); Base85_utl.XtoStrByAry(itm.Id(), id_bry, 0, 5); - int cur_fil_idx = this.Find_file_idx_by_site(Xow_dir_info_.Tid_id, id_bry); + int cur_fil_idx = this.Find_file_idx_by_site(Xotdb_dir_info_.Tid_id, id_bry); if (cur_fil_idx != prv_fil_idx) { - if (!this.Load_xdat_file(cancelable, tmp_xdat_file, Xow_dir_info_.Tid_id, cur_fil_idx)) continue; // file not found; ignore + if (!this.Load_xdat_file(cancelable, tmp_xdat_file, Xotdb_dir_info_.Tid_id, cur_fil_idx)) continue; // file not found; ignore prv_fil_idx = cur_fil_idx; } if (!this.Load_by_id(tmp_page, tmp_xdat_file, id_bry)) continue; // id not found in file; ignore itm.Ns_id_(tmp_page.Ns_id()).Ttl_wo_ns_(tmp_page.Ttl_wo_ns()); - msg_wtr.Write_prog_cur(i, wiki.App().Usr_dlg()); + msg_wtr.Write_prog_cur(i, wiki.Appe().Usr_dlg()); } } Xodb_page tmp_page = new Xodb_page(); public void Load_search(Cancelable cancelable, ListAdp rv, byte[] search, int results_max) { @@ -72,20 +72,20 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { search = Bry_.Mid(search, 0, search_len - 1); match_tid = Xosrh_core.Match_tid_bgn; } - int bgn_idx = this.Find_file_idx_by_ns(Xow_dir_info_.Tid_search_ttl, ns, search); + int bgn_idx = this.Find_file_idx_by_ns(Xotdb_dir_info_.Tid_search_ttl, ns, search); if (bgn_idx == Xow_data_mgr.File_idx_unknown) return; if (match_tid == Xosrh_core.Match_tid_all) { - if (!this.Load_xdat_file(cancelable, tmp_xdat_file, Xow_dir_info_.Tid_search_ttl, ns, bgn_idx)) return; + if (!this.Load_xdat_file(cancelable, tmp_xdat_file, Xotdb_dir_info_.Tid_search_ttl, ns, bgn_idx)) return; tmp_xdat_file.Find(tmp_xdat_itm, search, 0, Byte_ascii.Pipe, true); if (tmp_xdat_itm.Missing()) return; Find_ttls__add_itms(rv, tmp_xdat_file, tmp_xdat_itm); } else { byte[] end_ttl = Bry_.Increment_last(Bry_.Copy(search)); - int end_idx = this.Find_file_idx_by_ns(Xow_dir_info_.Tid_search_ttl, ns, end_ttl); + int end_idx = this.Find_file_idx_by_ns(Xotdb_dir_info_.Tid_search_ttl, ns, end_ttl); for (int i = bgn_idx; i <= end_idx; i++) { if (cancelable.Canceled()) return; - this.Load_xdat_file(cancelable, tmp_xdat_file, Xow_dir_info_.Tid_search_ttl, ns, i); + this.Load_xdat_file(cancelable, tmp_xdat_file, Xotdb_dir_info_.Tid_search_ttl, ns, i); if (cancelable.Canceled()) return; int itm_bgn_idx = 0; if (i == bgn_idx) { @@ -108,7 +108,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { byte[] raw = rdr.Src(); int itm_bgn = xdat_itm.Itm_bgn(), itm_end = xdat_itm.Itm_end(); int pos = Bry_finder.Find_fwd(raw, Byte_ascii.Pipe, itm_bgn, raw.length); - if (pos == Bry_.NotFound) throw wiki.App().Usr_dlg().Fail_many(GRP_KEY, "invalid_search_file", "search file is invalid"); + if (pos == Bry_.NotFound) throw wiki.Appe().Usr_dlg().Fail_many(GRP_KEY, "invalid_search_file", "search file is invalid"); pos += Int_.Const_dlm_len; // pipe while (pos < itm_end) { @@ -121,9 +121,9 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } } public boolean Load_ctg_v2(Xoctg_data_ctg ctg, byte[] name) { - boolean rv = Load_xdat_itm(tmp_xdat_itm, Xow_dir_info_.Tid_category2_link, name, true); if (!rv) return false; + boolean rv = Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_category2_link, name, true); if (!rv) return false; byte[] src = tmp_xdat_itm.Itm_bry(); - Load_ctg_v2_data(wiki.App().Usr_dlg(), wiki.App().Utl_fld_rdr(), ctg, name, src, tmp_ctg_grp_lens); + Load_ctg_v2_data(wiki.Appe().Usr_dlg(), wiki.Appe().Utl_fld_rdr(), ctg, name, src, tmp_ctg_grp_lens); Load_ctg_v2_main(ctg, name); return true; } int[] tmp_ctg_grp_lens = new int[3]; @@ -149,7 +149,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } } private void Load_ctg_v2_main(Xoctg_data_ctg rv, byte[] name) { - if (!Load_xdat_itm(tmp_xdat_itm, Xow_dir_info_.Tid_category2_main, name, true)) return; + if (!Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_category2_main, name, true)) return; if (tmp_xdat_itm.Missing()) return; byte[] bry = tmp_xdat_itm.Itm_bry(); int bgn = name.length + 1; @@ -173,7 +173,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } public boolean Load_by_id(Xodb_page page, int id) {Base85_utl.XtoStrByAry(id, tmp_id_bry, 0, 5); return Load_by_id(page, tmp_id_bry);} private byte[] tmp_id_bry = new byte[5]; boolean Load_by_id(Xodb_page page, byte[] id_bry) { - if (!Load_xdat_itm(tmp_xdat_itm, Xow_dir_info_.Tid_id, id_bry, true)) return false;; + if (!Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_id, id_bry, true)) return false;; Xodb_page_.Txt_id_load(page, tmp_xdat_itm.Itm_bry()); return true; } @@ -217,7 +217,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { tmp_bry = Io_mgr._.LoadFilBry_reuse(url, tmp_bry, tmp_len); if (cancelable.Canceled()) return false; if (tmp_bry.length == 0) - wiki.App().Usr_dlg().Warn_many("", "file.empty", "hive file is empty: ~{0}", url.Raw()); + wiki.Appe().Usr_dlg().Warn_many("", "file.empty", "hive file is empty: ~{0}", url.Raw()); else { int src_len = tmp_len.Val(); xdat_file.Clear().Parse(tmp_bry, src_len, url); @@ -254,7 +254,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { Xob_random_itm[] files = Build_random_itms(regy_mgr, count); int random_idx = RandomAdp_.new_().Next(count.Val() - 1); // get a random idx; -1 since count is super 1 (EX: count of 1 mil; random_idx of 0 - 999,999) int file_idx = CompareAble_.FindSlot(Xob_random_itm_comparer._, files, new Xob_random_itm(-1, random_idx, -1)); - Io_url file_url = fsys_mgr.Url_ns_fil(Xow_dir_info_.Tid_ttl, ns.Id(), file_idx); + Io_url file_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_ttl, ns.Id(), file_idx); Load_xdat_file(Cancelable_.Never, tmp_xdat_file, file_url); Xob_random_itm file = files[file_idx]; tmp_xdat_file.GetAt(tmp_xdat_itm, random_idx - file.Bgn()); // get nth row; EX: random_idx=120; .Bgn=103 -> get 17th @@ -277,15 +277,15 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } public boolean Load_ctg_v1(Xoctg_view_ctg view_ctg, byte[] ctg_ttl) {return Load_ctg_v1_wkr(view_ctg, ctg_ttl, null);} private boolean Load_ctg_v1_wkr(Xoctg_view_ctg view_ctg, byte[] ctg_ttl, Int_obj_ref count_only) { - Xowd_regy_mgr ctg_regy = Get_regy_by_site(Xow_dir_info_.Tid_category); + Xowd_regy_mgr ctg_regy = Get_regy_by_site(Xotdb_dir_info_.Tid_category); int fil_idx = ctg_regy.Files_find(ctg_ttl); if (fil_idx == Xowd_regy_mgr.Regy_null) return false; // NOTE: must check for -1, not 0; else defect in which entries in file 0 are ignored; DATE:2013-04-11 - Io_url fil = fsys_mgr.Url_site_fil(Xow_dir_info_.Tid_category, fil_idx); + Io_url fil = fsys_mgr.Url_site_fil(Xotdb_dir_info_.Tid_category, fil_idx); Load_xdat_file(Cancelable_.Never, tmp_xdat_file, fil); tmp_xdat_file.Find(tmp_xdat_itm, ctg_ttl, 0, Byte_ascii.Pipe, true); if (tmp_xdat_itm.Missing()) return false; ListAdp ctgs = ListAdp_.new_(); - Load_ctg_v1_parse(ctgs, wiki.App().Usr_dlg(), tmp_xdat_itm.Itm_bry()); + Load_ctg_v1_parse(ctgs, wiki.Appe().Usr_dlg(), tmp_xdat_itm.Itm_bry()); ctgs.SortBy(Xodb_page_sorter.IdAsc); this.Load_by_ids(Cancelable_.Never, ctgs, 0, ctgs.Count()); ctgs.SortBy(Xodb_page_sorter.Ns_id_TtlAsc); @@ -312,14 +312,14 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { private static void Load_ctg_v1_parse(ListAdp rv, Gfo_usr_dlg usr_dlg, byte[] ary) { int aryLen = ary.length; int pos = Bry_finder.Find_fwd(ary, Byte_ascii.Pipe, 0, aryLen); - int rowCount = (aryLen - pos + 1) / (Base85_utl.Len_int + gplx.xowa.apps.fsys.Launcher_app_mgr.Len_dlm_fld); + int rowCount = (aryLen - pos + 1) / (Base85_utl.Len_int + gplx.xowa.apps.progs.Xoa_prog_mgr.Len_dlm_fld); rv.Clear(); boolean garbage = false; for (int i = 0; i < rowCount; i++) { Xodb_page row = new Xodb_page(); rv.Add(row); if (garbage) continue; - int bgn = pos + 1 + (i * (Base85_utl.Len_int + gplx.xowa.apps.fsys.Launcher_app_mgr.Len_dlm_fld)); + int bgn = pos + 1 + (i * (Base85_utl.Len_int + gplx.xowa.apps.progs.Xoa_prog_mgr.Len_dlm_fld)); try { int id = Base85_utl.XtoIntByAry(ary, bgn, bgn + Base85_utl.Len_int - 1); if (id < 0) throw Err_.new_("invalid id").Add("id", id); @@ -364,12 +364,12 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { site_regys[regy_tid] = rv; } return rv; - } private Xowd_regy_mgr[] site_regys = new Xowd_regy_mgr[Xow_dir_info_.Regy_tid_max]; + } private Xowd_regy_mgr[] site_regys = new Xowd_regy_mgr[Xotdb_dir_info_.Regy_tid_max]; Xowd_regy_mgr Get_regy_by_ns(Xow_ns ns) { int ns_ord = ns.Ord(); Xowd_regy_mgr rv = ns_regys[ns_ord]; if (rv == null) { - Io_url file = fsys_mgr.Url_ns_reg(ns.Num_str(), Xow_dir_info_.Tid_ttl); + Io_url file = fsys_mgr.Url_ns_reg(ns.Num_str(), Xotdb_dir_info_.Tid_ttl); if (!Io_mgr._.ExistsFil(file)) return null; rv = new Xowd_regy_mgr(file); ns_regys[ns_ord] = rv; @@ -381,7 +381,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { this.Load_ttls_for_all_pages(cancelable, rslt_list, tmp_rslt_nxt, tmp_rslt_prv, tmp_rslt_count, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item); } public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) { - byte dir_tid = Xow_dir_info_.Tid_ttl; + byte dir_tid = Xotdb_dir_info_.Tid_ttl; Xob_xdat_file cur_xdat_file = new Xob_xdat_file(); Xob_xdat_itm cur_xdat_itm = new Xob_xdat_itm(); Xowd_regy_mgr regy = new Xowd_regy_mgr(fsys_mgr.Url_ns_reg(ns.Num_str(), dir_tid)); @@ -473,13 +473,13 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) { String xwiki_key = String_.new_ascii_(wiki_alias); if (qids_root == null) - qids_root = wiki.App().Wiki_mgr().Wdata_mgr().Wdata_wiki().Fsys_mgr().Site_dir().GenSubDir_nest("data", "qid"); + qids_root = wiki.Appe().Wiki_mgr().Wdata_mgr().Wdata_wiki().Tdb_fsys_mgr().Site_dir().GenSubDir_nest("data", "qid"); Xob_xdat_itm qid_itm = Load_xdat_itm_by_dir(qids_root.GenSubDir_nest(xwiki_key, String_.new_ascii_(ns_num)), ttl); if (qid_itm == null) return null; return Bry_.Mid(qid_itm.Src(), qid_itm.Itm_bgn() + ttl.length + 1, qid_itm.Itm_end()); // extract qid; note that all itms have format of "ttl|qid" } Io_url qids_root; public int Load_pid(byte[] lang_key, byte[] pid_name) { if (pids_root == null) - pids_root = wiki.App().Wiki_mgr().Wdata_mgr().Wdata_wiki().Fsys_mgr().Site_dir().GenSubDir_nest("data", "pid"); + pids_root = wiki.Appe().Wiki_mgr().Wdata_mgr().Wdata_wiki().Tdb_fsys_mgr().Site_dir().GenSubDir_nest("data", "pid"); Xob_xdat_itm pid_itm = Load_xdat_itm_by_dir(pids_root.GenSubDir(String_.new_utf8_(lang_key)), pid_name); if (pid_itm == null) return gplx.xowa.xtns.wdatas.Wdata_wiki_mgr.Pid_null; return Bry_.Xto_int_or(pid_itm.Src(), pid_itm.Itm_bgn() + pid_name.length + 1 + 1, pid_itm.Itm_end(), gplx.xowa.xtns.wdatas.Wdata_wiki_mgr.Pid_null); // extract pid; note that all itms have format of "ttl|pid"; +1=skip pipe; +1 skip p } Io_url pids_root; @@ -496,9 +496,9 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { return data_ctg.Total_count(); } Xob_xdat_itm Load_xdat_itm_by_dir(Io_url dir, byte[] ttl) { - Xoa_hive_mgr hive_mgr = wiki.App().Hive_mgr(); + Xoa_hive_mgr hive_mgr = wiki.Appe().Hive_mgr(); int fil_idx = hive_mgr.Find_fil(dir, ttl); if (fil_idx == Xowd_regy_mgr.Regy_null) return null; // sub_dir not found; EX: commonswiki if qid; fr if pid; - Xob_xdat_file rdr = hive_mgr.Get_rdr(dir, Xow_dir_info_.Bry_xdat, fil_idx); + Xob_xdat_file rdr = hive_mgr.Get_rdr(dir, Xotdb_dir_info_.Bry_xdat, fil_idx); rdr.Find(tmp_xdat_itm, ttl, 0, Byte_ascii.Pipe, true); return tmp_xdat_itm.Found_exact() ? tmp_xdat_itm : null; } @@ -511,7 +511,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { if (data_ctg == null) return; } rv.Fill(url_ctg, data_ctg); - ctg_mgr.Get_titles(wiki.App().Usr_dlg(), wiki, rv); + ctg_mgr.Get_titles(wiki.Appe().Usr_dlg(), wiki, rv); rv.Num_(data_ctg); } public Xodb_page[] Load_ctg_list(byte[][] ttls) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java index dc78eb3d6..a930b01b3 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; import gplx.xowa2.wikis.data.*; public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { private boolean html_db_enabled; - public Xodb_mgr_sql(Xow_wiki wiki) { + public Xodb_mgr_sql(Xowe_wiki wiki) { this.wiki = wiki; - Io_url bin_db_dir = wiki.App().Fsys_mgr().Bin_any_dir().GenSubDir_nest("sql", "xowa"); + Io_url bin_db_dir = wiki.Appe().Fsys_mgr().Bin_any_dir().GenSubDir_nest("sql", "xowa"); fsys_mgr = new Xodb_fsys_mgr(bin_db_dir, wiki.Fsys_mgr().Root_dir(), wiki.Domain_str()); load_mgr = new Xodb_load_mgr_sql(this, fsys_mgr); save_mgr = new Xodb_save_mgr_sql(this); @@ -33,7 +33,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { } public byte Tid() {return Tid_sql;} public static final byte Tid_sql = 1; public String Tid_name() {return "sqlite3";} - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.ios.Io_stream_.Tid_gzip; public byte Category_version() {return category_version;} private byte category_version = Xoa_ctg_mgr.Version_null; public byte Search_version() {return load_mgr.Search_version();} @@ -69,23 +69,23 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { return Io_mgr._.QueryFil(url).ModifiedTime(); } public void Init_by_ns_map(String ns_map) { - Xoi_dump_mgr dump_mgr = wiki.App().Setup_mgr().Dump_mgr(); + Xoi_dump_mgr dump_mgr = wiki.Appe().Setup_mgr().Dump_mgr(); data_storage_format = dump_mgr.Data_storage_format(); fsys_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max()); Core_provider_(fsys_mgr.Conn_core()); state = State_make; } - public void Init_load(Db_url connect) { - Db_conn conn = Db_conn_pool_old._.Get_or_new(connect); - Xodb_file[] files = tbl_db.Select_all(conn); - fsys_mgr.Init_by_files(conn, files); + public void Init_load(Db_url url) { + Db_conn conn = Db_conn_pool.I.Get_or_new(url); Core_provider_(conn); + Xodb_file[] files = tbl_db.Select_all(); + fsys_mgr.Init_by_files(conn, files); state = State_load; } private void Core_provider_(Db_conn conn) { tbl_cfg.Conn_(conn); tbl_ns.Conn_(conn); - tbl_db.Conn_(conn); + tbl_db.Conn_(conn, Bool_.N, Bool_.Y); // version_is_1 always has pre-created xowa_db tbl tbl_page.Conn_(conn); tbl_site_stats.Conn_(conn); } @@ -155,7 +155,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { ; public void Category_version_update(boolean version_is_1) { String grp = Xodb_mgr_sql.Grp_wiki_init; - String key = Xoa_gfs_mgr.Build_code(Xow_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_category_version); + String key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_category_version); // if (category_version != Xoa_ctg_mgr.Version_null) tbl_cfg.Delete(grp, key);// always delete ctg version category_version = version_is_1 ? Xoa_ctg_mgr.Version_1 : Xoa_ctg_mgr.Version_2; @@ -168,17 +168,17 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { Xodb_file file = ary[i] ; if (file.Tid() != tid) continue; file.Rls(); - Db_url__sqlite sqlite = (Db_url__sqlite)file.Connect(); + Sqlite_url sqlite = (Sqlite_url)file.Connect(); Io_mgr._.DeleteFil_args(sqlite.Url()).MissingFails_off().Exec(); - file.Cmd_mode_(Db_cmd_mode.Delete); + file.Cmd_mode_(Db_cmd_mode.Tid_delete); } - tbl_db.Commit_all(fsys_mgr.Conn_core(), ary); + tbl_db.Commit_all(ary); this.Init_load(fsys_mgr.Conn_core().Url()); } public static final String Grp_wiki_init = "wiki.init"; public static final int Page_id_null = -1; - public static Io_url Find_core_url(Xow_wiki wiki) { + public static Io_url Find_core_url(Xowe_wiki wiki) { Io_url[] ary = Io_mgr._.QueryDir_args(wiki.Fsys_mgr().Root_dir()).FilPath_("*.sqlite3").ExecAsUrlAry(); int ary_len = ary.length; if (ary_len == 0) return null; if (ary_len == 1) return ary[0]; // only 1 file; assume it is core @@ -191,7 +191,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { } return null; } - public static Xodb_mgr_sql Get_or_load(Xow_wiki wiki) { + public static Xodb_mgr_sql Get_or_load(Xowe_wiki wiki) { Xodb_mgr db_mgr = wiki.Db_mgr(); Xodb_mgr_sql rv = db_mgr.Tid() == Xodb_mgr_txt.Tid_txt ? wiki.Db_mgr_create_as_sql() : wiki.Db_mgr_as_sql(); byte state = rv.State(); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java index 90775741e..2a2fe4ac0 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; +import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; import gplx.xowa.tdbs.*; public class Xodb_mgr_txt implements Xodb_mgr { - public Xodb_mgr_txt(Xow_wiki wiki, Xow_data_mgr data_mgr) { + public Xodb_mgr_txt(Xowe_wiki wiki, Xow_data_mgr data_mgr) { this.wiki = wiki; load_mgr = new Xodb_load_mgr_txt(wiki); save_mgr = new Xodb_save_mgr_txt(wiki, load_mgr); hdump_mgr = new Xodb_hdump_mgr(wiki); - } private Xow_wiki wiki; + } private Xowe_wiki wiki; public byte Tid() {return Tid_txt;} public static final byte Tid_txt = 0; public String Tid_name() {return "xdat";} public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.ios.Io_stream_.Tid_file; @@ -32,12 +32,12 @@ public class Xodb_mgr_txt implements Xodb_mgr { public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr; public Xodb_ctx Db_ctx() {return db_ctx;} private Xodb_ctx db_ctx = new Xodb_ctx(); public DateAdp Dump_date_query() { - Io_url url = wiki.Fsys_mgr().Url_ns_fil(Xow_dir_info_.Tid_page, Xow_ns_.Id_main, 0); + Io_url url = wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_page, Xow_ns_.Id_main, 0); return Io_mgr._.QueryFil(url).ModifiedTime(); } public byte Category_version() { if (category_version == Xoa_ctg_mgr.Version_null) { - if (Io_mgr._.ExistsDir(wiki.Fsys_mgr().Url_site_dir(Xow_dir_info_.Tid_category2_link))) + if (Io_mgr._.ExistsDir(wiki.Tdb_fsys_mgr().Url_site_dir(Xotdb_dir_info_.Tid_category2_link))) category_version = Xoa_ctg_mgr.Version_2; else category_version = Xoa_ctg_mgr.Version_1; diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr.java index 377882ac9..e80729e54 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr.java @@ -21,7 +21,7 @@ public interface Xodb_save_mgr { boolean Update_modified_on_enabled(); void Update_modified_on_enabled_(boolean v); int Page_id_next(); void Page_id_next_(int v); void Data_create(Xoa_ttl ttl, byte[] text); - void Data_update(Xoa_page page, byte[] text); - void Data_rename(Xoa_page page, int trg_ns, byte[] trg_ttl); + void Data_update(Xoae_page page, byte[] text); + void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl); void Clear(); } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java index 9d80afb16..3da3a9ffd 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java @@ -19,7 +19,7 @@ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; import gplx.ios.*; public class Xodb_save_mgr_sql implements Xodb_save_mgr { public Xodb_save_mgr_sql(Xodb_mgr_sql db_mgr) { - this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().App().Zip_mgr(); + this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr(); } private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr; public boolean Create_enabled() {return create_enabled;} public void Create_enabled_(boolean v) {create_enabled = v;} private boolean create_enabled; public boolean Update_modified_on_enabled() {return update_modified_on_enabled;} public void Update_modified_on_enabled_(boolean v) {update_modified_on_enabled = v;} private boolean update_modified_on_enabled; @@ -57,7 +57,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { text_stmt.Rls(); } } - public void Data_update(Xoa_page page, byte[] text) { + public void Data_update(Xoae_page page, byte[] text) { boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text, text.length); DateAdp modified = update_modified_on_enabled ? DateAdp_.Now() : page.Revision_data().Modified_on(); boolean redirect_changed = redirect != db_mgr.Wiki().Redirect_mgr().Is_redirect(page.Data_raw(), page.Data_raw().length); @@ -82,7 +82,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { text = zip_mgr.Zip(db_mgr.Data_storage_format(), text); db_mgr.Tbl_text().Update(db_page.Text_db_id(), page.Revision_data().Id(), text); } - public void Data_rename(Xoa_page page, int trg_ns, byte[] trg_ttl) { + public void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl) { Db_qry qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id()) , KeyVal_.new_("page_namespace", trg_ns) , KeyVal_.new_("page_title", String_.new_utf8_(trg_ttl)) diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java index 47fa209cb..82f959e6b 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.xowa.wikis.*; +import gplx.xowa.wikis.*; import gplx.xowa.tdbs.*; public class Xodb_save_mgr_txt implements Xodb_save_mgr { - public Xodb_save_mgr_txt(Xow_wiki wiki, Xodb_load_mgr_txt load_mgr) { + public Xodb_save_mgr_txt(Xowe_wiki wiki, Xodb_load_mgr_txt load_mgr) { this.wiki = wiki; this.load_mgr = load_mgr; - this.fsys_mgr = wiki.Fsys_mgr(); + this.fsys_mgr = wiki.Tdb_fsys_mgr(); this.redirect_mgr = wiki.Redirect_mgr(); - } private Xow_wiki wiki; private Xow_fsys_mgr fsys_mgr; private Xodb_load_mgr_txt load_mgr; private Xop_redirect_mgr redirect_mgr; + } private Xowe_wiki wiki; private Xotdb_fsys_mgr fsys_mgr; private Xodb_load_mgr_txt load_mgr; private Xop_redirect_mgr redirect_mgr; public boolean Create_enabled() {return create_enabled;} public void Create_enabled_(boolean v) {create_enabled = v;} private boolean create_enabled; public boolean Update_modified_on_enabled() {return update_modified_on_enabled;} public void Update_modified_on_enabled_(boolean v) {update_modified_on_enabled = v;} private boolean update_modified_on_enabled; public int Page_id_next() {return page_id_next;} public void Page_id_next_(int v) {page_id_next = v;} private int page_id_next = 0; @@ -39,33 +39,33 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { int fil_idx = 0; int ns_id = ttl.Ns().Id(); Xodb_page_.Txt_page_save(tmp, page_id, DateAdp_.Now(), ttl_bry, text, true); - Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xow_dir_info_.Tid_page, ns_id, fil_idx); + Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns_id, fil_idx); byte[] page_rdr_bry = gplx.ios.Io_stream_rdr_.Load_all(page_rdr_url); Xob_xdat_file page_rdr = new Xob_xdat_file(); if (Bry_.Len_gt_0(page_rdr_bry)) page_rdr.Parse(page_rdr_bry, page_rdr_bry.length, page_rdr_url); int row_idx = page_rdr.Count(); Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); page_rdr.Insert(tmp_bfr, tmp.Xto_bry_and_clear()); - this.Data_save(Xow_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); + this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); tmp_bfr.Mkr_rls(); Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); db_page.Set_all_(page_id, fil_idx, row_idx, redirect_ttl != null, text_len, ttl.Page_db()); Xodb_page_.Txt_ttl_save(tmp, db_page); byte[] ttl_row_bry = tmp.Mkr_rls().Xto_bry_and_clear(); - Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xow_dir_info_.Tid_ttl); + Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xotdb_dir_info_.Tid_ttl); ttl_hive.Create(ttl.Ns(), ttl.Page_db(), ttl_row_bry, Bry_comparer_fld_last._); wiki.Db_mgr().Load_mgr().Clear(); // NOTE: need to clear cached regy_ary in load_mgr } - public void Data_update(Xoa_page page, byte[] text) {Data_update_under(page, text, null);} - public void Data_rename(Xoa_page page, int trg_ns, byte[] trg_ttl) { - if (wiki.Domain_tid() != Xow_wiki_domain_.Tid_home) { - wiki.App().Gui_wtr().Warn_many("", "", "Only pages in the home wiki can be renamed"); + public void Data_update(Xoae_page page, byte[] text) {Data_update_under(page, text, null);} + public void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl) { + if (wiki.Domain_tid() != Xow_domain_.Tid_int_home) { + wiki.Appe().Usr_dlg().Warn_many("", "", "Only pages in the home wiki can be renamed"); return; } Data_update_under(page, null, trg_ttl); } - private void Data_update_under(Xoa_page page, byte[] text, byte[] new_ttl) { + private void Data_update_under(Xoae_page page, byte[] text, byte[] new_ttl) { Xoa_ttl ttl = page.Ttl(); Xow_ns ns = ttl.Ns(); byte[] ttl_bry = ttl.Page_db(); Xodb_page db_page = Xodb_page.tmp_(); @@ -88,8 +88,8 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { } Xodb_page_.Txt_page_save(tmp_bfr, db_page.Id(), modified_on, ttl_bry, text, true); page_rdr.Update(tmp_bfr, page_itm, tmp_bfr.Xto_bry_and_clear()); - Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xow_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Text_db_id()); - this.Data_save(Xow_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); + Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Text_db_id()); + this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); tmp_bfr.Mkr_rls(); // update ttl Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); @@ -99,7 +99,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { Xodb_page_.Txt_ttl_save(tmp, db_page); byte[] ttl_row_bry = tmp.Xto_bry_and_clear(); tmp.Mkr_rls(); - Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xow_dir_info_.Tid_ttl); + Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xotdb_dir_info_.Tid_ttl); ttl_hive.Update(ns, old_ttl, new_ttl, ttl_row_bry, Xodb_page_.Txt_ttl_pos, Byte_ascii.Pipe, true, true); } private void Data_save(byte dir_tid, Xob_xdat_file xdat_file, Io_url url, Bry_bfr tmp_bfr) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java index 8590bb539..8af07d589 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java @@ -37,7 +37,7 @@ class Xodb_upgrade_mgr { // } // private static void Fix_storage_format(Db_conn p, Xodb_mgr_sql db_mgr, KeyVal[] kv_ary) { // storage_format saved incorrectly as int // int len = kv_ary.length; -// String gfs_data_storage_format = Xoa_gfs_mgr.Build_code(Xow_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_data_storage_format); +// String gfs_data_storage_format = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_db_mgr, Xodb_mgr_sql.Invk_data_storage_format); // for (int i = 0; i < len; i++) { // KeyVal kv = kv_ary[i]; // String kv_key = kv.Key(); diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java index 77ee97f6b..54f1ca68f 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.dbs.*; import gplx.xowa.ctgs.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.ctgs.*; public class Xodb_categorylinks_tbl { public void Delete_all(Db_conn p) {p.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));} public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_cl_from, Fld_cl_to_id, Fld_cl_sortkey, Fld_cl_timestamp, Fld_cl_type_id);} @@ -51,7 +51,7 @@ public class Xodb_categorylinks_tbl { DataRdr rdr = DataRdr_.Null; int count = 0; try { - stmt = p.New_stmt(qry); + stmt = p.Stmt_new(qry); rdr = stmt.Val_int(cat_page_id).Val_byte(arg_tid).Val_str(arg_sortkey_str).Exec_select(); while (rdr.MoveNextPeer()) { int itm_page_id = rdr.ReadInt(Fld_cl_from); diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java index f0f2466c0..f3c935367 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_base.java @@ -30,7 +30,7 @@ public abstract class Xodb_in_wkr_base { int part_end = i + interval; if (part_end > full_end) part_end = full_end; try { - stmt = conn.New_stmt(Build_qry(db_ctx, i, part_end)); + stmt = conn.Stmt_new(Build_qry(db_ctx, i, part_end)); Fill_stmt(stmt, i, part_end); rdr = stmt.Exec_select(); Eval_rslts(cancelable, db_ctx, rdr); diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java index a7872404c..c06fc818a 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.core.primitives.*; import gplx.dbs.*; import gplx.core.criterias.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.core.criterias.*; public class Xodb_page_tbl { public static final String Tbl_name = "page" , Fld_page_id = "page_id", Fld_page_ns = "page_namespace", Fld_page_title = "page_title" @@ -25,21 +25,8 @@ public class Xodb_page_tbl { , Fld_page_html_db_id = "page_html_db_id", Fld_page_redirect_id = "page_redirect_id"; private static final String[] Select_by_id_flds__basic = new String[] {Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx}; private static final String[] Select_by_id_flds__hdump = new String[] {Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx, Fld_page_html_db_id, Fld_page_redirect_id}; -// public boolean Select_by_id(Xodb_page rv, int page_id) { -// Db_rdr rdr = Db_rdr_.Null; -// Db_stmt stmt = Db_stmt_.Null; -// try { -// stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_id), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic)); -// rdr = stmt.Val_int(page_id).Exec_select_as_rdr(); -// while (rdr.Move_next()) { -// Read_page__all2(rv, rdr, html_db_enabled); -// return true; -// } -// } finally {rdr.Close(); stmt.Rls();} -// return false; -// } private final Xow_ns_mgr ns_mgr; private final Xodb_ctx db_ctx; - public Xodb_page_tbl(Xow_wiki wiki) { + public Xodb_page_tbl(Xowe_wiki wiki) { this.ns_mgr = wiki.Ns_mgr(); this.db_ctx = wiki.Db_mgr().Db_ctx(); } @@ -85,24 +72,6 @@ public class Xodb_page_tbl { } finally {rdr.Rls(); stmt.Rls();} return false; } - public void Delete_all() {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));} - public Db_stmt Insert_stmt(Db_conn p) { - return Db_stmt_.new_insert_(p, Tbl_name, html_db_enabled ? Flds_insert__html_y : Flds_insert__html_n); - } - public void Insert(Db_stmt stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, int page_len, int random_int, int file_idx, int html_db_id) { - stmt.Clear() - .Val_int(page_id) - .Val_int(ns_id) - .Val_str(String_.new_utf8_(ttl_wo_ns)) - .Val_byte((byte)(redirect ? 1 : 0)) - .Val_str(Xto_touched_str(modified_on)) - .Val_int(page_len) - .Val_int(random_int) - .Val_int(file_idx); - if (html_db_enabled) - stmt.Val_int(html_db_id); - stmt.Exec_insert(); - } public int Select_id(int ns_id, byte[] ttl) { DataRdr rdr = DataRdr_.Null; Db_stmt stmt = Db_stmt_.Null; @@ -118,6 +87,21 @@ public class Xodb_page_tbl { } finally {rdr.Rls(); stmt.Rls();} return Xodb_mgr_sql.Page_id_null; } + public Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, html_db_enabled ? Flds_insert__html_y : Flds_insert__html_n);} + public void Insert(Db_stmt stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, int page_len, int random_int, int file_idx, int html_db_id) { + stmt.Clear() + .Val_int(page_id) + .Val_int(ns_id) + .Val_str(String_.new_utf8_(ttl_wo_ns)) + .Val_byte((byte)(redirect ? 1 : 0)) + .Val_str(Xto_touched_str(modified_on)) + .Val_int(page_len) + .Val_int(random_int) + .Val_int(file_idx); + if (html_db_enabled) + stmt.Val_int(html_db_id); + stmt.Exec_insert(); + } public DataRdr Select_all(Db_conn p) { Db_qry_select qry = Db_qry_select.new_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_title).OrderBy_asc_(Fld_page_id); return p.Exec_qry_as_rdr(qry); @@ -232,7 +216,7 @@ public class Xodb_page_tbl { Db_stmt stmt = Db_stmt_.Null; search = Bry_.Replace(search, Byte_ascii.Asterisk, Byte_ascii.Percent); try { - stmt = conn.New_stmt(qry); + stmt = conn.Stmt_new(qry); rdr = stmt.Clear().Val_int(Xow_ns_.Id_main).Val_bry_as_str(search).Exec_select(); while (rdr.MoveNextPeer()) { if (cancelable.Canceled()) return; @@ -258,7 +242,7 @@ public class Xodb_page_tbl { Db_qry_select qry = Db_qry_.select_().From_(Tbl_name).Cols_(html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n) .Where_(crt) .Limit_(limit); - return p.New_stmt(qry); + return p.Stmt_new(qry); } public void Select_for_parse_all(Cancelable cancelable, OrderedHash rv, Db_stmt stmt, int ns, byte[] ttl, byte redirect) { String ttl_str = String_.new_utf8_(ttl); diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java index 1bc73c66a..ff6ee8e23 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.dbs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; public class Xodb_search_title_page_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);} diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java index 5abb54ef7..e426635b5 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.core.primitives.*; import gplx.dbs.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; public class Xodb_search_title_word_tbl { public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} public static void Create_index(Gfo_usr_dlg usr_dlg, Db_conn p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main);} diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java index ab667b96b..67198fed9 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_site_stats_tbl.java @@ -31,7 +31,7 @@ public class Xodb_site_stats_tbl { ; } finally {stmt.Rls();} } - public void Select(Xow_wiki wiki) { + public void Select(Xowe_wiki wiki) { Xow_wiki_stats stats = wiki.Stats(); DataRdr rdr = DataRdr_.Null; Db_stmt stmt = Db_stmt_.Null; diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java index 26f1b869a..37a799ef2 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*; public class Xodb_text_tbl { - public Xodb_text_tbl(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().App().Zip_mgr();} private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr; + public Xodb_text_tbl(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr();} private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr; public void Delete_all(Db_conn conn) {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));} public Db_stmt Insert_stmt(Db_conn prov) {return Db_stmt_.new_insert_(prov, Tbl_name, Fld_page_id, Fld_old_text);} public void Insert(Db_stmt stmt, int page_id, byte[] text, byte storage_type) { diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java index 78f247e42..08ee4ce6f 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java @@ -16,8 +16,21 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.dbs.*; import gplx.core.primitives.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; import gplx.core.primitives.*; public class Xodb_xowa_cfg_tbl { + public static final String Tbl_name = "xowa_cfg", Fld_cfg_grp = "cfg_grp", Fld_cfg_key = "cfg_key", Fld_cfg_val = "cfg_val"; + public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} + public static void Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_select);} + private static final String Tbl_sql = String_.Concat_lines_nl + ( "CREATE TABLE IF NOT EXISTS xowa_cfg" + , "( cfg_grp varchar(1024) NOT NULL" + , ", cfg_key varchar(1024) NOT NULL" + , ", cfg_val blob NOT NULL" + , ");" + ); + private static final Db_idx_itm + Idx_select = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS xowa_cfg__grp_key ON xowa_cfg (cfg_grp, cfg_key);") + ; public Db_conn Conn() {return conn;} public Xodb_xowa_cfg_tbl Conn_(Db_conn conn) {this.conn = conn; return this;} Db_conn conn; private DataRdr Select(String grp) { Db_qry qry = Db_qry_.select_cols_(Tbl_name, Db_crt_.eq_(Fld_cfg_grp, grp), Fld_cfg_key, Fld_cfg_val); @@ -89,17 +102,4 @@ public class Xodb_xowa_cfg_tbl { conn.Exec_qry(qry); } private gplx.core.criterias.Criteria Where_grp_key(String grp, String key) {return Db_crt_.eq_many_(KeyVal_.new_(Fld_cfg_grp, grp), KeyVal_.new_(Fld_cfg_key, key));} - public static final String Tbl_name = "xowa_cfg", Fld_cfg_grp = "cfg_grp", Fld_cfg_key = "cfg_key", Fld_cfg_val = "cfg_val"; - public static void Create_table(Db_conn p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} - public static void Create_index(Db_conn p) {Sqlite_engine_.Idx_create(p, Idx_select);} - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS xowa_cfg" - , "( cfg_grp varchar(1024) NOT NULL" - , ", cfg_key varchar(1024) NOT NULL" - , ", cfg_val blob NOT NULL" - , ");" - ); - private static final Db_idx_itm - Idx_select = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS xowa_cfg__grp_key ON xowa_cfg (cfg_grp, cfg_key);") - ; } diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java index 062202a8b..c670929de 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java @@ -16,50 +16,60 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.dbs.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; public class Xodb_xowa_db_tbl { - public void Conn_(Db_conn conn) {this.conn = conn;} Db_conn conn; - public void Update_url(Db_conn conn, int db_id, String db_url) { - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_db_id), Fld_db_url); - stmt.Clear() - .Val_str(db_url) - .Val_int(db_id) - .Exec_update(); - ; - } finally {stmt.Rls();} + private String tbl_name = "wiki_db_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_type, fld_url; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "xowa_db"; + fld_prefix = "db_"; + } + fld_id = flds.Add_int_pkey(fld_prefix + "id"); + fld_type = flds.Add_byte(fld_prefix + "type"); // 1=core;2=wikidata;3=data + fld_url = flds.Add_str(fld_prefix + "url", 512); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_bldr.Conn_(conn, tbl_name, flds, fld_id); } - public void Commit_all(Xodb_fsys_mgr db_fs) {this.Commit_all(db_fs.Conn_core(), db_fs.Files_ary());} - public void Commit_all(Db_conn conn, Xodb_file[] ary) { - stmt_bldr.Init(conn); + public void Update_url(int id, String url) { + Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(fld_id), fld_url); + stmt.Clear().Val_str(fld_url, url).Crt_int(fld_id, id).Exec_update(); + } + public void Commit_all(Xodb_fsys_mgr db_fs) {this.Commit_all(db_fs.Files_ary());} + public void Commit_all(Xodb_file[] ary) { + stmt_bldr.Batch_bgn(); try { int len = ary.length; for (int i = 0; i < len; i++) Commit_itm(ary[i]); - stmt_bldr.Commit(); - } finally {stmt_bldr.Rls();} + } finally {stmt_bldr.Batch_end();} } private void Commit_itm(Xodb_file itm) { Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); switch (itm.Cmd_mode()) { - case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Id()) .Val_byte(itm.Tid()).Val_str(itm.Url_rel()).Exec_insert(); break; - case Db_cmd_mode.Update: stmt.Clear() .Val_byte(itm.Tid()).Val_str(itm.Url_rel()).Val_int(itm.Id()).Exec_update(); break; - case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Id()).Exec_delete(); break; - case Db_cmd_mode.Ignore: break; - default: throw Err_.unhandled(itm.Cmd_mode()); + case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_id, itm.Id()) .Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear() .Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Crt_int(fld_id, itm.Id()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_id, itm.Id()).Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Cmd_mode()); } - itm.Cmd_mode_(Db_cmd_mode.Ignore); + itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); } - public Xodb_file[] Select_all(Db_conn conn) { - DataRdr rdr = DataRdr_.Null; + public Xodb_file[] Select_all() { + Db_rdr rdr = Db_rdr_.Null; ListAdp list = ListAdp_.new_(); try { - Db_qry qry = Db_qry_.select_tbl_(Tbl_name).OrderBy_asc_(Fld_db_id); - rdr = conn.Exec_qry_as_rdr(qry); - while (rdr.MoveNextPeer()) { - Xodb_file db = Xodb_file.load_(rdr.ReadInt(Fld_db_id), rdr.ReadByte(Fld_db_type), rdr.ReadStr(Fld_db_url)); - list.Add(db); + Db_qry qry = Db_qry_.select_tbl_(tbl_name).OrderBy_asc_(fld_id); + rdr = conn.Stmt_new(qry).Exec_select_as_rdr(); + while (rdr.Move_next()) { + Xodb_file itm = Xodb_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url)); + list.Add(itm); } } finally {rdr.Rls();} Xodb_file[] rv = (Xodb_file[])list.Xto_ary(Xodb_file.class); @@ -69,15 +79,13 @@ public class Xodb_xowa_db_tbl { private void Chk_sequential(Xodb_file[] ary) { int len = ary.length; int expd_id = 0; - for (int i = 0; i < len; i++) { + for (int i = 0; i < len; ++i) { Xodb_file itm = ary[i]; int actl_id = itm.Id(); if (expd_id != actl_id) throw Err_.new_fmt_("database ids are not sequential; expd={0} actl={1}", expd_id, actl_id); ++expd_id; } } - public static final String Tbl_name = "xowa_db", Fld_db_id = "db_id", Fld_db_type = "db_type", Fld_db_url = "db_url"; - Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_db_id), Fld_db_type, Fld_db_url); } class Xodb_db_sorter implements gplx.lists.ComparerAble { public int compare(Object lhsObj, Object rhsObj) { diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java index 1130607b5..3105567e1 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -import gplx.dbs.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; public class Xodb_xowa_ns_tbl { public void Conn_(Db_conn conn) {this.conn = conn;} private Db_conn conn; public void Insert(Xow_ns_mgr ns_mgr) { diff --git a/400_xowa/src/gplx/xowa/files/Xof_doc_page.java b/400_xowa/src/gplx/xowa/files/Xof_doc_page.java index 226c42e8b..69df7dd58 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_page.java +++ b/400_xowa/src/gplx/xowa/files/Xof_doc_page.java @@ -22,6 +22,7 @@ public class Xof_doc_page { public static boolean Null_y(int v) {return v == Null;} public static boolean Null_n(int v) {return v != Null;} public static int Db_load_int(DataRdr rdr, String fld) {return rdr.ReadInt(fld);} + public static int Db_load_int(Db_rdr rdr, String fld) {return rdr.Read_int(fld);} public static int Db_load_int(Db_rdr rdr, int ord) {return rdr.Read_int(ord);} public static int Db_save_int(int v) {return v;} } diff --git a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java b/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java index 79e15ca26..84ff065ed 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java +++ b/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java @@ -20,8 +20,10 @@ import gplx.dbs.*; public class Xof_doc_thumb { public static double Db_save_double(double v) {return v;} public static double Db_load_double(DataRdr rdr, String fld) {return rdr.ReadDouble(fld);} + public static double Db_load_double(Db_rdr rdr, String fld) {return rdr.Read_double(fld);} public static int Db_save_int(double v) {return (int)v;} public static double Db_load_int(DataRdr rdr, String fld) {return rdr.ReadInt(fld);} + public static double Db_load_int(Db_rdr rdr, String fld) {return rdr.Read_int(fld);} public static double Db_load_int(Db_rdr rdr, int ord) {return rdr.Read_int(ord);} public static int X_int(double v) {return (int)v;} public static String X_str(double v) {return Double_.Xto_str(v);} diff --git a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java index ba47a1dd0..a3999e6b7 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java @@ -16,49 +16,47 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.parsers.lnkis.*; public class Xof_lnki_file_mgr { private boolean page_init_needed = true; - private ListAdp fsdb_list = ListAdp_.new_(); - private OrderedHash xfer_list = OrderedHash_.new_bry_(); - private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); - private Xof_img_size tmp_img_size = new Xof_img_size(); + private final ListAdp fsdb_list = ListAdp_.new_(); + private final OrderedHash orig_regy = OrderedHash_.new_bry_(), xfer_list = OrderedHash_.new_bry_(); + private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); private Xof_img_size tmp_img_size = new Xof_img_size(); public void Clear() { page_init_needed = true; fsdb_list.Clear(); xfer_list.Clear(); orig_regy.Clear(); } - private OrderedHash orig_regy = OrderedHash_.new_bry_(); - public boolean Find(Xow_wiki wiki, Xoa_page page, byte exec_tid, Xof_xfer_itm xfer_itm) { + public boolean Find(Xowe_wiki wiki, Xoae_page page, byte exec_tid, Xof_xfer_itm xfer_itm) { try { if (page_init_needed) { page_init_needed = false; - wiki.File_mgr().Fsdb_mgr().Init_by_wiki__add_bin_wkrs(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is - Create_xfer_itms(page.Lnki_list(), wiki.File_mgr().Fsdb_mgr().Patch_upright()); // NOTE: Patch_upright check must occur after Init_by_wiki; DATE:2014-05-31 - wiki.File_mgr().Fsdb_mgr().Orig_select_by_list(page, exec_tid, fsdb_list, orig_regy); + wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is + Create_xfer_itms(page.Lnki_list(), wiki.File_mgr().Patch_upright()); // NOTE: Patch_upright check must occur after Init_by_wiki; DATE:2014-05-31 + wiki.File_mgr().Fsdb_mgr().Orig_mgr().Find_by_list(orig_regy, fsdb_list, exec_tid); Hash_xfer_itms(); } Xof_fsdb_itm fsdb_itm = (Xof_fsdb_itm)xfer_list.Fetch(xfer_itm.Lnki_ttl()); if (fsdb_itm == null) // no orig_data found for the current item return false; else { - if (fsdb_itm.Orig_wiki() == null) return false; // itm not found; return now, else null exception later; + if (fsdb_itm.Orig_repo_name() == null) return false; // itm not found; return now, else null exception later; xfer_itm.Lnki_ext_(fsdb_itm.Lnki_ext()); // WORKAROUND: hacky, but fsdb_itm knows when ogg is ogv whereas xfer_itm does not; so, always override xfer_itm.ext with fsdb's; DATE:2014-02-02 xfer_itm.Url_bldr_(url_bldr); // default Url_bldr for xfer_itm uses @ for thumbtime; switch to -; DATE:2014-02-02 Init_fsdb_by_xfer(fsdb_itm, xfer_itm); // copy xfer itm props to fsdb_itm; xfer_itm.Set__orig(fsdb_itm.Orig_w(), fsdb_itm.Orig_h(), xfer_itm.Orig_file_len()); // copy orig props from orig_itm to xfer_itm - Xof_repo_itm repo = wiki.File_mgr().Repo_mgr().Repos_get_by_wiki(fsdb_itm.Orig_wiki()).Trg(); - fsdb_itm.Html__init(repo, url_bldr, tmp_img_size, exec_tid); + Xof_repo_itm repo = wiki.File_mgr().Repo_mgr().Repos_get_by_wiki(fsdb_itm.Orig_repo_name()).Trg(); + fsdb_itm.Ctor_by_html(repo, url_bldr, tmp_img_size, exec_tid); xfer_itm.Trg_repo_(repo); xfer_itm.Html_orig_src_(Bry_.new_utf8_(fsdb_itm.Html_orig_url().To_http_file_str())); // always set orig_url; note that w,h are not necessary for orig url; orig url needed for [[Media:]] links; DATE:2014-01-19 - gplx.ios.IoItmFil fil = Io_mgr._.QueryFil(fsdb_itm.Html_url()); + gplx.ios.IoItmFil fil = Io_mgr._.QueryFil(fsdb_itm.Html_view_url()); if (fil.Exists()) { if (fil.Size() == 0) // NOTE: fix; XOWA used to write 0 byte files if file was missing, delete them and do not return true; DATE:2014-06-21 - Io_mgr._.DeleteFil(fsdb_itm.Html_url()); + Io_mgr._.DeleteFil(fsdb_itm.Html_view_url()); else { - xfer_itm.Calc_by_fsdb(fsdb_itm.Html_w(), fsdb_itm.Html_h(), fsdb_itm.Html_url(), fsdb_itm.Html_orig_url()); + xfer_itm.Calc_by_fsdb(fsdb_itm.Html_w(), fsdb_itm.Html_h(), fsdb_itm.Html_view_url(), fsdb_itm.Html_orig_url()); return true; } } @@ -70,7 +68,7 @@ public class Xof_lnki_file_mgr { } return false; } catch (Exception e) { - wiki.App().Usr_dlg().Warn_many("", "", "failed to find img: img=~{0} err=~{1}", String_.new_utf8_(xfer_itm.Lnki_ttl()), Err_.Message_gplx_brief(e)); + wiki.Appe().Usr_dlg().Warn_many("", "", "failed to find img: img=~{0} err=~{1}", String_.new_utf8_(xfer_itm.Lnki_ttl()), Err_.Message_gplx_brief(e)); return false; } } @@ -102,13 +100,13 @@ public class Xof_lnki_file_mgr { byte[] lnki_ttl = lnki_tkn.Ttl().Page_db(); Xof_ext lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); byte[] lnki_md5 = Xof_xfer_itm_.Md5_(lnki_ttl); - fsdb_itm.Init_by_lnki(lnki_ttl, lnki_ext, lnki_md5, lnki_tkn.Lnki_type(), lnki_tkn.Lnki_w(), lnki_tkn.Lnki_h(), lnki_upright_patch, lnki_tkn.Upright(), lnki_tkn.Thumbtime(), lnki_tkn.Page()); + fsdb_itm.Ctor_by_lnki(lnki_ttl, lnki_ext, lnki_md5, lnki_tkn.Lnki_type(), lnki_tkn.Lnki_w(), lnki_tkn.Lnki_h(), lnki_upright_patch, lnki_tkn.Upright(), lnki_tkn.Thumbtime(), lnki_tkn.Page()); } private void Init_fsdb_by_xfer(Xof_fsdb_itm fsdb_itm, Xof_xfer_itm xfer_itm) { // DELETE: DATE:2014-02-04 fsdb_itm.Lnki_size_(xfer_itm.Lnki_w(), xfer_itm.Lnki_h()); // NOTE: must overwrite fsdb_itm.size with xfer_itm.size when the same image shows up in multiple sizes on a page; (only one item in wiki_orig); EX: w:Portal:Canada; [[File:Flag of Canada.svg|300x150px]]; [[File:Flag of Canada.svg|23px]]; DATE:2014-02-14 fsdb_itm.Lnki_type_(xfer_itm.Lnki_type()); // NOTE: must overwrite lnki_type, else multiple images on same page with different type wont show; PAGE:en.w:History_of_painting; DATE:2014-03-06 fsdb_itm.Lnki_page_(xfer_itm.Lnki_page()); - fsdb_itm.Lnki_thumbtime_(xfer_itm.Lnki_thumbtime()); + fsdb_itm.Lnki_time_(xfer_itm.Lnki_thumbtime()); // byte[] lnki_ttl = xfer_itm.Lnki_ttl(); // Xof_ext lnki_ext = xfer_itm.Lnki_ext(); // byte[] lnki_md5 = Xof_xfer_itm_.Md5_(lnki_ttl); diff --git a/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java b/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java index 90d2cb012..f1ae07429 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java @@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; +import gplx.xowa.files.repos.*; public class Xof_url_bldr { private final Bry_bfr bfr = Bry_bfr.reset_(400); private byte[] ttl; private byte[] md5; private Xof_ext ext; private boolean file_is_thumb; private int file_w; @@ -41,20 +42,6 @@ public class Xof_url_bldr { this.file_is_thumb = mode == Xof_repo_itm.Mode_thumb; this.file_w = file_w; this.time = time; this.page = page; return this; } -// public Xof_url_bldr Init_for_trg_file(byte mode, Xof_repo_itm repo, byte[] ttl, byte[] md5, Xof_ext ext, int file_w, double time, int page) { -// this.dir_spr = repo.Dir_spr(); this.root = repo.Root(); this.wmf_dir_hive = Bool_.N; -// this.area = repo.Mode_names()[mode]; this.md5_dir_depth = repo.Dir_depth(); -// this.ttl = repo.Gen_name_trg(ttl, md5, ext); this.md5 = md5; this.ext = ext; -// this.file_is_thumb = mode == Xof_repo_itm.Mode_thumb; this.file_w = file_w; this.time = time; this.page = page; -// return this; -// } -// public Xof_url_bldr Init_for_trg_html(byte mode, Xof_repo_itm repo, byte[] ttl, byte[] md5, Xof_ext ext, int file_w, double time, int page) { -// this.dir_spr = Byte_ascii.Slash; this.root = repo.Root_http(); this.wmf_dir_hive = Bool_.N; -// this.area = repo.Mode_names()[mode]; this.md5_dir_depth = repo.Dir_depth(); -// this.ttl = repo.Gen_name_trg(ttl, md5, ext); this.md5 = md5; this.ext = ext; -// this.file_is_thumb = mode == Xof_repo_itm.Mode_thumb; this.file_w = file_w; this.time = time; this.page = page; -// return this; -// } public Xof_url_bldr Init_for_trg_file(byte mode, Xof_repo_itm repo, byte[] ttl, byte[] md5, Xof_ext ext, int file_w, double time, int page) { return Init(Bool_.N, Bool_.N, repo.Dir_spr(), repo.Root() , repo.Mode_names()[mode], repo.Dir_depth(), repo.Gen_name_trg(ttl, md5, ext), md5, ext, mode, file_w, time, page); diff --git a/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java b/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java index 9327695bb..a6f97cd05 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import org.junit.*; import gplx.xowa.files.*; +import org.junit.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; public class Xof_url_bldr_tst { private Xof_url_bldr_fxt fxt = new Xof_url_bldr_fxt(); @Before public void init() {fxt.ini();} diff --git a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java index a415e5e5d..ee1f1354b 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import gplx.xowa.files.gui.*; +import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; public class Xof_xfer_itm implements Xof_file_itm { public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; diff --git a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java index 46a9429e7..68475bc48 100644 --- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java @@ -16,22 +16,18 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.files.fsdb.*; -import gplx.xowa2.files.metas.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*; import gplx.xowa.files.origs.*; public class Xow_file_mgr implements GfoInvkAble { private Xof_wkr_mgr wkr_mgr; - public Xow_file_mgr(Xow_wiki wiki) { + public Xow_file_mgr(Xowe_wiki wiki) { this.wiki = wiki; - repo_mgr = new Xow_repo_mgr(wiki); + repo_mgr = new Xowe_repo_mgr(wiki); meta_mgr = new Xof_meta_mgr(wiki); - fsdb_mgr = new Xof_fsdb_mgr_sql(wiki); + fsdb_mgr = new Xof_fsdb_mgr__sql(); wkr_mgr = new Xof_wkr_mgr(this); - Xof_file_meta_wkr__db_orig file_meta_wkr_as_db_orig = new Xof_file_meta_wkr__db_orig(); - file_meta_wkr_as_db_orig.Tbl().Conn_(Db_conn_pool.I.Get_or_new__sqlite(wiki.Fsys_mgr().File_dir().GenSubFil_nest("wiki.orig#00.sqlite3"))); - file_meta_wkr = file_meta_wkr_as_db_orig; } - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; - public Xof_file_meta_wkr File_meta_wkr() {return file_meta_wkr;} public void File_meta_wkr_(Xof_file_meta_wkr v) {file_meta_wkr = v;} private Xof_file_meta_wkr file_meta_wkr; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public byte Version() { if (version == Bool_.__byte) { Io_url file_dir = wiki.Fsys_mgr().File_dir(); @@ -54,30 +50,30 @@ public class Xow_file_mgr implements GfoInvkAble { public int Patch_upright() { return this.Version() == Version_1 ? Xof_patch_upright_tid_.Tid_all - : fsdb_mgr.Patch_upright() + : fsdb_mgr.Mnt_mgr().Patch_upright() ; } public static final byte Version_null = Byte_.Max_value_127, Version_1 = 1, Version_2 = 2; - public Xow_repo_mgr Repo_mgr() {return repo_mgr;} private Xow_repo_mgr repo_mgr; + public Xowe_repo_mgr Repo_mgr() {return repo_mgr;} private Xowe_repo_mgr repo_mgr; public Xof_meta_mgr Meta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr; public Xof_cfg_download Cfg_download() {return cfg_download;} private Xof_cfg_download cfg_download = new Xof_cfg_download(); public void Cfg_set(String grp, String key, String val) { // TEST: should only be called by tests if (test_grps == null) test_grps = HashAdp_.new_(); - Fsdb_cfg_grp grp_itm = (Fsdb_cfg_grp)test_grps.Fetch(grp); + Db_cfg_grp grp_itm = (Db_cfg_grp)test_grps.Fetch(grp); if (grp_itm == null) { - grp_itm = new Fsdb_cfg_grp(grp); + grp_itm = new Db_cfg_grp(grp); test_grps.Add(grp, grp_itm); } grp_itm.Upsert(key, val); } private HashAdp test_grps; - public Fsdb_cfg_grp Cfg_get(String grp) { + public Db_cfg_grp Cfg_get(String grp) { if (test_grps != null) { - Fsdb_cfg_grp rv = (Fsdb_cfg_grp)test_grps.Fetch(grp); - return rv == null ? Fsdb_cfg_grp.Null : rv; + Db_cfg_grp rv = (Db_cfg_grp)test_grps.Fetch(grp); + return rv == null ? Db_cfg_grp.Null : rv; } - if (this.Version() == Version_1) return Fsdb_cfg_grp.Null; - fsdb_mgr.Init_by_wiki__add_bin_wkrs(wiki); // make sure fsdb is init'd - return fsdb_mgr.Mnt_mgr().Abc_mgr_at(0).Cfg_mgr().Grps_get_or_load(grp); + if (this.Version() == Version_1) return Db_cfg_grp.Null; + fsdb_mgr.Init_by_wiki(wiki); // make sure fsdb is init'd + return fsdb_mgr.Mnt_mgr().Mnts__at(0).Cfg_mgr().Grps_get_or_load(grp); } public Xof_fsdb_mgr Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr fsdb_mgr; public boolean Find_meta(Xof_xfer_itm xfer_itm) { @@ -104,7 +100,7 @@ public class Xow_file_mgr implements GfoInvkAble { return meta.Orig_exists() == Bool_.Y_byte || meta.Thumbs().length != 0; } else - return fsdb_mgr.Orig_exists_by_ttl(ttl_bry); + return fsdb_mgr.Orig_mgr().Find_by_ttl_or_null(ttl_bry) != Xof_orig_itm.Null; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { @@ -114,6 +110,5 @@ public class Xow_file_mgr implements GfoInvkAble { else if (ctx.Match(k, Invk_fsdb)) return fsdb_mgr; else if (ctx.Match(k, Invk_wkrs)) return wkr_mgr; else return GfoInvkAble_.Rv_unhandled; -// return this; } private static final String Invk_repos = "repos", Invk_metas = "metas", Invk_cfg_download = "cfg_download", Invk_fsdb = "fsdb", Invk_wkrs = "wkrs"; } diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java index 6995cab9c..9607bbd25 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java @@ -16,71 +16,76 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.core.primitives.*; -import gplx.xowa.files.fsdb.*; import gplx.xowa.files.cnvs.*; import gplx.ios.*; -public class Xof_bin_mgr implements GfoInvkAble { - private Xof_bin_wkr[] wkrs; private int wkrs_len; - private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); - private Xof_fsdb_mgr_sql fsdb_mgr; - private Xow_wiki wiki; - private String_obj_ref resize_warning = String_obj_ref.null_(); private Xof_img_size tmp_size = new Xof_img_size(); - public Xof_bin_mgr(Xow_wiki wiki, Xof_fsdb_mgr_sql fsdb_mgr, Xow_repo_mgr repo_mgr) {this.Clear(); this.wiki = wiki; this.fsdb_mgr = fsdb_mgr; this.repo_mgr = repo_mgr;} - public Xow_repo_mgr Repo_mgr() {return repo_mgr;} private Xow_repo_mgr repo_mgr; - public void Resizer_(Xof_img_wkr_resize_img v) {resizer = v;} private Xof_img_wkr_resize_img resizer; - void Wkrs_(Xof_bin_wkr... wkrs) {this.wkrs = wkrs; wkrs_len = wkrs.length;} - public boolean Find_to_url_as_bool(ListAdp temp_files, byte exec_tid, Xof_fsdb_itm itm) { - return Find_to_url(temp_files, exec_tid, itm) != Io_url_.Null; +import gplx.core.primitives.*; import gplx.ios.*; +import gplx.fsdb.meta.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.caches.*; +import gplx.xowa.wmfs.*; +public class Xof_bin_mgr implements GfoInvkAble { + private final Gfo_usr_dlg usr_dlg; private final Fsm_mnt_mgr mnt_mgr; private final Xow_repo_mgr repo_mgr; private final Xof_cache_mgr cache_mgr; private final Xowmf_mgr wmf_mgr; private final Xof_url_bldr url_bldr; + private Xof_bin_wkr[] wkrs; private int wkrs_len; + private final String_obj_ref resize_warning = String_obj_ref.null_(); private final Xof_img_size tmp_size = new Xof_img_size(); + public Xof_bin_mgr(Fsm_mnt_mgr mnt_mgr, Xow_repo_mgr repo_mgr, Xof_cache_mgr cache_mgr, Xowmf_mgr wmf_mgr, Xof_url_bldr url_bldr) { + this.mnt_mgr = mnt_mgr; this.repo_mgr = repo_mgr; this.cache_mgr = cache_mgr; this.wmf_mgr = wmf_mgr; this.url_bldr = url_bldr; + this.usr_dlg = Gfo_usr_dlg_._; + Wkrs__clear(); } - public Io_url Find_to_url(ListAdp temp_files, byte exec_tid, Xof_fsdb_itm itm) { - Io_stream_rdr rdr = Find_as_rdr(temp_files, exec_tid, itm); + public void Resizer_(Xof_img_wkr_resize_img v) {resizer = v;} private Xof_img_wkr_resize_img resizer; + public void Init_by_wiki(Xof_img_wkr_resize_img resize_wkr) { + this.Wkrs__get_or_new(Xof_bin_wkr_.Key_fsdb_wiki); + this.Wkrs__get_or_new(Xof_bin_wkr_.Key_http_wmf); + this.Resizer_(resize_wkr); + } + public boolean Find_to_url_as_bool(byte exec_tid, Xof_fsdb_itm itm) {return Find_to_url(exec_tid, itm) != Io_url_.Null;} + private Io_url Find_to_url(byte exec_tid, Xof_fsdb_itm itm) { + Io_stream_rdr rdr = Find_as_rdr(exec_tid, itm); if (rdr == Io_stream_rdr_.Null) return Io_url_.Null; - Io_url trg = itm.Html_url(); - if (itm.Rslt_fil_created()) return trg; // rdr is opened directly from trg; return its url; occurs when url goes through imageMagick / inkscape, or when thumb is already in disk; + Io_url trg = itm.Html_view_url(); + if (itm.Rslt_fil_created()) return trg; // rdr is opened directly from trg; return its url; occurs when url goes through imageMagick / inkscape, or when thumb is already on disk; Io_stream_wtr_.Save_rdr(trg, rdr); // rdr is stream; either from http_wmf or fsdb; save to trg and return; - if (Xof_bin_wkr_.Tid_is_fsdb(itm.Rslt_bin())) { // rdr is coming from fsdb; register in cache + if (itm.Rslt_bin() == Xof_bin_wkr_.Tid_fsdb_xowa) { // rdr is coming from fsdb; register in cache if (!Env_.Mode_testing()) - fsdb_mgr.Cache_mgr().Reg(wiki, itm, rdr.Len()); + cache_mgr.Reg(itm, rdr.Len()); } return trg; } - public Io_stream_rdr Find_as_rdr(ListAdp temp_files, byte exec_tid, Xof_fsdb_itm itm) { + public Io_stream_rdr Find_as_rdr(byte exec_tid, Xof_fsdb_itm itm) { Io_stream_rdr rv = Io_stream_rdr_.Null; boolean file_is_orig = itm.File_is_orig(); - if (file_is_orig || exec_tid == Xof_exec_tid.Tid_viewer_app) { // mode is viewer_app; always return orig - Io_url trg = Get_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); - itm.Html_url_(trg); + if (file_is_orig || exec_tid == Xof_exec_tid.Tid_viewer_app) { // orig or viewer_app; note that viewer_app always return orig + Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); + itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; - rv = wkr.Bin_wkr_get_as_rdr(temp_files, itm, Bool_.N, itm.Html_w()); + rv = wkr.Get_as_rdr(itm, Bool_.N, itm.Html_w()); if (rv == Io_stream_rdr_.Null) continue; // orig not found; continue; - itm.Rslt_bin_(wkr.Bin_wkr_tid()); + itm.Rslt_bin_(wkr.Tid()); return rv; } } - else { // thumb - Io_url trg = Get_url(itm, Xof_repo_itm.Mode_thumb, Bool_.N); - itm.Html_url_(trg); + else { // thumb + Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_thumb, Bool_.N); + itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; - rv = wkr.Bin_wkr_get_as_rdr(temp_files, itm, Bool_.Y, itm.Html_w()); // get thumb's bin - if (rv != Io_stream_rdr_.Null) { // thumb's bin exists; - itm.Rslt_bin_(wkr.Bin_wkr_tid()); + rv = wkr.Get_as_rdr(itm, Bool_.Y, itm.Html_w()); // get thumb's bin + if (rv != Io_stream_rdr_.Null) { // thumb's bin exists; + itm.Rslt_bin_(wkr.Tid()); return rv; } - wiki.App().Usr_dlg().Log_direct(String_.Format("thumb not found; ttl={0} w={1} ", String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w())); - rv = wkr.Bin_wkr_get_as_rdr(temp_files, itm, Bool_.N, itm.Orig_w()); // thumb missing; get orig; + usr_dlg.Log_direct(String_.Format("thumb not found; ttl={0} w={1} ", String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w())); + rv = wkr.Get_as_rdr(itm, Bool_.N, itm.Orig_w()); // thumb missing; get orig; if (rv == Io_stream_rdr_.Null) { - wiki.App().Usr_dlg().Log_direct(String_.Format("orig not found; ")); - continue; // nothing found; continue; + usr_dlg.Log_direct(String_.Format("orig not found;")); + continue; // nothing found; continue; } - if (!wkr.Bin_wkr_resize()) continue; - Io_url orig = Get_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); // get orig url + if (!wkr.Resize_allowed()) continue; + Io_url orig = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); // get orig url Io_stream_wtr_.Save_rdr(orig, rv); boolean resized = Resize(exec_tid, itm, file_is_orig, orig, trg); if (!resized) continue; - itm.Rslt_bin_(wkr.Bin_wkr_tid()); + itm.Rslt_bin_(wkr.Tid()); itm.Rslt_fil_created_(true); - rv = Io_stream_rdr_.file_(trg); // return stream of resized url; (result of imageMagick / inkscape) + rv = Io_stream_rdr_.file_(trg); // return stream of resized url; (result of imageMagick / inkscape) rv.Open(); return rv; } @@ -88,53 +93,52 @@ public class Xof_bin_mgr implements GfoInvkAble { return Io_stream_rdr_.Null; } private boolean Resize(byte exec_tid, Xof_fsdb_itm itm, boolean file_is_orig, Io_url src, Io_url trg) { - tmp_size.Html_size_calc(exec_tid, itm.Lnki_w(), itm.Lnki_h(), itm.Lnki_type(), fsdb_mgr.Patch_upright(), itm.Lnki_upright(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), Xof_img_size.Thumb_width_img); + tmp_size.Html_size_calc(exec_tid, itm.Lnki_w(), itm.Lnki_h(), itm.Lnki_type(), mnt_mgr.Patch_upright(), itm.Lnki_upright(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), Xof_img_size.Thumb_width_img); boolean rv = resizer.Exec(src, trg, tmp_size.Html_w(), tmp_size.Html_h(), itm.Lnki_ext().Id(), resize_warning); itm.Rslt_cnv_(rv ? Xof_cnv_wkr_.Tid_y : Xof_cnv_wkr_.Tid_n); return rv; } - private Io_url Get_url(Xof_fsdb_itm itm, byte mode, boolean src) { - Xof_repo_pair repo = repo_mgr.Repos_get_by_wiki(itm.Orig_wiki()); + private Io_url Bld_url(Xof_fsdb_itm itm, byte mode, boolean src) { + Xof_repo_pair repo = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()); return src - ? url_bldr.Init_for_src_file(mode, repo.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_thumbtime(), itm.Lnki_page()).Xto_url() - : url_bldr.Init_for_trg_file(mode, repo.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_thumbtime(), itm.Lnki_page()).Xto_url() + ? url_bldr.Init_for_src_file(mode, repo.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() + : url_bldr.Init_for_trg_file(mode, repo.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() ; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_add)) return Get_or_new(m.ReadStr("type"), m.ReadStrOr("key", null)); + if (ctx.Match(k, Invk_add)) return Wkrs__get_or_new(m.ReadStr("type"), m.ReadStrOr("key", null)); else return GfoInvkAble_.Rv_unhandled; } private static final String Invk_add = "add"; - public Xof_bin_wkr Get_or_new(String type) {return Get_or_new(type, null);} - public Xof_bin_wkr Get_or_new(String type, String key) { + public void Wkrs__clear() {this.wkrs = Xof_bin_wkr_.Ary_empty; this.wkrs_len = 0;} + public Xof_bin_wkr Wkrs__get_or_new(String type) {return Wkrs__get_or_new(type, null);} + private Xof_bin_wkr Wkrs__get_or_new(String type, String key) { if (key == null) key = type; // default empty key to type; EX: add('xowa.http.wmf') -> add('xowa.http.wmf', 'xowa.http.wmf') - Xof_bin_wkr rv = Get_or_null(key); + Xof_bin_wkr rv = Wkrs__get_or_null(key); if (rv == null) { - rv = Make(type, key); - wkrs = (Xof_bin_wkr[])Array_.Resize_add(wkrs, new Xof_bin_wkr[] {rv}); - ++wkrs_len; + rv = Wkrs__new(type); + Wkrs__add(rv); } return rv; } - public void Add(Xof_bin_wkr v) {Add_many(v);} - public void Add_many(Xof_bin_wkr... v) { + public void Wkrs__add(Xof_bin_wkr v) {Wkrs__add_many(v);} + private void Wkrs__add_many(Xof_bin_wkr... v) { wkrs = (Xof_bin_wkr[])Array_.Resize_add(wkrs, v); wkrs_len += v.length; } - public void Clear() {wkrs = Xof_bin_wkr_.Ary_empty; wkrs_len = 0;} - private Xof_bin_wkr Get_or_null(String key) { + private Xof_bin_wkr Wkrs__get_or_null(String key) { int wkrs_len = wkrs.length; byte tid = Xof_bin_wkr_.X_key_to_tid(key); - for (int i = 0; i < wkrs_len; i ++) { + for (int i = 0; i < wkrs_len; ++i) { Xof_bin_wkr wkr = wkrs[i]; - if (wkr.Bin_wkr_tid() == tid) return wkr; + if (wkr.Tid() == tid) return wkr; } return null; } - private Xof_bin_wkr Make(String type, String key) { + private Xof_bin_wkr Wkrs__new(String type) { Xof_bin_wkr rv = null; - if (String_.Eq(type, Xof_bin_wkr_.Key_fsdb_wiki)) rv = new Xof_bin_wkr_fsdb_sql(fsdb_mgr); - else if (String_.Eq(type, Xof_bin_wkr_.Key_fsys_wmf)) rv = new Xof_bin_wkr_fsys_wmf(); - else if (String_.Eq(type, Xof_bin_wkr_.Key_http_wmf)) rv = new Xof_bin_wkr_http_wmf(repo_mgr, wiki.App().File_mgr().Download_mgr().Download_wkr().Download_xrg()); + if (String_.Eq(type, Xof_bin_wkr_.Key_fsdb_wiki)) rv = new Xof_bin_wkr__fsdb_sql(mnt_mgr); + else if (String_.Eq(type, Xof_bin_wkr_.Key_fsys_wmf)) rv = new Xof_bin_wkr__fsys_wmf(); + else if (String_.Eq(type, Xof_bin_wkr_.Key_http_wmf)) rv = new Xof_bin_wkr__http_wmf(repo_mgr, wmf_mgr.Download_wkr().Download_xrg()); else throw Err_.unhandled(type); return rv; } diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java index 2d615a275..d2277e3e8 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr.java @@ -16,11 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.ios.*; import gplx.xowa.files.fsdb.*; public interface Xof_bin_wkr extends GfoInvkAble { - byte Bin_wkr_tid(); - boolean Bin_wkr_resize(); void Bin_wkr_resize_(boolean v); - gplx.ios.Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w); - boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url); - boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url); + byte Tid(); + boolean Resize_allowed(); void Resize_allowed_(boolean v); + Io_stream_rdr Get_as_rdr (Xof_fsdb_itm itm, boolean is_thumb, int w); + boolean Get_to_fsys (Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url); } diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_.java index 9481b695b..cdfba43ba 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_.java @@ -19,31 +19,18 @@ package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xow public class Xof_bin_wkr_ { public static final Xof_bin_wkr[] Ary_empty = new Xof_bin_wkr[0]; public static final byte Tid_null = Byte_.Max_value_127, Tid_noop = 1, Tid_not_found = 2 - , Tid_fsdb_wiki = 3, Tid_fsdb_regy = 4 - , Tid_http_wmf = 5 - , Tid_fsys_wmf = 6, Tid_fsys_xowa = 7 - , Tid_root_dir = 8; + , Tid_fsdb_xowa = 3 , Tid_http_wmf = 5 + , Tid_fsys_wmf = 6 , Tid_fsys_xowa = 7 + ; public static final String - Key_fsdb_wiki = "xowa.fsdb.wiki", Key_fsdb_regy = "xowa.fsdb.regy" - , Key_http_wmf = "xowa.http.wmf" - , Key_fsys_wmf = "xowa.fsys.wmf", Key_fsys_xowa = "xowa.fsys.xowa" - , Key_root_dir = "xowa.root_dir" + Key_fsdb_wiki = "xowa.fsdb.wiki" , Key_http_wmf = "xowa.http.wmf" + , Key_fsys_wmf = "xowa.fsys.wmf" , Key_fsys_xowa = "xowa.fsys.xowa" ; public static byte X_key_to_tid(String key) { - if (String_.Eq(key, Key_fsdb_wiki)) return Tid_fsdb_wiki; - else if (String_.Eq(key, Key_fsdb_regy)) return Tid_fsdb_regy; + if (String_.Eq(key, Key_fsdb_wiki)) return Tid_fsdb_xowa; else if (String_.Eq(key, Key_http_wmf)) return Tid_http_wmf; else if (String_.Eq(key, Key_fsys_wmf)) return Tid_fsys_wmf; else if (String_.Eq(key, Key_fsys_xowa)) return Tid_fsys_xowa; - else if (String_.Eq(key, Key_root_dir)) return Tid_root_dir; else return Tid_null; } - public static boolean Tid_is_fsdb(byte v) { - switch (v) { - case Tid_fsdb_wiki: case Tid_fsdb_regy: - return true; - default: - return false; - } - } } diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java new file mode 100644 index 000000000..ac6abf2e0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java @@ -0,0 +1,73 @@ +/* +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.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*; import gplx.cache.*; import gplx.xowa.files.fsdb.*; +import gplx.fsdb.data.*; import gplx.fsdb.meta.*; +public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr, GfoInvkAble { + private final Int_obj_ref tmp_itm_id = Int_obj_ref.neg1_(), tmp_bin_id = Int_obj_ref.neg1_(), tmp_mnt_id = Int_obj_ref.neg1_(); + private final Fsm_mnt_mgr mnt_mgr; + public Xof_bin_wkr__fsdb_sql(Fsm_mnt_mgr mnt_mgr) {this.mnt_mgr = mnt_mgr;} + public byte Tid() {return Xof_bin_wkr_.Tid_fsdb_xowa;} + public boolean Resize_allowed() {return bin_wkr_resize;} public void Resize_allowed_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false; + public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) { + Find_ids(itm, is_thumb, w, tmp_itm_id, tmp_bin_id, tmp_mnt_id); + int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Null_db_bin_id) return gplx.ios.Io_stream_rdr_.Null; + Fsm_bin_fil bin_db = mnt_mgr.Bins__at(tmp_mnt_id.Val(), bin_db_id); + return bin_db.Get_as_rdr(tmp_itm_id.Val()); + } + public boolean Get_to_fsys(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) {return Get_to_fsys(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), bin_url);} + private boolean Get_to_fsys(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { + Find_ids(orig_repo, orig_ttl, orig_ext.Id(), lnki_time, lnki_page, lnki_is_thumb, file_w, tmp_itm_id, tmp_bin_id, tmp_mnt_id); + int bin_db_id = tmp_bin_id.Val(); if (bin_db_id == Fsd_bin_tbl.Null_db_bin_id) return false; + Fsm_bin_fil bin_db = mnt_mgr.Bins__at(tmp_mnt_id.Val(), bin_db_id); + return bin_db.Get_to_url(tmp_itm_id.Val(), file_url); + } + private void Find_ids(Xof_fsdb_itm itm, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_id, Int_obj_ref tmp_mnt_id) {Find_ids(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Lnki_time(), itm.Lnki_page(), is_thumb, w, tmp_itm_id, tmp_bin_id, tmp_mnt_id);} + private void Find_ids(byte[] orig_repo, byte[] orig_ttl, int orig_ext, double lnki_time, int lnki_page, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_id, Int_obj_ref tmp_mnt_id) { + synchronized (tmp_bin_id) { + byte[] dir = orig_repo, fil = orig_ttl; + double time = Xof_doc_thumb.Convert_to_fsdb_thumbtime(orig_ext, lnki_time, lnki_page); + if (is_thumb) { + Fsd_thm_itm thm_itm = Fsd_thm_itm.load_(); + Init_thm(orig_ext, w, lnki_time, lnki_page, thm_itm); + boolean found = mnt_mgr.Thm_select_bin(dir, fil, thm_itm); + tmp_itm_id.Val_(thm_itm.Id()); + tmp_bin_id.Val_(found ? thm_itm.Db_bin_id() : Fsd_bin_tbl.Null_db_bin_id); + tmp_mnt_id.Val_(thm_itm.Mnt_id()); + } + else { + Fsd_fil_itm fil_itm = mnt_mgr.Fil_select_bin(dir, fil, is_thumb, w, time); + tmp_itm_id.Val_(fil_itm.Id()); + tmp_bin_id.Val_(fil_itm.Db_bin_id()); + tmp_mnt_id.Val_(fil_itm.Mnt_id()); + } + } + } + private void Init_thm(int src_ext_id, int src_w, double src_time, int src_page, Fsd_thm_itm trg) { + trg.Owner().Ext_id_(src_ext_id); + trg.Width_(src_w); + trg.Thumbtime_(src_time); + trg.Page_(src_page); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.MatchIn(k, Invk_url_)) mnt_mgr.Init_by_wiki(m.ReadIoUrl("v"), Bool_.Y); + else return GfoInvkAble_.Rv_unhandled; + return this; + } private static final String Invk_url_ = "url_"; +} + diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsys_base.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java similarity index 65% rename from 400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsys_base.java rename to 400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java index 6731c9bf6..595c4aadb 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsys_base.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsys_base.java @@ -16,20 +16,21 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; -public abstract class Xof_bin_wkr_fsys_base implements Xof_bin_wkr, GfoInvkAble { - public Xof_bin_wkr_fsys_base() {} - public abstract byte Bin_wkr_tid(); - public boolean Bin_wkr_resize() {return bin_wkr_resize;} public void Bin_wkr_resize_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false; - public gplx.ios.Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w) { +import gplx.ios.*; +import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; +public abstract class Xof_bin_wkr__fsys_base implements Xof_bin_wkr, GfoInvkAble { + public Xof_bin_wkr__fsys_base() {} + public abstract byte Tid(); + public boolean Resize_allowed() {return resize_allowed;} public void Resize_allowed_(boolean v) {resize_allowed = v;} private boolean resize_allowed = false; + public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) { byte mode = is_thumb ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig; - Io_url src_url = this.Get_src_url(mode, String_.new_utf8_(itm.Orig_wiki()), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), w, itm.Lnki_thumbtime(), itm.Lnki_page()); + Io_url src_url = this.Get_src_url(mode, String_.new_utf8_(itm.Orig_repo_name()), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), w, itm.Lnki_time(), itm.Lnki_page()); return (src_url == Io_url_.Null) ? gplx.ios.Io_stream_rdr_.Null : gplx.ios.Io_stream_rdr_.file_(src_url); } - public boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return Save_to_url(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_thumbtime(), itm.Lnki_page(), bin_url); + public boolean Get_to_fsys(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { + return Get_to_fsys(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), bin_url); } - public boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { + private boolean Get_to_fsys(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { byte mode = lnki_is_thumb ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig; Io_url src_url = this.Get_src_url(mode, String_.new_utf8_(orig_repo), orig_ttl, orig_md5, orig_ext, file_w, lnki_time, lnki_page); if (src_url == Io_url_.Null) return false; @@ -44,7 +45,7 @@ public abstract class Xof_bin_wkr_fsys_base implements Xof_bin_wkr, GfoInvkAble return this; } private static final String Invk_url_ = "url_"; } -abstract class Xof_bin_wkr_fsys_wmf_base extends Xof_bin_wkr_fsys_base { +abstract class Xof_bin_wkr__fsys_wmf_base extends Xof_bin_wkr__fsys_base { public Xof_url_bldr Url_bldr() {return url_bldr;} private Xof_url_bldr url_bldr = new Xof_url_bldr(); public abstract void Init_by_root(); @Override public void Url_(Io_url v) {url_bldr.Root_(Bry_.new_utf8_(v.Raw()));} @@ -52,14 +53,14 @@ abstract class Xof_bin_wkr_fsys_wmf_base extends Xof_bin_wkr_fsys_base { return this.Url_bldr().Init_by_itm(mode, ttl_wo_ns, md5, ext, w, time, page).Xto_url(); } } -class Xof_bin_wkr_fsys_wmf extends Xof_bin_wkr_fsys_wmf_base { - @Override public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_fsys_wmf;} +class Xof_bin_wkr__fsys_wmf extends Xof_bin_wkr__fsys_wmf_base { + @Override public byte Tid() {return Xof_bin_wkr_.Tid_fsys_wmf;} @Override public void Init_by_root() { this.Url_bldr().Init_by_root(Bry_.Empty, Op_sys.Cur().Fsys_dir_spr_byte(), Bool_.Y, Bool_.Y, Xof_repo_itm.Dir_depth_wmf); } } -class Xof_bin_wkr_fsys_xowa extends Xof_bin_wkr_fsys_wmf_base { - @Override public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_fsys_xowa;} +class Xof_bin_wkr__fsys_xowa extends Xof_bin_wkr__fsys_wmf_base { + @Override public byte Tid() {return Xof_bin_wkr_.Tid_fsys_xowa;} @Override public void Init_by_root() { this.Url_bldr().Init_by_root(Bry_.Empty, Op_sys.Cur().Fsys_dir_spr_byte(), Bool_.N, Bool_.N, Xof_repo_itm.Dir_depth_xowa); } diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java new file mode 100644 index 000000000..ebf151b7f --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java @@ -0,0 +1,60 @@ +/* +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.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.ios.*; import gplx.threads.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; +public class Xof_bin_wkr__http_wmf implements Xof_bin_wkr { + private final Xow_repo_mgr repo_mgr; private final IoEngine_xrg_downloadFil download_wkr; + private final Xof_url_bldr url_bldr = new Xof_url_bldr(); + public Xof_bin_wkr__http_wmf(Xow_repo_mgr repo_mgr, gplx.ios.IoEngine_xrg_downloadFil download_wkr) {this.repo_mgr = repo_mgr; this.download_wkr = download_wkr;} + public byte Tid() {return Xof_bin_wkr_.Tid_http_wmf;} + public boolean Resize_allowed() {return bin_wkr_resize;} public void Resize_allowed_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = true; + public int Fail_timeout() {return fail_timeout;} public Xof_bin_wkr__http_wmf Fail_timeout_(int v) {fail_timeout = v; return this;} private int fail_timeout = 0; // NOTE: always default to 0; manually set to 1000 for fsdb_make only; DATE:2014-06-21 + public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) { + Download_init(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), Io_url_.Null); + Io_stream_rdr rdr = download_wkr.Exec_as_rdr(); + boolean rv = rdr.Len() != IoItmFil.Size_invalid; // NOTE: use IoItmFil.Size_invalid, not Io_stream_rdr_.Read_done; DATE:2014-06-21 + if (!rv) Handle_error(); + return rv ? rdr : Io_stream_rdr_.Null; + } + public boolean Get_to_fsys(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { + return Get_to_fsys(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), bin_url); + } + private boolean Get_to_fsys(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { + Download_init(orig_repo, orig_ttl, orig_md5, orig_ext, lnki_is_thumb, file_w, lnki_time, lnki_page, file_url); + boolean rv = download_wkr.Exec(); + if (!rv) Handle_error(); + return rv; + } + private void Handle_error() { + if (fail_timeout > 0) + ThreadAdp_.Sleep(fail_timeout); // as per WMF policy, pause 1 second for every cache miss; http://lists.wikimedia.org/pipermail/wikitech-l/2013-September/071948.html + } + private void Download_init(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { + byte mode = lnki_is_thumb ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig; + Xof_repo_pair repo_itm = repo_mgr.Repos_get_by_wiki(orig_repo); + download_wkr.Prog_fmt_hdr_(String_.Format("downloading ~{0} of ~{1}: ~{2};", 1, 1, String_.new_utf8_(orig_ttl))); + String src = url_bldr.Init_for_src_file(mode, repo_itm.Src(), orig_ttl, orig_md5, orig_ext, file_w, lnki_time, lnki_page).Xto_str(); + download_wkr.Init(src, file_url); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_fail_timeout_)) fail_timeout = m.ReadInt("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } private static final String Invk_fail_timeout_ = "fail_timeout_"; + +} diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_regy.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_regy.java deleted file mode 100644 index 75fa0bfca..000000000 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_regy.java +++ /dev/null @@ -1,52 +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.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.ios.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -public class Xof_bin_wkr_fsdb_regy implements Xof_bin_wkr { - private Io_url regy_url; private Db_conn conn; - public Xof_bin_wkr_fsdb_regy() { - } - public boolean Bin_wkr_resize() {return bin_wkr_resize;} public void Bin_wkr_resize_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false; - public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_fsdb_regy;} - public void Init_by_wiki(Xow_wiki wiki) { - if (regy_url == null) regy_url = wiki.App().Fsys_mgr().File_dir().GenSubFil("xowa.fsdb_regy.sqlite3"); - if (!Io_mgr._.ExistsFil(regy_url)) throw Err_.new_fmt_("fsdb_regy does not exist: url={0}", regy_url.Raw()); - conn = Sqlite_engine_.Conn_load_or_make_(regy_url); - } - public void Rls() { - conn.Conn_term(); - } - public Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w) { - return null; - } - public boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return true; - } - public boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) {return true;} - public void Bin_wkr_get(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - // get entry; if not exists return null; - // if exists, open up bin_db - // return bin - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_regy_url_)) regy_url = m.ReadIoUrl("v"); - else return GfoInvkAble_.Rv_unhandled; - return this; - } private static final String Invk_regy_url_ = "regy_url_"; -} diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_sql.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_sql.java deleted file mode 100644 index 35a4517f8..000000000 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_fsdb_sql.java +++ /dev/null @@ -1,78 +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.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*; import gplx.cache.*; import gplx.fsdb.*; import gplx.xowa.files.fsdb.*; -public class Xof_bin_wkr_fsdb_sql implements Xof_bin_wkr, GfoInvkAble { - private byte[] bin_bfr; private int bin_flush_when = Io_mgr.Len_mb; - private Int_obj_ref tmp_itm_id = Int_obj_ref.neg1_(), tmp_bin_db_id = Int_obj_ref.neg1_(), tmp_mnt_id = Int_obj_ref.neg1_(); - public Xof_bin_wkr_fsdb_sql(Xof_fsdb_mgr_sql fsdb_mgr) {this.fsdb_mgr = fsdb_mgr;} - public Xof_fsdb_mgr_sql Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr_sql fsdb_mgr; - public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_fsdb_wiki;} - public boolean Bin_wkr_resize() {return bin_wkr_resize;} public void Bin_wkr_resize_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false; - public int Bin_bfr_len() {return bin_bfr_len;} public Xof_bin_wkr_fsdb_sql Bin_bfr_len_(int v) {bin_bfr_len = v; return this;} private int bin_bfr_len = 32; - public Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w) { - Bin_wkr_get_ids(itm, is_thumb, w, tmp_itm_id, tmp_bin_db_id, tmp_mnt_id); - int bin_db_id = tmp_bin_db_id.Val(); if (bin_db_id == Fsdb_bin_tbl.Null_db_bin_id) return gplx.ios.Io_stream_rdr_.Null; - Fsdb_db_bin_fil bin_db = fsdb_mgr.Bin_db_get(tmp_mnt_id.Val(), bin_db_id); - return bin_db.Get_as_rdr(tmp_itm_id.Val()); - } - public boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return Save_to_url(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_thumbtime(), itm.Lnki_page(), bin_url); - } - public boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { - if (bin_bfr == null) bin_bfr = new byte[bin_bfr_len]; - Bin_wkr_get_ids(orig_repo, orig_ttl, orig_ext.Id(), lnki_time, lnki_page, lnki_is_thumb, file_w, tmp_itm_id, tmp_bin_db_id, tmp_mnt_id); - int bin_db_id = tmp_bin_db_id.Val(); if (bin_db_id == Fsdb_bin_tbl.Null_db_bin_id) return false; - Fsdb_db_bin_fil bin_db = fsdb_mgr.Bin_db_get(tmp_mnt_id.Val(), bin_db_id); - return bin_db.Get_to_url(tmp_itm_id.Val(), file_url, bin_bfr, bin_flush_when); - } - private void Bin_wkr_get_ids(Xof_fsdb_itm itm, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_db_id, Int_obj_ref tmp_mnt_id) { - Bin_wkr_get_ids(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Lnki_thumbtime(), itm.Lnki_page(), is_thumb, w, tmp_itm_id, tmp_bin_db_id, tmp_mnt_id); - } - private void Bin_wkr_get_ids(byte[] orig_repo, byte[] orig_ttl, int orig_ext, double lnki_time, int lnki_page, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_db_id, Int_obj_ref tmp_mnt_id) { - byte[] dir = orig_repo, fil = orig_ttl; - double thumbtime = Xof_doc_thumb.Convert_to_fsdb_thumbtime(orig_ext, lnki_time, lnki_page); - if (is_thumb) { - Fsdb_xtn_thm_itm thm_itm = Fsdb_xtn_thm_itm.load_(); - Init_thm(orig_ext, w, lnki_time, lnki_page, thm_itm); - boolean found = fsdb_mgr.Thm_select_bin(dir, fil, thm_itm); - tmp_itm_id.Val_(thm_itm.Id()); - tmp_bin_db_id.Val_(found ? thm_itm.Db_bin_id() : Fsdb_bin_tbl.Null_db_bin_id); - tmp_mnt_id.Val_(thm_itm.Mnt_id()); - } - else { - Fsdb_fil_itm fil_itm = fsdb_mgr.Fil_select_bin(dir, fil, is_thumb, w, thumbtime); - tmp_itm_id.Val_(fil_itm.Id()); - tmp_bin_db_id.Val_(fil_itm.Db_bin_id()); - tmp_mnt_id.Val_(fil_itm.Mnt_id()); - } - } - private void Init_thm(int src_ext_id, int src_w, double src_time, int src_page, Fsdb_xtn_thm_itm trg) { - trg.Owner().Ext_id_(src_ext_id); - trg.Width_(src_w); - trg.Thumbtime_(src_time); - trg.Page_(src_page); - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_db_dir_)) fsdb_mgr.Db_dir_(m.ReadIoUrl("v")); - else if (ctx.Match(k, Invk_url_)) fsdb_mgr.Db_dir_(m.ReadIoUrl("v")); - else return GfoInvkAble_.Rv_unhandled; - return this; - } private static final String Invk_db_dir_ = "db_dir_", Invk_url_ = "url_"; -} - diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_http_wmf.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_http_wmf.java deleted file mode 100644 index c9654d65f..000000000 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr_http_wmf.java +++ /dev/null @@ -1,63 +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.files.bins; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.ios.*; import gplx.threads.*; import gplx.xowa.files.fsdb.*; -public class Xof_bin_wkr_http_wmf implements Xof_bin_wkr { - private Xow_repo_mgr repo_mgr; private gplx.ios.IoEngine_xrg_downloadFil download; - private Xof_url_bldr url_bldr = new Xof_url_bldr(); - public int Fail_timeout() {return fail_timeout;} public Xof_bin_wkr_http_wmf Fail_timeout_(int v) {fail_timeout = v; return this;} private int fail_timeout = 0; // NOTE: always default to 0; manually set to 1000 in fsdb_make; DATE:2014-06-21 - public boolean Bin_wkr_resize() {return bin_wkr_resize;} public void Bin_wkr_resize_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = true; // NOTE: default to true - public Xof_bin_wkr_http_wmf(Xow_repo_mgr repo_mgr, gplx.ios.IoEngine_xrg_downloadFil download) { - this.repo_mgr = repo_mgr; this.download = download; - } - public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_http_wmf;} - public Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w) { - Bin_wkr_get(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_thumbtime(), itm.Lnki_page(), Io_url_.Null); - Io_stream_rdr rdr = download.Exec_as_rdr(); - boolean rv = rdr.Len() != IoItmFil.Size_Invalid; // NOTE: use IoItmFil.Size_Invalid, not Io_stream_rdr_.Read_done; DATE:2014-06-21 - if (!rv) Handle_error(); - return rv ? rdr : Io_stream_rdr_.Null; - } - public boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return Save_to_url(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_thumbtime(), itm.Lnki_page(), bin_url); - } - public boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { - Bin_wkr_get(orig_repo, orig_ttl, orig_md5, orig_ext, lnki_is_thumb, file_w, lnki_time, lnki_page, file_url); - boolean rv = download.Exec(); - if (!rv) Handle_error(); - return rv; - } - private void Handle_error() { - if (fail_timeout > 0) - ThreadAdp_.Sleep(fail_timeout); // as per WMF policy, pause 1 second for every cache miss; http://lists.wikimedia.org/pipermail/wikitech-l/2013-September/071948.html - } - private void Bin_wkr_get(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { - byte mode = lnki_is_thumb ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig; - Xof_repo_pair repo_itm = repo_mgr.Repos_get_by_wiki(orig_repo); - String queue_msg = String_.Format("downloading ~{0} of ~{1}: ~{2};", 0, 0, String_.new_utf8_(orig_ttl)); - download.Prog_fmt_hdr_(queue_msg); - String src = url_bldr.Init_for_src_file(mode, repo_itm.Src(), orig_ttl, orig_md5, orig_ext, file_w, lnki_time, lnki_page).Xto_str(); - download.Init(src, file_url); - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_fail_timeout_)) fail_timeout = m.ReadInt("v"); - else return GfoInvkAble_.Rv_unhandled; - return this; - } private static final String Invk_fail_timeout_ = "fail_timeout_"; - -} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java new file mode 100644 index 000000000..1b8c21f08 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java @@ -0,0 +1,93 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.primitives.*; import gplx.dbs.*; +import gplx.xowa.files.fsdb.*; import gplx.xowa2.files.*; import gplx.xowa.wikis.*; +public class Xof_cache_mgr implements GfoInvkAble { + private final Gfo_usr_dlg usr_dlg; private final Xoa_wiki_mgr wiki_mgr; private final Xoa_repo_mgr repo_mgr; + private final Xofc_cfg_mgr cfg_mgr = new Xofc_cfg_mgr(); private final Xofc_dir_mgr dir_mgr; private final Xofc_fil_mgr fil_mgr; + private final Bool_obj_ref fil_created = Bool_obj_ref.n_(); + public Xof_cache_mgr(Gfo_usr_dlg usr_dlg, Xoa_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr) { + this.usr_dlg = usr_dlg; this.wiki_mgr = wiki_mgr; this.repo_mgr = repo_mgr; + this.dir_mgr = new Xofc_dir_mgr(this); + this.fil_mgr = new Xofc_fil_mgr(this); + } + public int Next_id() {return cfg_mgr.Next_id();} public void Next_id_(int v) {cfg_mgr.Next_id_(v);} + public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) { + cfg_mgr.Conn_(conn, created, version_is_1); + dir_mgr.Conn_(conn, created, version_is_1); + fil_mgr.Conn_(conn, created, version_is_1); + } + public void Db_save() { + try { + dir_mgr.Save_all(); + fil_mgr.Save_all(); + cfg_mgr.Save_all(); // always save cfg_mgr last; fil_mgr / dir_mgr may change next_id during failed saves; DATE:2014-03-07 + } catch (Exception e) {usr_dlg.Warn_many("", "", "cache_mgr.save:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} + } + public void Db_term() { + try { + cfg_mgr.Cleanup(); + dir_mgr.Cleanup(); + fil_mgr.Cleanup(); + } catch (Exception e) {usr_dlg.Warn_many("", "", "cache_mgr.term:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} + } + public Xofc_dir_itm Dir__get_or_make(byte[] dir) {return dir_mgr.Get_by_name_or_make(dir);} + public Xofc_fil_itm Fil__get_or_null(byte[] dir, byte[] ttl, boolean is_orig, int w, double time, int page) { + Xofc_dir_itm dir_itm = dir_mgr.Get_by_name_or_null(dir); if (dir_itm == null) return null; + return fil_mgr.Get_or_null(dir_itm.Id(), ttl, is_orig, w, time, page); + } + public Xofc_fil_itm Fil__make(byte[] dir, byte[] ttl, boolean is_orig, int w, int h, double time, int page, long size) { + Xofc_dir_itm dir_itm = dir_mgr.Get_by_name_or_make(dir); + return fil_mgr.Make_v2(dir_itm.Id(), ttl, is_orig, w, h, time, page, Xof_ext_.new_by_ttl_(ttl), size); + } + public void Fil__update(Xofc_fil_itm fil) { + fil.Cache_time_now_(); + if (fil.Cmd_mode() == Db_cmd_mode.Tid_create) cfg_mgr.Cache_len_add(fil.Size()); + } + public Xofc_fil_itm Reg(Xof_fsdb_itm itm, long bin_len) {return this.Reg(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.File_is_orig(), itm.File_w(), itm.File_w(), itm.Lnki_time(), itm.Lnki_ext(), bin_len, DateAdp_.MaxValue, "");} + private Xofc_fil_itm Reg(byte[] repo, byte[] ttl, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime, Xof_ext ext, long bin_len, DateAdp modified, String hash) { + int dir_id = dir_mgr.Get_by_name_or_make(repo).Id(); + Xofc_fil_itm fil_itm = fil_mgr.Get_or_make(dir_id, ttl, fil_is_orig, fil_w, fil_h, fil_thumbtime, ext, bin_len, fil_created.Val_n_()); + fil_itm.Cache_time_now_(); + if (fil_created.Val()) // increase cache_size if item is new; (don't increase if update); NOTE: not same as Db_cmd_mode.Created, b/c itm could be created, but not saved to db yet; EX: Page_1 has A.png; A.png marked Created; Page_2 has A.png; A.png still Created, but should increase cache_size + cfg_mgr.Cache_len_add(bin_len); + return fil_itm; + } + public void Reg_and_check_for_size_0(Xof_fsdb_itm itm) { + if (Env_.Mode_testing()) return; // NOTE: needed else test breaks in sqlite mode; DATE:2015-02-21 + Xofc_fil_itm cache_fil_itm = this.Reg(itm, 0); // get item + if (cache_fil_itm.Size() == 0) { // item does not exist; size will be 0, since 0 passed above + long fil_size = Io_mgr._.QueryFil(itm.Html_view_url()).Size(); + cache_fil_itm.Size_(fil_size); + } + } + public void Compress_check() { + if (cfg_mgr.Cache_len() > cfg_mgr.Cache_max()) + fil_mgr.Compress(usr_dlg, wiki_mgr, repo_mgr, dir_mgr, cfg_mgr); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_cache_min)) return cfg_mgr.Cache_min() / Io_mgr.Len_mb; + else if (ctx.Match(k, Invk_cache_min_)) cfg_mgr.Cache_min_(m.ReadLong("v") * Io_mgr.Len_mb); + else if (ctx.Match(k, Invk_cache_max)) return cfg_mgr.Cache_max() / Io_mgr.Len_mb; + else if (ctx.Match(k, Invk_cache_max_)) cfg_mgr.Cache_max_(m.ReadLong("v") * Io_mgr.Len_mb); + else if (ctx.Match(k, Invk_cache_compress)) fil_mgr.Compress(usr_dlg, wiki_mgr, repo_mgr, dir_mgr, cfg_mgr); + else return GfoInvkAble_.Rv_unhandled; + return this; + } private static final String Invk_cache_min = "cache_min", Invk_cache_min_ = "cache_min_", Invk_cache_max = "cache_max", Invk_cache_max_ = "cache_max_", Invk_cache_compress = "cache_compress"; +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java new file mode 100644 index 000000000..73cbaa6be --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java @@ -0,0 +1,49 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.dbs.tbls.*; +class Xofc_cfg_mgr { + private final Db_cfg_tbl tbl = new Db_cfg_tbl(); + public int Next_id() {return next_id++;} public void Next_id_(int v) {next_id = v;} private int next_id; + public long Cache_len() {return cache_len;} public void Cache_len_(long v) {cache_len = v;} private long cache_len = 0; + public void Cache_len_add(long v) {cache_len += v;} + public long Cache_min() {return cache_min;} public void Cache_min_(long v) {cache_min = v;} private long cache_min = Io_mgr.Len_mb * 75; + public long Cache_max() {return cache_max;} public void Cache_max_(long v) {cache_max = v;} private long cache_max = Io_mgr.Len_mb * 100; + public void Conn_(Db_conn v, boolean created, boolean version_is_1) { + tbl.Conn_(v, created, version_is_1, "xowa_cfg", "file_cache_cfg"); + if (created) { + tbl.Insert(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(1)); + tbl.Insert(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(0)); + tbl.Insert(Cfg_grp, Cfg_key__cache_min, Long_.Xto_str(cache_min)); + tbl.Insert(Cfg_grp, Cfg_key__cache_max, Long_.Xto_str(cache_max)); + } + else { + next_id = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__next_id); + cache_len = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__cache_len); + cache_max = tbl.Select_as_int_or_fail(Cfg_grp, Cfg_key__cache_max); + } + } + public void Save_all() { + tbl.Update(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(next_id)); + tbl.Update(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(cache_len)); + tbl.Update(Cfg_grp, Cfg_key__cache_min, Long_.Xto_str(cache_min)); + tbl.Update(Cfg_grp, Cfg_key__cache_max, Long_.Xto_str(cache_max)); + } + public void Cleanup() {} + private static final String Cfg_grp = "fsdb.cache", Cfg_key__next_id = "next_id", Cfg_key__cache_min = "cache_min", Cfg_key__cache_max = "cache_max", Cfg_key__cache_len = "cache_len"; +} diff --git a/400_xowa/src/gplx/xowa2/files/metas/Xof_file_meta_wkr__db_orig.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_itm.java similarity index 56% rename from 400_xowa/src/gplx/xowa2/files/metas/Xof_file_meta_wkr__db_orig.java rename to 400_xowa/src/gplx/xowa/files/caches/Xofc_dir_itm.java index 1dcc736b9..9442ec6e4 100644 --- a/400_xowa/src/gplx/xowa2/files/metas/Xof_file_meta_wkr__db_orig.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_itm.java @@ -15,14 +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.xowa2.files.metas; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.files.*; +package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.dbs.*; -import gplx.xowa.*; import gplx.xowa2.files.orig_regy.*; -public class Xof_file_meta_wkr__db_orig implements Xof_file_meta_wkr { - public Xof_orig_regy_tbl Tbl() {return tbl;} private final Xof_orig_regy_tbl tbl = new Xof_orig_regy_tbl(); - public Xof_file_meta_itm Get_or_null(byte[] ttl) { - Xof_orig_regy_itm itm = tbl.Select_itm(ttl); - if (itm == null) return null; - return new Xof_file_meta_itm(itm.Repo_tid() == Xof_repo_itm.Repo_remote, ttl, itm.Orig_w(), itm.Orig_h()); +public class Xofc_dir_itm { + public Xofc_dir_itm(int id, byte[] name, byte cmd_mode) { + this.id = id; + this.name = name; + this.cmd_mode = cmd_mode; } + public int Id() {return id;} public void Id_(int v) {id = v;} private int id; + public byte[] Name() {return name;} private final byte[] name; + public byte Cmd_mode() {return cmd_mode;} public Xofc_dir_itm Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public static final Xofc_dir_itm Null = null; } diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java new file mode 100644 index 000000000..14343fb2f --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java @@ -0,0 +1,92 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +class Xofc_dir_mgr { + private final Xofc_dir_tbl tbl = new Xofc_dir_tbl(); + private final OrderedHash hash_by_names = OrderedHash_.new_bry_(); private final HashAdp hash_by_ids = HashAdp_.new_(); + private Xof_cache_mgr cache_mgr; + public Xofc_dir_mgr(Xof_cache_mgr v) {this.cache_mgr = v;} + public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);} + public Xofc_dir_itm Get_by_id(int id) {return (Xofc_dir_itm)hash_by_ids.Fetch(id);} + public Xofc_dir_itm Get_by_name_or_make(byte[] name) { + Xofc_dir_itm itm = Get_by_name_or_null(name); + if (itm == null) { // not in memory / db + int id = cache_mgr.Next_id(); // make it + itm = new Xofc_dir_itm(id, name, Db_cmd_mode.Tid_create); + Add(name, itm); + } + return itm; + } + public Xofc_dir_itm Get_by_name_or_null(byte[] name) { + Xofc_dir_itm itm = (Xofc_dir_itm)hash_by_names.Fetch(name); + if (itm == null) { // not in memory + itm = tbl.Select_one(name); // check db + if (itm == Xofc_dir_itm.Null) return null; // in db + Add(name, itm); + } + return itm; + } + private void Add(byte[] name, Xofc_dir_itm dir) { + hash_by_names.Add(name, dir); // put it in memory + hash_by_ids.Add(dir.Id(), dir); + } + public void Save_all() { + int len = hash_by_names.Count(); + boolean err_seen = false; + for (int i = 0; i < len; i++) { + Xofc_dir_itm itm = (Xofc_dir_itm)hash_by_names.FetchAt(i); + if (err_seen) + itm.Id_(cache_mgr.Next_id()); + if (itm.Cmd_mode() == Db_cmd_mode.Tid_create) { // create; check if in db; + Xofc_dir_itm cur = tbl.Select_one(itm.Name()); + if (cur != Xofc_dir_itm.Null) // cur found + itm.Cmd_mode_(Db_cmd_mode.Tid_update); // change itm to update + } + String err = tbl.Db_save(itm); + if (err != null) { + Db_recalc_next_id(itm, err); + err_seen = true; + } + } + } + public void Load_all() { + ListAdp list = ListAdp_.new_(); + tbl.Select_all(list); + int len = list.Count(); + hash_by_ids.Clear(); + hash_by_names.Clear(); + for (int i = 0; i < len; ++i) { + Xofc_dir_itm itm = (Xofc_dir_itm)list.FetchAt(i); + hash_by_names.Add(itm.Name(), itm); + hash_by_ids.Add(itm.Id(), itm); + } + } + public void Cleanup() {tbl.Cleanup();} + private void Db_recalc_next_id(Xofc_dir_itm itm, String err) { + if (String_.Has(err, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time) + int next_id = tbl.Select_max_uid() + 1; + Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err); + itm.Id_(next_id); + cache_mgr.Next_id_(next_id + 1); + err = tbl.Db_save(itm); + if (err == null) return; + } + Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", itm.Id(), String_.new_utf8_(itm.Name()), err); + } +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java new file mode 100644 index 000000000..e66764fe2 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java @@ -0,0 +1,86 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +class Xofc_dir_tbl { + private String tbl_name = "file_cache_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_name; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "cache_dir"; + fld_prefix = "dir_"; + } + fld_id = flds.Add_int_pkey(fld_prefix + "id"); + fld_name = flds.Add_str(fld_prefix + "name", 255); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_bldr.Conn_(conn, tbl_name, flds, fld_id); + } + public String Db_save(Xofc_dir_itm itm) { + try { + Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); + switch (itm.Cmd_mode()) { + case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_id, itm.Id()) .Val_bry_as_str(fld_name, itm.Name()).Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear() .Val_bry_as_str(fld_name, itm.Name()).Crt_int(fld_id, itm.Id()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_id, itm.Id()).Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Cmd_mode()); + } + itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); + return null; + } catch (Exception e) { + stmt_bldr.Rls(); // rls bldr, else bad stmt will lead to other failures + return Err_.Message_gplx_brief(e); + } + } + public void Cleanup() { + select_stmt = Db_stmt_.Rls(select_stmt); + stmt_bldr.Rls(); + } + public Xofc_dir_itm Select_one(byte[] name) { + if (select_stmt == null) select_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name)); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_stmt.Clear().Crt_bry_as_str(fld_name, name).Exec_select_as_rdr(); + return rdr.Move_next() ? new_itm(rdr) : Xofc_dir_itm.Null; + } + finally {rdr.Rls();} + } + public void Select_all(ListAdp list) { + list.Clear(); + Db_stmt select_all_stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_all_stmt.Exec_select_as_rdr(); + while (rdr.Move_next()) + list.Add(new_itm(rdr)); + } + finally {rdr.Rls();} + } + public int Select_max_uid() {return Db_conn_.Select_fld0_as_int_or(conn, "SELECT Max(uid) AS MaxId FROM cache_dir;", -1);} + private Xofc_dir_itm new_itm(Db_rdr rdr) { + return new Xofc_dir_itm(rdr.Read_int(fld_id), rdr.Read_bry_by_str(fld_name), Db_cmd_mode.Tid_ignore); + } +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java new file mode 100644 index 000000000..73ab38552 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java @@ -0,0 +1,73 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +public class Xofc_fil_itm implements CompareAble { + public Xofc_fil_itm(int uid, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size, long cache_time, byte cmd_mode) { + this.uid = uid; this.dir_id = dir_id; + this.name = name; this.is_orig = is_orig; this.w = w; this.h = h; this.time = time; this.page = page; this.ext = ext; this.size = size; + this.cache_time = cache_time; this.cmd_mode = cmd_mode; + } + public String Key; + public int Uid() {return uid;} public void Uid_(int v) {uid = v;} private int uid; + public int Dir_id() {return dir_id;} private final int dir_id; + public byte[] Name() {return name;} private final byte[] name; + public boolean Is_orig() {return is_orig;} private final boolean is_orig; + public int W() {return w;} private final int w; + public int H() {return h;} private final int h; + public double Time() {return time;} private final double time; + public int Page() {return page;} private final int page; + public Xof_ext Ext() {return ext;} private final Xof_ext ext; + public long Size() {return size;} private long size; + public void Size_(long v) { + this.size = v; + cmd_mode = Db_cmd_mode.To_update(cmd_mode); + } + public long Cache_time() {return cache_time;} private long cache_time; + public Xofc_fil_itm Cache_time_now_() { + this.cache_time = DateAdp_.Now().XtoUtc().Timestamp_unix(); + cmd_mode = Db_cmd_mode.To_update(cmd_mode); + return this; + } + public byte Cmd_mode() {return cmd_mode;} public Xofc_fil_itm Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public void Cmd_mode_delete_() {cmd_mode = Db_cmd_mode.Tid_delete;} + public byte[] Gen_hash_key_v1(Bry_bfr bfr) {return Gen_hash_key_v1(bfr, dir_id, name, is_orig, w, h, time);} + public byte[] Gen_hash_key_v2(Bry_bfr bfr) {return Gen_hash_key_v2(bfr, dir_id, name, is_orig, w, time, page);} + public static byte[] Gen_hash_key_v1(Bry_bfr bfr, int dir_id, byte[] name, boolean is_orig, int w, int h, double time) { + bfr .Add_int_variable(dir_id).Add_byte_pipe() + .Add(name).Add_byte_pipe() + .Add_yn(is_orig).Add_byte_pipe() + .Add_int_variable(w).Add_byte_pipe() + .Add_int_variable(h).Add_byte_pipe() + .Add_int_variable(Xof_doc_thumb.X_int(time)) + ; + return bfr.Xto_bry_and_clear(); + } + public static byte[] Gen_hash_key_v2(Bry_bfr bfr, int dir_id, byte[] name, boolean is_orig, int w, double time, int page) { + bfr .Add_int_variable(dir_id).Add_byte_pipe() + .Add(name).Add_byte_pipe() + .Add_yn(is_orig).Add_byte_pipe() + .Add_int_variable(w).Add_byte_pipe() + .Add_double(Xof_doc_thumb.Db_save_double(time)).Add_byte_pipe() + .Add_int_variable(page) + ; + return bfr.Xto_bry_and_clear(); + } + public int compareTo(Object obj) {Xofc_fil_itm comp = (Xofc_fil_itm)obj; return -Long_.Compare(cache_time, comp.cache_time);} // - for DESC sort + public static final Xofc_fil_itm Null = null; +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java new file mode 100644 index 000000000..7e00d9b9d --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java @@ -0,0 +1,149 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.primitives.*; +import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; +class Xofc_fil_mgr { + private Xof_cache_mgr cache_mgr; + private final Xofc_fil_tbl tbl = new Xofc_fil_tbl(); private final OrderedHash hash = OrderedHash_.new_bry_(); private final Bry_bfr key_bldr = Bry_bfr.reset_(255); + public Xofc_fil_mgr(Xof_cache_mgr v) {this.cache_mgr = v;} + public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);} + public void Save_all() { + int len = hash.Count(); + boolean err_seen = false; + for (int i = 0; i < len; i++) { + Xofc_fil_itm itm = (Xofc_fil_itm)hash.FetchAt(i); + if (err_seen) + itm.Uid_(cache_mgr.Next_id()); + if (itm.Cmd_mode() == Db_cmd_mode.Tid_create) { // create; check if in db; + Xofc_fil_itm cur = tbl.Select_one_v1(itm.Dir_id(), itm.Name(), itm.Is_orig(), itm.W(), itm.H(), itm.Time()); + if (cur != Xofc_fil_itm.Null) // cur found + itm.Cmd_mode_(Db_cmd_mode.Tid_update); // change itm to update + } + String err_msg = tbl.Db_save(itm); + if (err_msg != null) { + Db_recalc_next_id(itm, err_msg); + err_seen = true; + } + } + } + public Xofc_fil_itm Get_or_make(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, Xof_ext ext, long size, Bool_obj_ref created) { + byte[] key = Xofc_fil_itm.Gen_hash_key_v1(key_bldr, dir_id, name, is_orig, w, h, time); + Xofc_fil_itm itm = (Xofc_fil_itm)hash.Fetch(key); + if (itm == Xofc_fil_itm.Null) { // not in memory + itm = tbl.Select_one_v1(dir_id, name, is_orig, w, h, time); + if (itm == Xofc_fil_itm.Null) { // not in db + itm = Make_v1(dir_id, name, is_orig, w, h, time, Xof_doc_page.Null, ext, size); + created.Val_(true); + } + else // NOTE: itm loaded from tbl; add to hash; do not add if created b/c Make adds to hash; + hash.Add(key, itm); + } + return itm; + } + public Xofc_fil_itm Get_or_null(int dir_id, byte[] name, boolean is_orig, int w, double time, int page) { + byte[] key = Xofc_fil_itm.Gen_hash_key_v2(key_bldr, dir_id, name, is_orig, w, time, page); + Xofc_fil_itm itm = (Xofc_fil_itm)hash.Fetch(key); + if (itm == null) { // not in memory + itm = tbl.Select_one_v2(dir_id, name, is_orig, w, time, page); + if (itm == Xofc_fil_itm.Null) return itm; // not in db + hash.Add(key, itm); + } + return itm; + } + private Xofc_fil_itm Make_v1(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.Y, dir_id, name, is_orig, w, h, time, page, ext, size);} + public Xofc_fil_itm Make_v2(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.N, dir_id, name, is_orig, w, h, time, page, ext, size);} + private Xofc_fil_itm Make(boolean version_is_1, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) { + int id = cache_mgr.Next_id(); + Xofc_fil_itm rv = new Xofc_fil_itm(id, dir_id, name, is_orig, w, h, time, page, ext, size, 0, Db_cmd_mode.Tid_create).Cache_time_now_(); + byte[] key = version_is_1 ? rv.Gen_hash_key_v1(key_bldr) : rv.Gen_hash_key_v2(key_bldr); + hash.Add(key, rv); + return rv; + } + public void Compress(Gfo_usr_dlg usr_dlg, Xoa_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr, Xofc_dir_mgr dir_mgr, Xofc_cfg_mgr cfg_mgr) { + try { + usr_dlg.Note_many("", "", "compressing cache"); + dir_mgr.Save_all(); dir_mgr.Load_all(); // save and load all dirs + this.Save_all(); tbl.Select_all(key_bldr, hash); // save and load all fils + hash.Sort(); // sorts by cache_time desc + int len = hash.Count(); + long cur_size = 0, actl_size = 0; + Xof_url_bldr url_bldr = new Xof_url_bldr(); + ListAdp deleted = ListAdp_.new_(); + tbl.Conn().Txn_mgr().Txn_bgn_if_none(); + long compress_to = cfg_mgr.Cache_min(); + for (int i = 0; i < len; ++i) { + Xofc_fil_itm itm = (Xofc_fil_itm)hash.FetchAt(i); + long itm_size = itm.Size(); + long new_size = cur_size + itm_size; + if (new_size > compress_to) { + itm.Cmd_mode_(gplx.dbs.Db_cmd_mode.Tid_delete); + Fsys_delete(url_bldr, wiki_mgr, repo_mgr, dir_mgr, itm); + deleted.Add(itm); + } + else + actl_size += itm_size; + cur_size = new_size; + String err_msg = tbl.Db_save(itm); // save to db now, b/c fils will be deleted and want to keep db and fsys in sync + if (err_msg != null) + Db_recalc_next_id(itm, err_msg); + } + len = deleted.Count(); + for (int i = 0; i < len; i++) { + Xofc_fil_itm itm = (Xofc_fil_itm)deleted.FetchAt(i); + byte[] fil_key = itm.Gen_hash_key_v1(key_bldr); + hash.Del(fil_key); + } + cfg_mgr.Cache_len_(actl_size); + this.Save_all(); // save everything again + } + catch (Exception e) { + usr_dlg.Warn_many("", "", "failed to compress cache: err=~{0}", Err_.Message_gplx_brief(e)); + } + finally {tbl.Conn().Txn_mgr().Txn_end_all();} + } + private void Fsys_delete(Xof_url_bldr url_bldr, Xoa_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr, Xofc_dir_mgr dir_mgr, Xofc_fil_itm itm) { + byte mode_id = itm.Is_orig() ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; + byte[] wiki_domain = dir_mgr.Get_by_id(itm.Dir_id()).Name(); + Xowe_wiki wiki = wiki_mgr.Get_by_key_or_make(wiki_domain); + wiki.Init_assert(); + Xof_repo_itm trg_repo = repo_mgr.Get_by_primary(wiki_domain); + byte[] ttl = itm.Name(); + byte[] md5 = Xof_xfer_itm_.Md5_(ttl); + int itm_ext_id = itm.Ext().Id(); + Io_url fil_url = url_bldr.Init_for_trg_file(mode_id, trg_repo, ttl, md5, itm.Ext(), itm.W() + , Xof_doc_thumb.Convert_to_xowa_thumbtime (itm_ext_id, itm.Time()) + , Xof_doc_thumb.Convert_to_xowa_page (itm_ext_id, itm.Time()) + ).Xto_url(); + Io_mgr._.DeleteFil_args(fil_url).MissingFails_off().Exec(); + itm.Cmd_mode_delete_(); + } + public void Cleanup() {tbl.Cleanup();} + private void Db_recalc_next_id(Xofc_fil_itm fil_itm, String err_msg) { + if (String_.Has(err_msg, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time) + int next_id = tbl.Select_max_uid() + 1; + Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg); + fil_itm.Uid_(next_id); + cache_mgr.Next_id_(next_id + 1); + err_msg = tbl.Db_save(fil_itm); + if (err_msg == null) + return; + } + Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Name()), err_msg); + } +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java new file mode 100644 index 000000000..d8f8816b4 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java @@ -0,0 +1,157 @@ +/* +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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; +class Xofc_fil_tbl { + private String tbl_name = "file_cache_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_uid, fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_page, fld_ext, fld_size, fld_cache_time; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_itm_stmt, select_itm_v2_stmt; + public Db_conn Conn() {return conn;} + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "cache_fil"; + fld_prefix = "fil_"; + } + fld_uid = flds.Add_int_pkey("uid"); + fld_dir_id = flds.Add_int("dir_id"); + fld_name = flds.Add_str(fld_prefix + "name", 255); + fld_is_orig = flds.Add_byte(fld_prefix + "is_orig"); + fld_w = flds.Add_int(fld_prefix + "w"); + fld_h = flds.Add_int(fld_prefix + "h"); + fld_time = flds.Add_int(fld_prefix + "thumbtime"); + if (version_is_1) { + fld_page = Db_meta_fld.Key_null; + } + else { + fld_page = flds.Add_int(fld_prefix + "page"); + } + fld_ext = flds.Add_int(fld_prefix + "ext"); + fld_size = flds.Add_long(fld_prefix + "size"); + fld_cache_time = flds.Add_long("cache_time"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid) + ); + conn.Exec_create_tbl_and_idx(meta); + } + select_itm_stmt = select_itm_v2_stmt = null; + stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid); + } + public String Db_save(Xofc_fil_itm itm) { + try { + Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); + switch (itm.Cmd_mode()) { + case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_uid, itm.Uid()); Db_save_modify(stmt, itm); stmt.Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear(); Db_save_modify(stmt, itm); stmt.Crt_int(fld_uid, itm.Uid()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Uid()); stmt.Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Cmd_mode()); + } + itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); + return null; + } catch (Exception e) { + stmt_bldr.Rls(); // null out bldr, else bad stmt will lead to other failures + return Err_.Message_gplx_brief(e); + } + } + private void Db_save_modify(Db_stmt stmt, Xofc_fil_itm itm) { + stmt.Val_int(fld_dir_id, itm.Dir_id()) + .Val_bry_as_str(fld_name, itm.Name()) + .Val_bool_as_byte(fld_is_orig, itm.Is_orig()) + .Val_int(fld_w, itm.W()) + .Val_int(fld_h, itm.H()) + .Val_int(fld_time, Xof_doc_thumb.Db_save_int(itm.Time())) + .Val_int(fld_page, itm.Page()) + .Val_int(fld_ext, itm.Ext().Id()) + .Val_long(fld_size, itm.Size()) + .Val_long(fld_cache_time, itm.Cache_time()) + ; + } + public void Cleanup() { + select_itm_stmt = Db_stmt_.Rls(select_itm_stmt); + stmt_bldr.Rls(); + } + public Xofc_fil_itm Select_one_v1(int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime) { + if (select_itm_stmt == null) select_itm_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time))); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_itm_stmt.Clear() + .Crt_int(fld_dir_id, dir_id) + .Crt_bry_as_str(fld_name, fil_name) + .Crt_bool_as_byte(fld_is_orig, fil_is_orig) + .Crt_int(fld_w, fil_w) + .Crt_int(fld_h, fil_h) + .Crt_int(fld_time, Xof_doc_thumb.Db_save_int(fil_thumbtime)) + .Exec_select_as_rdr(); + return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null; + } + finally {rdr.Rls();} + } + public Xofc_fil_itm Select_one_v2(int dir_id, byte[] name, boolean is_orig, int w, double time, int page) { + if (select_itm_v2_stmt == null) select_itm_v2_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_dir_id, fld_name, fld_is_orig, fld_w, fld_time, fld_page))); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_itm_v2_stmt.Clear() + .Crt_int(fld_dir_id, dir_id) + .Crt_bry_as_str(fld_name, name) + .Crt_bool_as_byte(fld_is_orig, is_orig) + .Crt_int(fld_w, w) + .Crt_int(fld_time, Xof_doc_thumb.Db_save_int(time)) + .Crt_int(fld_page, page) + .Exec_select_as_rdr(); + return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null; + } + finally {rdr.Rls();} + } + public void Select_all(Bry_bfr fil_key_bldr, OrderedHash hash) { + hash.Clear(); + Db_stmt select_all_stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_all_stmt.Exec_select_as_rdr(); + while (rdr.Move_next()) { + Xofc_fil_itm fil_itm = new_itm(rdr); + byte[] key = fil_itm.Gen_hash_key_v1(fil_key_bldr); + if (hash.Has(key)) // NOTE: need to check for uniqueness else dupe file will cause select to fail; shouldn't happen, but somehow did; DATE:2013-12-28 + Gfo_usr_dlg_._.Warn_many("", "", "cache had duplicate itm: key=~{0}", String_.new_utf8_(key)); + else + hash.Add(key, fil_itm); + } + } + finally {rdr.Rls();} + } + public int Select_max_uid() {return Db_conn_.Select_fld0_as_int_or(conn, "SELECT Max(uid) AS MaxId FROM cache_fil;", -1);} + private Xofc_fil_itm new_itm(Db_rdr rdr) { + return new Xofc_fil_itm + ( rdr.Read_int(fld_uid) + , rdr.Read_int(fld_dir_id) + , rdr.Read_bry_by_str(fld_name) + , rdr.Read_byte(fld_is_orig) != Byte_.Zero + , rdr.Read_int(fld_w) + , rdr.Read_int(fld_h) + , Xof_doc_thumb.Db_load_int(rdr, fld_time) + , Xof_doc_page.Null + , Xof_ext_.new_by_id_(rdr.Read_int(fld_ext)) + , rdr.Read_long(fld_size) + , rdr.Read_long(fld_cache_time) + , Db_cmd_mode.Tid_ignore + ); + } +} diff --git a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java index 26f4ddfe3..42b318b57 100644 --- a/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java +++ b/400_xowa/src/gplx/xowa/files/cnvs/Xof_img_wkr_resize_img_imageMagick.java @@ -16,27 +16,28 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.cnvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.core.primitives.*; +import gplx.core.primitives.*; import gplx.xowa.wmfs.*; public class Xof_img_wkr_resize_img_imageMagick implements Xof_img_wkr_resize_img { - boolean init_needed = true; - public Xof_img_wkr_resize_img_imageMagick(Xoa_app app, ProcessAdp cmd_convert, ProcessAdp cmd_convert_svg_to_png) {this.app = app; this.cmd_convert = cmd_convert; this.cmd_convert_svg_to_png = cmd_convert_svg_to_png;} ProcessAdp cmd_convert, cmd_convert_svg_to_png; Xoa_app app; + private final Xowmf_mgr wmf_mgr; private final ProcessAdp cmd_convert, cmd_convert_svg_to_png; + private boolean init_needed = true; + public Xof_img_wkr_resize_img_imageMagick(Xowmf_mgr wmf_mgr, ProcessAdp cmd_convert, ProcessAdp cmd_convert_svg_to_png) { + this.wmf_mgr = wmf_mgr; this.cmd_convert = cmd_convert; this.cmd_convert_svg_to_png = cmd_convert_svg_to_png; + } public boolean Exec(Io_url src, Io_url trg, int trg_w, int trg_h, int ext_id, String_obj_ref rslt_val) { if (!Io_mgr._.ExistsFil(src)) return false; Io_mgr._.CreateDirIfAbsent(trg.OwnerDir()); if (init_needed) { init_needed = false; - Gfo_usr_dlg usr_dlg = app.Usr_dlg(); + Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg(); cmd_convert.Prog_dlg_(usr_dlg); cmd_convert_svg_to_png.Prog_dlg_(usr_dlg); } ProcessAdp cmd = ext_id == Xof_ext_.Id_svg ? cmd_convert_svg_to_png : cmd_convert; - cmd.Prog_fmt_(String_.Replace(app.File_mgr().Download_mgr().Download_wkr().Download_xrg().Prog_fmt_hdr(), "~", "~~") + " converting: ~{process_seconds} second(s); ~{process_exe_name} ~{process_exe_args}"); + cmd.Prog_fmt_(String_.Replace(wmf_mgr.Download_wkr().Download_xrg().Prog_fmt_hdr(), "~", "~~") + " converting: ~{process_seconds} second(s); ~{process_exe_name} ~{process_exe_args}"); cmd.Run(src.Raw(), trg.Raw(), trg_w, trg_h); rslt_val.Val_(cmd.Rslt_out()); boolean rv = cmd.Exit_code_pass(); - if (!rv) app.Usr_dlg().Log_many(GRP_KEY, "process_warning", "process completed with warnings: ~{0}", cmd.Rslt_out()); + if (!rv) Xoa_app_.Usr_dlg().Log_many("", "process_warning", "process completed with warnings: ~{0}", cmd.Rslt_out()); return true; } - Bry_bfr tmp_bfr = Bry_bfr.new_(); - static final String GRP_KEY = "xowa.file.resize"; } diff --git a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_grp.java b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_grp.java similarity index 58% rename from 400_xowa/src_160_file/gplx/xowa/Xoft_rule_grp.java rename to 400_xowa/src/gplx/xowa/files/exts/Xof_rule_grp.java index 7f724701a..5a252495e 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_grp.java +++ b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_grp.java @@ -15,27 +15,28 @@ 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; import gplx.*; +package gplx.xowa.files.exts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.core.primitives.*; -public class Xoft_rule_grp implements GfoInvkAble { - public Xoft_rule_grp(Xoft_rule_mgr owner, byte[] key) {this.owner = owner; this.key = key;} - public Xoft_rule_mgr Owner() {return owner;} private Xoft_rule_mgr owner; - public byte[] Key() {return key;} private byte[] key; - public Xoft_rule_itm Get_or_null(byte[] key) {return (Xoft_rule_itm)hash.Fetch(hash_ref.Val_(key));} - public Xoft_rule_itm Get_or_new(byte[] key) { - Xoft_rule_itm rv = Get_or_null(key); +public class Xof_rule_grp implements GfoInvkAble { + private final Hash_adp_bry hash = Hash_adp_bry.cs_(); + public Xof_rule_grp(Xof_rule_mgr owner, byte[] key) {this.owner = owner; this.key = key;} + public Xof_rule_mgr Owner() {return owner;} private final Xof_rule_mgr owner; + public byte[] Key() {return key;} private final byte[] key; + public Xof_rule_itm Get_or_null(byte[] ext_bry) {return (Xof_rule_itm)hash.Get_by_bry(ext_bry);} + public Xof_rule_itm Get_or_new(byte[] ext_bry) { + Xof_rule_itm rv = Get_or_null(ext_bry); if (rv == null) { - Xof_ext file_type = Xof_ext_.new_by_ext_(key); - rv = new Xoft_rule_itm(this, file_type); - hash.Add(Bry_obj_ref.new_(key), rv); + Xof_ext ext = Xof_ext_.new_by_ext_(ext_bry); + rv = new Xof_rule_itm(this, ext); + hash.Add(ext_bry, rv); } return rv; - } HashAdp hash = HashAdp_.new_(); Bry_obj_ref hash_ref = Bry_obj_ref.null_(); + } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_owner)) return owner; else if (ctx.Match(k, Invk_set)) return Get_or_new(Bry_.new_utf8_(m.ReadStr("v"))); else return GfoInvkAble_.Rv_unhandled; } private static final String Invk_owner = "owner", Invk_set = "set"; - public static final String Grp_app_default_str = "app_default"; + private static final String Grp_app_default_str = "app_default"; public static byte[] Grp_app_default = Bry_.new_utf8_(Grp_app_default_str); } diff --git a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_itm.java b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_itm.java similarity index 64% rename from 400_xowa/src_160_file/gplx/xowa/Xoft_rule_itm.java rename to 400_xowa/src/gplx/xowa/files/exts/Xof_rule_itm.java index 7550ce0dd..1c79dfe0b 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_itm.java +++ b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_itm.java @@ -15,15 +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; import gplx.*; +package gplx.xowa.files.exts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.apps.*; -public class Xoft_rule_itm implements GfoInvkAble { - public Xoft_rule_itm(Xoft_rule_grp owner, Xof_ext file_type) {this.owner = owner; this.file_type = file_type;} - public Xoft_rule_grp Owner() {return owner;} private Xoft_rule_grp owner; - public Xof_ext File_type() {return file_type;} private Xof_ext file_type; - public long Make_max() {return make_max;} public Xoft_rule_itm Make_max_(long v) {make_max = v; return this;} long make_max = Max_wildcard; - public long View_max() {return view_max;} public Xoft_rule_itm View_max_(long v) {view_max = v; return this;} long view_max = Max_wildcard; - +public class Xof_rule_itm implements GfoInvkAble { + public Xof_rule_itm(Xof_rule_grp owner, Xof_ext ext) {this.owner = owner;} // NOTE: ext currently not used; may want to set as property in future; DATE:2015-02-14 + public Xof_rule_grp Owner() {return owner;} private Xof_rule_grp owner; + public long Make_max() {return make_max;} public Xof_rule_itm Make_max_(long v) {make_max = v; return this;} long make_max = Max_wildcard; + public long View_max() {return view_max;} public Xof_rule_itm View_max_(long v) {view_max = v; return this;} long view_max = Max_wildcard; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_owner)) return owner; else if (ctx.Match(k, Invk_make_max_)) make_max = gplx.ios.Io_size_.Load_int_(m); diff --git a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_mgr.java b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_mgr.java similarity index 57% rename from 400_xowa/src_160_file/gplx/xowa/Xoft_rule_mgr.java rename to 400_xowa/src/gplx/xowa/files/exts/Xof_rule_mgr.java index 9583ba99b..4c05d3402 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xoft_rule_mgr.java +++ b/400_xowa/src/gplx/xowa/files/exts/Xof_rule_mgr.java @@ -15,30 +15,31 @@ 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; import gplx.*; +package gplx.xowa.files.exts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.apps.*; -public class Xoft_rule_mgr implements GfoInvkAble { - public Xoft_rule_mgr() { - Xoft_rule_grp app_default = new Xoft_rule_grp(this, Xoft_rule_grp.Grp_app_default); - App_default_set(app_default, Io_mgr.Len_gb, Xof_ext_.Bry__ary); - hash.Add(Xoft_rule_grp.Grp_app_default, app_default); +public class Xof_rule_mgr implements GfoInvkAble { + private final Hash_adp_bry hash = Hash_adp_bry.cs_(); + public Xof_rule_mgr() { + Xof_rule_grp app_default = new Xof_rule_grp(this, Xof_rule_grp.Grp_app_default); + Set_app_default(app_default, Io_mgr.Len_gb, Xof_ext_.Bry__ary); + hash.Add(Xof_rule_grp.Grp_app_default, app_default); + } + private Xof_rule_grp Get_or_null(byte[] key) {return (Xof_rule_grp)hash.Get_by_bry(key);} + public Xof_rule_grp Get_or_new(byte[] key) { + Xof_rule_grp rv = Get_or_null(key); + if (rv == null) { + rv = new Xof_rule_grp(this, key); + hash.Add(key, rv); + } + return rv; + } + private static void Set_app_default(Xof_rule_grp app_default, long make_max, byte[][] keys) { + int len = keys.length; + for (int i = 0; i < len; i++) + app_default.Get_or_new(keys[i]).Make_max_(make_max); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_set)) return Get_or_new(Bry_.new_utf8_(m.ReadStr("v"))); else return GfoInvkAble_.Rv_unhandled; } private static final String Invk_set = "set"; - Xoft_rule_grp Get_or_null(byte[] key) {return (Xoft_rule_grp)hash.Fetch(key);} - public Xoft_rule_grp Get_or_new(byte[] key) { - Xoft_rule_grp rv = Get_or_null(key); - if (rv == null) { - rv = new Xoft_rule_grp(this, key); - hash.Add(key, rv); - } - return rv; - } HashAdp hash = HashAdp_.new_bry_(); - private void App_default_set(Xoft_rule_grp app_default, long make_max, byte[][] keys) { - int keys_len = keys.length; - for (int i = 0; i < keys_len; i++) - app_default.Get_or_new(keys[i]).Make_max_(make_max); - } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/core/Fsdb_regy_fil_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/Fsdb_regy_fil_tbl.java similarity index 95% rename from 400_xowa/src/gplx/xowa/files/fsdb/core/Fsdb_regy_fil_tbl.java rename to 400_xowa/src/gplx/xowa/files/fsdb/Fsdb_regy_fil_tbl.java index 85407f66a..006811172 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/core/Fsdb_regy_fil_tbl.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Fsdb_regy_fil_tbl.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.files.fsdb.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.dbs.*; class Fsdb_regy_fil_tbl { public Fsdb_regy_fil_itm Select(String name, boolean is_orig, int w, int thumbtime) { diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java index bbae49048..c6b840eec 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java @@ -16,67 +16,67 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.gui.*; +import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; public class Xof_fsdb_itm { + private int lnki_upright_patch; public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; - public Xof_ext Lnki_ext() {return lnki_ext;} private Xof_ext lnki_ext; - public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} + public Xof_ext Lnki_ext() {return lnki_ext;} public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} private Xof_ext lnki_ext; public byte Lnki_type() {return lnki_type;} private byte lnki_type; public byte Lnki_type_as_mode() {return lnki_type_as_mode;} private byte lnki_type_as_mode; - public int Lnki_w() {return lnki_w;} public Xof_fsdb_itm Lnki_w_(int v) {lnki_w = v; return this;} private int lnki_w; - public int Lnki_h() {return lnki_h;} public Xof_fsdb_itm Lnki_h_(int v) {lnki_h = v; return this;} private int lnki_h; + public int Lnki_w() {return lnki_w;} private int lnki_w; + public int Lnki_h() {return lnki_h;} private int lnki_h; public Xof_fsdb_itm Lnki_size_(int w, int h) {lnki_w = w; lnki_h = h; return this;} public double Lnki_upright() {return lnki_upright;} private double lnki_upright; - public double Lnki_thumbtime() {return lnki_thumbtime;} public Xof_fsdb_itm Lnki_thumbtime_(double v) {lnki_thumbtime = v; return this;} private double lnki_thumbtime = Xof_doc_thumb.Null; - public int Lnki_page() {return lnki_page;} public Xof_fsdb_itm Lnki_page_(int v) {lnki_page = v; return this;} private int lnki_page = Xof_doc_page.Null; - public Xof_fsdb_itm Init_by_lnki(byte[] lnki_ttl, Xof_ext ext, byte[] md5, byte lnki_type, int lnki_w, int lnki_h, int lnki_upright_patch, double lnki_upright, double lnki_thumbtime, int lnki_page) { - this.lnki_ttl = lnki_ttl; this.lnki_ext = ext; this.lnki_md5 = md5; - this.lnki_w = lnki_w; this.lnki_h = lnki_h; - this.lnki_upright_patch = lnki_upright_patch; - this.lnki_upright = lnki_upright; this.lnki_thumbtime = lnki_thumbtime; this.lnki_page = lnki_page; - this.Lnki_type_(lnki_type); - this.orig_ttl = lnki_ttl; - return this; - } - private int lnki_upright_patch; - public void Lnki_type_(byte v) { - this.lnki_type = v; - if (lnki_ext.Id_is_audio_strict()) - file_is_orig = true; - else - this.file_is_orig = !(Xop_lnki_type.Id_defaults_to_thumb(lnki_type) || lnki_w != Xop_lnki_tkn.Width_null || lnki_h != Xop_lnki_tkn.Height_null); - this.lnki_type_as_mode = file_is_orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; - } - public Xof_fsdb_itm Lnki_ttl_(byte[] v) { - lnki_ttl = v; - lnki_ext = Xof_ext_.new_by_ttl_(v); - lnki_md5 = Xof_xfer_itm_.Md5_calc(v); - return this; - } - public Xof_fsdb_itm Init_by_redirect(byte[] redirect_ttl) { - orig_redirect = redirect_ttl; - lnki_ttl = redirect_ttl; - lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); - lnki_md5 = Xof_xfer_itm_.Md5_calc(lnki_ttl); - return this; - } + public double Lnki_time() {return lnki_time;} public void Lnki_time_(double v) {lnki_time = v;} private double lnki_time = Xof_doc_thumb.Null; + public int Lnki_page() {return lnki_page;} public void Lnki_page_(int v) {lnki_page = v;} private int lnki_page = Xof_doc_page.Null; + public byte Orig_repo_id() {return orig_repo_id;} public void Orig_repo_id_(byte v) {orig_repo_id = v;} private byte orig_repo_id = Xof_repo_itm.Repo_null; + public byte[] Orig_repo_name() {return orig_repo_name;} public void Orig_repo_name_(byte[] v) {orig_repo_name = v;} private byte[] orig_repo_name; + public byte[] Orig_ttl() {return orig_ttl;} private byte[] orig_ttl; public int Orig_w() {return orig_w;} private int orig_w = Xop_lnki_tkn.Width_null; public int Orig_h() {return orig_h;} private int orig_h = Xop_lnki_tkn.Height_null; public Xof_fsdb_itm Orig_size_(int w, int h) {orig_w = w; orig_h = h; return this;} - public byte[] Orig_wiki() {return orig_wiki;} public Xof_fsdb_itm Orig_wiki_(byte[] v) {orig_wiki = v; return this;} private byte[] orig_wiki; - public byte[] Orig_ttl() {return orig_ttl;} public Xof_fsdb_itm Orig_ttl_(byte[] v) {orig_ttl = v; return this;} private byte[] orig_ttl; - public byte[] Orig_redirect() {return orig_redirect;} public Xof_fsdb_itm Orig_redirect_(byte[] v) {orig_redirect = v; return this;} private byte[] orig_redirect = Bry_.Empty; - public byte Orig_repo() {return orig_repo;} public Xof_fsdb_itm Orig_repo_(byte v) {orig_repo = v; return this;} private byte orig_repo = Xof_repo_itm.Repo_null; - public boolean File_is_orig() {return file_is_orig;} public Xof_fsdb_itm File_is_orig_(boolean v) {file_is_orig = v; return this;} private boolean file_is_orig; + public byte[] Orig_redirect() {return orig_redirect;} public void Orig_redirect_(byte[] v) {orig_redirect = v;} private byte[] orig_redirect = Bry_.Empty; + public byte Orig_status() {return orig_status;} public void Orig_status_(byte v) {orig_status = v;} private byte orig_status = gplx.xowa.files.origs.Xof_orig_wkr_.Status_null; + public boolean File_is_orig() {return file_is_orig;} public void File_is_orig_(boolean v) {file_is_orig = v;} private boolean file_is_orig; public int File_w() {return file_w;} private int file_w; - public int Html_uid() {return html_uid;} public Xof_fsdb_itm Html_uid_(int v) {html_uid = v; return this;} private int html_uid; - public byte Html_elem_tid() {return html_elem_tid;} public Xof_fsdb_itm Html_elem_tid_(byte v) {html_elem_tid = v; return this;} private byte html_elem_tid; - public Io_url Html_url() {return html_url;} public Xof_fsdb_itm Html_url_(Io_url v) {html_url = v; return this;} private Io_url html_url; + public int Html_uid() {return html_uid;} public void Html_uid_(int v) {html_uid = v;} private int html_uid; + public byte Html_elem_tid() {return html_elem_tid;} public void Html_elem_tid_(byte v) {html_elem_tid = v;} private byte html_elem_tid; public int Html_w() {return html_w;} private int html_w; public int Html_h() {return html_h;} private int html_h; public Xof_fsdb_itm Html_size_(int w, int h) {html_w = w; html_h = h; return this;} public Js_img_wkr Html_img_wkr() {return html_img_wkr;} public void Html_img_wkr_(Js_img_wkr v) {html_img_wkr = v;} private Js_img_wkr html_img_wkr; + public Io_url Html_view_url() {return html_view_url;} public void Html_view_url_(Io_url v) {html_view_url = v;} private Io_url html_view_url; + public Io_url Html_orig_url() {return html_orig_url;} public void Html_orig_url_(Io_url v) {html_orig_url = v;} private Io_url html_orig_url = Io_url_.Null; + public int Gallery_mgr_h() {return gallery_mgr_h;} public void Gallery_mgr_h_(int v) {gallery_mgr_h = v;} private int gallery_mgr_h = Int_.Neg1; + public byte Rslt_bin() {return rslt_bin;} public void Rslt_bin_(byte v) {rslt_bin = v;} private byte rslt_bin; + public byte Rslt_cnv() {return rslt_cnv;} public void Rslt_cnv_(byte v) {rslt_cnv = v;} private byte rslt_cnv; + public boolean Rslt_fil_created() {return rslt_fil_created;} public void Rslt_fil_created_(boolean v) {rslt_fil_created = v;} private boolean rslt_fil_created; + public void Ctor_by_orig(byte repo, byte[] ttl, int w, int h, byte[] redirect) { + this.orig_repo_id = repo; this.orig_ttl = ttl; this.orig_w = w; this.orig_h = h; this.orig_redirect = redirect; + } + public void Ctor_by_orig_redirect(byte[] redirect_ttl) { + orig_redirect = redirect_ttl; + lnki_ttl = redirect_ttl; + lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); + lnki_md5 = Xof_xfer_itm_.Md5_calc(lnki_ttl); + } + public void Ctor_by_html(Xof_repo_itm repo, Xof_url_bldr url_bldr, Xof_img_size img_size, byte exec_tid) { + Html_size_calc(img_size, exec_tid); + byte[] name_bry = Bry_.Len_eq_0(orig_redirect) ? lnki_ttl : orig_redirect; + if (!lnki_ext.Id_is_media() && lnki_time != Xof_doc_thumb.Null) // file is not media, but has thumbtime; this check can't be moved to Lnki_time_() b/c it needs ext + lnki_time = Xof_doc_thumb.Null; // set time to null; needed else url will reference thumbtime; PAGE:en.w:Moon; EX:[[File:Lunar libration with phase Oct 2007 450px.gif|thumbtime=0:02]]; DATE:2014-07-20 + html_view_url = url_bldr.Init_for_trg_file(lnki_type_as_mode, repo, name_bry, lnki_md5, lnki_ext, html_w, lnki_time, lnki_page).Xto_url(); + html_orig_url = url_bldr.Init_for_trg_file(Xof_repo_itm.Mode_orig, repo, name_bry, lnki_md5, lnki_ext, Xof_img_size.Size_null_deprecated, Xof_doc_thumb.Null, Xof_doc_page.Null).Xto_url(); + } + public void Ctor_by_lnki(byte[] lnki_ttl, Xof_ext ext, byte[] md5, byte lnki_type, int lnki_w, int lnki_h, int lnki_upright_patch, double lnki_upright, double lnki_time, int lnki_page) { + this.lnki_ttl = lnki_ttl; this.lnki_ext = ext; this.lnki_md5 = md5; + this.lnki_w = lnki_w; this.lnki_h = lnki_h; + this.lnki_upright_patch = lnki_upright_patch; + this.lnki_upright = lnki_upright; this.lnki_time = lnki_time; this.lnki_page = lnki_page; + this.Lnki_type_(lnki_type); + this.orig_ttl = lnki_ttl; + } public void Html_size_calc(Xof_img_size img_size, byte exec_tid) { if (!lnki_ext.Id_is_audio_strict()) { // audio does not have html size calculated; everything else does img_size.Html_size_calc(exec_tid, lnki_w, lnki_h, lnki_type, lnki_upright_patch, lnki_upright, lnki_ext.Id(), orig_w, orig_h, Xof_img_size.Thumb_width_img); @@ -85,30 +85,17 @@ public class Xof_fsdb_itm { lnki_type_as_mode = file_is_orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; } } - public void Html__init(Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr, Xof_img_size img_size, byte exec_tid) {this.Html__init(repo_mgr.Repos_get_by_wiki(orig_wiki).Trg(), url_bldr, img_size, exec_tid);} - public void Html__init(Xof_repo_itm repo, Xof_url_bldr url_bldr, Xof_img_size img_size, byte exec_tid) { - Html_size_calc(img_size, exec_tid); - byte[] name_bry = Bry_.Len_eq_0(orig_redirect) ? lnki_ttl : orig_redirect; - if (!lnki_ext.Id_is_media() && lnki_thumbtime != Xof_doc_thumb.Null) // file is not media, but has thumbtime; this check can't be moved to Lnki_thumbtime_() b/c it needs ext - lnki_thumbtime = Xof_doc_thumb.Null; // set thumbtime to null; needed else url will reference thumbtime; PAGE:en.w:Moon; EX:[[File:Lunar libration with phase Oct 2007 450px.gif|thumbtime=0:02]]; DATE:2014-07-20 - html_url = url_bldr.Init_for_trg_file(lnki_type_as_mode, repo, name_bry, lnki_md5, lnki_ext, html_w, lnki_thumbtime, lnki_page).Xto_url(); - html_orig_url = url_bldr.Init_for_trg_file(Xof_repo_itm.Mode_orig, repo, name_bry, lnki_md5, lnki_ext, Xof_img_size.Size_null_deprecated, Xof_doc_thumb.Null, Xof_doc_page.Null).Xto_url(); - } - public Io_url Html_orig_url() {return html_orig_url;} public Xof_fsdb_itm Html_orig_url_(Io_url v) {this.html_orig_url = v; return this;} private Io_url html_orig_url = Io_url_.Null; - public int Gallery_mgr_h() {return gallery_mgr_h;} public Xof_fsdb_itm Gallery_mgr_h_(int v) {gallery_mgr_h = v; return this;} private int gallery_mgr_h = Int_.Neg1; - public byte Rslt_reg() {return rslt_reg;} public Xof_fsdb_itm Rslt_reg_(byte v) {this.rslt_reg = v; return this;} private byte rslt_reg = gplx.xowa.files.wiki_orig.Xof_wiki_orig_wkr_.Tid_null; - public byte Rslt_qry() {return rslt_qry;} public Xof_fsdb_itm Rslt_qry_(byte v) {this.rslt_qry = v; return this;} private byte rslt_qry; - public byte Rslt_bin() {return rslt_bin;} public Xof_fsdb_itm Rslt_bin_(byte v) {this.rslt_bin = v; return this;} private byte rslt_bin; - public byte Rslt_cnv() {return rslt_cnv;} public Xof_fsdb_itm Rslt_cnv_(byte v) {this.rslt_cnv = v; return this;} private byte rslt_cnv; - public boolean Rslt_fil_created() {return rslt_fil_created;} public Xof_fsdb_itm Rslt_fil_created_(boolean v) {rslt_fil_created = v; return this;} private boolean rslt_fil_created; - public static byte[] Bld_key_to_bry(Bry_bfr bfr, byte[] dir_name, byte[] fil_name, boolean fil_is_orig, int fil_w, double fil_thumbtime, int fil_page) { - bfr .Add(dir_name).Add_byte_pipe() - .Add(fil_name).Add_byte_pipe() - .Add_int_bool(fil_is_orig).Add_byte_pipe() - .Add_int_variable(fil_w).Add_byte_pipe() - .Add_double(fil_thumbtime).Add_byte_pipe() - .Add_int_variable(fil_page).Add_byte_pipe() - ; - return bfr.Xto_bry_and_clear(); + public void Lnki_type_(byte v) { + this.lnki_type = v; + if (lnki_ext.Id_is_audio_strict()) + file_is_orig = true; + else + this.file_is_orig = !(Xop_lnki_type.Id_defaults_to_thumb(lnki_type) || lnki_w != Xop_lnki_tkn.Width_null || lnki_h != Xop_lnki_tkn.Height_null); + this.lnki_type_as_mode = file_is_orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; + } + public void Lnki_ttl_(byte[] v) { + lnki_ttl = v; + lnki_ext = Xof_ext_.new_by_ttl_(v); + lnki_md5 = Xof_xfer_itm_.Md5_calc(v); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java index b84e97925..9da03047f 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java @@ -16,29 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.qrys.*; import gplx.xowa.files.wiki_orig.*; -import gplx.xowa.files.fsdb.caches.*; -import gplx.xowa.files.gui.*; +import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*; +import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; public interface Xof_fsdb_mgr extends RlsAble { - boolean Tid_is_mem(); - int Patch_upright(); - Xow_wiki Wiki(); - Xof_qry_mgr Qry_mgr(); + Xof_orig_mgr Orig_mgr(); Xof_bin_mgr Bin_mgr(); - Xof_bin_wkr Bin_wkr_fsdb(); - Fsdb_mnt_mgr Mnt_mgr(); - Cache_mgr Cache_mgr(); - void Db_bin_max_(long v); - void Init_by_wiki(Xow_wiki wiki, Io_url db_dir, Io_url fs_dir, Xow_repo_mgr repo_mgr); - boolean Init_by_wiki(Xow_wiki wiki); - boolean Init_by_wiki__add_bin_wkrs(Xow_wiki wiki); - - boolean Orig_exists_by_ttl(byte[] ttl); - void Orig_select_by_list(Xoa_page page, byte exec_tid, ListAdp itms, OrderedHash hash); - void Fsdb_search_by_list(Xoa_page page, byte exec_tid, ListAdp itms); - - void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr); - void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr); - void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr); - void Orig_insert(Xof_fsdb_itm itm, byte repo_id, byte status); + Fsm_mnt_mgr Mnt_mgr(); + void Init_by_wiki(Xow_wiki wiki); + void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page); } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java index 60949a9cd..ae848b2f4 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java @@ -16,133 +16,132 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.qrys.*; import gplx.xowa.files.wiki_orig.*; -import gplx.xowa.files.fsdb.caches.*; -import gplx.xowa.files.gui.*; -public class Xof_fsdb_mgr_ { - public void Fsdb_search(Xof_fsdb_mgr fsdb_mgr, Io_url file_dir, Xoa_page page, byte exec_tid, ListAdp itms, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) { - ListAdp fsdb_list = ListAdp_.new_(); - int itms_len = itms.Count(); - Gfo_usr_dlg usr_dlg = fsdb_mgr.Wiki().App().Usr_dlg(); - for (int i = 0; i < itms_len; i++) { - if (usr_dlg.Canceled()) return; - Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); - Itm_process(fsdb_mgr, page, file_dir, usr_dlg, itm, fsdb_list, repo_mgr, url_bldr, exec_tid); - } - itms_len = fsdb_list.Count(); if (itms_len == 0) return; // all items found; return; - Reg_search(fsdb_mgr, file_dir, usr_dlg, page, exec_tid, fsdb_list, itms_len, repo_mgr); +import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.xowa.files.caches.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.gui.*; import gplx.xowa.wmfs.apis.*; +class Xof_fsdb_wkr { + private final Gfo_usr_dlg usr_dlg; private final Xof_fsdb_mgr fsdb_mgr; private final Xof_cache_mgr cache_mgr; private final Xow_repo_mgr repo_mgr; private final Xof_url_bldr url_bldr; + private final Xof_img_size img_size = new Xof_img_size(); private final ListAdp get_list = ListAdp_.new_(); + public Xof_fsdb_wkr(Xof_fsdb_mgr fsdb_mgr, Gfo_usr_dlg usr_dlg, Xof_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) { + this.fsdb_mgr = fsdb_mgr; this.usr_dlg = usr_dlg; this.cache_mgr = cache_mgr; this.repo_mgr = repo_mgr; this.url_bldr = url_bldr; } - private void Reg_search(Xof_fsdb_mgr fsdb_mgr, Io_url file_dir, Gfo_usr_dlg usr_dlg, Xoa_page page, byte exec_tid, ListAdp itms_list, int itms_len, Xow_repo_mgr repo_mgr) { - for (int i = 0; i < itms_len; i++) { - if (usr_dlg.Canceled()) return; - Xof_fsdb_itm itm = (Xof_fsdb_itm)itms_list.FetchAt(i); - try { - Reg_search_itm(fsdb_mgr, file_dir, usr_dlg, page, exec_tid, itms_list, itms_len, repo_mgr, itm ); - } catch (Exception e) {usr_dlg.Warn_many("", "", "file.search.error: page=~{0} img=~{1} err=~{2}", String_.new_utf8_(fsdb_mgr.Wiki().Ctx().Cur_page().Ttl().Raw()), String_.new_utf8_(itm.Lnki_ttl()), Err_.Message_gplx_brief(e));} + public void Fsdb_search(byte exec_tid, ListAdp itms, Xoae_page page) { + synchronized (get_list) { + get_list.Clear(); + int itms_len = itms.Count(); + for (int i = 0; i < itms_len; i++) { + if (usr_dlg.Canceled()) return; + Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); + switch (itm.Orig_status()) { + case Xof_orig_wkr_.Status_found: // item is on disk and in orig_regy; just update data, html_view and cache_mgr; + Xof_repo_itm repo_itm = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()).Trg(); + itm.Ctor_by_html(repo_itm, url_bldr, img_size, exec_tid); + Js_img_mgr.Update_img(page, itm); // NOTE: needed when opening 2+ tabs and missing image is on 2+ pages; 2nd page will have img as Xof_orig_wkr_.Status_found; DATE:2014-10-20 + cache_mgr.Reg_and_check_for_size_0(itm); + break; + case Xof_orig_wkr_.Status_missing_orig: + case Xof_orig_wkr_.Status_noop: // NOTE: previous attempt was noop; only occurs if oga and exec_tid != viewer + case Xof_orig_wkr_.Status_null: get_list.Add(itm); break; // item is either not on disk, or not in orig_regy; add to list and try to get from fsdb_mgr + case Xof_orig_wkr_.Status_missing_qry: + case Xof_orig_wkr_.Status_missing_bin: break; // item is missing; just exit + default: throw Err_.unhandled(itm.Orig_status()); + } + } + int get_len = get_list.Count(); + for (int i = 0; i < get_len; i++) { + if (usr_dlg.Canceled()) return; + Xof_fsdb_itm itm = (Xof_fsdb_itm)get_list.FetchAt(i); + try { + Get_itm(exec_tid, itm, page); + } catch (Exception e) {usr_dlg.Warn_many("", "", "file.search.error: page=~{0} img=~{1} err=~{2}", String_.new_utf8_(page.Ttl().Raw()), String_.new_utf8_(itm.Lnki_ttl()), Err_.Message_gplx_brief(e));} + } } } - private void Reg_search_itm(Xof_fsdb_mgr fsdb_mgr, Io_url file_dir, Gfo_usr_dlg usr_dlg, Xoa_page page, byte exec_tid, ListAdp itms_list, int itms_len, Xow_repo_mgr repo_mgr, Xof_fsdb_itm itm) { - switch (itm.Rslt_reg()) { - case Xof_wiki_orig_wkr_.Tid_missing_qry: - case Xof_wiki_orig_wkr_.Tid_missing_bin: return; // already missing; do not try to find again - } - if (Is_not_viewable(exec_tid, itm.Lnki_ext())) { // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02 - itm.Rslt_qry_(Xof_qry_wkr_.Tid_noop); - return; - } - if (fsdb_mgr.Qry_mgr().Find(exec_tid, itm)) { - Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_wiki(itm.Orig_wiki()); + private void Get_itm(byte exec_tid, Xof_fsdb_itm itm, Xoae_page page) { + if (Ext_is_not_viewable_in_exec_tid(exec_tid, itm.Lnki_ext())) return; // do not get if not needed; EX: exec_tid = page and itm is audio + if (Find_by_itm(exec_tid, itm, fsdb_mgr.Orig_mgr(), img_size)) { // itm exists in orig_regy + Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()); if (repo_pair == null) { - fsdb_mgr.Orig_insert(itm, Xof_repo_itm.Repo_unknown, Xof_wiki_orig_wkr_.Tid_missing_qry); + fsdb_mgr.Orig_mgr().Insert(Xof_repo_itm.Repo_unknown, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_missing_qry); return; } - byte orig_wiki = repo_pair.Repo_id(); // NOTE: should be itm.Orig_repo, but throws null refs - if (Is_not_viewable(exec_tid, itm.Lnki_ext())) { - itm.Rslt_qry_(Xof_qry_wkr_.Tid_mock); + byte repo_tid = repo_pair.Repo_idx(); // NOTE: should be itm.Orig_repo, but throws null refs + if (Ext_is_not_viewable_in_exec_tid(exec_tid, itm.Lnki_ext())) { // check viewable again b/c orig_mgr may have changed ext; EX: ogg -> oga itm.Rslt_bin_(Xof_bin_wkr_.Tid_noop); - fsdb_mgr.Orig_insert(itm, orig_wiki, Xof_wiki_orig_wkr_.Tid_noop); + fsdb_mgr.Orig_mgr().Insert(repo_tid, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_noop); return; } - if (fsdb_mgr.Bin_mgr().Find_to_url_as_bool(ListAdp_.Null, exec_tid, itm)) { - fsdb_mgr.Orig_insert(itm, orig_wiki, Xof_wiki_orig_wkr_.Tid_found_orig); + if (fsdb_mgr.Bin_mgr().Find_to_url_as_bool(exec_tid, itm)) { + fsdb_mgr.Orig_mgr().Insert(repo_tid, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_found); // TODO: this "breaks" tests b/c mock bin_wkr is fsdb; - if (itm.Rslt_bin() != Xof_bin_wkr_.Tid_fsdb_wiki) // if bin is from fsdb, don't save it; occurs when page has new file listed twice; 1st file inserts into fsdb; 2nd file should find in fsdb and not save again - Fsdb_save(usr_dlg, fsdb_mgr, itm); + if (itm.Rslt_bin() != Xof_bin_wkr_.Tid_fsdb_xowa) // if bin is from fsdb, don't save it; occurs when page has new file listed twice; 1st file inserts into fsdb; 2nd file should find in fsdb and not save again + Save_itm(itm); Js_img_mgr.Update_img(page, itm); } else { usr_dlg.Warn_many("", "", "file not found: page=~{0} file=~{1} width=~{2}", page.Url().Xto_full_str_safe(), String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w()); itm.Rslt_bin_(Xof_bin_wkr_.Tid_not_found); - fsdb_mgr.Orig_insert(itm, orig_wiki, Xof_wiki_orig_wkr_.Tid_missing_bin); + fsdb_mgr.Orig_mgr().Insert(repo_tid, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_missing_bin); // gplx.xowa.files.gui.Js_img_mgr.Update_img_missing(usr_dlg, itm.Html_uid()); // TODO: update caption with "" if image is missing } } else { - fsdb_mgr.Orig_insert(itm, Xof_repo_itm.Repo_unknown, Xof_wiki_orig_wkr_.Tid_missing_qry); + fsdb_mgr.Orig_mgr().Insert(Xof_repo_itm.Repo_unknown, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_missing_qry); // gplx.xowa.files.gui.Js_img_mgr.Update_img_missing(usr_dlg, itm.Html_uid()); // TODO: update caption with "" if image is missing } } - private static boolean Is_not_viewable(byte exec_tid, Xof_ext ext) { - return exec_tid != Xof_exec_tid.Tid_viewer_app // only apply logic if !Tid_viewer_app; note that if Tid_viewer_app, then user clicked on file, so return true; - && ( ext.Id_is_audio() // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02 - || ext.Id() == Xof_ext_.Id_unknown // ignore unknown exts, else will download needlessly when viewing page; EX: .wav before .wav was registered; PAGE:pl.s:Śpiąca_królewna_(Oppman); DATE:2014-08-17 - ); - } - private Xof_img_size img_size = new Xof_img_size(); - private void Itm_process(Xof_fsdb_mgr fsdb_mgr, Xoa_page page, Io_url file_dir, Gfo_usr_dlg usr_dlg, Xof_fsdb_itm itm, ListAdp fsdb_list, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr, byte exec_tid) { - switch (itm.Rslt_reg()) { - case Xof_wiki_orig_wkr_.Tid_found_orig: - itm.Html__init(repo_mgr, url_bldr, img_size, exec_tid); - Js_img_mgr.Update_img(page, itm); // NOTE: needed when opening 2+ tabs and missing image is on 2+ pages; 2nd page will have img as Xof_wiki_orig_wkr_.Tid_found_orig; DATE:2014-10-20 - if (!Env_.Mode_testing()) { - Cache_fil_itm cache_fil_itm = fsdb_mgr.Cache_mgr().Reg(fsdb_mgr.Wiki(), itm, 0); - if (cache_fil_itm.Fil_size() == 0) { - long fil_size = Io_mgr._.QueryFil(itm.Html_url()).Size(); - cache_fil_itm.Fil_size_(fil_size); - } - } - break; - case Xof_wiki_orig_wkr_.Tid_missing_qry: - case Xof_wiki_orig_wkr_.Tid_missing_bin: break; - case Xof_wiki_orig_wkr_.Tid_missing_reg: - case Xof_wiki_orig_wkr_.Tid_noop: // previous attempt was noop; only occurs if oga and exec_tid != viewer - case Xof_wiki_orig_wkr_.Tid_null: fsdb_list.Add(itm); break; - default: throw Err_.unhandled(itm.Rslt_reg()); - } - } - private void Fsdb_save(Gfo_usr_dlg usr_dlg, Xof_fsdb_mgr fsdb_mgr, Xof_fsdb_itm itm) { - Io_url html_url = itm.Html_url(); + private void Save_itm(Xof_fsdb_itm itm) { + Io_url html_url = itm.Html_view_url(); long bin_len = Io_mgr._.QueryFil(html_url).Size(); gplx.ios.Io_stream_rdr bin_rdr = gplx.ios.Io_stream_rdr_.file_(html_url); try { bin_rdr.Open(); if (itm.Lnki_ext().Id_is_thumbable_img()) { if (itm.File_is_orig()) { - Fsdb_xtn_img_itm img_itm = new Fsdb_xtn_img_itm(); - fsdb_mgr.Img_insert(img_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), Fsdb_xtn_thm_tbl.Modified_null, Fsdb_xtn_thm_tbl.Hash_null, bin_len, bin_rdr); + Fsd_img_itm img_itm = new Fsd_img_itm(); + fsdb_mgr.Mnt_mgr().Img_insert(img_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); } else { - Fsdb_xtn_thm_itm thm_itm = Fsdb_xtn_thm_itm.new_(); - fsdb_mgr.Thm_insert(thm_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_thumbtime(), itm.Lnki_page(), Fsdb_xtn_thm_tbl.Modified_null, Fsdb_xtn_thm_tbl.Hash_null, bin_len, bin_rdr); + Fsd_thm_itm thm_itm = Fsd_thm_itm.new_(); + fsdb_mgr.Mnt_mgr().Thm_insert(thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); } } else { if (itm.Lnki_ext().Id_is_video() && !itm.File_is_orig()) { // insert as thumbnail - Fsdb_xtn_thm_itm thm_itm = Fsdb_xtn_thm_itm.new_(); - fsdb_mgr.Thm_insert(thm_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_thumbtime(), itm.Lnki_page(), Fsdb_xtn_thm_tbl.Modified_null, Fsdb_xtn_thm_tbl.Hash_null, bin_len, bin_rdr); + Fsd_thm_itm thm_itm = Fsd_thm_itm.new_(); + fsdb_mgr.Mnt_mgr().Thm_insert(thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); } else { - Fsdb_fil_itm fil_itm = new Fsdb_fil_itm(); - fsdb_mgr.Fil_insert(fil_itm, itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), Fsdb_xtn_thm_tbl.Modified_null, Fsdb_xtn_thm_tbl.Hash_null, bin_len, bin_rdr); + Fsd_fil_itm fil_itm = new Fsd_fil_itm(); + fsdb_mgr.Mnt_mgr().Fil_insert(fil_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); } } if (!Env_.Mode_testing()) - fsdb_mgr.Cache_mgr().Reg(fsdb_mgr.Wiki(), itm, bin_len); + cache_mgr.Reg(itm, bin_len); } catch (Exception e) { usr_dlg.Warn_many("", "", "failed to save file: ttl=~{0} url=~{1} err=~{2}", String_.new_utf8_(itm.Lnki_ttl()), html_url.Raw(), Err_.Message_gplx(e)); } finally {bin_rdr.Rls();} } - public static final Xof_fsdb_mgr_ _ = new Xof_fsdb_mgr_(); Xof_fsdb_mgr_() {} + private static boolean Ext_is_not_viewable_in_exec_tid(byte exec_tid, Xof_ext ext) { + return exec_tid != Xof_exec_tid.Tid_viewer_app // only apply logic if !Tid_viewer_app; note that if Tid_viewer_app, then user clicked on file, so return true; + && ( ext.Id_is_audio() // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02 + || ext.Id() == Xof_ext_.Id_unknown // ignore unknown exts, else will download needlessly when viewing page; EX: .wav before .wav was registered; PAGE:pl.s:Śpiąca_królewna_(Oppman); DATE:2014-08-17 + ); + } + private static boolean Find_by_itm(byte get_exec_tid, Xof_fsdb_itm itm, Xof_orig_mgr orig_mgr, Xof_img_size img_size) { + byte[] itm_ttl = itm.Lnki_ttl(); + Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(itm_ttl); + if (orig == Xof_orig_itm.Null) { // not found in any wkr + itm.Orig_status_(Xof_orig_wkr_.Status_missing_orig); + return false; // exit now + } + itm.Orig_status_(Xof_orig_wkr_.Status_found); + byte[] orig_redirect = orig.Redirect(); + if (Bry_.Len_gt_0(orig_redirect)) // redirect found + itm.Ctor_by_orig_redirect(orig_redirect); + itm.Orig_size_(orig.W(), orig.H()); + itm.Html_size_calc(img_size, get_exec_tid); // orig found; recalc size + return true; + } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java new file mode 100644 index 000000000..0c2113426 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java @@ -0,0 +1,62 @@ +/* +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.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; +public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble { + private Xof_fsdb_wkr wkr; private boolean init = false; + public Xof_orig_mgr Orig_mgr() {return orig_mgr;} private final Xof_orig_mgr orig_mgr = new Xof_orig_mgr(); + public Xof_bin_mgr Bin_mgr() {return bin_mgr;} private Xof_bin_mgr bin_mgr; + public Fsm_mnt_mgr Mnt_mgr() {return mnt_mgr;} private final Fsm_mnt_mgr mnt_mgr = new Fsm_mnt_mgr(); + public void Init_by_wiki(Xow_wiki wiki) { + if (init) return; + try { + init = true; + // wiki.Rls_list().Add(this); + boolean version_is_1 = wiki.File_mgr__version_is_1(); + Xoa_app app = wiki.App(); + Xof_cache_mgr cache_mgr = app.File_mgr__cache_mgr(); Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); + Xow_repo_mgr repo_mgr = wiki.File_mgr__repo_mgr(); Xof_img_mgr img_mgr = app.File_mgr__img_mgr(); + Io_url db_dir = wiki.Fsys_mgr().File_dir(); + orig_mgr.Init_by_wiki(db_dir, version_is_1, repo_mgr, url_bldr); + mnt_mgr.Init_by_wiki(db_dir, version_is_1); + this.bin_mgr = new Xof_bin_mgr(mnt_mgr, repo_mgr, cache_mgr, app.Wmf_mgr(), url_bldr); + bin_mgr.Init_by_wiki(img_mgr.Wkr_resize_img()); + wkr = new Xof_fsdb_wkr(this, Xoa_app_.Usr_dlg(), cache_mgr, repo_mgr, url_bldr); + } catch (Exception exc) {throw Err_.new_fmt_("failed to initialize fsdb_mgr: wiki={0) err={1}", wiki.Domain_str(), Err_.Message_gplx_brief(exc));} + } + public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page) { + OrderedHash rv = OrderedHash_.new_bry_(); + orig_mgr.Find_by_list(rv, itms, exec_tid); + wkr.Fsdb_search(exec_tid, itms, page); + } + public void Txn_save() { + mnt_mgr.Txn_save(); + orig_mgr.Txn_save(); + } + public void Rls() { + this.Txn_save(); // NOTE: must call save, else user db will not update next id; DATE:2014-02-11 + mnt_mgr.Rls(); + orig_mgr.Rls(); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_mnt_mgr)) return mnt_mgr; + else return GfoInvkAble_.Rv_unhandled; + } private static final String Invk_mnt_mgr = "mnt_mgr"; +} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_mem.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_mem.java deleted file mode 100644 index abd074d6b..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_mem.java +++ /dev/null @@ -1,173 +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.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.fsdb.*; import gplx.xowa.files.wiki_orig.*; import gplx.xowa.files.qrys.*; import gplx.xowa.files.bins.*; -import gplx.xowa.files.fsdb.caches.*; -import gplx.xowa2.files.orig_regy.*; -public class Xof_fsdb_mgr_mem implements Xof_fsdb_mgr, Xof_bin_wkr { - private Hash_adp_bry bin_hash = Hash_adp_bry.cs_(); private Bry_bfr bin_key_bfr = Bry_bfr.new_(); - private Hash_adp_bry reg_hash = Hash_adp_bry.cs_(); - public boolean Tid_is_mem() {return true;} - public int Patch_upright() {return Xof_patch_upright_tid_.Tid_all;} - public Xof_qry_mgr Qry_mgr() {return qry_mgr;} private Xof_qry_mgr qry_mgr = new Xof_qry_mgr(); - public Xof_bin_mgr Bin_mgr() {return bin_mgr;} private Xof_bin_mgr bin_mgr; - public Xof_bin_wkr Bin_wkr_fsdb() {return this;} - public boolean Bin_wkr_resize() {return bin_wkr_resize;} public void Bin_wkr_resize_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = false; - public void Db_bin_max_(long v) {} - private Io_url fs_dir; - private Xof_url_bldr url_bldr = new Xof_url_bldr(); - public Cache_mgr Cache_mgr() {return cache_mgr;} private Cache_mgr cache_mgr = new Cache_mgr(null); - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; - public Fsdb_mnt_mgr Mnt_mgr() {throw Err_.not_implemented_();} - public boolean Init_by_wiki(Xow_wiki wiki) {throw Err_.not_implemented_();} - public boolean Init_by_wiki__add_bin_wkrs(Xow_wiki wiki) {throw Err_.not_implemented_();} - public void Orig_select_by_list(Xoa_page page, byte exec_tid, ListAdp itms, OrderedHash hash) {throw Err_.not_implemented_();} - public void Init_by_wiki(Xow_wiki wiki, Io_url db_dir, Io_url fs_dir, Xow_repo_mgr repo_mgr) { - this.fs_dir = fs_dir; - this.wiki = wiki; - cache_mgr = wiki.App().File_mgr().Cache_mgr(); - bin_mgr = new Xof_bin_mgr(wiki, null, repo_mgr); // HACK: pass null fsdb_mgr; fsdb_mgr only needed for factory methods. - } - public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - byte[] key = Key_bld_fil(dir, fil); - byte[] bin = gplx.ios.Io_stream_rdr_.Load_all_as_bry(bin_rdr); - Fsdb_fil_itm_mem itm = new Fsdb_fil_itm_mem(); - itm.Init(key, dir, fil, bin); - bin_hash.Add(key, itm); - } - public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - byte[] key = Key_bld_thm(dir, fil, thm_w, thumbtime); - byte[] bin = gplx.ios.Io_stream_rdr_.Load_all_as_bry(bin_rdr); - Fsdb_xtn_thm_itm_mem itm = new Fsdb_xtn_thm_itm_mem(); - itm.Init(key, dir, fil, thm_w, thm_h, thumbtime, bin); - bin_hash.Add(key, itm); - } - public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - byte[] key = Key_bld_fil(dir, fil); - byte[] bin = gplx.ios.Io_stream_rdr_.Load_all_as_bry(bin_rdr); - Fsdb_xtn_img_itm_mem itm = new Fsdb_xtn_img_itm_mem(); - itm.Init(key, dir, fil, img_w, img_h, bin); - bin_hash.Add(key, itm); - } - public void Orig_insert(Xof_fsdb_itm fsdb_itm, byte repo_id, byte status) { - byte[] fsdb_itm_ttl = fsdb_itm.Orig_ttl(); - if (reg_hash.Has(fsdb_itm_ttl)) return; - Xof_orig_regy_itm regy_itm = new Xof_orig_regy_itm(fsdb_itm_ttl, status, repo_id, fsdb_itm.Orig_w(), fsdb_itm.Orig_h(), fsdb_itm.Lnki_ext().Id(), fsdb_itm.Orig_redirect()); - reg_hash.Add(fsdb_itm_ttl, regy_itm); - } - public void Fsdb_search_by_list(Xoa_page page, byte exec_tid, ListAdp itms) { - int itms_len = itms.Count(); - for (int i = 0; i < itms_len; i++) { - Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); - Xof_orig_regy_itm reg_itm = (Xof_orig_regy_itm)reg_hash.Get_by_bry(itm.Lnki_ttl()); - if (reg_itm == null) { - itm.Rslt_reg_(Xof_wiki_orig_wkr_.Tid_missing_reg); - continue; - } - byte repo_id = reg_itm.Repo_tid(); - if (repo_id <= Xof_repo_itm.Repo_local) { - byte[] wiki = bin_mgr.Repo_mgr().Repos_get_at(repo_id).Trg().Wiki_key(); - itm.Orig_wiki_(wiki); - } - itm.Orig_size_(reg_itm.Orig_w(), reg_itm.Orig_h()); - itm.Orig_repo_(reg_itm.Repo_tid()); - if (Bry_.Len_gt_0(reg_itm.Orig_redirect())) - itm.Init_by_redirect(reg_itm.Orig_redirect()); - itm.Rslt_reg_(reg_itm.Status()); - } - Xof_fsdb_mgr_._.Fsdb_search(this, fs_dir, page, exec_tid, itms, bin_mgr.Repo_mgr(), url_bldr); - } - public boolean Orig_exists_by_ttl(byte[] ttl) {return reg_hash.Has(ttl);} - public byte Bin_wkr_tid() {return Xof_bin_wkr_.Tid_fsdb_wiki;} - public gplx.ios.Io_stream_rdr Bin_wkr_get_as_rdr(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w) { - byte[] wiki = itm.Orig_wiki(); - byte[] ttl = itm.Lnki_ttl(); - double thumbtime = itm.Lnki_thumbtime(); - byte[] key = Gen_key(is_thumb, itm.Lnki_ext(), wiki, ttl, w, thumbtime); - Fsdb_mem_itm mem_itm = (Fsdb_mem_itm)bin_hash.Get_by_bry(key); - return mem_itm == null ? gplx.ios.Io_stream_rdr_.Null : gplx.ios.Io_stream_rdr_.mem_(mem_itm.Bin()); - } - private byte[] Gen_key(boolean is_thumb, Xof_ext ext, byte[] wiki, byte[] ttl, int w, double thumbtime) { - return ext.Id_is_audio_strict() - ? Key_bld_fil(wiki, ttl) // use fil for audio b/c it doesn't have w, thumbtime - : Key_bld_thm(wiki, ttl, w, thumbtime) // use thm for everything else, even if thumb is not specified; [[File:A.png]] -> enwiki|A.png|-1,-1 - ; - } - public boolean Bin_wkr_get_to_url(ListAdp temp_files, Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return Save_to_url(itm.Orig_wiki(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_thumbtime(), itm.Lnki_page(), bin_url); - } - public boolean Save_to_url(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { - byte[] key = Gen_key(lnki_is_thumb, orig_ext, orig_repo, orig_ttl, file_w, lnki_time); - Fsdb_mem_itm mem_itm = (Fsdb_mem_itm)bin_hash.Get_by_bry(key); - if (mem_itm == null) return false; - Io_mgr._.SaveFilBry(file_url, mem_itm.Bin()); - return true; - } - private byte[] Key_bld_fil(byte[] wiki, byte[] ttl) { - bin_key_bfr .Add_byte(Byte_ascii.Ltr_f).Add_byte_pipe() - .Add(wiki).Add_byte_pipe() - .Add(ttl); - return bin_key_bfr.Xto_bry_and_clear(); - } - private byte[] Key_bld_thm(byte[] wiki, byte[] ttl, int w, double thumbtime) { - bin_key_bfr .Add_byte(Byte_ascii.Ltr_t).Add_byte_pipe() - .Add(wiki).Add_byte_pipe() - .Add(ttl).Add_byte_pipe() - .Add_int_variable(w).Add_byte_pipe() - .Add_int_variable(Xof_doc_thumb.X_int(thumbtime)); - ; - return bin_key_bfr.Xto_bry_and_clear(); - } - public void Rls() {bin_hash.Clear(); reg_hash.Clear();} - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - return this; - } -} -interface Fsdb_mem_itm { - byte[] Mem_key(); - byte[] Wiki(); - byte[] Ttl(); - byte[] Bin(); -} -class Fsdb_xtn_thm_itm_mem extends Fsdb_xtn_thm_itm implements Fsdb_mem_itm { public byte[] Mem_key() {return mem_key;} private byte[] mem_key; - public byte[] Wiki() {return wiki;} private byte[] wiki; - public byte[] Ttl() {return ttl;} private byte[] ttl; - public byte[] Bin() {return bin;} private byte[] bin; - public void Init(byte[] mem_key, byte[] wiki, byte[] ttl, int w, int h, double thumbtime, byte[] bin) { - this.mem_key = mem_key; this.wiki = wiki; this.ttl = ttl; this.bin = bin; - this.Width_(w); this.Height_(h); - this.Thumbtime_(thumbtime); - } -} -class Fsdb_xtn_img_itm_mem extends Fsdb_xtn_img_itm implements Fsdb_mem_itm { public byte[] Mem_key() {return mem_key;} private byte[] mem_key; - public byte[] Wiki() {return wiki;} private byte[] wiki; - public byte[] Ttl() {return ttl;} private byte[] ttl; - public byte[] Bin() {return bin;} private byte[] bin; - public void Init(byte[] mem_key, byte[] wiki, byte[] ttl, int w, int h, byte[] bin) { - this.mem_key = mem_key; this.wiki = wiki; this.ttl = ttl; this.bin = bin; - this.W_(w); this.H_(h); - } -} -class Fsdb_fil_itm_mem extends Fsdb_fil_itm implements Fsdb_mem_itm { public byte[] Mem_key() {return mem_key;} private byte[] mem_key; - public byte[] Wiki() {return wiki;} private byte[] wiki; - public byte[] Ttl() {return ttl;} private byte[] ttl; - public byte[] Bin() {return bin;} private byte[] bin; - public void Init(byte[] mem_key, byte[] wiki, byte[] ttl, byte[] bin) { - this.mem_key = mem_key; this.wiki = wiki; this.ttl = ttl; this.bin = bin; - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_sql.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_sql.java deleted file mode 100644 index 8a9368a7a..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_sql.java +++ /dev/null @@ -1,148 +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.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.fsdb.*; import gplx.xowa.files.wiki_orig.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.qrys.*; import gplx.xowa.files.fsdb.caches.*; -import gplx.xowa.files.fsdb.fs_roots.*; -import gplx.xowa2.files.*; -public class Xof_fsdb_mgr_sql implements Xof_fsdb_mgr, GfoInvkAble { - private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Null; - private Db_conn orig_regy_conn = null; - private Io_url app_file_dir; - private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); - public boolean Tid_is_mem() {return false;} - public Xof_qry_mgr Qry_mgr() {return qry_mgr;} private Xof_qry_mgr qry_mgr = new Xof_qry_mgr(); - public Xof_bin_mgr Bin_mgr() {return bin_mgr;} private Xof_bin_mgr bin_mgr; - public Xof_bin_wkr Bin_wkr_fsdb() {return bin_wkr_fsdb;} private Xof_bin_wkr_fsdb_sql bin_wkr_fsdb; - public void Db_bin_max_(long v) {mnt_mgr.Bin_db_max_(v);} - public Fsdb_mnt_mgr Mnt_mgr() {return mnt_mgr;} private Fsdb_mnt_mgr mnt_mgr = new Fsdb_mnt_mgr(); - public int Patch_upright() { - if (patch_upright_null) { - if (mnt_mgr.Abc_mgr_len() > 0) { - Fsdb_cfg_grp cfg_grp = mnt_mgr.Abc_mgr_at(0).Cfg_mgr().Grps_get_or_load(Xof_fsdb_mgr_cfg.Grp_xowa); - boolean use_thumb_w = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w, Bool_.N); - boolean fix_default = cfg_grp.Get_yn_or(Xof_fsdb_mgr_cfg.Key_upright_fix_default, Bool_.N); - patch_upright_tid = Xof_patch_upright_tid_.Merge(use_thumb_w, fix_default); - } - else // TEST: no cfg dbs - patch_upright_tid = Xof_patch_upright_tid_.Tid_all; - patch_upright_null = false; - } - return patch_upright_tid; - } private boolean patch_upright_null = true; private int patch_upright_tid; - public Io_url Db_dir() {return db_dir;} public Xof_fsdb_mgr_sql Db_dir_(Io_url v) {db_dir = v; mnt_mgr.Init(db_dir); return this;} private Io_url db_dir; - public Cache_mgr Cache_mgr() {return cache_mgr;} private Cache_mgr cache_mgr; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; - public Xof_fsdb_mgr_sql(Xow_wiki wiki) {this.wiki = wiki;} - public boolean Init_by_wiki__add_bin_wkrs(Xow_wiki wiki) { // helper method to init and add bin wkrs - Xof_fsdb_mgr_sql fsdb_mgr = (Xof_fsdb_mgr_sql)wiki.File_mgr().Fsdb_mgr(); - boolean init = fsdb_mgr.Init_by_wiki(wiki); - if (init) { - Xof_bin_mgr bin_mgr = fsdb_mgr.Bin_mgr(); - Xof_bin_wkr_fsdb_sql fsdb_wkr = (Xof_bin_wkr_fsdb_sql)bin_mgr.Get_or_new(Xof_bin_wkr_.Key_fsdb_wiki, "xowa.fsdb.main"); - fsdb_wkr.Fsdb_mgr().Db_dir_(wiki.App().Fsys_mgr().File_dir().GenSubDir(wiki.Domain_str())); - bin_mgr.Get_or_new(Xof_bin_wkr_.Key_http_wmf, "xowa.http.wmf"); - } - return init; - } - public boolean Init_by_wiki(Xow_wiki wiki) { - if (init) return false; - try { - this.wiki = wiki; - usr_dlg = wiki.App().Usr_dlg(); - mnt_mgr.Usr_dlg_(usr_dlg); - init = true; - Xow_repo_mgr repo_mgr = wiki.File_mgr().Repo_mgr(); - Init_by_wiki(wiki, wiki.App().Fsys_mgr().File_dir().GenSubDir(wiki.Domain_str()), wiki.App().Fsys_mgr().File_dir(), repo_mgr); - Xof_qry_wkr_xowa_reg qry_xowa = new Xof_qry_wkr_xowa_reg(orig_regy_conn); -// Xof_qry_wkr_xowa qry_xowa = new Xof_qry_wkr_xowa(new Xof_wiki_finder(wiki.App().Wiki_mgr().Get_by_key_or_make(Xow_wiki_.Domain_commons_bry), wiki), new gplx.xowa.files.qrys.Xof_img_meta_wkr_xowa()); - Xof_qry_wkr_wmf_api qry_wmf_api = new Xof_qry_wkr_wmf_api(wiki, new Xof_img_wkr_api_size_base_wmf()); - qry_mgr.Add_many(qry_xowa, qry_wmf_api); - wiki.Rls_list().Add(this); - bin_mgr.Resizer_(wiki.App().File_mgr().Img_mgr().Wkr_resize_img()); - return true; - } catch (Exception exc) {throw Err_.new_fmt_("failed to initialize fsdb_mgr: wiki=~{0) err=~{1}", wiki.Domain_str(), Err_.Message_gplx_brief(exc));} - } - public void Init_by_wiki(Xow_wiki wiki, Io_url db_dir, Io_url app_file_dir, Xow_repo_mgr repo_mgr) { - this.app_file_dir = app_file_dir; - this.db_dir = db_dir; - orig_regy_conn = Wiki_orig_provider(db_dir); - mnt_mgr.Init(db_dir); - bin_mgr = new Xof_bin_mgr(wiki, this, repo_mgr); - bin_wkr_fsdb = new Xof_bin_wkr_fsdb_sql(this).Bin_bfr_len_(64 * Io_mgr.Len_kb); // most thumbs are 40 kb - cache_mgr = wiki.App().File_mgr().Cache_mgr(); - } private boolean init = false; - public boolean Orig_exists_by_ttl(byte[] ttl) {return Xof_wiki_orig_tbl.Select_itm_exists(orig_regy_conn, ttl);} - public void Orig_select_by_list(Xoa_page page, byte exec_tid, ListAdp itms, OrderedHash hash) { - Xof_wiki_orig_tbl.Select_list(wiki.App().Usr_dlg(), orig_regy_conn, wiki.Db_mgr().Db_ctx(), exec_tid, itms, hash, url_bldr, bin_mgr.Repo_mgr()); - } - public void Fsdb_search_by_list(Xoa_page page, byte exec_tid, ListAdp itms) { - OrderedHash hash = OrderedHash_.new_bry_(); - Orig_select_by_list(page, exec_tid, itms, hash); - Xof_fsdb_mgr_._.Fsdb_search(this, app_file_dir, page, exec_tid, itms, bin_mgr.Repo_mgr(), url_bldr); - } - public boolean Download(Xofv_file_itm itm) { -// if (qry_mgr.Find(itm.Lnki_exec_tid(), itm)) { -// bin_mgr.Find_to_url_as_bool - return true; - } - public Fsdb_db_bin_fil Bin_db_get(int mnt_id, int bin_db_id) { - return mnt_mgr.Bin_db_get(mnt_id, bin_db_id); - } - public Fsdb_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) {return mnt_mgr.Fil_select_bin(dir, fil, is_thumb, width, thumbtime);} - public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsdb_xtn_thm_itm thm) {return mnt_mgr.Thm_select_bin(dir, fil, thm);} - public void Orig_insert(Xof_fsdb_itm itm, byte repo_id, byte status) { - byte[] orig_page = itm.Orig_ttl(); - if (!Xof_wiki_orig_tbl.Select_itm_exists(orig_regy_conn, orig_page)) - Xof_wiki_orig_tbl.Insert(orig_regy_conn, orig_page, status, repo_id, itm.Orig_redirect(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h()); - } - public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - mnt_mgr.Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr); - } - public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - mnt_mgr.Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_len, bin_rdr); - } - public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - mnt_mgr.Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h); - } - public void Txn_open() { - mnt_mgr.Txn_open(); - orig_regy_conn.Txn_mgr().Txn_bgn_if_none(); - } - public void Txn_save() { - mnt_mgr.Txn_save(); - orig_regy_conn.Txn_mgr().Txn_end_all(); - } - public void Rls() { - this.Txn_save(); // NOTE: must call save, else user db will not update next id; DATE:2014-02-11 - mnt_mgr.Rls(); - orig_regy_conn.Conn_term(); - } - public static Io_url Wiki_orig_url(Io_url root_dir) {return root_dir.GenSubFil("wiki.orig#00.sqlite3");} - public static Db_conn Wiki_orig_provider(Io_url root_dir) { - Bool_obj_ref created = Bool_obj_ref.n_(); - Db_conn rv = Sqlite_engine_.Conn_load_or_make_(Wiki_orig_url(root_dir), created); - if (created.Val()) - Xof_wiki_orig_tbl.Create_table(rv); - return rv; - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_mnt_mgr)) return mnt_mgr; - else return GfoInvkAble_.Rv_unhandled; - } private static final String Invk_mnt_mgr = "mnt_mgr"; -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_wkr.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_wkr.java deleted file mode 100644 index 6491952d0..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_wkr.java +++ /dev/null @@ -1,26 +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.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.qrys.*; -import gplx.xowa.files.bins.*; -import gplx.xowa.files.fsdb.fs_roots.*; -public interface Xof_fsdb_wkr extends GfoInvkAble { - Xof_fsdb_wkr Clone_new(Xow_wiki wiki); - Xof_qry_wkr Qry_wkr(); - Xof_bin_wkr Bin_wkr(); -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_cfg_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_cfg_mgr.java deleted file mode 100644 index 0ec385527..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_cfg_mgr.java +++ /dev/null @@ -1,54 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; -class Cache_cfg_mgr { - private Xodb_xowa_cfg_tbl cfg_tbl = new Xodb_xowa_cfg_tbl(); - private Db_stmt update_stmt; - public Cache_cfg_mgr(Cache_mgr cache_mgr) {} - public int Next_id() {return next_id++;} private int next_id; - public void Next_id_(int v) {next_id = v;} - public long Cache_len() {return cache_len;} public Cache_cfg_mgr Cache_len_(long v) {cache_len = v; return this;} private long cache_len = 0; - public void Cache_len_add(long v) {cache_len += v;} - public long Cache_min() {return cache_min;} public Cache_cfg_mgr Cache_min_(long v) {cache_min = v; return this;} private long cache_min = Io_mgr.Len_mb * 75; - public long Cache_max() {return cache_max;} public Cache_cfg_mgr Cache_max_(long v) {cache_max = v; return this;} private long cache_max = Io_mgr.Len_mb * 100; - public void Db_init(Db_conn conn) { - cfg_tbl.Conn_(conn); - next_id = cfg_tbl.Select_val_as_int(Cfg_grp, Cfg_key__next_id); - cache_len = cfg_tbl.Select_val_as_int(Cfg_grp, Cfg_key__cache_len); - cache_max = cfg_tbl.Select_val_as_int(Cfg_grp, Cfg_key__cache_max); - } - public void Db_when_new(Db_conn conn) { - cfg_tbl.Conn_(conn); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(1)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(0)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_min, Long_.Xto_str(cache_min)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_max, Long_.Xto_str(cache_max)); - } - public void Db_save() { - if (update_stmt == null) update_stmt = cfg_tbl.Update_stmt(); - cfg_tbl.Update(update_stmt, Cfg_grp, Cfg_key__next_id, next_id); - cfg_tbl.Update(update_stmt, Cfg_grp, Cfg_key__cache_len, cache_len); - cfg_tbl.Update(update_stmt, Cfg_grp, Cfg_key__cache_min, cache_min); - cfg_tbl.Update(update_stmt, Cfg_grp, Cfg_key__cache_max, cache_max); - } - public void Db_term() { - if (update_stmt != null) update_stmt.Rls(); - } - private static final String Cfg_grp = "fsdb.cache", Cfg_key__next_id = "next_id", Cfg_key__cache_min = "cache_min", Cfg_key__cache_max = "cache_max", Cfg_key__cache_len = "cache_len"; -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_itm.java deleted file mode 100644 index 5bd031175..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_itm.java +++ /dev/null @@ -1,37 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -class Cache_dir_itm { - public int Uid() {return uid;} public void Uid_(int v) {uid = v;} private int uid; - public byte[] Dir_bry() {return dir_bry;} private byte[] dir_bry; - public byte Cmd_mode() {return cmd_mode;} public Cache_dir_itm Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; - public Cache_dir_itm Init_by_load(DataRdr rdr) { - cmd_mode = Db_cmd_mode.Ignore; - uid = rdr.ReadInt(Cache_dir_tbl.Fld_dir_id); - dir_bry = rdr.ReadBryByStr(Cache_dir_tbl.Fld_dir_name); - return this; - } - public Cache_dir_itm Init_by_make(int uid, byte[] dir_bry) { - cmd_mode = Db_cmd_mode.Create; - this.uid = uid; - this.dir_bry = dir_bry; - return this; - } - public static final Cache_dir_itm Null = new Cache_dir_itm(); -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_mgr.java deleted file mode 100644 index 42b9b393f..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_mgr.java +++ /dev/null @@ -1,88 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -class Cache_dir_mgr { - private Cache_mgr cache_mgr; - private OrderedHash name_hash = OrderedHash_.new_bry_(); private HashAdp id_hash = HashAdp_.new_(); - private Cache_dir_tbl dir_tbl = new Cache_dir_tbl(); - public Cache_dir_mgr(Cache_mgr v) {this.cache_mgr = v;} - public void Db_init(Db_conn p) {dir_tbl.Db_init(p);} - public void Db_when_new(Db_conn p) {dir_tbl.Db_when_new(p);} - public void Db_save() { - int len = name_hash.Count(); - boolean err_seen = false; - for (int i = 0; i < len; i++) { - Cache_dir_itm dir_itm = (Cache_dir_itm)name_hash.FetchAt(i); - if (err_seen) - dir_itm.Uid_(cache_mgr.Next_id()); - if (dir_itm.Cmd_mode() == Db_cmd_mode.Create) { // create; check if in db; - Cache_dir_itm tbl_itm = dir_tbl.Select(dir_itm.Dir_bry()); - if (tbl_itm != Cache_dir_itm.Null) // tbl_itm found - dir_itm.Cmd_mode_(Db_cmd_mode.Update); // change dir_itm to update - } - String err = dir_tbl.Db_save(dir_itm); - if (err != null) { - Db_recalc_next_id(dir_itm, err); - err_seen = true; - } - } - } - public void Db_load() { - ListAdp list = ListAdp_.new_(); - dir_tbl.Select_all(list); - int len = list.Count(); - id_hash.Clear(); - name_hash.Clear(); - for (int i = 0; i < len; i++) { - Cache_dir_itm dir_itm = (Cache_dir_itm)list.FetchAt(i); - name_hash.Add(dir_itm.Dir_bry(), dir_itm); - id_hash.Add(dir_itm.Uid(), dir_itm); - } - } - public void Db_term() { - dir_tbl.Db_term(); - } - public Cache_dir_itm Get_itm_by_name(byte[] dir_bry) { - Cache_dir_itm dir_itm = (Cache_dir_itm)name_hash.Fetch(dir_bry); - if (dir_itm == null) { // not in memory - dir_itm = dir_tbl.Select(dir_bry); // check db - if (dir_itm == Cache_dir_itm.Null) { // not in db - int dir_id = cache_mgr.Next_id(); - dir_itm = new Cache_dir_itm().Init_by_make(dir_id, dir_bry); - } - name_hash.Add(dir_bry, dir_itm); - id_hash.Add(dir_itm.Uid(), dir_itm); - } - return dir_itm; - } - public Cache_dir_itm Get_itm_by_id(int id) { - return (Cache_dir_itm)id_hash.Fetch(id); - } - private void Db_recalc_next_id(Cache_dir_itm itm, String err_msg) { - if (String_.Has(err_msg, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time) - int next_id = dir_tbl.Select_max_uid() + 1; - Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", itm.Uid(), String_.new_utf8_(itm.Dir_bry()), err_msg); - itm.Uid_(next_id); - cache_mgr.Next_id_(next_id + 1); - err_msg = dir_tbl.Db_save(itm); - if (err_msg == null) return; - } - Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", itm.Uid(), String_.new_utf8_(itm.Dir_bry()), err_msg); - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_tbl.java deleted file mode 100644 index 3fac45766..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_dir_tbl.java +++ /dev/null @@ -1,94 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -class Cache_dir_tbl { - private Db_conn conn; - private Db_stmt select_stmt; - private Db_stmt_bldr stmt_bldr; - public void Db_init(Db_conn conn) {this.conn = conn;} - public String Db_save(Cache_dir_itm itm) { - try { - if (stmt_bldr == null) stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_dir_id), Fld_dir_name).Init(conn); - Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); - switch (itm.Cmd_mode()) { - case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Uid()).Val_bry_as_str(itm.Dir_bry()).Exec_insert(); break; - case Db_cmd_mode.Update: stmt.Clear() .Val_bry_as_str(itm.Dir_bry()).Val_int(itm.Uid()).Exec_update(); break; - case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Uid()).Exec_delete(); break; - case Db_cmd_mode.Ignore: break; - default: throw Err_.unhandled(itm.Cmd_mode()); - } - itm.Cmd_mode_(Db_cmd_mode.Ignore); - return null; - } catch (Exception e) { - stmt_bldr = null; // null out bldr, else bad stmt will lead to other failures - return Err_.Message_gplx_brief(e); - } - } - public void Db_term() { - if (select_stmt != null) select_stmt.Rls(); - if (stmt_bldr != null) stmt_bldr.Rls(); - } - public void Db_when_new(Db_conn p) { - Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(p, Idx_name); - } - public int Select_max_uid() {return Db_conn_.Select_fld0_as_int_or(conn, "SELECT Max(uid) AS MaxId FROM cache_dir;", -1);} - public Cache_dir_itm Select(byte[] name) { - if (select_stmt == null) select_stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_dir_name)); - DataRdr rdr = DataRdr_.Null; - try { - rdr = select_stmt.Clear() - .Val_bry_as_str(name) - .Exec_select(); - if (rdr.MoveNextPeer()) { - return new Cache_dir_itm().Init_by_load(rdr); - } - else - return Cache_dir_itm.Null; - } - catch (Exception e) {select_stmt = null; throw Err_.err_(e, "stmt failed");} - finally {rdr.Rls();} - } - public void Select_all(ListAdp list) { - list.Clear(); - Db_stmt select_all_stmt = Db_stmt_.new_select_all_(conn, Tbl_name); - DataRdr rdr = DataRdr_.Null; - try { - rdr = select_all_stmt.Exec_select(); - while (rdr.MoveNextPeer()) { - Cache_dir_itm dir_itm = new Cache_dir_itm().Init_by_load(rdr); - list.Add(dir_itm); - } - } - catch (Exception e) {throw Err_.err_(e, "stmt failed");} - finally {rdr.Rls();} - } - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE cache_dir" - , "( dir_id integer NOT NULL PRIMARY KEY" - , ", dir_name varchar(255)" - , ");" - ); - public static final String Tbl_name = "cache_dir" - , Fld_dir_id = "dir_id", Fld_dir_name = "dir_name" - ; - private static final Db_idx_itm - Idx_name = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS cache_dir__name ON cache_dir (dir_name);") - ; -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_itm.java deleted file mode 100644 index 3b945c69a..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_itm.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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -public class Cache_fil_itm implements CompareAble { - public int Uid() {return uid;} public void Uid_(int v) {uid = v;} private int uid; - public int Dir_id() {return dir_id;} private int dir_id; - public byte[] Fil_name() {return fil_name;} private byte[] fil_name; - public boolean Fil_is_orig() {return fil_is_orig;} private boolean fil_is_orig; - public int Fil_w() {return fil_w;} private int fil_w; - public int Fil_h() {return fil_h;} private int fil_h; - public double Fil_thumbtime() {return fil_thumbtime;} private double fil_thumbtime; - public Xof_ext Fil_ext() {return fil_ext;} private Xof_ext fil_ext; - public long Fil_size() {return fil_size;} private long fil_size; - public void Fil_size_(long v) { - this.fil_size = v; - cmd_mode = Db_cmd_mode.Xto_update(cmd_mode); - } - public long Cache_time() {return cache_time;} private long cache_time; - public void Cache_time_now_() { - this.cache_time = DateAdp_.Now().XtoUtc().Timestamp_unix(); - cmd_mode = Db_cmd_mode.Xto_update(cmd_mode); - } - public byte Cmd_mode() {return cmd_mode;} public Cache_fil_itm Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; - public void Cmd_mode_delete_() { - cmd_mode = Db_cmd_mode.Delete; - } - public Cache_fil_itm Init_by_load(DataRdr rdr) { - cmd_mode = Db_cmd_mode.Ignore; - uid = rdr.ReadInt(Cache_fil_tbl.Fld_uid); - dir_id = rdr.ReadInt(Cache_fil_tbl.Fld_dir_id); - fil_name = rdr.ReadBryByStr(Cache_fil_tbl.Fld_fil_name); - fil_is_orig = rdr.ReadByte(Cache_fil_tbl.Fld_fil_is_orig) != Byte_.Zero; - fil_w = rdr.ReadInt(Cache_fil_tbl.Fld_fil_w); - fil_h = rdr.ReadInt(Cache_fil_tbl.Fld_fil_h); - fil_thumbtime = Xof_doc_thumb.Db_load_int(rdr, Cache_fil_tbl.Fld_fil_thumbtime); - int fil_ext_id = rdr.ReadInt(Cache_fil_tbl.Fld_fil_ext); - fil_ext = Xof_ext_.new_by_id_(fil_ext_id); - fil_size = rdr.ReadLong(Cache_fil_tbl.Fld_fil_size); - cache_time = rdr.ReadLong(Cache_fil_tbl.Fld_cache_time); - return this; - } - public Cache_fil_itm Init_by_make(int uid, int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime, Xof_ext fil_ext, long fil_size, int fil_page) { - cmd_mode = Db_cmd_mode.Create; - this.uid = uid; - this.dir_id = dir_id; - this.fil_name = fil_name; - this.fil_is_orig = fil_is_orig; - this.fil_w = fil_w; - this.fil_h = fil_h; - this.fil_thumbtime = fil_thumbtime; - this.fil_ext = fil_ext; - this.fil_size = fil_size; - this.Cache_time_now_(); - return this; - } - public byte[] Gen_hash_key(Bry_bfr bfr) {return Gen_hash_key(bfr, dir_id, fil_name, fil_is_orig, fil_w, fil_h, fil_thumbtime);} - public static byte[] Gen_hash_key(Bry_bfr bfr, int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime) { - bfr .Add_int_variable(dir_id).Add_byte_pipe() - .Add(fil_name).Add_byte_pipe() - .Add_yn(fil_is_orig).Add_byte_pipe() - .Add_int_variable(fil_w).Add_byte_pipe() - .Add_int_variable(fil_h).Add_byte_pipe() - .Add_int_variable(Xof_doc_thumb.X_int(fil_thumbtime)) - ; - return bfr.Xto_bry_and_clear(); - } - public static byte[] Gen_hash_key_v2(Bry_bfr bfr, byte[] dir, byte[] ttl, boolean fil_is_orig, int fil_w, double thumbtime, int page) { - bfr .Add(dir).Add_byte_pipe() - .Add(ttl).Add_byte_pipe() - .Add_yn(fil_is_orig).Add_byte_pipe() - .Add_int_variable(fil_w).Add_byte_pipe() - .Add_double(Xof_doc_thumb.Db_save_double(thumbtime)) - .Add_int_variable(Xof_doc_page.Db_save_int(page)) - ; - return bfr.Xto_bry_and_clear(); - } - public int compareTo(Object obj) {Cache_fil_itm comp = (Cache_fil_itm)obj; return -Long_.Compare(cache_time, comp.cache_time);} // - for DESC sort - public static final Cache_fil_itm Null = new Cache_fil_itm(); public Cache_fil_itm() {} -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_mgr.java deleted file mode 100644 index 101a2924d..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_mgr.java +++ /dev/null @@ -1,138 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.core.primitives.*; -import gplx.dbs.*; -import gplx.fsdb.*; -class Cache_fil_mgr { - private Cache_mgr cache_mgr; - private OrderedHash fil_hash = OrderedHash_.new_bry_(); - private Cache_fil_tbl fil_tbl = new Cache_fil_tbl(); - private Bry_bfr fil_key_bldr = Bry_bfr.reset_(255); - public Cache_fil_mgr(Cache_mgr v) {this.cache_mgr = v;} - public void Db_init(Db_conn p) {fil_tbl.Db_init(p);} - public void Db_when_new(Db_conn p) {fil_tbl.Db_when_new(p);} - public void Db_save() { - int len = fil_hash.Count(); - boolean err_seen = false; - for (int i = 0; i < len; i++) { - Cache_fil_itm fil_itm = (Cache_fil_itm)fil_hash.FetchAt(i); - if (err_seen) - fil_itm.Uid_(cache_mgr.Next_id()); - if (fil_itm.Cmd_mode() == Db_cmd_mode.Create) { // create; check if in db; - Cache_fil_itm tbl_itm = fil_tbl.Select(fil_itm.Dir_id(), fil_itm.Fil_name(), fil_itm.Fil_is_orig(), fil_itm.Fil_w(), fil_itm.Fil_h(), fil_itm.Fil_thumbtime()); - if (tbl_itm != Cache_fil_itm.Null) // tbl_itm found - fil_itm.Cmd_mode_(Db_cmd_mode.Update); // change fil_itm to update - } - String err_msg = fil_tbl.Db_save(fil_itm); - if (err_msg != null) { - Db_recalc_next_id(fil_itm, err_msg); - err_seen = true; - } - } - } - public void Db_term() { - fil_tbl.Db_term(); - } - private void Db_recalc_next_id(Cache_fil_itm fil_itm, String err_msg) { - if (String_.Has(err_msg, "PRIMARY KEY must be unique")) { // primary key exception in strange situations (multiple xowas at same time) - int next_id = fil_tbl.Select_max_uid() + 1; - Gfo_usr_dlg_._.Warn_many("", "", "uid out of sync; incrementing; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Fil_name()), err_msg); - fil_itm.Uid_(next_id); - cache_mgr.Next_id_(next_id + 1); - err_msg = fil_tbl.Db_save(fil_itm); - if (err_msg == null) - return; - } - Gfo_usr_dlg_._.Warn_many("", "", "failed to save uid; uid=~{0} name=~{1} err=~{2}", fil_itm.Uid(), String_.new_utf8_(fil_itm.Fil_name()), err_msg); - } - public Cache_fil_itm Get_or_new(int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime, Xof_ext fil_ext, long fil_size, Bool_obj_ref created) { - byte[] fil_key = Cache_fil_itm.Gen_hash_key(fil_key_bldr, dir_id, fil_name, fil_is_orig, fil_w, fil_h, fil_thumbtime); - Cache_fil_itm fil_itm = (Cache_fil_itm)fil_hash.Fetch(fil_key); - if (fil_itm == null) { // not in memory - fil_itm = fil_tbl.Select(dir_id, fil_name, fil_is_orig, fil_w, fil_h, fil_thumbtime); - if (fil_itm == Cache_fil_itm.Null) { // not in db - int fil_id = cache_mgr.Next_id(); - fil_itm = new Cache_fil_itm().Init_by_make(fil_id, dir_id, fil_name, fil_is_orig, fil_w, fil_h, fil_thumbtime, fil_ext, fil_size, Xof_doc_page.Null); - created.Val_(true); - } - fil_hash.Add(fil_key, fil_itm); - } - return fil_itm; - } - public void Compress(Xoa_app app, Cache_dir_mgr dir_mgr, Cache_cfg_mgr cfg_mgr) { - try { - app.Usr_dlg().Note_many("", "", "compressing cache"); - dir_mgr.Db_save(); - dir_mgr.Db_load(); - this.Db_save(); // save everything first - fil_tbl.Db_load(fil_key_bldr, fil_hash); - fil_hash.Sort(); // sorts by cache_time desc - int len = fil_hash.Count(); - long cur_size = 0, actl_size = 0; - Xof_url_bldr url_bldr = new Xof_url_bldr(); - ListAdp deleted = ListAdp_.new_(); - fil_tbl.Conn().Txn_mgr().Txn_bgn_if_none(); - long compress_to = cfg_mgr.Cache_min(); - for (int i = 0; i < len; i++) { - Cache_fil_itm itm = (Cache_fil_itm)fil_hash.FetchAt(i); - long itm_size = itm.Fil_size(); - long new_size = cur_size + itm_size; - if (new_size > compress_to) { - itm.Cmd_mode_(gplx.dbs.Db_cmd_mode.Delete); - Fsys_delete(url_bldr, app.File_mgr().Repo_mgr(), dir_mgr, itm); - deleted.Add(itm); - } - else - actl_size += itm_size; - cur_size = new_size; - String err_msg = fil_tbl.Db_save(itm); // save to db now, b/c fils will be deleted and want to keep db and fsys in sync - if (err_msg != null) - Db_recalc_next_id(itm, err_msg); - } - len = deleted.Count(); - for (int i = 0; i < len; i++) { - Cache_fil_itm itm = (Cache_fil_itm)deleted.FetchAt(i); - byte[] fil_key = itm.Gen_hash_key(fil_key_bldr); - fil_hash.Del(fil_key); - } - cfg_mgr.Cache_len_(actl_size); - this.Db_save(); // save everything again - } - catch (Exception e) { - app.Usr_dlg().Warn_many("", "", "failed to compress cache: err=~{0}", Err_.Message_gplx_brief(e)); - } - finally {fil_tbl.Conn().Txn_mgr().Txn_end_all();} - } - private void Fsys_delete(Xof_url_bldr url_bldr, Xoa_repo_mgr repo_mgr, Cache_dir_mgr dir_mgr, Cache_fil_itm itm) { - byte mode_id = itm.Fil_is_orig() ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; - byte[] wiki_domain = dir_mgr.Get_itm_by_id(itm.Dir_id()).Dir_bry(); - Xow_wiki wiki = repo_mgr.App().Wiki_mgr().Get_by_key_or_make(wiki_domain); - wiki.Init_assert(); - Xof_repo_itm trg_repo = repo_mgr.Get_primary(wiki_domain); - byte[] ttl = itm.Fil_name(); - byte[] md5 = Xof_xfer_itm_.Md5_(ttl); - int itm_ext_id = itm.Fil_ext().Id(); - Io_url fil_url = url_bldr.Init_for_trg_file(mode_id, trg_repo, ttl, md5, itm.Fil_ext(), itm.Fil_w() - , Xof_doc_thumb.Convert_to_xowa_thumbtime (itm_ext_id, itm.Fil_thumbtime()) - , Xof_doc_thumb.Convert_to_xowa_page (itm_ext_id, itm.Fil_thumbtime()) - ).Xto_url(); - Io_mgr._.DeleteFil_args(fil_url).MissingFails_off().Exec(); - itm.Cmd_mode_delete_(); - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_tbl.java deleted file mode 100644 index 3380c9536..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_fil_tbl.java +++ /dev/null @@ -1,123 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.dbs.*; -class Cache_fil_tbl { - private Db_stmt select_itm_stmt; - private Db_stmt_bldr stmt_bldr; - public void Db_init(Db_conn p) {this.conn = p;} - public Db_conn Conn() {return conn;} private Db_conn conn; - public void Db_when_new(Db_conn p) { - Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(p, Idx_ttl); - } - public String Db_save(Cache_fil_itm itm) { - try { - if (stmt_bldr == null) stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_uid), Fld_dir_id, Fld_fil_name, Fld_fil_is_orig, Fld_fil_w, Fld_fil_h, Fld_fil_thumbtime, Fld_fil_ext, Fld_fil_size, Fld_cache_time).Init(conn); - Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); - switch (itm.Cmd_mode()) { - case Db_cmd_mode.Create: stmt.Clear().Val_int(itm.Uid()); Db_save_modify(stmt, itm); stmt.Exec_insert(); break; - case Db_cmd_mode.Update: stmt.Clear(); Db_save_modify(stmt, itm); stmt.Val_int(itm.Uid()).Exec_update(); break; - case Db_cmd_mode.Delete: stmt.Clear().Val_int(itm.Uid()); stmt.Exec_delete(); break; - case Db_cmd_mode.Ignore: break; - default: throw Err_.unhandled(itm.Cmd_mode()); - } - itm.Cmd_mode_(Db_cmd_mode.Ignore); - return null; - } catch (Exception e) { - stmt_bldr = null; // null out bldr, else bad stmt will lead to other failures - return Err_.Message_gplx_brief(e); - } - } - private void Db_save_modify(Db_stmt stmt, Cache_fil_itm itm) { - stmt.Val_int(itm.Dir_id()) - .Val_bry_as_str(itm.Fil_name()) - .Val_bool_as_byte(itm.Fil_is_orig()) - .Val_int(itm.Fil_w()) - .Val_int(itm.Fil_h()) - .Val_int(Xof_doc_thumb.Db_save_int(itm.Fil_thumbtime())) - .Val_int(itm.Fil_ext().Id()) - .Val_long(itm.Fil_size()) - .Val_long(itm.Cache_time()) - ; - } - public void Db_term() { - if (select_itm_stmt != null) select_itm_stmt.Rls(); - if (stmt_bldr != null) stmt_bldr.Rls(); - } - public int Select_max_uid() {return Db_conn_.Select_fld0_as_int_or(conn, "SELECT Max(uid) AS MaxId FROM cache_fil;", -1);} - public Cache_fil_itm Select(int dir_id, byte[] fil_name, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime) { - if (select_itm_stmt == null) select_itm_stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_dir_id, Fld_fil_name, Fld_fil_is_orig, Fld_fil_w, Fld_fil_h, Fld_fil_thumbtime)); - DataRdr rdr = DataRdr_.Null; - try { - rdr = select_itm_stmt.Clear() - .Val_int(dir_id) - .Val_bry_as_str(fil_name) - .Val_bool_as_byte(fil_is_orig) - .Val_int(fil_w) - .Val_int(fil_h) - .Val_int(Xof_doc_thumb.Db_save_int(fil_thumbtime)) - .Exec_select(); - if (rdr.MoveNextPeer()) - return new Cache_fil_itm().Init_by_load(rdr); - else - return Cache_fil_itm.Null; - } - catch (Exception e) {select_itm_stmt = null; throw Err_.err_(e, "stmt failed");} - finally {rdr.Rls();} - } - public void Db_load(Bry_bfr fil_key_bldr, OrderedHash hash) { - hash.Clear(); - Db_stmt select_all_stmt = Db_stmt_.new_select_all_(conn, Tbl_name); - DataRdr rdr = DataRdr_.Null; - try { - rdr = select_all_stmt.Exec_select(); - while (rdr.MoveNextPeer()) { - Cache_fil_itm fil_itm = new Cache_fil_itm().Init_by_load(rdr); - byte[] key = fil_itm.Gen_hash_key(fil_key_bldr); - if (hash.Has(key)) // NOTE: need to check for uniqueness else dupe file will cause select to fail; shouldn't happen, but somehow did; DATE:2013-12-28 - Gfo_usr_dlg_._.Warn_many("", "", "cache had duplicate itm: key=~{0}", String_.new_utf8_(key)); - else - hash.Add(key, fil_itm); - } - } - catch (Exception e) {throw Err_.err_(e, "stmt failed");} - finally {rdr.Rls();} - } - private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE cache_fil" - , "( uid integer NOT NULL PRIMARY KEY AUTOINCREMENT" - , ", dir_id integer" - , ", fil_name varchar(255)" - , ", fil_is_orig tinyint" - , ", fil_w integer" - , ", fil_h integer" - , ", fil_thumbtime integer" - , ", fil_ext integer" - , ", fil_size bigint" - , ", cache_time bigint" - , ");" - ); - public static final String Tbl_name = "cache_fil" - , Fld_uid = "uid", Fld_dir_id = "dir_id", Fld_fil_name = "fil_name", Fld_fil_is_orig = "fil_is_orig" - , Fld_fil_w = "fil_w", Fld_fil_h = "fil_h", Fld_fil_thumbtime = "fil_thumbtime", Fld_fil_ext = "fil_ext", Fld_fil_size = "fil_size", Fld_cache_time = "cache_time" - ; - private static final Db_idx_itm - Idx_ttl = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS cache_fil__fil ON cache_fil (fil_name, fil_is_orig, fil_w, fil_h, fil_thumbtime, cache_time, uid);") - ; -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_mgr.java deleted file mode 100644 index ec46e4fa4..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/caches/Cache_mgr.java +++ /dev/null @@ -1,98 +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.files.fsdb.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.xowa.users.dbs.*; -import gplx.xowa2.files.*; -public class Cache_mgr implements Xou_db_wkr, GfoInvkAble { - private Cache_cfg_mgr cfg_mgr; - private Cache_dir_mgr dir_mgr; - private Cache_fil_mgr fil_mgr; - private Xoa_app app; - private Bool_obj_ref created = Bool_obj_ref.n_(); - public Cache_mgr(Xoa_app app) { - this.app = app; - cfg_mgr = new Cache_cfg_mgr(this); - dir_mgr = new Cache_dir_mgr(this); - fil_mgr = new Cache_fil_mgr(this); - } - public String Xtn_key() {return "xowa.file.cache_mgr";} - public String Xtn_version() {return "0.1.0.0";} - public int Next_id() {return cfg_mgr.Next_id();} public void Next_id_(int v) {cfg_mgr.Next_id_(v);} - public void Db_init(Xou_db_mgr data_mgr) { - try { - Db_conn conn = data_mgr.Conn(); - data_mgr.Wkr_reg(this); - cfg_mgr.Db_init(conn); - dir_mgr.Db_init(conn); - fil_mgr.Db_init(conn); - } catch (Exception e) {app.Usr_dlg().Warn_many("", "", "cache_mgr.init:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} - } - public void Db_when_new(Xou_db_mgr data_mgr) { - Db_conn conn = data_mgr.Conn(); - cfg_mgr.Db_when_new(conn); - dir_mgr.Db_when_new(conn); - fil_mgr.Db_when_new(conn); - this.Db_save(data_mgr); - } - public void Db_save(Xou_db_mgr data_mgr) { - try { - dir_mgr.Db_save(); - fil_mgr.Db_save(); - cfg_mgr.Db_save(); // always save cfg_mgr last; fil_mgr / dir_mgr may change next_id during failed saves; DATE:2014-03-07 - } catch (Exception e) {app.Usr_dlg().Warn_many("", "", "cache_mgr.save:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} - } - public void Db_term(Xou_db_mgr data_mgr) { - try { - cfg_mgr.Db_term(); - dir_mgr.Db_term(); - fil_mgr.Db_term(); - } catch (Exception e) {app.Usr_dlg().Warn_many("", "", "cache_mgr.term:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} - } - public Cache_fil_itm Reg(Xow_wiki wiki, Xof_fsdb_itm itm, long bin_len) {return this.Reg(wiki, itm.Orig_wiki(), itm.Lnki_ttl(), itm.File_is_orig(), itm.File_w(), itm.File_w(), itm.Lnki_thumbtime(), itm.Lnki_ext(), bin_len, DateAdp_.MaxValue, "");} - public Cache_fil_itm Reg(Xow_wiki wiki, byte[] repo, byte[] ttl, boolean fil_is_orig, int fil_w, int fil_h, double fil_thumbtime, Xof_ext ext, long bin_len, DateAdp modified, String hash) { - int dir_id = dir_mgr.Get_itm_by_name(repo).Uid(); - Cache_fil_itm fil_itm = fil_mgr.Get_or_new(dir_id, ttl, fil_is_orig, fil_w, fil_h, fil_thumbtime, ext, bin_len, created.Val_n_()); - fil_itm.Cache_time_now_(); - if (created.Val()) // increase cache_size if item is new; (don't increase if update); NOTE: not same as Db_cmd_mode.Created, b/c itm could be created, but not saved to db yet; EX: Page_1 has A.png; A.png marked Created; Page_2 has A.png; A.png still Created, but should increase cache_size - cfg_mgr.Cache_len_add(bin_len); - return fil_itm; - } -// public Xou_cache_fil Get_or_new(byte[] dir, byte[] ttl, boolean is_orig, int w, double time, int page) { -// int dir_id = dir_mgr.Get_itm_by_name(dir).Uid(); -// Xou_cache_fil fil_itm = fil_mgr.Get_or_new(dir_id, ttl, is_orig, w, -1, time, ext, 0, created.Val_n_()); -// fil_itm.Cache_time_now_(); -// if (created.Val()) // increase cache_size if item is new; (don't increase if update); NOTE: not same as Db_cmd_mode.Created, b/c itm could be created, but not saved to db yet; EX: Page_1 has A.png; A.png marked Created; Page_2 has A.png; A.png still Created, but should increase cache_size -// cfg_mgr.Cache_len_add(bin_len); -//// return fil_itm; -// return null; -// } - public void Compress_check() { - if (cfg_mgr.Cache_len() > cfg_mgr.Cache_max()) - fil_mgr.Compress(app, dir_mgr, cfg_mgr); - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_cache_min)) return cfg_mgr.Cache_min() / Io_mgr.Len_mb; - else if (ctx.Match(k, Invk_cache_min_)) cfg_mgr.Cache_min_(m.ReadLong("v") * Io_mgr.Len_mb); - else if (ctx.Match(k, Invk_cache_max)) return cfg_mgr.Cache_max() / Io_mgr.Len_mb; - else if (ctx.Match(k, Invk_cache_max_)) cfg_mgr.Cache_max_(m.ReadLong("v") * Io_mgr.Len_mb); - else if (ctx.Match(k, Invk_cache_compress)) fil_mgr.Compress(app, dir_mgr, cfg_mgr); - else return GfoInvkAble_.Rv_unhandled; - return this; - } private static final String Invk_cache_min = "cache_min", Invk_cache_min_ = "cache_min_", Invk_cache_max = "cache_max", Invk_cache_max_ = "cache_max_", Invk_cache_compress = "cache_compress"; -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java index 787c18215..529114769 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java @@ -17,17 +17,16 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.gfui.*; import gplx.fsdb.*; -import gplx.xowa.files.wiki_orig.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.gfui.*; +import gplx.fsdb.meta.*; import gplx.xowa.files.imgs.*; class Fs_root_dir { private Gfo_usr_dlg usr_dlg; private Xof_img_wkr_query_img_size img_size_wkr; private Io_url url; private boolean recurse = true; private Orig_fil_mgr cache = new Orig_fil_mgr(), fs_fil_mgr; - private Db_conn_mkr provider_mkr; - private Db_conn conn; private Fsdb_cfg_tbl cfg_tbl; private Orig_fil_tbl fil_tbl; + private Db_conn conn; private Db_cfg_tbl cfg_tbl; private Orig_fil_tbl fil_tbl; private int fil_id_next = 0; - public void Init(Io_url url, Db_conn_mkr provider_mkr, Fsdb_cfg_tbl cfg_tbl, Orig_fil_tbl fil_tbl, Gfo_usr_dlg usr_dlg, Xof_img_wkr_query_img_size img_size_wkr) { - this.url = url; this.provider_mkr = provider_mkr; + public void Init(Io_url url, Db_cfg_tbl cfg_tbl, Orig_fil_tbl fil_tbl, Gfo_usr_dlg usr_dlg, Xof_img_wkr_query_img_size img_size_wkr) { + this.url = url; this.cfg_tbl = cfg_tbl; this.fil_tbl = fil_tbl; this.usr_dlg = usr_dlg; this.img_size_wkr = img_size_wkr; } public Orig_fil_itm Get_by_ttl(byte[] lnki_ttl) { @@ -78,13 +77,17 @@ class Fs_root_dir { } return rv; } + private static final String Db_conn_bldr_type = "gplx.xowa.fs_root"; private Db_conn Init_db_fil_mgr() { Io_url db_url = url.GenSubFil("^orig_regy.sqlite3"); - Bool_obj_ref created_ref = Bool_obj_ref.n_(); - conn = provider_mkr.Load_or_make_(db_url, created_ref); - boolean created = created_ref.Val(); - cfg_tbl.Ctor(conn, created); - fil_tbl.Ctor(conn, created); + boolean created = false; boolean version_is_1 = Bool_.Y; + Db_conn conn = Db_conn_bldr.I.Get(Db_conn_bldr_type, db_url); + if (conn == null) { + conn = Db_conn_bldr.I.New(Db_conn_bldr_type, db_url); + created = true; + } + cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + fil_tbl.Conn_(conn, created, version_is_1); if (created) cfg_tbl.Insert(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next)); else { diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java index 8690f898d..718d75b48 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir_tst.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.dbs.*; -import gplx.fsdb.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.files.imgs.*; +import gplx.fsdb.meta.*; public class Fs_root_dir_tst { @Before public void init() {fxt.Reset();} private Fs_root_dir_fxt fxt = new Fs_root_dir_fxt(); @Test public void Basic() { @@ -41,13 +41,14 @@ class Fs_root_dir_fxt { private Orig_fil_tbl orig_fil_tbl; private Io_url url; public void Reset() { + Db_conn_bldr.I.Reg_default_mem(); Io_mgr._.InitEngine_mem(); url = Io_url_.mem_dir_("mem/dir/"); root_dir = new Fs_root_dir(); - Fsdb_cfg_tbl cfg_tbl = Fsdb_cfg_tbl_.new_mem_(); - orig_fil_tbl = new Orig_fil_tbl_mem(); + Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(); + orig_fil_tbl = new Orig_fil_tbl(); Xof_img_wkr_query_img_size img_size_wkr = new Xof_img_wkr_query_img_size_test(); - root_dir.Init(url, Db_conn_mkr_.Mem_create_y, cfg_tbl, orig_fil_tbl, Gfo_usr_dlg_.Null, img_size_wkr); + root_dir.Init(url, cfg_tbl, orig_fil_tbl, Gfo_usr_dlg_.Null, img_size_wkr); } public Orig_fil_mok itm_() {return new Orig_fil_mok();} public void Init_fs(String url, int w, int h) {Save_img(url, w, h);} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java index cc3cf9705..6c73a9b93 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java @@ -16,33 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.ios.*; import gplx.fsdb.*; -import gplx.xowa.files.qrys.*; import gplx.xowa.files.bins.*; -import gplx.xowa.files.fsdb.caches.*; -import gplx.xowa.files.gui.*; +import gplx.ios.*; +import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*; +import gplx.xowa.files.gui.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, GfoInvkAble { // read images from file-system dir - public boolean Tid_is_mem() {return false;} - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; - public Xof_qry_mgr Qry_mgr() {throw Err_.not_implemented_();} - public Xof_bin_mgr Bin_mgr() {throw Err_.not_implemented_();} - public Xof_bin_wkr Bin_wkr_fsdb() {throw Err_.not_implemented_();} - public Cache_mgr Cache_mgr() {throw Err_.not_implemented_();} - public void Db_bin_max_(long v) {throw Err_.not_implemented_();} - public int Patch_upright() {return Xof_patch_upright_tid_.Tid_all;} - public Fsdb_mnt_mgr Mnt_mgr() {throw Err_.not_implemented_();} - public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {throw Err_.not_implemented_();} - public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int thm_w, int thm_h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {throw Err_.not_implemented_();} - public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {throw Err_.not_implemented_();} - public void Orig_insert(Xof_fsdb_itm itm, byte repo_id, byte status) {throw Err_.not_implemented_();} - private Fs_root_wkr_fsdb fsdb_wkr; - public Fs_root_fsdb_mgr(Xow_wiki wiki) {this.Init_by_wiki(wiki); fsdb_wkr = new Fs_root_wkr_fsdb(wiki);} - public boolean Init_by_wiki(Xow_wiki wiki) { - this.wiki = wiki; - return true; - } - public boolean Init_by_wiki__add_bin_wkrs(Xow_wiki wiki) {return this.Init_by_wiki(wiki);} - public void Init_by_wiki(Xow_wiki wiki, Io_url db_dir, Io_url fs_dir, Xow_repo_mgr repo_mgr) {this.Init_by_wiki(wiki);} - public void Fsdb_search_by_list(Xoa_page page, byte exec_tid, ListAdp itms) { + private Xowe_wiki wiki; private Fs_root_wkr_fsdb fsdb_wkr; + public Fs_root_fsdb_mgr(Xowe_wiki wiki) {this.Init_by_wiki(wiki); fsdb_wkr = new Fs_root_wkr_fsdb(wiki);} + public void Init_by_wiki(Xow_wiki wiki) {this.wiki = (Xowe_wiki)wiki;} + public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page) { int itms_len = itms.Count(); for (int i = 0; i < itms_len; i++) { Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); @@ -50,13 +31,10 @@ public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, GfoInvkAble { // read ima Js_img_mgr.Update_img(page, itm); } } - public void Orig_select_by_list(Xoa_page page, byte exec_tid, ListAdp itms, OrderedHash hash) {} - public boolean Orig_exists_by_ttl(byte[] ttl) {throw Err_.not_implemented_();} - public void Rls() {} private Io_url Xto_url(byte[] v) { if (Op_sys.Cur().Tid_is_wnt()) v = Bry_.Replace(v, Byte_ascii.Slash, Byte_ascii.Backslash); - return Bry_fmtr_eval_mgr_.Eval_url(wiki.App().Url_cmd_eval(), v); + return Bry_fmtr_eval_mgr_.Eval_url(wiki.Appe().Url_cmd_eval(), v); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_root_dir_)) fsdb_wkr.Root_dir_(Xto_url(m.ReadBry("v"))); @@ -65,4 +43,8 @@ public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, GfoInvkAble { // read ima else return GfoInvkAble_.Rv_unhandled; return this; } private static final String Invk_root_dir_ = "root_dir_", Invk_orig_dir_ = "orig_dir_", Invk_thumb_dir_ = "thumb_dir_"; + public Xof_orig_mgr Orig_mgr() {throw Err_.not_implemented_();} + public Xof_bin_mgr Bin_mgr() {throw Err_.not_implemented_();} + public Fsm_mnt_mgr Mnt_mgr() {throw Err_.not_implemented_();} + public void Rls() {} } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java index d4a66b55a..e2d9bf9de 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java @@ -16,15 +16,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.core.primitives.*; import gplx.dbs.*; -import gplx.fsdb.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; +import gplx.xowa.files.repos.*; import gplx.fsdb.meta.*; public class Fs_root_wkr_fsdb { - private Xow_wiki wiki; + private Xowe_wiki wiki; private Io_url orig_dir, thumb_dir; private Fs_root_dir orig_dir_mgr = new Fs_root_dir(); private String_obj_ref tmp_resize_result = String_obj_ref.null_(); private Xof_img_size img_size = new Xof_img_size(); - public Fs_root_wkr_fsdb(Xow_wiki wiki) {this.wiki = wiki;} + public Fs_root_wkr_fsdb(Xowe_wiki wiki) {this.wiki = wiki;} public boolean Find_file(byte exec_tid, Xof_fsdb_itm fsdb_itm) { byte[] lnki_ttl = fsdb_itm.Lnki_ttl(); Orig_fil_itm orig_itm = orig_dir_mgr.Get_by_ttl(lnki_ttl); @@ -32,22 +32,24 @@ public class Fs_root_wkr_fsdb { Io_url orig_url = orig_itm.Fil_url(); if (fsdb_itm.Lnki_type_as_mode() == Xof_repo_itm.Mode_orig) { fsdb_itm.Html_size_(orig_itm.Fil_w(), orig_itm.Fil_h()); - fsdb_itm.Html_url_(orig_url).Html_orig_url_(orig_url); + fsdb_itm.Html_view_url_(orig_url); + fsdb_itm.Html_orig_url_(orig_url); return true; } else { String thumb_rel = orig_url.GenRelUrl_orEmpty(orig_dir); - int upright_patch = wiki.File_mgr().Fsdb_mgr().Patch_upright(); + int upright_patch = wiki.File_mgr().Patch_upright(); img_size.Html_size_calc(exec_tid, fsdb_itm.Lnki_w(), fsdb_itm.Lnki_h(), fsdb_itm.Lnki_type(), upright_patch, fsdb_itm.Lnki_upright(), fsdb_itm.Lnki_ext().Id(), orig_itm.Fil_w(), orig_itm.Fil_h(), Xof_img_size.Thumb_width_img); int html_w = img_size.Html_w(), html_h = img_size.Html_h(); String thumb_name = Int_.Xto_str(html_w) + orig_url.Ext(); Io_url thumb_url = thumb_dir.GenSubFil_ary(thumb_rel + orig_url.Info().DirSpr(), thumb_name); if (!Io_mgr._.ExistsFil(thumb_url)) { - if (!wiki.App().File_mgr().Img_mgr().Wkr_resize_img().Exec(orig_url, thumb_url, html_w, html_h, fsdb_itm.Lnki_ext().Id(), tmp_resize_result)) + if (!wiki.Appe().File_mgr().Img_mgr().Wkr_resize_img().Exec(orig_url, thumb_url, html_w, html_h, fsdb_itm.Lnki_ext().Id(), tmp_resize_result)) return false; } fsdb_itm.Html_size_(html_w, html_h); - fsdb_itm.Html_url_(thumb_url).Html_orig_url_(orig_url); + fsdb_itm.Html_view_url_(thumb_url); + fsdb_itm.Html_orig_url_(orig_url); return true; } } @@ -62,7 +64,7 @@ public class Fs_root_wkr_fsdb { orig_dir_mgr_init(orig_dir); } private void orig_dir_mgr_init(Io_url orig_dir) { - orig_dir_mgr.Init(orig_dir, Db_conn_mkr_.Sqlite, Fsdb_cfg_tbl_.new_sql_(), new Orig_fil_tbl_sql(), wiki.App().Usr_dlg(), wiki.App().File_mgr().Img_mgr().Wkr_query_img_size()); + orig_dir_mgr.Init(orig_dir, new Db_cfg_tbl(), new Orig_fil_tbl(), wiki.Appe().Usr_dlg(), wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size()); } public void Thumb_dir_(Io_url v) { thumb_dir = v; diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_itm.java index 35e9b5420..33516eabd 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_itm.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_itm.java @@ -17,6 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; public class Orig_fil_itm { + public Orig_fil_itm() {} + public Orig_fil_itm(int uid, byte[] name, int ext_id, int w, int h, byte[] dir_url) { + this.fil_uid = uid; this.fil_name = name; this.fil_ext_id = ext_id; this.fil_w = w; this.fil_h = h; this.fil_dir_url = dir_url; + } public int Fil_uid() {return fil_uid;} private int fil_uid; public byte[] Fil_name() {return fil_name;} private byte[] fil_name; public int Fil_ext_id() {return fil_ext_id;} private int fil_ext_id; @@ -37,15 +41,6 @@ public class Orig_fil_itm { this.fil_ext_id = ext_id; return this; } - public Orig_fil_itm Init_by_load(DataRdr rdr) { - fil_uid = rdr.ReadInt("fil_uid"); - fil_name = rdr.ReadBryByStr("fil_name"); - fil_ext_id = rdr.ReadInt("fil_ext_id"); - fil_w = rdr.ReadInt("fil_w"); - fil_h = rdr.ReadInt("fil_h"); - fil_dir_url = rdr.ReadBryByStr("fil_dir_url"); - return this; - } public Orig_fil_itm Init_by_size(int uid, int w, int h) {this.fil_uid = uid; this.fil_w = w; this.fil_h = h; return this;} public static final Orig_fil_itm Null = null; } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java index 75eb8e202..d6b7635b4 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java @@ -17,70 +17,62 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.dbs.*; -interface Orig_fil_tbl extends RlsAble { - void Ctor(Db_conn conn, boolean created); - Orig_fil_itm Select_itm(byte[] ttl); - void Insert(Orig_fil_itm fil_itm); -} -class Orig_fil_tbl_mem implements Orig_fil_tbl { - private Hash_adp_bry hash; - public void Ctor(Db_conn conn, boolean created) {hash = Hash_adp_bry.cs_();} // NOTE: cs_ b/c ttl-based - public Orig_fil_itm Select_itm(byte[] ttl) {return (Orig_fil_itm)hash.Get_by_bry(ttl);} - public void Insert(Orig_fil_itm fil_itm) {hash.Add(fil_itm.Fil_name(), fil_itm);} - public void Rls() {} -} -class Orig_fil_tbl_sql implements Orig_fil_tbl { - private Db_conn conn; - private Db_stmt stmt_select, stmt_insert; - public void Ctor(Db_conn conn, boolean created) { - this.conn = conn; - if (created) Create_table(conn); +public class Orig_fil_tbl { + private String tbl_name = "orig_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_uid, fld_name, fld_ext_id, fld_w, fld_h, fld_dir_url; + private Db_conn conn; private Db_stmt stmt_insert, stmt_select; + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + fld_prefix = "fil_"; + } + fld_uid = flds.Add_int(fld_prefix + "uid"); + fld_name = flds.Add_str(fld_prefix + "name", 1024); + fld_ext_id = flds.Add_int(fld_prefix + "ext_id"); + fld_w = flds.Add_int(fld_prefix + "w"); + fld_h = flds.Add_int(fld_prefix + "h"); + fld_dir_url = flds.Add_str(fld_prefix + "dir_url", 1024); // NOTE: don't put dir in separate table; note that entire root_dir_wkr is not built to scale due to need for recursively loading all files + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_name) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_select = null; } public Orig_fil_itm Select_itm(byte[] ttl) { - if (stmt_select == null) stmt_select = conn.New_stmt(Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(Db_crt_.eq_(Fld_fil_name, ""))); + if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_name)); Orig_fil_itm rv = Orig_fil_itm.Null; - DataRdr rdr = stmt_select.Clear().Val_bry(ttl).Exec_select(); - if (rdr.MoveNextPeer()) - rv = new Orig_fil_itm().Init_by_load(rdr); - rdr.Rls(); - return rv; + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select.Clear().Crt_bry_as_str(fld_name, ttl).Exec_select_as_rdr(); + if (rdr.Move_next()) + rv = Load_itm(rdr); + return rv; + } + finally {rdr.Rls();} + } + private Orig_fil_itm Load_itm(Db_rdr rdr) { + return new Orig_fil_itm + ( rdr.Read_int(fld_uid) + , rdr.Read_bry_by_str(fld_name) + , rdr.Read_int(fld_ext_id) + , rdr.Read_int(fld_w) + , rdr.Read_int(fld_h) + , rdr.Read_bry_by_str(fld_dir_url) + ); } - private Db_stmt Insert_stmt() {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_fil_uid, Fld_fil_name, Fld_fil_ext_id, Fld_fil_w, Fld_fil_h, Fld_fil_dir_url);} public void Insert(Orig_fil_itm fil_itm) { - if (stmt_insert == null) stmt_insert = Insert_stmt(); + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); stmt_insert.Clear() - .Val_int(fil_itm.Fil_uid()) - .Val_bry_as_str(fil_itm.Fil_name()) - .Val_int(fil_itm.Fil_ext_id()) - .Val_int(fil_itm.Fil_w()) - .Val_int(fil_itm.Fil_h()) - .Val_bry_as_str(fil_itm.Fil_dir_url()) + .Val_int(fld_uid, fil_itm.Fil_uid()) + .Val_bry_as_str(fld_name, fil_itm.Fil_name()) + .Val_int(fld_ext_id, fil_itm.Fil_ext_id()) + .Val_int(fld_w, fil_itm.Fil_w()) + .Val_int(fld_h, fil_itm.Fil_h()) + .Val_bry_as_str(fld_dir_url, fil_itm.Fil_dir_url()) .Exec_insert(); } - public void Rls() { - stmt_select.Rls(); - stmt_insert.Rls(); - } - private void Create_table(Db_conn p) { - Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(p, Idx_main); - } - private static final String Tbl_name = "orig_fil" - , Fld_fil_uid = "fil_uid", Fld_fil_name = "fil_name", Fld_fil_ext_id = "fil_ext_id" - , Fld_fil_w = "fil_w", Fld_fil_h = "fil_h" - , Fld_fil_dir_url = "fil_dir_url" - ; - private static final Db_idx_itm - Idx_main = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_fil__main ON orig_fil (fil_name);") - ; - static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS orig_fil" - , "( fil_uid integer NOT NULL PRIMARY KEY" - , ", fil_name varchar(1024) NOT NULL" - , ", fil_ext_id integer NOT NULL" - , ", fil_w integer NOT NULL" - , ", fil_h integer NOT NULL" - , ", fil_dir_url varchar(1024) NOT NULL" // NOTE: don't put dir in separate table; note that entire root_dir_wkr is not built to scale due to need for recursively loading all files - , ");" - ); + public void Rls() {} } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_bmp_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java similarity index 52% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_bmp_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java index dff15a4aa..45b3c670d 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_bmp_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java @@ -17,24 +17,17 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_bmp_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__bmp_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Make_orig() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.bmp", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.bmp", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.bmp").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init__orig_w_fsdb__commons_orig("A.bmp", 440, 400); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bmp").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.bmp/440px.png", "440,400"); - fxt.Test_regy_pass("A.bmp"); } @Test public void Make_thumb() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.bmp", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.bmp", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.bmp").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init__orig_w_fsdb__commons_orig("A.bmp", 440, 400); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.bmp").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.bmp/220px.png", "220,200"); - fxt.Test_regy_pass("A.bmp"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_flac_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java similarity index 51% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_flac_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java index 1782bf9dc..f4a00ec57 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_flac_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java @@ -17,24 +17,19 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_flac_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} - @Test public void Orig_page() { // .flac is on page [[File:A.flac]]; do not qry or get bin; (since file is not "viewable" immediately) - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.flac")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.flac")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.flac").Rslt_reg_missing_reg().Rslt_qry_noop_()); +public class Xof_file_ext__flac_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} + @Test public void Orig_page() { // .flac is on page [[File:A.flac]] + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.flac")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.flac")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Rslt_orig_missing().Rslt_fsdb_null()); // do not qry or get bin; (since file is not "viewable" immediately); DATE:2015-02-15 fxt.Test_fsys_exists_n("mem/root/common/orig/8/b/A.flac"); - fxt.Test_regy_pass("A.flac"); } @Test public void Orig_app() { // .flac is clicked; get file - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.flac")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.flac")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.flac").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.flac")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.flac")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); fxt.Test_fsys_exists_y("mem/root/common/orig/8/b/A.flac"); - fxt.Test_regy_pass("A.flac"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_oga_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java similarity index 55% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_oga_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java index 1cf160327..597666064 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_oga_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java @@ -17,24 +17,19 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_oga_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__oga_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Orig_page() { // .oga is on page [[File:A.oga]]; do not qry or get bin; (since file is not "viewable" immediately) - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.oga")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.oga")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.oga").Rslt_reg_missing_reg().Rslt_qry_noop_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.oga")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.oga")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Rslt_orig_missing().Rslt_fsdb_null()); fxt.Test_fsys_exists_n("mem/root/common/orig/4/f/A.oga"); - fxt.Test_regy_pass("A.oga"); } @Test public void Orig_app() { // .oga is clicked; get file - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.oga")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.oga")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.oga").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.oga")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.oga")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); fxt.Test_fsys_exists_y("mem/root/common/orig/4/f/A.oga"); - fxt.Test_regy_pass("A.oga"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogg_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java similarity index 50% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogg_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java index 2056fdff6..c7124d0b3 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogg_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java @@ -17,26 +17,21 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; import gplx.xowa.files.bins.*; -public class Xof_offline_ogg_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__ogg_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} // @Test public void Video() { // disabled; .ogg will never be video; DATE:2014-02-02 -// if (fxt.Db_skip()) return; -// fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.ogg", 440, 400)); -// fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.ogg", 440, 400)); // create a thumb at 440,400 (needed for preview of video) -// fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.ogg").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_n_()); +// fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogg", 440, 400)); +// fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogg", 440, 400)); // create a thumb at 440,400 (needed for preview of video) +// fxt.Exec_get(Xof_exec_arg.new_orig("A.ogg").Rslt_orig_missing().Rslt_fsdb_xowa().Rslt_conv_n()); // fxt.Test_fsys("mem/root/common/thumb/4/2/A.ogg/440px.jpg", "440,400"); // Xof_fsdb_itm itm = fxt.Test_regy_pass("A.ogg"); // fxt.Test_itm_ext(itm, Xof_ext_.Id_ogv);// chk that file is now ogv // } @Test public void Audio() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.ogg", 0, 0)); // audio has no size - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.ogg", 440, 400)); // create a thumb but it should never be used - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.ogg").Rslt_reg_missing_reg().Rslt_qry_noop_().Rslt_bin_(Xof_bin_wkr_.Tid_null).Rslt_cnv_n_()); - Xof_fsdb_itm itm = fxt.Test_regy_pass("A.ogg"); - fxt.Test_itm_ext(itm, Xof_ext_.Id_ogg);// chk that file is now oga + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogg", 0, 0)); // audio has no size + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogg", 440, 400)); // create a thumb but it should never be used + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogg").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_null().Rslt_conv_n()); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java new file mode 100644 index 000000000..b33edb64e --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java @@ -0,0 +1,36 @@ +/* +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +import org.junit.*; +public class Xof_file_ext__ogv_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} + @Test public void Copy_orig() { + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogv", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogv", 440, 400)); + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_n()); + fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px.jpg", "440,400"); + } + @Test public void Copy_orig_w_thumbtime() { + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogv", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogv", 440, 400, 10)); + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Lnki_time_(10).Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_n()); + fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px-10.jpg", "440,400"); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); + } +} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_pdf_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__pdf_tst.java similarity index 66% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_pdf_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__pdf_tst.java index 29256d1bb..8f5210882 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_pdf_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__pdf_tst.java @@ -17,15 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_pdf_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__pdf_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Copy_thumb() {// PURPOSE: download pdf thumb only; [[File:Physical world.pdf|thumb]] - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.pdf", 2200, 1700)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.pdf", 220, 170)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.pdf", 220)); + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.pdf", 2200, 1700)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.pdf", 220, 170)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.pdf", 220)); fxt.Test_fsys("mem/root/common/thumb/e/f/A.pdf/220px.jpg", "220,170"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java new file mode 100644 index 000000000..14aa7d16f --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java @@ -0,0 +1,63 @@ +/* +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +import org.junit.*; +public class Xof_file_ext__png_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} + @Test public void Copy_thumb() { + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png")); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); + } + @Test public void Copy_orig() { + fxt.Init__orig_w_fsdb__commons_orig("A.png", 440, 400); + fxt.Exec_get(Xof_exec_arg.new_orig("A.png").Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); + } + @Test public void Copy_orig_w_width() { // PURPOSE: if not thumb, but width is specified; do not download orig and convert; EX: [[File:The Earth seen from Apollo 17.jpg|250px]] + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png", 220, 200)); + fxt.Exec_get(Xof_exec_arg.new_("A.png", Xop_lnki_type.Id_null, 220, Xop_lnki_tkn.Height_null).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); + } + @Test public void Make_thumb() { + fxt.Init__orig_w_fsdb__commons_orig("A.png", 440, 400); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); + } + @Test public void Height_only() { // PURPOSE.fix: height only was still using old infer-size code; EX:w:[[File:Upper and Middle Manhattan.jpg|x120px]]; DATE:2012-12-27 + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 12591, 1847)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png", 887, 130)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/887px.png", "887,130"); + } + @Test public void Width_only_height_ignored() {// PURPOSE.fix: if height is not specified, do not recalc; needed when true scaled height is 150x151 but WM has 150x158; defect would discard 150x158; EX:[[File:Tokage_2011-07-15.jpg|150px]] simple.wikipedia.org/wiki/2011_Pacific_typhoon_season; DATE:2013-06-03 + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 4884, 4932)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png", 150, 150)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", 150, Xop_lnki_tkn.Height_null)); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/150px.png", "150,150"); + } + @Test public void Upright() { // PURPOSE.fix: upright not working; EX: w:Beethoven; [[File:Rudolf-habsburg-olmuetz.jpg|thumb|upright|]] + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 1378, 1829)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png", 170, 226)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", Xop_lnki_tkn.Width_null, Xop_lnki_tkn.Height_null).Lnki_upright_(Xof_img_size.Upright_default_marker)); + fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/170px.png", "170,226"); + } +} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_svg_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java similarity index 51% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_svg_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java index ef9cdff58..31a36e72a 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_svg_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java @@ -17,30 +17,24 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_svg_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__svg_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Make_orig() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.svg", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.svg", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.svg").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.svg", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.svg", 440, 400)); + fxt.Exec_get(Xof_exec_arg.new_orig("A.svg").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/440px.png", "440,400"); - fxt.Test_regy_pass("A.svg"); } @Test public void Make_thumb() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.svg", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.svg", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.svg").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.svg", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.svg", 440, 400)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/220px.png", "220,200"); - fxt.Test_regy_pass("A.svg"); } @Test public void Thumb_can_be_bigger_than_orig() {// PURPOSE: svg thumbs allowed to exceed orig in size; EX: w:Portal:Music; [[File:Treble a.svg|left|160px]] - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa__bin_fsdb__commons_orig("A.svg", 110, 100); // create orig of 110,100 - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.svg", 330).Rslt_bin_fsdb_()); // get 330 + fxt.Init__orig_w_fsdb__commons_orig("A.svg", 110, 100); // create orig of 110,100 + fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg", 330).Rslt_fsdb_xowa()); // get 330 fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/330px.png", "330,300"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_unknown_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java similarity index 55% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_unknown_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java index 17435cf57..2a981d7d9 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_unknown_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java @@ -17,24 +17,19 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_unknown_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__unknown_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Orig_page() { // .bin is on page [[File:A.bin]]; do not qry or get bin; (since file is not "viewable" immediately); DATE:2014-08-17 - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.bin")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.bin")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.bin").Rslt_reg_missing_reg().Rslt_qry_noop_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.bin")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.bin")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Rslt_orig_missing().Rslt_fsdb_null()); fxt.Test_fsys_exists_n("mem/root/common/orig/f/b/A.bin"); - fxt.Test_regy_pass("A.bin"); } @Test public void Orig_app() { // .bin is clicked; get file - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.bin")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.bin")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.bin").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.bin")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.bin")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); fxt.Test_fsys_exists_y("mem/root/common/orig/f/b/A.bin"); - fxt.Test_regy_pass("A.bin"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_wav_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java similarity index 54% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_wav_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java index 8a6ec4a3d..4032eaccb 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_wav_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java @@ -17,24 +17,20 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; import gplx.xowa.files.bins.*; -public class Xof_offline_wav_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +import gplx.xowa.files.bins.*; +public class Xof_file_ext__wav_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Orig_page() { // .wav is on page [[File:A.wav]]; do not qry or get bin; (since file is not "viewable" immediately); DATE:2014-08-17 - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.wav")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.wav")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.wav").Rslt_reg_missing_reg().Rslt_qry_noop_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.wav")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.wav")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Rslt_orig_missing().Rslt_fsdb_null()); fxt.Test_fsys_exists_n("mem/root/common/orig/c/3/A.wav"); - fxt.Test_regy_pass("A.wav"); } @Test public void Orig_app() { // .wav is clicked; get file - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_file("A.wav")); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_file("A.wav")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.wav").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.wav")); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.wav")); + fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); fxt.Test_fsys_exists_y("mem/root/common/orig/c/3/A.wav"); - fxt.Test_regy_pass("A.wav"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_xcf_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java similarity index 52% rename from 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_xcf_tst.java rename to 400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java index c9d1ba79c..61ed996b1 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_xcf_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java @@ -17,24 +17,19 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_xcf_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} +public class Xof_file_ext__xcf_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} @Test public void Make_orig() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.xcf", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.xcf", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.xcf").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.xcf", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.xcf", 440, 400)); + fxt.Exec_get(Xof_exec_arg.new_orig("A.xcf").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/4/4/A.xcf/440px.png", "440,400"); - fxt.Test_regy_pass("A.xcf"); } @Test public void Make_thumb() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.xcf", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.xcf", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.xcf").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.xcf", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.xcf", 440, 400)); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.xcf").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); fxt.Test_fsys("mem/root/common/thumb/4/4/A.xcf/220px.png", "220,200"); - fxt.Test_regy_pass("A.xcf"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java index afe3cc9ff..99eb1ab11 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java @@ -16,201 +16,68 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.wiki_orig.*; import gplx.xowa.files.qrys.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; +import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; +import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; +import gplx.fsdb.data.*; class Xof_file_fxt { - private Fsdb_xtn_thm_itm tmp_thm = Fsdb_xtn_thm_itm.new_(); private Fsdb_xtn_img_itm tmp_img = new Fsdb_xtn_img_itm(); - private Xof_fsdb_mgr fsdb_mgr; private Xof_qry_wrk_mock qry_wkr_mock = new Xof_qry_wrk_mock(); - public boolean Db_skip() {return Xoa_test_.Db_skip();} - public void Reset() {this.Reset(Bool_.__byte);} - public void Reset(byte mem_tid) { - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); - Xof_repo_fxt.Repos_init(app.File_mgr(), true, wiki); - fsdb_mgr = fsdb_mgr_new_(mem_tid, wiki); - qry_wkr_mock.Clear(); - fsdb_mgr.Init_by_wiki(wiki, Xoa_test_.Url_file_enwiki(), Io_url_.mem_dir_("mem/root/"), wiki.File_mgr().Repo_mgr()); - fsdb_mgr.Qry_mgr().Add(qry_wkr_mock); - fsdb_mgr.Bin_mgr().Add(fsdb_mgr.Bin_wkr_fsdb()); - fsdb_mgr.Bin_mgr().Resizer_(Xof_img_wkr_resize_img_mok._); - fsdb_mgr.Bin_wkr_fsdb().Bin_wkr_resize_(true); - } - private static Xof_fsdb_mgr fsdb_mgr_new_(byte mem_tid, Xow_wiki wiki) { - boolean mem = false; - switch (mem_tid) { - case Bool_.Y_byte: mem = true; break; - case Bool_.N_byte: mem = false; break; - case Bool_.__byte: mem = Xoa_test_.Fsdb_is_mem; break; - } - Xof_fsdb_mgr rv = mem ? (Xof_fsdb_mgr)new Xof_fsdb_mgr_mem() : (Xof_fsdb_mgr)new Xof_fsdb_mgr_sql(wiki); - if (!mem) Io_mgr._.DeleteDirDeep(Xoa_test_.Url_file_enwiki()); - return rv; - } - public void Init_qry_xowa__bin_fsdb__commons_orig(String ttl, int w, int h) { - this.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons(Bool_.N, ttl, w, h)); - this.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons(ttl, w, h)); - } - public void Init_qry_xowa__bin_fsdb__en_wiki_orig(String ttl, int w, int h) { - this.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_en_wiki(Bool_.N, ttl, w, h)); - this.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki(ttl, w, h)); - } - public void Init_bin_fsdb(Xof_fsdb_arg_init_bin arg) { - if (arg.Is_thumb()) - fsdb_mgr.Thm_insert(tmp_thm, arg.Wiki(), arg.Ttl(), arg.Ext_id(), arg.W(), arg.H(), arg.Thumbtime(), arg.Page(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin())); - else - fsdb_mgr.Img_insert(tmp_img, arg.Wiki(), arg.Ttl(), arg.Ext_id(), arg.W(), arg.H(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin())); - } - public void Init_qry_xowa(Xof_fsdb_arg_init_qry arg) { - qry_wkr_mock.Add_wiki_size(arg.Ttl(), arg.Wiki(), arg.W(), arg.H()); - if (arg.Redirect_trg() != null) - qry_wkr_mock.Add_redirect(arg.Ttl(), arg.Redirect_trg()); - } - public void Exec_get(Xof_fsdb_arg_exec_get arg) { - Xof_fsdb_itm itm = itm_(String_.new_utf8_(arg.Ttl()), arg.Lnki_type(), arg.Lnki_w(), arg.Lnki_h(), arg.Lnki_upright(), arg.Lnki_thumbtime()); - ListAdp itms_list = ListAdp_.new_(); - itms_list.Add(itm); - fsdb_mgr.Fsdb_search_by_list(Xoa_page.Empty, arg.Exec_tid(), itms_list); - if (arg.Rslt_reg() != Xof_wiki_orig_wkr_.Tid_null) Tfds.Eq(arg.Rslt_reg(), itm.Rslt_reg(), "rslt_reg"); - if (arg.Rslt_qry() != Xof_qry_wkr_.Tid_null) Tfds.Eq(arg.Rslt_qry(), itm.Rslt_qry(), "rslt_qry"); - if (arg.Rslt_bin() != Xof_bin_wkr_.Tid_null) Tfds.Eq(arg.Rslt_bin(), itm.Rslt_bin(), "rslt_bin"); - if (arg.Rslt_cnv() != Xof_cnv_wkr_.Tid_null) Tfds.Eq(arg.Rslt_cnv(), itm.Rslt_cnv(), "rslt_cnv"); - } - public void Test_fsys(String url, String expd_bin) {Tfds.Eq(expd_bin, Io_mgr._.LoadFilStr(url));} - public void Test_fsys_exists_y(String url) {Test_fsys_exists(url, Bool_.Y);} - public void Test_fsys_exists_n(String url) {Test_fsys_exists(url, Bool_.N);} - public void Test_fsys_exists(String url, boolean expd) {Tfds.Eq(expd, Io_mgr._.ExistsFil(Io_url_.new_any_(url)));} - public void Test_regy(String ttl, Xof_fsdb_arg_reg_get expd) { - Xof_fsdb_itm itm = Exec_reg_select_itm(ttl); - if (expd.Orig_w() != Xop_lnki_tkn.Width_null) Tfds.Eq(expd.Orig_w(), itm.Orig_w()); - if (expd.Orig_h() != Xop_lnki_tkn.Height_null) Tfds.Eq(expd.Orig_h(), itm.Orig_h()); - if (expd.Redirect() != null) Tfds.Eq_bry(expd.Redirect(), itm.Orig_redirect()); - if (expd.Repo_id() != Xof_repo_itm.Repo_null) Tfds.Eq(expd.Repo_id(), itm.Orig_repo()); - } - public Xof_fsdb_itm Test_regy_pass(String key) { - Xof_fsdb_itm itm = Exec_reg_select_itm(key) ; - Tfds.Eq_false(itm == null); - return itm; - } - public void Test_regy_missing_qry(String key) {Tfds.Eq(Xof_wiki_orig_wkr_.Tid_missing_qry, Exec_reg_select_itm(key).Rslt_reg());} - public void Test_regy_missing_bin(String key) {Tfds.Eq(Xof_wiki_orig_wkr_.Tid_missing_bin, Exec_reg_select_itm(key).Rslt_reg());} - private Xof_fsdb_itm itm_(String ttl_str, byte type, int w, int h, double upright, int thumbtime) { - byte[] ttl_bry = Bry_.new_ascii_(ttl_str); - byte[] md5 = Xof_xfer_itm_.Md5_(ttl_bry); - Xof_ext ext = Xof_ext_.new_by_ttl_(ttl_bry); - return new Xof_fsdb_itm().Init_by_lnki(ttl_bry, ext, md5, type, w, h, Xof_patch_upright_tid_.Tid_all, upright, thumbtime, Xof_doc_page.Null); - } - public void Test_itm_ext(Xof_fsdb_itm itm, int expd_ext_id) {Tfds.Eq(expd_ext_id, itm.Lnki_ext().Id());} + private Xoae_app app; private Xof_fsdb_mgr fsdb_mgr; + private final Fsd_thm_itm tmp_thm = Fsd_thm_itm.new_(); private final Fsd_img_itm tmp_img = new Fsd_img_itm(); public void Rls() {fsdb_mgr.Rls();} - private Xof_fsdb_itm Exec_reg_select_itm(String ttl) { - Xof_fsdb_itm itm = itm_(ttl, Xop_lnki_type.Id_null, Xop_lnki_tkn.Width_null, Xop_lnki_tkn.Height_null, Xop_lnki_tkn.Upright_null, Xof_doc_thumb.Null_as_int); - ListAdp list = ListAdp_.new_(); - list.Add(itm); - fsdb_mgr.Fsdb_search_by_list(Xoa_page.Empty, Xof_exec_tid.Tid_wiki_page, list); - return itm; + public void Reset() { + Io_mgr._.InitEngine_mem(); // NOTE: files are downloaded to mem_engine, regardless of Db being mem or sqlite; always reset + Io_url fsys_db = Xoa_test_.Url_file_enwiki(); + Xoa_test_.Db_init(fsys_db); + app = Xoa_app_fxt.app_(Op_sys.Cur().Os_name(), fsys_db); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xof_repo_fxt.Repos_init(app.File_mgr(), true, wiki); + fsdb_mgr = new Xof_fsdb_mgr__sql(); // NOTE: must new Xof_fsdb_mgr__sql b/c it keeps a local init; + fsdb_mgr.Init_by_wiki(wiki); + fsdb_mgr.Bin_mgr().Wkrs__clear(); + Xof_bin_wkr__fsdb_sql bin_wkr_fsdb = (Xof_bin_wkr__fsdb_sql)fsdb_mgr.Bin_mgr().Wkrs__get_or_new(Xof_bin_wkr_.Key_fsdb_wiki); + fsdb_mgr.Bin_mgr().Resizer_(Xof_img_wkr_resize_img_mok._); + bin_wkr_fsdb.Resize_allowed_(true); } - public static String file_img_(int w, int h) {return String_.Format("{0},{1}", w, h);} - public static String file_svg_(int w, int h) {return String_.Format("", w, h);} -} -class Xof_fsdb_arg_init_bin { - public byte[] Wiki() {return wiki;} public Xof_fsdb_arg_init_bin Wiki_(byte[] v) {wiki = v; return this;} private byte[] wiki; - public byte[] Ttl() {return ttl;} public Xof_fsdb_arg_init_bin Ttl_(byte[] v) {ttl = v; return this;} private byte[] ttl; - public int Ext_id() {return ext_id;} public Xof_fsdb_arg_init_bin Ext_id_(int v) {ext_id = v; return this;} private int ext_id; - public int W() {return w;} public Xof_fsdb_arg_init_bin W_(int v) {w = v; return this;} private int w = W_default; - public double Thumbtime() {return thumbtime;} public Xof_fsdb_arg_init_bin Thumbtime_(double v) {thumbtime = v; return this;} private double thumbtime = Xof_doc_thumb.Null; - public int Page() {return page;} public Xof_fsdb_arg_init_bin Page_(int v) {page = v; return this;} private int page = Xof_doc_page.Null; - public int H() {return h;} public Xof_fsdb_arg_init_bin H_(int v) {h = v; return this;} private int h = H_default; - public DateAdp Modified() {return modified;} public Xof_fsdb_arg_init_bin Modified_(DateAdp v) {modified = v; return this;} private DateAdp modified = Fsdb_xtn_thm_tbl.Modified_null; - public String Hash() {return hash;} public Xof_fsdb_arg_init_bin Hash_(String v) {hash = v; return this;} private String hash = Fsdb_xtn_thm_tbl.Hash_null; - public byte[] Bin() {return bin;} public Xof_fsdb_arg_init_bin Bin_(byte[] v) {bin = v; return this;} private byte[] bin; - public boolean Is_thumb() {return is_thumb;} public Xof_fsdb_arg_init_bin Is_thumb_(boolean v) {is_thumb = v; return this;} private boolean is_thumb; - public Xof_fsdb_arg_init_bin Ttl_(String v) {ttl = Bry_.new_utf8_(v); return this;} - public Xof_fsdb_arg_init_bin Ext_id_() {ext_id = Xof_ext_.new_by_ttl_(ttl).Id(); return this;} - public Xof_fsdb_arg_init_bin Bin_(String v) {return Bin_(Bry_.new_ascii_(v));} - public Xof_fsdb_arg_init_bin Bin_by_size_() { - String bin_str = ext_id == Xof_ext_.Id_svg ? Xof_file_fxt.file_svg_(w, h) : Xof_file_fxt.file_img_(w, h); - return Bin_(Bry_.new_ascii_(bin_str)); + public void Init__orig_w_fsdb__commons_orig(String ttl, int w, int h) { + this.Init_fsdb_db(Xof_fsdb_arg.new_comm(Bool_.N, ttl, w, h)); + this.Init_orig_db(Xof_orig_arg.new_comm(ttl, w, h)); } - public Xof_fsdb_arg_init_bin Init_commons_file(String ttl) {return Init(Xow_wiki_.Domain_commons_bry, Bool_.N, ttl, Xof_img_size.Null, Xof_img_size.Null, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_commons_thumb(String ttl) {return Init(Xow_wiki_.Domain_commons_bry, Bool_.Y, ttl, W_default, H_default, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_commons_thumb(String ttl, int w, int h) {return Init(Xow_wiki_.Domain_commons_bry, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_commons_thumb(String ttl, int w, int h, int s){return Init(Xow_wiki_.Domain_commons_bry, Bool_.Y, ttl, w, h, s);} - public Xof_fsdb_arg_init_bin Init_commons_orig(String ttl, int w, int h) {return Init(Xow_wiki_.Domain_commons_bry, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_commons(boolean thumb, String ttl, int w, int h) {return Init(Xow_wiki_.Domain_commons_bry, thumb, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_en_wiki_thumb(String ttl) {return Init(Xow_wiki_.Domain_en_wiki_bry, Bool_.Y, ttl, W_default, H_default, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_en_wiki_thumb(String ttl, int w, int h) {return Init(Xow_wiki_.Domain_en_wiki_bry, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_en_wiki_thumb(String ttl, int w, int h, int s){return Init(Xow_wiki_.Domain_en_wiki_bry, Bool_.Y, ttl, w, h, s);} - public Xof_fsdb_arg_init_bin Init_en_wiki_orig(String ttl, int w, int h) {return Init(Xow_wiki_.Domain_en_wiki_bry, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init_en_wiki(boolean thumb, String ttl, int w, int h) {return Init(Xow_wiki_.Domain_en_wiki_bry, thumb, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public Xof_fsdb_arg_init_bin Init(byte[] wiki, boolean thumb, String ttl, int w, int h, int thumbtime) { - return Wiki_(wiki).Is_thumb_(thumb).Ttl_(ttl).W_(w).H_(h).Thumbtime_(thumbtime).Ext_id_().Bin_by_size_(); + public void Init_orig_db(Xof_orig_arg arg) { + fsdb_mgr.Orig_mgr().Insert(arg.Repo(), arg.Page(), Xof_ext_.new_by_ttl_(arg.Page()).Id(), arg.W(), arg.H(), arg.Redirect(), Xof_orig_wkr_.Status_found); } - public static final int W_default = 220, H_default = 200; - public static Xof_fsdb_arg_init_bin new_() {return new Xof_fsdb_arg_init_bin();} Xof_fsdb_arg_init_bin() {} -} -class Xof_fsdb_arg_init_qry { - public byte[] Wiki() {return wiki;} private byte[] wiki; - public byte[] Ttl() {return ttl;} private byte[] ttl; - public byte[] Redirect_trg() {return redirect_trg;} private byte[] redirect_trg; - public int W() {return w;} private int w = W_default; - public int H() {return h;} private int h = H_default; - public Xof_fsdb_arg_init_qry Init_commons_file(String ttl) {this.wiki = Xow_wiki_.Domain_commons_bry; this.ttl = Bry_.new_ascii_(ttl); this.w = Xof_img_size.Size_null; this.h = Xof_img_size.Size_null; return this;} - public Xof_fsdb_arg_init_qry Init_commons(String ttl, int w, int h) {this.wiki = Xow_wiki_.Domain_commons_bry; this.ttl = Bry_.new_ascii_(ttl); this.w = w; this.h = h; return this;} - public Xof_fsdb_arg_init_qry Init_en_wiki(String ttl, int w, int h) {this.wiki = Xow_wiki_.Domain_en_wiki_bry; this.ttl = Bry_.new_ascii_(ttl); this.w = w; this.h = h; return this;} - public Xof_fsdb_arg_init_qry Init_en_wiki_redirect(String src, String trg) {this.wiki = Xow_wiki_.Domain_en_wiki_bry; this.ttl = Bry_.new_ascii_(src); this.redirect_trg = Bry_.new_ascii_(trg); return this;} - public Xof_fsdb_arg_init_qry Init_commons_redirect(String src, String trg) {this.wiki = Xow_wiki_.Domain_commons_bry; this.ttl = Bry_.new_ascii_(src); this.redirect_trg = Bry_.new_ascii_(trg); return this;} - public static Xof_fsdb_arg_init_qry new_() {return new Xof_fsdb_arg_init_qry();} Xof_fsdb_arg_init_qry() {} - public static final int W_default = 440, H_default = 400; -} -class Xof_fsdb_arg_exec_get { - public byte[] Ttl() {return ttl;} public Xof_fsdb_arg_exec_get Ttl_(byte[] v) {ttl = v; return this;} private byte[] ttl; - public byte Exec_tid() {return exec_tid;} public Xof_fsdb_arg_exec_get Exec_tid_(byte v) {exec_tid = v; return this;} private byte exec_tid = Xof_exec_tid.Tid_wiki_page; - public byte Lnki_type() {return lnki_type;} public Xof_fsdb_arg_exec_get Lnki_type_(byte v) {lnki_type = v; return this;} private byte lnki_type = Xop_lnki_type.Id_thumb; - public int Lnki_w() {return lnki_w;} public Xof_fsdb_arg_exec_get Lnki_w_(int v) {lnki_w = v; return this;} private int lnki_w; - public int Lnki_h() {return lnki_h;} public Xof_fsdb_arg_exec_get Lnki_h_(int v) {lnki_h = v; return this;} private int lnki_h = Xop_lnki_tkn.Height_null; - public double Lnki_upright() {return lnki_upright;} public Xof_fsdb_arg_exec_get Lnki_upright_(double v) {lnki_upright = v; return this;} private double lnki_upright = Xop_lnki_tkn.Upright_null; - public int Lnki_thumbtime() {return lnki_thumbtime;} public Xof_fsdb_arg_exec_get Lnki_thumbtime_(int v) {lnki_thumbtime = v; return this;} private int lnki_thumbtime = Xof_doc_thumb.Null_as_int; - public int Lnki_page() {return lnki_page;} public Xof_fsdb_arg_exec_get Lnki_page_(int v) {lnki_page = v; return this;} private int lnki_page = Xof_doc_page.Null; - public byte Rslt_reg() {return rslt_reg;} public Xof_fsdb_arg_exec_get Rslt_reg_(byte v) {rslt_reg = v; return this;} private byte rslt_reg = Xof_wiki_orig_wkr_.Tid_null; - public byte Rslt_qry() {return rslt_qry;} public Xof_fsdb_arg_exec_get Rslt_qry_(byte v) {rslt_qry = v; return this;} private byte rslt_qry = Xof_qry_wkr_.Tid_null; - public byte Rslt_bin() {return rslt_bin;} public Xof_fsdb_arg_exec_get Rslt_bin_(byte v) {rslt_bin = v; return this;} private byte rslt_bin = Xof_bin_wkr_.Tid_null; - public byte Rslt_cnv() {return rslt_cnv;} public Xof_fsdb_arg_exec_get Rslt_cnv_(byte v) {rslt_cnv = v; return this;} private byte rslt_cnv = Xof_cnv_wkr_.Tid_null; - public boolean Lnki_type_is_thumb() {return Xop_lnki_type.Id_defaults_to_thumb(lnki_type);} - public Xof_fsdb_arg_exec_get Init_thumb(String ttl) {return Init(ttl, Xop_lnki_type.Id_thumb, 220, Xop_lnki_tkn.Height_null);} - public Xof_fsdb_arg_exec_get Init_thumb(String ttl, int w) {return Init(ttl, Xop_lnki_type.Id_thumb, w, Xop_lnki_tkn.Height_null);} - public Xof_fsdb_arg_exec_get Init_thumb(String ttl, int w, int h) {return Init(ttl, Xop_lnki_type.Id_thumb, w, h);} - public Xof_fsdb_arg_exec_get Init_orig(String ttl) {return Init(ttl, Xop_lnki_type.Id_null, Xop_lnki_tkn.Width_null, Xop_lnki_tkn.Height_null);} - public Xof_fsdb_arg_exec_get Init(String ttl, byte type, int w, int h) { - this.ttl = Bry_.new_utf8_(ttl); - this.lnki_type = type; - this.lnki_w = w; - this.lnki_h = h; - return this; + public void Init_fsdb_db(Xof_fsdb_arg arg) { + if (arg.Is_thumb()) + fsdb_mgr.Mnt_mgr().Thm_insert(tmp_thm, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Time(), arg.Page(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin())); + else + fsdb_mgr.Mnt_mgr().Img_insert(tmp_img, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin())); } - public Xof_fsdb_arg_exec_get Rslt_reg_noop() {rslt_reg = Xof_wiki_orig_wkr_.Tid_noop; return this;} - public Xof_fsdb_arg_exec_get Rslt_reg_missing_reg() {rslt_reg = Xof_wiki_orig_wkr_.Tid_missing_reg; return this;} - public Xof_fsdb_arg_exec_get Rslt_reg_missing_qry() {rslt_reg = Xof_wiki_orig_wkr_.Tid_missing_qry; return this;} - public Xof_fsdb_arg_exec_get Rslt_reg_missing_bin() {rslt_reg = Xof_wiki_orig_wkr_.Tid_missing_bin; return this;} - public Xof_fsdb_arg_exec_get Rslt_reg_found_orig() {rslt_reg = Xof_wiki_orig_wkr_.Tid_found_orig; return this;} - public Xof_fsdb_arg_exec_get Rslt_qry_mock_() {rslt_qry = Xof_qry_wkr_.Tid_mock; return this;} - public Xof_fsdb_arg_exec_get Rslt_qry_noop_() {rslt_qry = Xof_qry_wkr_.Tid_noop; return this;} - public Xof_fsdb_arg_exec_get Rslt_qry_unavailable_() {rslt_qry = Xof_qry_wkr_.Tid_missing; return this;} - public Xof_fsdb_arg_exec_get Rslt_bin_fsdb_() {rslt_bin = Xof_bin_wkr_.Tid_fsdb_wiki; return this;} - public Xof_fsdb_arg_exec_get Rslt_bin_not_found_() {rslt_bin = Xof_bin_wkr_.Tid_not_found; return this;} - public Xof_fsdb_arg_exec_get Rslt_bin_noop_() {rslt_bin = Xof_bin_wkr_.Tid_noop; return this;} - public Xof_fsdb_arg_exec_get Rslt_cnv_y_() {rslt_cnv = Xof_cnv_wkr_.Tid_y; return this;} - public Xof_fsdb_arg_exec_get Rslt_cnv_n_() {rslt_cnv = Xof_cnv_wkr_.Tid_n; return this;} - public static Xof_fsdb_arg_exec_get new_() {return new Xof_fsdb_arg_exec_get();} Xof_fsdb_arg_exec_get() {} + public void Exec_get(Xof_exec_arg arg) { + byte[] ttl = arg.Ttl(); + byte[] md5 = Xof_xfer_itm_.Md5_(ttl); + Xof_ext ext = Xof_ext_.new_by_ttl_(ttl); + Xof_fsdb_itm itm = new Xof_fsdb_itm(); + itm.Ctor_by_lnki(ttl, ext, md5, arg.Lnki_type(), arg.Lnki_w(), arg.Lnki_h(), Xof_patch_upright_tid_.Tid_all, arg.Lnki_upright(), arg.Lnki_time(), Xof_doc_page.Null); + ListAdp itms_list = ListAdp_.new_(); itms_list.Add(itm); + fsdb_mgr.Fsdb_search_by_list(arg.Exec_tid(), itms_list, Xoae_page.Empty); + if (arg.Rslt_orig() != Xof_orig_wkr_.Status_null) Tfds.Eq(arg.Rslt_orig(), itm.Orig_status(), "rslt_orig"); + if (arg.Rslt_fsdb() != Xof_bin_wkr_.Tid_null) Tfds.Eq(arg.Rslt_fsdb(), itm.Rslt_bin(), "rslt_fsdb"); + if (arg.Rslt_conv() != Xof_cnv_wkr_.Tid_null) Tfds.Eq(arg.Rslt_conv(), itm.Rslt_cnv(), "rslt_conv"); + } + public void Test_fsys_exists_y(String url) {Test_fsys_exists(url, Bool_.Y);} + public void Test_fsys_exists_n(String url) {Test_fsys_exists(url, Bool_.N);} + public void Test_fsys_exists(String url, boolean expd) {Tfds.Eq(expd, Io_mgr._.ExistsFil(Io_url_.new_any_(url)));} + public void Test_fsys(String url, String expd_bin) {Tfds.Eq(expd_bin, Io_mgr._.LoadFilStr(url));} } class Xof_repo_fxt { - public static void Repos_init(Xof_file_mgr file_mgr, boolean src_repo_is_wmf, Xow_wiki wiki) { + public static void Repos_init(Xof_file_mgr file_mgr, boolean src_repo_is_wmf, Xowe_wiki wiki) { byte[] src_commons = Bry_.new_ascii_("src_commons"); byte[] src_en_wiki = Bry_.new_ascii_("src_en_wiki"); byte[] trg_commons = Bry_.new_ascii_("trg_commons"); byte[] trg_en_wiki = Bry_.new_ascii_("trg_en_wiki"); - Ini_repo_add(file_mgr, src_commons, "mem/src/commons.wikimedia.org/", Xow_wiki_.Domain_commons_str, false); - Ini_repo_add(file_mgr, src_en_wiki, "mem/src/en.wikipedia.org/" , Xow_wiki_.Domain_enwiki_str, false); - Ini_repo_add(file_mgr, trg_commons, "mem/root/common/", Xow_wiki_.Domain_commons_str, true).Primary_(true); - Ini_repo_add(file_mgr, trg_en_wiki, "mem/root/enwiki/", Xow_wiki_.Domain_enwiki_str, true).Primary_(true); - Xow_repo_mgr wiki_repo_mgr = wiki.File_mgr().Repo_mgr(); + Ini_repo_add(file_mgr, src_commons, "mem/src/commons.wikimedia.org/", Xow_domain_.Domain_str_commons, false); + Ini_repo_add(file_mgr, src_en_wiki, "mem/src/en.wikipedia.org/" , Xow_domain_.Domain_str_enwiki, false); + Ini_repo_add(file_mgr, trg_commons, "mem/root/common/", Xow_domain_.Domain_str_commons, true).Primary_(true); + Ini_repo_add(file_mgr, trg_en_wiki, "mem/root/enwiki/", Xow_domain_.Domain_str_enwiki, true).Primary_(true); + Xowe_repo_mgr wiki_repo_mgr = wiki.File_mgr().Repo_mgr(); Xof_repo_pair pair = null; pair = wiki_repo_mgr.Add_repo(src_commons, trg_commons); pair.Src().Fsys_is_wnt_(true).Wmf_fsys_(src_repo_is_wmf).Tarball_(!src_repo_is_wmf); @@ -221,23 +88,92 @@ class Xof_repo_fxt { pair.Trg().Fsys_is_wnt_(true); } private static Xof_repo_itm Ini_repo_add(Xof_file_mgr file_mgr, byte[] key, String root, String wiki, boolean trg) { - return file_mgr.Repo_mgr().Set(String_.new_utf8_(key), root, wiki).Ext_rules_(Xoft_rule_grp.Grp_app_default).Dir_depth_(2); + return file_mgr.Repo_mgr().Set(String_.new_utf8_(key), root, wiki).Ext_rules_(Xof_rule_grp.Grp_app_default).Dir_depth_(2); } } -class Xof_fsdb_arg_reg_get { - public byte[] Ttl() {return ttl;} public Xof_fsdb_arg_reg_get Ttl_(byte[] v) {ttl = v; return this;} private byte[] ttl; - public byte[] Redirect() {return redirect;} public Xof_fsdb_arg_reg_get Redirect_(byte[] v) {redirect = v; return this;} private byte[] redirect = null; - public byte Repo_id() {return repo_id;} public Xof_fsdb_arg_reg_get Repo_id_(byte v) {repo_id = v; return this;} private byte repo_id = Xof_repo_itm.Repo_null; - public int Orig_w() {return orig_w;} public Xof_fsdb_arg_reg_get Orig_w_(int v) {orig_w = v; return this;} private int orig_w = Xop_lnki_tkn.Width_null; - public int Orig_h() {return orig_h;} public Xof_fsdb_arg_reg_get Orig_h_(int v) {orig_h = v; return this;} private int orig_h = Xop_lnki_tkn.Height_null; - public Xof_fsdb_arg_reg_get Orig_size_(int w, int h) {orig_w = w; orig_h = h; return this;} - public Xof_fsdb_arg_reg_get Init_commons(int w, int h) {return Init(Xof_repo_itm.Repo_remote, w, h, String_.Empty);} - public Xof_fsdb_arg_reg_get Init_commons(int w, int h, String redirect) {return Init(Xof_repo_itm.Repo_remote, w, h, redirect);} - public Xof_fsdb_arg_reg_get Init_en_wiki(int w, int h) {return Init(Xof_repo_itm.Repo_local, w, h, String_.Empty);} - public Xof_fsdb_arg_reg_get Init_en_wiki(int w, int h, String redirect) {return Init(Xof_repo_itm.Repo_local, w, h, redirect);} - public Xof_fsdb_arg_reg_get Init(byte repo_id, int w, int h, String redirect) { - this.repo_id = repo_id; this.orig_w = w; this.orig_h = h; this.redirect = Bry_.new_utf8_(redirect); - return this; +class Xof_orig_arg { + Xof_orig_arg(byte repo, byte[] page, int w, int h, byte[] redirect) {this.repo = repo; this.page = page; this.w = w; this.h = h; this.redirect = redirect;} + public byte Repo() {return repo;} private final byte repo; + public byte[] Page() {return page;} private final byte[] page; + public int W() {return w;} private final int w; + public int H() {return h;} private final int h; + public byte[] Redirect() {return redirect;} private final byte[] redirect; + public static Xof_orig_arg new_comm_file(String page) {return new_(Bool_.Y, page, Xof_img_size.Size_null, Xof_img_size.Size_null);} + public static Xof_orig_arg new_comm(String page, int w, int h) {return new_(Bool_.Y, page, w, h);} + public static Xof_orig_arg new_wiki(String page, int w, int h) {return new_(Bool_.N, page, w, h);} + public static Xof_orig_arg new_wiki_redirect(String src, String trg) {return new_(Bool_.N, src, 440, 400, trg);} + public static Xof_orig_arg new_comm_redirect(String src, String trg) {return new_(Bool_.Y, src, 440, 400, trg);} + private static Xof_orig_arg new_(boolean repo_is_commons, String page, int w, int h) {return new_(repo_is_commons, page, w, h, null);} + public static Xof_orig_arg new_(boolean repo_is_commons, String page, int w, int h, String redirect_str) { + byte repo = repo_is_commons ? Xof_repo_itm.Repo_remote : Xof_repo_itm.Repo_local; + byte[] redirect = redirect_str == null ? Bry_.Empty : Bry_.new_utf8_(redirect_str); + return new Xof_orig_arg(repo, Bry_.new_utf8_(page), w, h, redirect); + } +} +class Xof_fsdb_arg { + Xof_fsdb_arg(byte[] wiki, byte[] ttl, boolean is_thumb, int ext, int w, int h, int time, byte[] bin) { + this.wiki = wiki; this.ttl = ttl; this.is_thumb = is_thumb; this.w = w; this.h = h; this.time = time; this.ext = ext; this.bin = bin; + } + public byte[] Wiki() {return wiki;} private final byte[] wiki; + public byte[] Ttl() {return ttl;} private final byte[] ttl; + public int Ext() {return ext;} private final int ext; + public boolean Is_thumb() {return is_thumb;} private final boolean is_thumb; + public int W() {return w;} private final int w; + public int H() {return h;} private final int h; + public double Time() {return time;} private final double time; + public int Page() {return page;} private final int page = Xof_doc_page.Null; + public byte[] Bin() {return bin;} private final byte[] bin; + public DateAdp Modified() {return modified;} private final DateAdp modified = Fsd_thm_tbl.Modified_null; + public String Hash() {return hash;} private final String hash = Fsd_thm_tbl.Hash_null; + public static Xof_fsdb_arg new_comm_file(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, Xof_img_size.Null, Xof_img_size.Null, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm_thumb(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, W_default, H_default, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm_thumb(String ttl, int w, int h, int s) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, w, h, s);} + public static Xof_fsdb_arg new_comm_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm(boolean thumb, String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, thumb, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_wiki_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_wiki_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_(byte[] wiki, boolean is_thumb, String ttl_str, int w, int h, int time) { + byte[] ttl = Bry_.new_utf8_(ttl_str); + int ext = Xof_ext_.new_by_ttl_(ttl).Id(); + String bin_str = ext == Xof_ext_.Id_svg ? file_svg_(w, h) : file_img_(w, h); + byte[] bin = Bry_.new_ascii_(bin_str); + return new Xof_fsdb_arg(wiki, ttl, is_thumb, ext, w, h, time, bin); + } + private static final int W_default = 220, H_default = 200; + private static String file_img_(int w, int h) {return String_.Format("{0},{1}", w, h);} + private static String file_svg_(int w, int h) {return String_.Format("", w, h);} +} +class Xof_exec_arg { + public byte[] Ttl() {return ttl;} private byte[] ttl; + public byte Lnki_type() {return lnki_type;} private byte lnki_type = Xop_lnki_type.Id_thumb; + public int Lnki_w() {return lnki_w;} private int lnki_w; + public int Lnki_h() {return lnki_h;} private int lnki_h = Xop_lnki_tkn.Height_null; + public double Lnki_upright() {return lnki_upright;} public Xof_exec_arg Lnki_upright_(double v) {lnki_upright = v; return this;} private double lnki_upright = Xop_lnki_tkn.Upright_null; + public int Lnki_time() {return lnki_time;} public Xof_exec_arg Lnki_time_(int v) {lnki_time = v; return this;} private int lnki_time = Xof_doc_thumb.Null_as_int; + public int Lnki_page() {return lnki_page;} public Xof_exec_arg Lnki_page_(int v) {lnki_page = v; return this;} private int lnki_page = Xof_doc_page.Null; + public byte Exec_tid() {return exec_tid;} public Xof_exec_arg Exec_tid_(byte v) {exec_tid = v; return this;} private byte exec_tid = Xof_exec_tid.Tid_wiki_page; + public byte Rslt_orig() {return rslt_orig;} private byte rslt_orig = Xof_orig_wkr_.Status_null; + public byte Rslt_fsdb() {return rslt_fsdb;} private byte rslt_fsdb = Xof_bin_wkr_.Tid_null; + public byte Rslt_conv() {return rslt_conv;} private byte rslt_conv = Xof_cnv_wkr_.Tid_null; + public boolean Lnki_type_is_thumb() {return Xop_lnki_type.Id_defaults_to_thumb(lnki_type);} + public Xof_exec_arg Rslt_orig_noop() {rslt_orig = Xof_orig_wkr_.Status_noop; return this;} + public Xof_exec_arg Rslt_orig_missing() {rslt_orig = Xof_orig_wkr_.Status_missing_orig; return this;} + public Xof_exec_arg Rslt_orig_found() {rslt_orig = Xof_orig_wkr_.Status_found; return this;} + public Xof_exec_arg Rslt_fsdb_xowa() {rslt_fsdb = Xof_bin_wkr_.Tid_fsdb_xowa; return this;} + public Xof_exec_arg Rslt_fsdb_null() {rslt_fsdb = Xof_bin_wkr_.Tid_null; return this;} + public Xof_exec_arg Rslt_conv_y() {rslt_conv = Xof_cnv_wkr_.Tid_y; return this;} + public Xof_exec_arg Rslt_conv_n() {rslt_conv = Xof_cnv_wkr_.Tid_n; return this;} + public static Xof_exec_arg new_thumb(String ttl) {return new_(ttl, Xop_lnki_type.Id_thumb, 220, Xop_lnki_tkn.Height_null);} + public static Xof_exec_arg new_thumb(String ttl, int w) {return new_(ttl, Xop_lnki_type.Id_thumb, w, Xop_lnki_tkn.Height_null);} + public static Xof_exec_arg new_thumb(String ttl, int w, int h) {return new_(ttl, Xop_lnki_type.Id_thumb, w, h);} + public static Xof_exec_arg new_orig(String ttl) {return new_(ttl, Xop_lnki_type.Id_null, Xop_lnki_tkn.Width_null, Xop_lnki_tkn.Height_null);} + public static Xof_exec_arg new_(String ttl, byte type, int w, int h) { + Xof_exec_arg rv = new Xof_exec_arg(); + rv.ttl = Bry_.new_utf8_(ttl); + rv.lnki_type = type; + rv.lnki_w = w; + rv.lnki_h = h; + return rv; } - public static Xof_fsdb_arg_reg_get new_() {return new Xof_fsdb_arg_reg_get();} } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java new file mode 100644 index 000000000..f544be912 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java @@ -0,0 +1,66 @@ +/* +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +import org.junit.*; +public class Xof_file_redirect_tst { + @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); + @After public void term() {fxt.Rls();} + @Test public void Same_wiki_orig_copy() { + fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_orig("A.png", 440, 400)); + fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); + fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/enwiki/orig/7/0/A.png", "440,400"); + } + @Test public void Same_wiki_thumb_copy() { + fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_thumb("A.png", 220, 200)); + fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); + fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); + } + @Test public void Same_wiki_thumb_make() { + fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_orig("A.png", 440, 400)); + fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); + fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); + } + @Test public void Diff_wiki_orig_copy() { + fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); + fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.png", 440, 400)); + fxt.Init_orig_db(Xof_orig_arg.new_comm_redirect("B.png", "A.png")); + fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_fsdb_xowa()); + fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); + } +// @Test public void Cross_wiki() { +// fxt.Init__orig_w_fsdb__commons_orig("A.png", 440, 400); +// fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); +// fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_fsdb_xowa()); +// fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); + +// fxt .ini_page_create_en_wiki_redirect ("File:B.png", "File:A.png"); +// fxt .ini_page_create_commons ("File:A.png"); +// fxt .Lnki_orig_("B.png") +// .Src( fxt.img_("mem/src/commons.wikimedia.org/7/70/A.png", 900, 800)) +// .Trg( fxt.img_("mem/trg/commons.wikimedia.org/raw/7/0/A.png", 900, 800) +// , fxt.reg_("mem/xowa/file/#meta/en.wikipedia.org/5/57.csv" , "B.png|y|A.png|1?900,800|") +// ); +// fxt.tst(); +// } +} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_misc_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_misc_tst.java deleted file mode 100644 index d3bcce49a..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_misc_tst.java +++ /dev/null @@ -1,37 +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_misc_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} - @Test public void Qry_missing() { - if (fxt.Db_skip()) return; - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_reg().Rslt_qry_unavailable_()); - fxt.Test_regy_missing_qry("A.png"); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_qry().Rslt_qry_noop_()); - } - @Test public void Bin_missing() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_not_found_()); - fxt.Test_regy_missing_bin("A.png"); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_bin().Rslt_qry_noop_()); - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogv_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogv_tst.java deleted file mode 100644 index 17f6832b8..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_ogv_tst.java +++ /dev/null @@ -1,41 +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_ogv_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} - @Test public void Copy_orig() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.ogv", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.ogv", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.ogv").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_n_()); - fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px.jpg", "440,400"); - fxt.Test_regy_pass("A.ogv"); - } - @Test public void Copy_orig_w_thumbtime() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.ogv", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.ogv", 440, 400, 10)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.ogv").Lnki_thumbtime_(10).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_n_()); - fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px-10.jpg", "440,400"); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); - fxt.Test_regy_pass("A.ogv"); - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_png_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_png_tst.java deleted file mode 100644 index e8d52c842..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_png_tst.java +++ /dev/null @@ -1,77 +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_png_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset(Bool_.__byte);} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} - @Test public void Copy_thumb() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.png")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); - fxt.Test_regy("A.png", Xof_fsdb_arg_reg_get.new_().Init_commons(440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_found_orig()); // get it again; make sure url is found in reg - } - @Test public void Copy_orig() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.png", 440, 400)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("A.png").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); - fxt.Test_regy_pass("A.png"); - } - @Test public void Copy_orig_w_width() { // PURPOSE: type if not thumb, but width is specified; do not download orig and convert; EX: [[File:The Earth seen from Apollo 17.jpg|250px]] - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.png", 220, 200)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init("A.png", Xop_lnki_type.Id_null, 220, Xop_lnki_tkn.Height_null).Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); - fxt.Test_regy_pass("A.png"); - } - @Test public void Make_thumb() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa__bin_fsdb__commons_orig("A.png", 440, 400); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png").Rslt_reg_missing_reg().Rslt_qry_mock_().Rslt_bin_fsdb_().Rslt_cnv_y_()); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); - fxt.Test_regy_pass("A.png"); - } - @Test public void Height_only() { // PURPOSE.fix: height only was still using old infer-size code; EX:w:[[File:Upper and Middle Manhattan.jpg|x120px]]; DATE:2012-12-27 - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 12591, 1847)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.png", 887, 130)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/887px.png", "887,130"); - } - @Test public void Width_only_height_ignored() {// PURPOSE.fix: if height is not specified, do not recalc; needed when true scaled height is 150x151 but WM has 150x158; defect would discard 150x158; EX:[[File:Tokage_2011-07-15.jpg|150px]] simple.wikipedia.org/wiki/2011_Pacific_typhoon_season; DATE:2013-06-03 - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 4884, 4932)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.png", 150, 150)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png", 150, Xop_lnki_tkn.Height_null)); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/150px.png", "150,150"); - } - @Test public void Upright() { // PURPOSE.fix: upright not working; EX: w:Beethoven; [[File:Rudolf-habsburg-olmuetz.jpg|thumb|upright|]] - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 1378, 1829)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_thumb("A.png", 170, 226)); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("A.png", Xop_lnki_tkn.Width_null, Xop_lnki_tkn.Height_null).Lnki_upright_(Xof_img_size.Upright_default_marker)); - fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/170px.png", "170,226"); - } -} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_redirect_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_redirect_tst.java deleted file mode 100644 index 55c93d119..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_offline_redirect_tst.java +++ /dev/null @@ -1,73 +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.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import org.junit.*; -import gplx.fsdb.*; -public class Xof_offline_redirect_tst { - @Before public void init() {if (fxt.Db_skip()) return; fxt.Reset();} private Xof_file_fxt fxt = new Xof_file_fxt(); - @After public void term() {if (fxt.Db_skip()) return; fxt.Rls();} - @Test public void Same_wiki_orig_copy() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_en_wiki_orig("A.png", 440, 400)); - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("B.png").Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/enwiki/orig/7/0/A.png", "440,400"); - fxt.Test_regy("B.png", Xof_fsdb_arg_reg_get.new_().Init_en_wiki(440, 400, "A.png")); - } - @Test public void Same_wiki_thumb_copy() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_en_wiki_thumb("A.png", 220, 200)); - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("B.png", 220).Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); - } - @Test public void Same_wiki_thumb_make() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_en_wiki_orig("A.png", 440, 400)); - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_thumb("B.png", 220).Rslt_bin_fsdb_().Rslt_cnv_y_()); - fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); - } - @Test public void Diff_wiki_orig_copy() { - if (fxt.Db_skip()) return; - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons("A.png", 440, 400)); - fxt.Init_bin_fsdb(Xof_fsdb_arg_init_bin.new_().Init_commons_orig("A.png", 440, 400)); - fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_commons_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("B.png").Rslt_bin_fsdb_()); - fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); - fxt.Test_regy("B.png", Xof_fsdb_arg_reg_get.new_().Init_commons(440, 400, "A.png")); - } -// @Test public void Cross_wiki() { -// fxt.Init_qry_xowa__bin_fsdb__commons_orig("A.png", 440, 400); -// fxt.Init_qry_xowa(Xof_fsdb_arg_init_qry.new_().Init_en_wiki_redirect("B.png", "A.png")); -// fxt.Exec_get(Xof_fsdb_arg_exec_get.new_().Init_orig("B.png").Rslt_bin_fsdb_()); -// fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); - -// fxt .ini_page_create_en_wiki_redirect ("File:B.png", "File:A.png"); -// fxt .ini_page_create_commons ("File:A.png"); -// fxt .Lnki_orig_("B.png") -// .Src( fxt.img_("mem/src/commons.wikimedia.org/7/70/A.png", 900, 800)) -// .Trg( fxt.img_("mem/trg/commons.wikimedia.org/raw/7/0/A.png", 900, 800) -// , fxt.reg_("mem/xowa/file/#meta/en.wikipedia.org/5/57.csv" , "B.png|y|A.png|1?900,800|") -// ); -// fxt.tst(); -// } -} diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java index 59433f264..1f3876503 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java @@ -19,18 +19,18 @@ package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa import gplx.xowa.xtns.gallery.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.gui.views.*; public class Js_img_mgr { - public static void Update_img(Xoa_page page, Xof_xfer_itm itm) { + public static void Update_img(Xoae_page page, Xof_xfer_itm itm) { Js_img_mgr.Update_img(page, itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), String_.new_utf8_(itm.Html_view_src()), itm.Orig_w(), itm.Orig_h(), String_.new_utf8_(itm.Html_orig_src()), itm.Lnki_ttl(), itm.Gallery_mgr_h(), itm.Html_img_wkr()); } - public static void Update_img(Xoa_page page, Xof_fsdb_itm itm) { - Js_img_mgr.Update_img(page, itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_url().To_http_file_str(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url().To_http_file_str(), itm.Lnki_ttl(), itm.Gallery_mgr_h(), itm.Html_img_wkr()); + public static void Update_img(Xoae_page page, Xof_fsdb_itm itm) { + Js_img_mgr.Update_img(page, itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url().To_http_file_str(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url().To_http_file_str(), itm.Lnki_ttl(), itm.Gallery_mgr_h(), itm.Html_img_wkr()); } public static void Update_link_missing(Xog_html_itm html_itm, String html_id) { html_itm.Html_elem_atr_set_append(html_id, "class", " new"); } - private static void Update_img(Xoa_page page, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl, int gallery_mgr_h, Js_img_wkr img_wkr) { + private static void Update_img(Xoae_page page, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl, int gallery_mgr_h, Js_img_wkr img_wkr) { if (Env_.Mode_testing()) return; - if (page.App().Mode() != Xoa_app_.Mode_gui) return; // do not update html widget unless app is gui; null ref on http server; DATE:2014-09-17 + if (Xoa_app_.Mode != Xoa_app_.Mode_gui) return; // do not update html widget unless app is gui; null ref on http server; DATE:2014-09-17 Xog_html_itm html_itm = page.Tab().Html_itm(); switch (elem_tid) { case Xof_html_elem.Tid_gallery_v2: diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java index 8f898c913..fa90b33e1 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java @@ -18,5 +18,5 @@ along with this program. If not, see . package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.gui.views.*; public interface Js_img_wkr { - void Html_update(Xoa_page page, Xog_html_itm html_itm, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl); + void Html_update(Xoae_page page, Xog_html_itm html_itm, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl); } diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_mgr.java similarity index 51% rename from 400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java rename to 400_xowa/src/gplx/xowa/files/imgs/Xof_img_mgr.java index d06ca08ac..4072e9a7b 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java +++ b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_mgr.java @@ -15,18 +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; import gplx.*; -import gplx.xowa.apps.fsys.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.*; +package gplx.xowa.files.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.apps.progs.*; import gplx.xowa.wmfs.*; import gplx.xowa.files.cnvs.*; public class Xof_img_mgr { - public Xof_img_wkr_query_img_size Wkr_query_img_size() {return wkr_query_img_size;} public Xof_img_mgr Wkr_query_img_size_(Xof_img_wkr_query_img_size v) {wkr_query_img_size = v; return this;} private Xof_img_wkr_query_img_size wkr_query_img_size; - public Xof_img_wkr_resize_img Wkr_resize_img() {return wkr_resize_img;} public Xof_img_mgr Wkr_resize_img_(Xof_img_wkr_resize_img v) {wkr_resize_img = v; return this;} private Xof_img_wkr_resize_img wkr_resize_img; + public Xof_img_wkr_resize_img Wkr_resize_img() {return wkr_resize_img;} public void Wkr_resize_img_(Xof_img_wkr_resize_img v) {wkr_resize_img = v;} private Xof_img_wkr_resize_img wkr_resize_img; + public Xof_img_wkr_query_img_size Wkr_query_img_size() {return wkr_query_img_size;} public void Wkr_query_img_size_(Xof_img_wkr_query_img_size v) {wkr_query_img_size = v;} private Xof_img_wkr_query_img_size wkr_query_img_size; public Xof_img_wkr_convert_djvu_to_tiff Wkr_convert_djvu_to_tiff() {return wkr_convert_djvu_to_tiff;} public Xof_img_mgr Wkr_convert_djvu_to_tiff_(Xof_img_wkr_convert_djvu_to_tiff v) {wkr_convert_djvu_to_tiff = v; return this;} private Xof_img_wkr_convert_djvu_to_tiff wkr_convert_djvu_to_tiff; - public int Thumb_w_img() {return thumb_w_img;} private int thumb_w_img = Xof_img_size.Thumb_width_img; - public int Thumb_w_ogv() {return thumb_w_ogv;} private int thumb_w_ogv = Xof_img_size.Thumb_width_ogv; - public void Init_app(Xoa_app app) { - Launcher_app_mgr app_mgr = app.Launcher(); - wkr_query_img_size = new Xof_img_wkr_query_img_size_imageMagick(app, app_mgr.App_query_img_size()); - wkr_resize_img = new Xof_img_wkr_resize_img_imageMagick(app, app_mgr.App_resize_img(), app_mgr.App_convert_svg_to_png()); - wkr_convert_djvu_to_tiff = new Xof_img_wkr_convert_djvu_to_tiff_app(app_mgr.App_convert_djvu_to_tiff()); + public void Init_by_app(Xowmf_mgr wmf_mgr, Xoa_prog_mgr prog_mgr) { + wkr_resize_img = new Xof_img_wkr_resize_img_imageMagick(wmf_mgr, prog_mgr.App_resize_img(), prog_mgr.App_convert_svg_to_png()); + wkr_query_img_size = new Xof_img_wkr_query_img_size_imageMagick(wmf_mgr, prog_mgr.App_query_img_size()); + wkr_convert_djvu_to_tiff = new Xof_img_wkr_convert_djvu_to_tiff_app(prog_mgr.App_convert_djvu_to_tiff()); } } diff --git a/140_dbs/src/gplx/dbs/Db_conn_itm.java b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff.java similarity index 79% rename from 140_dbs/src/gplx/dbs/Db_conn_itm.java rename to 400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff.java index d6f8634e4..e96350b1c 100644 --- a/140_dbs/src/gplx/dbs/Db_conn_itm.java +++ b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff.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.dbs; import gplx.*; -public interface Db_conn_itm { - void Conn_term(); +package gplx.xowa.files.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +public interface Xof_img_wkr_convert_djvu_to_tiff { + boolean Exec(Io_url src, Io_url trg); } diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_img_wkr_convert_djvu_to_tiff.java b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff_.java similarity index 76% rename from 400_xowa/src_160_file/gplx/xowa/Xof_img_wkr_convert_djvu_to_tiff.java rename to 400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff_.java index 4f8fbced0..79be68010 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_img_wkr_convert_djvu_to_tiff.java +++ b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_convert_djvu_to_tiff_.java @@ -15,9 +15,10 @@ 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; import gplx.*; -public interface Xof_img_wkr_convert_djvu_to_tiff { - boolean Exec(Io_url src, Io_url trg); +package gplx.xowa.files.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +public class Xof_img_wkr_convert_djvu_to_tiff_ { + public static Xof_img_wkr_convert_djvu_to_tiff new_app(ProcessAdp process) {return new Xof_img_wkr_convert_djvu_to_tiff_app(process);} + public static Xof_img_wkr_convert_djvu_to_tiff new_mok(int w, int h) {return new Xof_img_wkr_convert_djvu_to_tiff_mok(w, h);} } class Xof_img_wkr_convert_djvu_to_tiff_app implements Xof_img_wkr_convert_djvu_to_tiff { public Xof_img_wkr_convert_djvu_to_tiff_app(ProcessAdp process) {this.process = process;} ProcessAdp process; diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size.java b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size.java similarity index 76% rename from 400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size.java rename to 400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size.java index da2604475..bba81fe67 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size.java +++ b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size.java @@ -15,15 +15,17 @@ 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; import gplx.*; +package gplx.xowa.files.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.gfui.*; +import gplx.xowa.wmfs.*; public interface Xof_img_wkr_query_img_size { SizeAdp Exec(Io_url url); } class Xof_img_wkr_query_img_size_imageMagick implements Xof_img_wkr_query_img_size { - public Xof_img_wkr_query_img_size_imageMagick(Xoa_app app, ProcessAdp cmd) {this.app = app; this.cmd = cmd;} private Xoa_app app; ProcessAdp cmd; + private final Xowmf_mgr wmf_mgr; private final ProcessAdp cmd; + public Xof_img_wkr_query_img_size_imageMagick(Xowmf_mgr wmf_mgr, ProcessAdp cmd) {this.wmf_mgr = wmf_mgr; this.cmd = cmd;} public SizeAdp Exec(Io_url url) { - cmd.Prog_fmt_(String_.Replace(app.File_mgr().Download_mgr().Download_wkr().Download_xrg().Prog_fmt_hdr(), "~", "~~") + " querying: ~{process_seconds} second(s); ~{process_exe_name} ~{process_exe_args}"); + cmd.Prog_fmt_(String_.Replace(wmf_mgr.Download_wkr().Download_xrg().Prog_fmt_hdr(), "~", "~~") + " querying: ~{process_seconds} second(s); ~{process_exe_name} ~{process_exe_args}"); cmd.Run(url); String size_str = cmd.Rslt_out(); int pos_bgn = String_.FindFwd(size_str, "<{", 0); if (pos_bgn == String_.Find_none) return SizeAdp_.Zero; // NOTE: RE: "FindFwd(,0)"; multiple frames are possible; 1st frame must be used as last frame is not accurate; EX:w.Chess:[[File:ChessCastlingMovie.gif|thumb|250px]] diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size_test.java b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size_test.java similarity index 90% rename from 400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size_test.java rename to 400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size_test.java index f552942f5..f163f33c5 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xof_img_wkr_query_img_size_test.java +++ b/400_xowa/src/gplx/xowa/files/imgs/Xof_img_wkr_query_img_size_test.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; import gplx.*; +package gplx.xowa.files.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.gfui.*; public class Xof_img_wkr_query_img_size_test implements Xof_img_wkr_query_img_size { public SizeAdp Exec(Io_url url) { diff --git a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_cmd.java b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java similarity index 87% rename from 400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_cmd.java rename to 400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java index 2df602689..089bf2966 100644 --- a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_cmd.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.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.files.wiki_orig; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.dbs.*; import gplx.xowa.bldrs.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.qrys.*; import gplx.xowa.bldrs.oimgs.*; -public class Xof_wiki_orig_cmd extends Xob_itm_basic_base implements Xob_cmd { +package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.bldrs.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.origs.*; import gplx.xowa.bldrs.oimgs.*; +public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd { private Db_conn conn; - public Xof_wiki_orig_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Xob_orig_tbl_bldr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.wiki_orig"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { wiki.Init_assert(); - conn = Xof_fsdb_mgr_sql.Wiki_orig_provider(wiki.App().Fsys_mgr().File_dir().GenSubDir(wiki.Domain_str())); + conn = Xof_orig_tbl.Conn__get_or_make(wiki.Fsys_mgr().File_dir(), new Xof_orig_tbl(), Bool_.Y); // NOTE: Xof_orig_tbl needed if db doesn't exist and tbl.meta needs to be created Io_url make_db_url = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Url(); Sqlite_engine_.Db_attach(conn, "make_db", make_db_url.Raw()); } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java new file mode 100644 index 000000000..d02f0c8b6 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java @@ -0,0 +1,48 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.wikis.*; import gplx.xowa.files.*; +public class Xof_orig_itm { + public byte Repo() {return repo;} private byte repo; + public byte[] Page() {return page;} private byte[] page; + public int Ext() {return ext;} private int ext; + public int W() {return w;} private int w; + public int H() {return h;} private int h; + public byte[] Redirect() {return redirect;} private byte[] redirect; // redirect trg; EX: A.png is redirected to B.jpg; record will have A.png|jpg|220|200|B.jpg where jpg|220|200 are the attributes of B.jpg + public byte Status() {return status;} private byte status; + public void Clear() { + this.repo = Repo_null; + this.page = this.redirect = null; + this.ext = Xof_ext_.Id_unknown; + this.w = this.h = Xof_img_size.Null; + this.status = Status_null; + } + public Xof_orig_itm Init(byte repo, byte[] page, int ext, int w, int h, byte[] redirect) {return Init(repo, page, ext, w, h, redirect, Status_null);} + public Xof_orig_itm Init(byte repo, byte[] page, int ext, int w, int h, byte[] redirect, byte status) { + this.repo = repo; this.page = page; this.ext = ext; + this.w = w; this.h = h; this.redirect = redirect; this.status = status; + return this; + } + public static final byte Status_null = Byte_.Max_value_127; + public static final byte Repo_comm = 0, Repo_wiki = 1, Repo_null = Byte_.Max_value_127; // SERIALIZED: "wiki_orig.orig_repo" + public static byte Repo_by_domain(byte[] domain) {return Bry_.Eq(domain, Xow_domain_.Domain_bry_commons) ? Repo_comm : Repo_wiki;} + public static Xof_orig_itm new_clone(Xof_orig_itm itm) { + return new Xof_orig_itm().Init(itm.repo, itm.page, itm.ext, itm.w, itm.h, itm.redirect, itm.status); + } + public static final Xof_orig_itm Null = null; +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java new file mode 100644 index 000000000..314168e43 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java @@ -0,0 +1,65 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.wmfs.apis.*; +public class Xof_orig_mgr { + private Xof_orig_wkr[] wkrs; private int wkrs_len; + private final Xof_orig_wkr__orig_db wkr_xowa_db = new Xof_orig_wkr__orig_db(); private Db_conn orig_conn = null; + private Xof_url_bldr url_bldr; private Xow_repo_mgr repo_mgr; + public Xof_orig_mgr() {this.Wkrs__clear();} + public Xof_orig_wkr__orig_db Wkrs__get_xowa_db() {return wkr_xowa_db;} + public void Init_by_wiki(Io_url db_dir, boolean version_is_1, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) { + this.repo_mgr = repo_mgr; this.url_bldr = url_bldr; + this.orig_conn = Xof_orig_tbl.Conn__get_or_make(db_dir, wkr_xowa_db.Tbl(), version_is_1); + // Xof_orig_wkr wmf_api = new Xof_orig_wkr__wmf_api(new Xoapi_orig_wmf(), wiki.Appe().File_mgr().Wmf_mgr().Download_wkr(), wiki.File_mgr().Repo_mgr(), wiki.Domain_bry()); // NOTE: do not reinstate without handling scrib / pfunc calls to Orig_mgr + this.Wkrs__add_many(wkr_xowa_db); + } + public Xof_orig_itm Find_by_ttl_or_null(byte[] ttl) { + for (int i = 0; i < wkrs_len; i++) { + Xof_orig_wkr wkr = wkrs[i]; + Xof_orig_itm itm = wkr.Find_as_itm(ttl); + if (itm != Xof_orig_itm.Null) return itm; + } + return Xof_orig_itm.Null; + } + public void Find_by_list(OrderedHash rv, ListAdp itms, byte exec_tid) { + for (int i = 0; i < wkrs_len; i++) { + Xof_orig_wkr wkr = wkrs[i]; + if (wkr.Find_by_list(rv, itms)) break; + } + Xof_orig_rdr_func.Eval(rv, itms, exec_tid, url_bldr, repo_mgr); + } + public void Insert(byte repo, byte[] page, int ext, int w, int h, byte[] redirect, byte status) { + for (int i = 0; i < wkrs_len; i++) { + Xof_orig_wkr wkr = wkrs[i]; + if (wkr.Add_orig(repo, page, ext, w, h, redirect)) break; + } + } + public void Txn_save() { + orig_conn.Txn_mgr().Txn_end_all(); + } + public void Rls() { + orig_conn.Conn_term(); + } + private void Wkrs__clear() {wkrs = Xof_orig_wkr_.Ary_empty; wkrs_len = 0;} + private void Wkrs__add_many(Xof_orig_wkr... v) { + wkrs = (Xof_orig_wkr[])Array_.Resize_add(wkrs, v); + wkrs_len += v.length; + } +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java new file mode 100644 index 000000000..6e9237bf8 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; +public class Xof_orig_rdr_func { + public static void Eval(OrderedHash itms_by_ttl, ListAdp itms_all, byte exec_tid, Xof_url_bldr url_bldr, Xow_repo_mgr repo_mgr) { + Xof_img_size img_size = new Xof_img_size(); + int len = itms_all.Count(); + for (int i = 0; i < len; i++) { + Xof_fsdb_itm fsdb = (Xof_fsdb_itm)itms_all.FetchAt(i); + fsdb.Orig_status_(Xof_orig_wkr_.Status_missing_orig); // default to status = missing + Xof_orig_itm orig = (Xof_orig_itm)itms_by_ttl.Fetch(fsdb.Lnki_ttl()); if (orig == null) continue; // not in orig; skip; will do full search later + fsdb.Orig_status_(orig.Status()); + if (orig.Status() > Xof_orig_wkr_.Status_found) continue; // only ignore if marked missing; DATE:2014-02-01 + byte repo_id = orig.Repo(); + Xof_repo_itm repo = null; + if (Xof_repo_itm.Repo_is_known(repo_id)) { // bounds check + fsdb.Orig_repo_id_(repo_id); + Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_id(repo_id); + if (repo_pair == null) // shouldn't happen, but try to avoid null ref; + repo_pair = repo_mgr.Repos_get_at(repo_id); + fsdb.Orig_repo_name_(repo_pair.Wiki_domain()); + repo = repo_pair.Trg(); + } + fsdb.Lnki_ext_(Xof_ext_.new_by_id_(orig.Ext())); // overwrite ext with whatever's in file_orig; needed for ogg -> oga / ogv + fsdb.Orig_size_(orig.W(), orig.H()); + fsdb.Orig_status_(Xof_orig_wkr_.Status_found); + if (Bry_.Len_gt_0(orig.Redirect())) // redirect exists; + fsdb.Ctor_by_orig_redirect(orig.Redirect()); + fsdb.Html_size_calc(img_size, exec_tid); + Io_url html_url = url_bldr.Init_for_trg_file(fsdb.Lnki_type_as_mode(), repo, fsdb.Lnki_ttl(), fsdb.Lnki_md5(), fsdb.Lnki_ext(), fsdb.Html_w(), fsdb.Lnki_time(), fsdb.Lnki_page()).Xto_url(); + fsdb.Html_view_url_(html_url); + if (!Io_mgr._.ExistsFil(html_url)) + fsdb.Orig_status_(Xof_orig_wkr_.Status_missing_orig); + // build url; check if exists; + } + } +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java new file mode 100644 index 000000000..e202f369a --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java @@ -0,0 +1,115 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; import gplx.dbs.utls.*; +import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; +public class Xof_orig_tbl { + private String tbl_name = "file_orig_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect; + private Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr(); + public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + this.conn = new_conn; flds.Clear(); + String fld_prefix = ""; + if (version_is_1) { + tbl_name = "wiki_orig"; + fld_prefix = "orig_"; + } + fld_ttl = flds.Add_str(fld_prefix + "ttl", 1024); + fld_status = flds.Add_byte("status"); // NOTE: "status" in v1 and v2 + fld_repo = flds.Add_byte(fld_prefix + "repo"); + fld_ext = flds.Add_int(fld_prefix + "ext"); + fld_w = flds.Add_int(fld_prefix + "w"); + fld_h = flds.Add_int(fld_prefix + "h"); + fld_redirect = flds.Add_str(fld_prefix + "redirect", 1024); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "key", fld_ttl) + ); + conn.Exec_create_tbl_and_idx(meta); + } + select_in_wkr.Ctor(this, tbl_name, flds, fld_ttl); + } + public void Select_by_list(OrderedHash rv, ListAdp itms) {select_in_wkr.Init(rv, itms).Select_in(Cancelable_.Never, gplx.xowa.dbs.Xodb_ctx.Null, conn, 0, itms.Count());} + public Xof_orig_itm Select_itm(byte[] ttl) { + Xof_orig_itm rv = Xof_orig_itm.Null; + Db_rdr rdr = Db_rdr_.Null; + try { + Db_stmt stmt = conn.Stmt_select(tbl_name, flds.To_str_ary(), fld_ttl); + rdr = stmt.Clear().Crt_bry_as_str(fld_ttl, ttl).Exec_select_as_rdr(); + if (rdr.Move_next()) + rv = Make_itm(rdr); + } + finally {rdr.Rls();} + return rv; + } + public void Insert(byte repo, byte[] ttl, int ext, int w, int h, byte[] redirect) { + Db_stmt stmt = Db_stmt_.Null; + stmt = conn.Stmt_insert(tbl_name, flds); + stmt.Clear() + .Val_bry_as_str(fld_ttl, ttl).Val_byte(fld_status, Xof_orig_wkr_.Status_found).Val_byte(fld_repo, repo).Val_int(fld_ext, ext).Val_int(fld_w, w).Val_int(fld_h, h).Val_bry_as_str(fld_redirect, redirect) + .Exec_insert(); + } + public Xof_orig_itm Make_itm(Db_rdr rdr) { + byte repo = rdr.Read_byte(fld_repo); + Xof_orig_itm rv = new Xof_orig_itm().Init + ( repo + , rdr.Read_bry_by_str(fld_ttl) + , rdr.Read_int(fld_ext) + , rdr.Read_int(fld_w) + , rdr.Read_int(fld_h) + , rdr.Read_bry_by_str(fld_redirect) + , Xof_repo_itm.Repo_is_known(repo) ? Xof_orig_wkr_.Status_found : Xof_orig_wkr_.Status_missing_orig // NOTE: orig_db may mistakenly have status of found; rely on repo to set status; PAGE:ru.w:Птичкин,_Евгений_Николаевич; DATE:2015-02-16 + ); + return rv; + } + public static final String Db_conn_bldr_type = "xowa.file.orig_regy"; + public static Db_conn Conn__get_or_make(Io_url root_dir, Xof_orig_tbl tbl, boolean version_is_1) { + Io_url conn_url = root_dir.GenSubFil("wiki.orig#00.sqlite3"); + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, conn_url); + Db_conn conn = conn_data.Conn(); + tbl.Conn_(conn, conn_data.Created(), version_is_1); + return conn; + } +} +class Xof_orig_tbl__in_wkr extends Db_in_wkr__base { + private Xof_orig_tbl tbl; private String tbl_name; private Db_meta_fld_list flds; private String fld_ttl; + private ListAdp itms; private OrderedHash rv; + public void Ctor(Xof_orig_tbl tbl, String tbl_name, Db_meta_fld_list flds, String fld_ttl) { + this.tbl = tbl; this.tbl_name = tbl_name; this.flds = flds; this.fld_ttl = fld_ttl; + } + public Xof_orig_tbl__in_wkr Init(OrderedHash rv, ListAdp itms) {this.itms = itms; this.rv = rv; return this;} + @Override protected int Interval() {return gplx.dbs.engines.sqlite.Sqlite_engine_.Stmt_arg_max;} + @Override protected Db_qry Make_qry(Object db_ctx, int bgn, int end) { + Object[] part_ary = In_ary(end - bgn); + return Db_qry_.select_cols_(tbl_name, Db_crt_.in_(fld_ttl, part_ary), flds.To_str_ary()); + } + @Override protected void Fill_stmt(Db_stmt stmt, int bgn, int end) { + for (int i = bgn; i < end; i++) { + Xof_fsdb_itm fsdb_itm = (Xof_fsdb_itm)itms.FetchAt(i); + stmt.Crt_bry_as_str(fld_ttl, fsdb_itm.Lnki_ttl()); + } + } + @Override protected void Read_data(Cancelable cancelable, Object db_ctx, Db_rdr rdr) { + while (rdr.Move_next()) { + if (cancelable.Canceled()) return; + Xof_orig_itm itm = tbl.Make_itm(rdr); + byte[] itm_ttl = itm.Page(); + rv.Add_if_new(itm_ttl, itm); // guard against dupes (shouldn't happen) + } + } +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java new file mode 100644 index 000000000..c73400442 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java @@ -0,0 +1,73 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import org.junit.*; +import gplx.dbs.*; import gplx.xowa.*; +import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +public class Xof_orig_tbl_tst { + @Before public void init() {fxt.Clear();} private Xof_orig_tbl_fxt fxt = new Xof_orig_tbl_fxt(); + @Test public void Select_in() { + Xof_orig_itm itm_1 = fxt.Exec_insert("A.png", 220, 330); + fxt.Exec_insert("B.png", 220, 330); + Xof_orig_itm itm_3 = fxt.Exec_insert("C.png", 220, 330); + fxt.Test_select_in(String_.Ary("A.png", "C.png"), itm_1, itm_3); + } +} +class Xof_orig_tbl_fxt { + private Xof_orig_tbl tbl = new Xof_orig_tbl(); + public void Clear() { + String test_url = "test/file/en.wikipedia.org/file/orig_regy"; + Db_conn conn = Db_conn_pool.I.Get_or_new__mem(test_url); + tbl.Conn_(conn, Bool_.Y, Bool_.Y); + } + public Xof_orig_itm Exec_insert(String ttl, int w, int h) { + byte[] ttl_bry = Bry_.new_utf8_(ttl); + Xof_orig_itm rv = new Xof_orig_itm().Init(Xof_orig_itm.Repo_comm, ttl_bry, Xof_ext_.new_by_ttl_(ttl_bry).Id(), w, h, Bry_.Empty, Xof_orig_wkr_.Status_found); + tbl.Insert(rv.Repo(), rv.Page(), rv.Ext(), rv.W(), rv.H(), rv.Redirect()); + return rv; + } + public void Test_select_in(String[] itms, Xof_orig_itm... expd) { + OrderedHash rv = OrderedHash_.new_(); + ListAdp list = ListAdp_.new_(); + int itms_len = itms.length; + for (int i = 0; i < itms_len; ++i) { + String itm = itms[i]; + Xof_fsdb_itm fsdb_itm = new Xof_fsdb_itm(); + fsdb_itm.Ctor_by_orig_redirect(Bry_.new_utf8_(itm)); + list.Add(fsdb_itm); + } + tbl.Select_by_list(rv, list); + Tfds.Eq_str_lines(To_str_ary(expd), To_str_ary((Xof_orig_itm[])rv.Xto_ary(Xof_orig_itm.class))); + } + private static String To_str_ary(Xof_orig_itm... ary) { + Bry_bfr bfr = Bry_bfr.reset_(255); + int len = ary.length; + for (int i = 0; i < len; ++i) { + Xof_orig_itm itm = ary[i]; + bfr .Add_byte(itm.Repo()).Add_byte_pipe() + .Add(itm.Page()).Add_byte_pipe() + .Add_int_variable(itm.Ext()).Add_byte_pipe() + .Add_int_variable(itm.W()).Add_byte_pipe() + .Add_int_variable(itm.H()).Add_byte_pipe() + .Add(itm.Redirect()).Add_byte_pipe() + ; + bfr.Add_byte_nl(); + } + return bfr.Xto_str_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java new file mode 100644 index 000000000..2f0b81235 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java @@ -0,0 +1,25 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.files.fsdb.*; +public interface Xof_orig_wkr { + byte Tid(); + Xof_orig_itm Find_as_itm(byte[] ttl); + boolean Find_by_list(OrderedHash rv, ListAdp itms); + boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect); +} diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki_.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr_.java similarity index 53% rename from 400_xowa/src_120_wiki/gplx/xowa/Xow_wiki_.java rename to 400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr_.java index b7a7ce289..afafc28a0 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki_.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr_.java @@ -15,14 +15,26 @@ 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; import gplx.*; -public class Xow_wiki_ { - public static final String - Domain_commons_str = "commons.wikimedia.org" - , Domain_enwiki_str = "en.wikipedia.org" +package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.wmfs.apis.*; +public class Xof_orig_wkr_ { + public static final Xof_orig_wkr[] Ary_empty = new Xof_orig_wkr[0]; + public static final byte + Tid_null = Byte_.Max_value_127 + , Tid_noop = 0 + , Tid_missing = 1 + , Tid_mock = 2 + , Tid_xowa_db = 3 + , Tid_xowa_reg = 4 + , Tid_wmf_api = 5 + , Tid_dir = 6 ; - public static final byte[] - Domain_commons_bry = Bry_.new_ascii_(Domain_commons_str) - , Domain_en_wiki_bry = Bry_.new_ascii_(Domain_enwiki_str) + public static final byte + Status_null = Byte_.Max_value_127 + , Status_noop = 0 + , Status_found = 1 + , Status_missing_orig = 2 + , Status_missing_qry = 3 + , Status_missing_bin = 4 ; } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java new file mode 100644 index 000000000..1efe69d61 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java @@ -0,0 +1,31 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +public class Xof_orig_wkr__orig_db implements Xof_orig_wkr { + public byte Tid() {return Xof_orig_wkr_.Tid_xowa_reg;} + public Xof_orig_tbl Tbl() {return tbl;} private final Xof_orig_tbl tbl = new Xof_orig_tbl(); + public void Conn_(Db_conn conn, boolean created, boolean version_is_1) {tbl.Conn_(conn, created, version_is_1);} + public boolean Find_by_list(OrderedHash rv, ListAdp itms) {tbl.Select_by_list(rv, itms); return true;} + public Xof_orig_itm Find_as_itm(byte[] ttl) {return tbl.Select_itm(ttl);} + public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) { + if (tbl.Select_itm(page) != Xof_orig_itm.Null) return false; // do not add if already there; probably not needed + tbl.Insert(repo, page, ext_id, w, h, redirect); + return true; + } +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java new file mode 100644 index 000000000..c1071d1d0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java @@ -0,0 +1,47 @@ +/* +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.wmfs.apis.*; +public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr { + private final Xoapi_orig_base orig_api; private final Xof_download_wkr download_wkr; private final Xowe_repo_mgr repo_mgr; private final byte[] wiki_domain; + private final Xoapi_orig_rslts api_rv = new Xoapi_orig_rslts(); + public Xof_orig_wkr__wmf_api(Xoapi_orig_base orig_api, Xof_download_wkr download_wkr, Xowe_repo_mgr repo_mgr, byte[] wiki_domain) { + this.orig_api = orig_api; this.download_wkr = download_wkr; this.repo_mgr = repo_mgr; this.wiki_domain = wiki_domain; + } + public byte Tid() {return Xof_orig_wkr_.Tid_wmf_api;} + public boolean Find_by_list(OrderedHash rv, ListAdp itms) {throw Err_.not_implemented_();} + public Xof_orig_itm Find_as_itm(byte[] ttl) { + boolean found = orig_api.Api_query_size(api_rv, download_wkr, repo_mgr, ttl, Xof_img_size.Null, Xof_img_size.Null); // pass in null size to look for orig; DATE:2015-02-10 + if (!found) return Xof_orig_itm.Null; // ttl not found by api; return + byte api_repo = Bry_.Eq(api_rv.Orig_wiki(), wiki_domain) ? Xof_orig_itm.Repo_wiki : Xof_orig_itm.Repo_comm; + byte[] api_page = api_rv.Orig_page(); + int api_w = api_rv.Orig_w(), api_h = api_rv.Orig_h(); + Xof_ext api_ext = Xof_ext_.new_by_ttl_(api_page); api_ext = Ext__handle_ogg(api_ext, api_w, api_h); + byte[] api_redirect = Bry_.Eq(api_page, ttl) ? null : api_page; // ttl is different; must be redirect + Xof_orig_itm rv = new Xof_orig_itm(); + rv.Init(api_repo, api_page, api_ext.Id(), api_w, api_h, api_redirect); + return rv; + } + public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) {return false;} + public static Xof_ext Ext__handle_ogg(Xof_ext ext, int w, int h) { + if (!ext.Id_is_ogg()) return ext; + boolean is_audio = w == 0 && h == 0; // wmf returns back w/h of 0 if audio; non-0 if video; DATE:2013-11-11 + int actl_ext_id = is_audio ? Xof_ext_.Id_oga : Xof_ext_.Id_ogv; + return Xof_ext_.new_by_id_(actl_ext_id); + } +} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder.java b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java similarity index 73% rename from 400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder.java rename to 400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java index 94ba3a144..06cfed718 100644 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java @@ -15,27 +15,27 @@ 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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -public class Xof_wiki_finder { - private Xow_wiki wiki_0, wiki_1; +package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +class Xof_wiki_finder { // UNUSED + private Xowe_wiki wiki_0, wiki_1; private Xodb_page db_page = new Xodb_page(); - public Xof_wiki_finder(Xow_wiki wiki_0, Xow_wiki wiki_1) { + public Xof_wiki_finder(Xowe_wiki wiki_0, Xowe_wiki wiki_1) { this.wiki_0 = wiki_0; this.wiki_1 = wiki_1; } - public Xoa_page Get_page(int ns, byte[] ttl_bry) { - Xoa_page rv = Get_page__by_wiki(wiki_0, ns, ttl_bry); + public Xoae_page Get_page(int ns, byte[] ttl_bry) { + Xoae_page rv = Get_page__by_wiki(wiki_0, ns, ttl_bry); if (rv.Missing()) rv = Get_page__by_wiki(wiki_1, ns, ttl_bry); return rv; } - private Xoa_page Get_page__by_wiki(Xow_wiki wiki, int ns_id, byte[] ttl_bry) { + private Xoae_page Get_page__by_wiki(Xowe_wiki wiki, int ns_id, byte[] ttl_bry) { Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns_id, ttl_bry) ; Xoa_url url = Xoa_url.new_(wiki.Domain_bry(), ttl_bry); return wiki.GetPageByTtl(url, ttl); } private int qry_count, qry_count_max = 1000; public boolean Find_page(Xof_wiki_finder_itm itm, int ns_id, byte[] ttl_bry) { - Xow_wiki wiki = null; + Xowe_wiki wiki = null; if (Find_page__by_wiki(db_page, wiki_0, ns_id, ttl_bry)) { wiki = wiki_0; itm.Orig_repo_id_(Byte_.Zero); @@ -50,18 +50,18 @@ public class Xof_wiki_finder { } itm.Orig_ttl_(ttl_bry); if (db_page.Type_redirect()) { - Xoa_page page = Get_page__by_wiki(wiki, ns_id, ttl_bry); + Xoae_page page = Get_page__by_wiki(wiki, ns_id, ttl_bry); Xoa_ttl redirect_ttl = wiki.Redirect_mgr().Extract_redirect_loop(page.Data_raw()); itm.Orig_redirect_(redirect_ttl); ++qry_count; if (qry_count >= qry_count_max) { - wiki.App().Reset_all(); + wiki.Appe().Reset_all(); qry_count = 0; } } return true; } - private boolean Find_page__by_wiki(Xodb_page db_page, Xow_wiki wiki, int ns_id, byte[] ttl_bry) { + private boolean Find_page__by_wiki(Xodb_page db_page, Xowe_wiki wiki, int ns_id, byte[] ttl_bry) { Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id); wiki.Db_mgr().Load_mgr().Load_page(db_page, ns, false); return db_page.Exists(); diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder_itm.java b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder_itm.java similarity index 83% rename from 400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder_itm.java rename to 400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder_itm.java index a9dbd5698..292544cf8 100644 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_wiki_finder_itm.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder_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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -public class Xof_wiki_finder_itm { +package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +class Xof_wiki_finder_itm { // UNUSED // public boolean Missing() {return missing;} public Xof_wiki_finder_itm Missing_(boolean v) {missing = v; return this;} private boolean missing; public byte Orig_repo_id() {return orig_repo_id;} public Xof_wiki_finder_itm Orig_repo_id_(byte v) {orig_repo_id = v; return this;} private byte orig_repo_id; public byte[] Orig_ttl() {return orig_ttl;} public Xof_wiki_finder_itm Orig_ttl_(byte[] v) {orig_ttl = v; return this;} private byte[] orig_ttl; - public Xow_wiki Orig_wiki() {return orig_wiki;} public Xof_wiki_finder_itm Orig_wiki_(Xow_wiki v) {orig_wiki = v; return this;} private Xow_wiki orig_wiki; + public Xowe_wiki Orig_wiki() {return orig_wiki;} public Xof_wiki_finder_itm Orig_wiki_(Xowe_wiki v) {orig_wiki = v; return this;} private Xowe_wiki orig_wiki; public Xoa_ttl Orig_redirect() {return orig_redirect;} public Xof_wiki_finder_itm Orig_redirect_(Xoa_ttl v) {orig_redirect = v; return this;} private Xoa_ttl orig_redirect; // public int Orig_w() {return orig_w;} private int orig_w; // public int Orig_h() {return orig_h;} private int orig_h; diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_img_meta_wkr.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_img_meta_wkr.java deleted file mode 100644 index 1adc6c981..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_img_meta_wkr.java +++ /dev/null @@ -1,22 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.dbs.*; import gplx.xowa.bldrs.wikis.images.*; -public interface Xof_img_meta_wkr { - Xob_wiki_image_itm Find(Xow_wiki wiki, byte[] ttl); -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_mgr.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_mgr.java deleted file mode 100644 index 7fed099d3..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_mgr.java +++ /dev/null @@ -1,49 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; -public class Xof_qry_mgr { - private Xof_qry_wkr[] wkrs; private int wkrs_len; - private Xof_img_size img_size = new Xof_img_size(); - public Xof_qry_mgr() {this.Clear();} - public void Clear() {wkrs = Xof_qry_wkr_.Ary_empty; wkrs_len = 0;} - public void Add(Xof_qry_wkr wkr) {Add_many(wkr);} - public void Add_many(Xof_qry_wkr... v) { - wkrs = (Xof_qry_wkr[])Array_.Resize_add(wkrs, v); - wkrs_len += v.length; - } - public boolean Find(byte exec_tid, Xof_fsdb_itm itm) { - boolean rv = false; - for (int i = 0; i < wkrs_len; i++) { - Xof_qry_wkr wkr = wkrs[i]; - if (wkr.Qry_file(itm)) { - itm.Rslt_qry_(wkr.Tid()); - rv = true; - break; - } - } - if (!rv) { - itm.Rslt_qry_(Xof_qry_wkr_.Tid_missing); - return false; // not found in any wkr; exit; - } - if (Bry_.Len_gt_0(itm.Orig_redirect())) - itm.Init_by_redirect(itm.Orig_redirect()); - itm.Html_size_calc(img_size, exec_tid); - return true; - } -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr.java deleted file mode 100644 index 70c3d743e..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr.java +++ /dev/null @@ -1,23 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; import gplx.xowa.files.wiki_orig.*; -public interface Xof_qry_wkr { - byte Tid(); - boolean Qry_file(Xof_fsdb_itm itm); -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_.java deleted file mode 100644 index 4aea1b6a6..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_.java +++ /dev/null @@ -1,22 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -public class Xof_qry_wkr_ { - public static final Xof_qry_wkr[] Ary_empty = new Xof_qry_wkr[0]; - public static final byte Tid_null = Byte_.Max_value_127, Tid_noop = 0, Tid_missing = 1, Tid_mock = 2, Tid_xowa_db = 3, Tid_xowa_reg = 4, Tid_wmf_api = 5, Tid_dir = 6; -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_wmf_api.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_wmf_api.java deleted file mode 100644 index 6de93b8bc..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_wmf_api.java +++ /dev/null @@ -1,43 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; -public class Xof_qry_wkr_wmf_api implements Xof_qry_wkr { - private Xow_wiki wiki; - private Xof_img_wkr_api_size_base api_wkr; - private Xof_img_wkr_api_size_base_rslts api_rv = new Xof_img_wkr_api_size_base_rslts(); - public Xof_qry_wkr_wmf_api(Xow_wiki wiki, Xof_img_wkr_api_size_base api_wkr) {this.wiki = wiki; this.api_wkr = api_wkr;} - public byte Tid() {return Xof_qry_wkr_.Tid_wmf_api;} - public boolean Qry_file(Xof_fsdb_itm itm) { - byte[] itm_ttl = itm.Lnki_ttl(); - boolean found = api_wkr.Api_query_size(api_rv, wiki, itm_ttl, itm.Lnki_w(), itm.Lnki_h()); - if (!found) return false; // ttl not found by api; return - itm.Orig_wiki_(api_rv.Reg_wiki()); - if (!Bry_.Eq(itm_ttl, api_rv.Reg_page())) // ttl is different; must be redirect - itm.Orig_redirect_(api_rv.Reg_page()); - int orig_w = api_rv.Orig_w(), orig_h = api_rv.Orig_h(); - itm.Orig_size_(orig_w, orig_h); - if (itm.Lnki_ext().Id_is_ogg()) Coerce_ogg_ext(itm, orig_w, orig_h); - return true; - } - public static void Coerce_ogg_ext(Xof_fsdb_itm itm, int orig_w, int orig_h) { - boolean is_audio = orig_w == 0 && orig_h == 0; // wmf returns back w/h of 0 if audio; non-0 if video; DATE:2013-11-11 - int actl_ext_id = is_audio ? Xof_ext_.Id_oga : Xof_ext_.Id_ogv; - itm.Lnki_ext_(Xof_ext_.new_by_id_(actl_ext_id)); - } -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa.java deleted file mode 100644 index ad1429c89..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa.java +++ /dev/null @@ -1,60 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.dbs.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.bldrs.wikis.images.*; -public class Xof_qry_wkr_xowa implements Xof_qry_wkr { - private Xof_wiki_finder wiki_finder; - private Xof_img_meta_wkr img_meta_wkr; - private int qry_count, qry_count_max = 1000; - public Xof_qry_wkr_xowa(Xof_wiki_finder wiki_finder, Xof_img_meta_wkr img_meta_wkr) { - this.wiki_finder = wiki_finder; - this.img_meta_wkr = img_meta_wkr; - } - public byte Tid() {return Xof_qry_wkr_.Tid_xowa_db;} - public boolean Qry_file(Xof_fsdb_itm itm) { - byte[] ttl = itm.Lnki_ttl(); - Xoa_page page = wiki_finder.Get_page(Xow_ns_.Id_file, ttl); - ++qry_count; - if (qry_count >= qry_count_max) { - page.Wiki().App().Reset_all(); - qry_count = 0; - } - if (page.Missing()) return false; // ttl not found in wikis; exit; - Xow_wiki wiki = page.Wiki(); - itm.Orig_wiki_(wiki.Domain_bry()); - Xoa_ttl redirect_ttl = wiki.Redirect_mgr().Extract_redirect_loop(page.Data_raw()); - if (redirect_ttl != Xop_redirect_mgr.Extract_redirect_is_null) - itm.Orig_redirect_(redirect_ttl.Full_txt()); - Xob_wiki_image_itm img = img_meta_wkr.Find(wiki, ttl); - if (img == Xob_wiki_image_itm.Null) return false; // ttl not found in image db; exit - itm.Orig_size_(img.Width(), img.Height()); - return true; - } - private Xof_wiki_finder_itm finder_itm = new Xof_wiki_finder_itm(); - public boolean Qry_file2(Xof_fsdb_itm itm) { - byte[] ttl = itm.Lnki_ttl(); - if (!wiki_finder.Find_page(finder_itm, Xow_ns_.Id_file, ttl)) return false; // ttl not found in wikis; exit; - itm.Orig_wiki_(finder_itm.Orig_wiki().Domain_bry()); - if (finder_itm.Orig_redirect() != null) - itm.Orig_redirect_(finder_itm.Orig_redirect().Full_txt()); - Xob_wiki_image_itm img = img_meta_wkr.Find(finder_itm.Orig_wiki(), ttl); - if (img == Xob_wiki_image_itm.Null) return false; // ttl not found in image db; exit - itm.Orig_size_(img.Width(), img.Height()); - return true; - } -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa_reg.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa_reg.java deleted file mode 100644 index b73e96436..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wkr_xowa_reg.java +++ /dev/null @@ -1,55 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.wiki_orig.*; -import gplx.xowa2.files.orig_regy.*; -public class Xof_qry_wkr_xowa_reg implements Xof_qry_wkr { - private Db_conn conn; - public Xof_qry_wkr_xowa_reg(Db_conn p) {this.conn = p;} - public byte Tid() {return Xof_qry_wkr_.Tid_xowa_reg;} - public boolean Qry_file(Xof_orig_regy_itm rv, byte[] lnki_ttl) { - Db_rdr rdr = Db_rdr_.Null; - try { - Db_stmt stmt = Db_stmt_.new_select_(conn, Xof_wiki_orig_tbl.Tbl_name, String_.Ary(Xof_wiki_orig_tbl.Fld_orig_ttl)); - rdr = stmt.Clear().Val_bry_as_str(lnki_ttl).Exec_select_as_rdr(); - if (!rdr.Move_next()) return false; // ttl not found; return false; - return true; - } - finally {rdr.Rls();} - } - public boolean Qry_file(Xof_fsdb_itm itm) { - DataRdr rdr = DataRdr_.Null; - try { - rdr = Select(conn, itm.Lnki_ttl()); - if (!rdr.MoveNextPeer()) return false; - // NOTE: no need to set redirect; file_orig stores direct entries; EX: A.png with 20,30 redirects to B.png; file_orig stores B.png,20,30,A.png - byte[] orig_redirect = rdr.ReadBryByStr(Xof_wiki_orig_tbl.Fld_orig_redirect); - if (Bry_.Len_gt_0(orig_redirect)) - itm.Orig_redirect_(orig_redirect); - int orig_w = rdr.ReadInt(Xof_wiki_orig_tbl.Fld_orig_w); - int orig_h = rdr.ReadInt(Xof_wiki_orig_tbl.Fld_orig_h); - itm.Orig_size_(orig_w, orig_h); - return true; - } - finally {rdr.Rls();} - } - private DataRdr Select(Db_conn p, byte[] ttl) { - Db_stmt stmt = Db_stmt_.new_select_(p, Xof_wiki_orig_tbl.Tbl_name, String_.Ary(Xof_wiki_orig_tbl.Fld_orig_ttl)); - return stmt.Clear().Val_bry_as_str(ttl).Exec_select(); - } -} diff --git a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wrk_mock.java b/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wrk_mock.java deleted file mode 100644 index 5cf4e4419..000000000 --- a/400_xowa/src/gplx/xowa/files/qrys/Xof_qry_wrk_mock.java +++ /dev/null @@ -1,54 +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.files.qrys; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; -public class Xof_qry_wrk_mock implements Xof_qry_wkr { - private Hash_adp_bry hash = Hash_adp_bry.cs_(); - public byte Tid() {return Xof_qry_wkr_.Tid_mock;} - public void Clear() {hash.Clear();} - public Xof_qry_wrk_mock Add_wiki_size(byte[] ttl, byte[] wiki, int w, int h) { - Xof_fsdb_itm itm = Get_or_new(ttl); - itm.Orig_wiki_(wiki); - itm.Orig_size_(w, h); - return this; - } - public Xof_qry_wrk_mock Add_redirect(byte[] ttl, byte[] redirect) { - Xof_fsdb_itm itm = Get_or_new(ttl); - itm.Orig_redirect_(redirect); - return this; - } - private Xof_fsdb_itm Get_or_new(byte[] ttl) { - Xof_fsdb_itm itm = (Xof_fsdb_itm)hash.Fetch(ttl); - if (itm == null) { - itm = new Xof_fsdb_itm(); - itm.Lnki_ttl_(ttl); - hash.Add_bry_obj(ttl, itm); - } - return itm; - } - public boolean Qry_file(Xof_fsdb_itm itm) { - byte[] ttl = itm.Lnki_ttl(); - Xof_fsdb_itm reg = (Xof_fsdb_itm)hash.Fetch(ttl); if (reg == null) return false; - itm.Orig_wiki_(reg.Orig_wiki()); - if (reg.Orig_redirect() != null) - itm.Orig_redirect_(reg.Orig_redirect()); - itm.Orig_size_(reg.Orig_w(), reg.Orig_h()); - if (itm.Lnki_ext().Id_is_ogg()) Xof_qry_wkr_wmf_api.Coerce_ogg_ext(itm, reg.Orig_w(), reg.Orig_h()); - return true; - } -} diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_repo_itm.java b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java similarity index 84% rename from 400_xowa/src_160_file/gplx/xowa/Xof_repo_itm.java rename to 400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java index dfb77921c..3d9cc9b56 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_repo_itm.java +++ b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_itm.java @@ -15,10 +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; import gplx.*; -import gplx.core.btries.*; +package gplx.xowa.files.repos; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.btries.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.files.exts.*; public class Xof_repo_itm implements GfoInvkAble { - public Xof_repo_itm(Xoa_repo_mgr mgr, byte[] key) {this.mgr = mgr; this.key = key;} private final Xoa_repo_mgr mgr; + private final Xoa_fsys_mgr app_fsys; private final Xof_rule_mgr ext_rule_mgr; + public Xof_repo_itm(byte[] key, Xoa_fsys_mgr app_fsys, Xof_rule_mgr ext_rule_mgr) { + this.key = key; this.app_fsys = app_fsys; this.ext_rule_mgr = ext_rule_mgr; + } public byte[] Key() {return key;} private final byte[] key; public boolean Wmf_fsys() {return wmf_fsys;} public Xof_repo_itm Wmf_fsys_(boolean v) {wmf_fsys = v; return this;} private boolean wmf_fsys; public boolean Wmf_api() {return wmf_api;} public Xof_repo_itm Wmf_api_(boolean v) {wmf_api = v; return this;} private boolean wmf_api; @@ -33,7 +36,7 @@ public class Xof_repo_itm implements GfoInvkAble { public int Ttl_max() {return ttl_max;} public Xof_repo_itm Ttl_max_(int v) {ttl_max = v; return this;} private int ttl_max = 180; public byte[][] Mode_names() {return mode_names;} private byte[][] mode_names = new byte[][] {Mode_names_key[0], Mode_names_key[1]}; public static final byte[][] Mode_names_key = new byte[][] {Bry_.new_utf8_("orig"), Bry_.new_utf8_("thumb")}; - public Xoft_rule_grp Ext_rules() {return ext_rules;} public Xof_repo_itm Ext_rules_(Xoft_rule_grp v) {ext_rules = v; return this;} private Xoft_rule_grp ext_rules; + public Xof_rule_grp Ext_rules() {return ext_rules;} public Xof_repo_itm Ext_rules_(Xof_rule_grp v) {ext_rules = v; return this;} private Xof_rule_grp ext_rules; public int Dir_depth() {return dir_depth;} public Xof_repo_itm Dir_depth_(int v) {dir_depth = v; return this;} private int dir_depth = 4; public boolean Primary() {return primary;} public Xof_repo_itm Primary_(boolean v) {primary = v; return this;} private boolean primary; public Xof_repo_itm Root_str_(String v) { @@ -46,10 +49,10 @@ public class Xof_repo_itm implements GfoInvkAble { wmf_api = true; } else { - root_url = App_cmd_arg.Val_as_url_rel_url_or(root_str, mgr.App().Fsys_mgr().File_dir(), Io_url_.new_dir_(root_str), true); - root = root_url.RawBry(); + root_url = App_cmd_arg.Val_as_url_rel_url_or(root_str, app_fsys.File_dir(), Io_url_.new_dir_(root_str), true); dir_spr = root_url.Info().DirSpr_byte(); - root_http = mgr.App().Encoder_mgr().Fsys().Encode_http(root_url); + root_http = root_url.To_http_file_bry(); + root = root_url.RawBry(); } return this; } @@ -103,7 +106,7 @@ public class Xof_repo_itm implements GfoInvkAble { return rv; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_owner)) return mgr; + if (ctx.Match(k, Invk_owner)) throw Err_.not_implemented_msg_("deprecated repo_itm.owner"); else if (ctx.Match(k, Invk_fsys_)) fsys_is_wnt = String_.Eq(m.ReadStr("v"), "wnt"); else if (ctx.Match(k, Invk_primary_)) primary = m.ReadYn("v"); else if (ctx.Match(k, Invk_ext_rules_)) Ext_rules_(m.ReadBry("v")); @@ -112,10 +115,17 @@ public class Xof_repo_itm implements GfoInvkAble { else return GfoInvkAble_.Rv_unhandled; return this; } private static final String Invk_owner = "owner", Invk_fsys_ = "fsys_", Invk_ext_rules_ = "ext_rules_", Invk_primary_ = "primary_", Invk_wmf_api_ = "wmf_api_", Invk_tarball_ = "tarball_"; - public Xof_repo_itm Ext_rules_(byte[] ext_rules_key) {ext_rules = mgr.App().File_mgr().Ext_rules().Get_or_new(ext_rules_key); return this;} + public Xof_repo_itm Ext_rules_(byte[] ext_rules_key) {ext_rules = ext_rule_mgr.Get_or_new(ext_rules_key); return this;} public static final int Thumb_default_null = -1; public static final byte Mode_orig = 0, Mode_thumb = 1, Mode_nil = Byte_.Max_value_127; public static final byte Repo_remote = 0, Repo_local = 1, Repo_unknown = 126, Repo_null = Byte_.Max_value_127; + public static boolean Repo_is_known(byte repo) { + switch (repo) { + case Repo_remote: + case Repo_local: return true; + default: return false; + } + } public static final int Dir_depth_null = -1, Dir_depth_wmf = 2, Dir_depth_xowa = 4; private static final Btrie_slim_mgr trie = trie_make(); private static Btrie_slim_mgr trie_make() { diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_repo_pair.java b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_pair.java similarity index 55% rename from 400_xowa/src_162_xfer/gplx/xowa/Xof_repo_pair.java rename to 400_xowa/src/gplx/xowa/files/repos/Xof_repo_pair.java index 890498fee..01bc502de 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xof_repo_pair.java +++ b/400_xowa/src/gplx/xowa/files/repos/Xof_repo_pair.java @@ -15,20 +15,17 @@ 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; import gplx.*; +package gplx.xowa.files.repos; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; public class Xof_repo_pair implements GfoInvkAble { - public Xof_repo_pair(int id, Xof_repo_itm src, Xof_repo_itm trg, Xof_meta_mgr trg_meta_mgr, byte[] wiki_key) { - this.id = (byte)id; this.src = src; this.trg = trg; this.trg_meta_mgr = trg_meta_mgr; this.wiki_key = wiki_key; - this.repo_id = this.id; + public Xof_repo_pair(byte repo_idx, byte[] wiki_domain, Xof_repo_itm src, Xof_repo_itm trg) { + this.repo_idx = repo_idx; this.wiki_domain = wiki_domain; this.src = src; this.trg = trg; } - public byte Id() {return id;} private byte id; - public byte Repo_id() {return repo_id;} private byte repo_id; - public Xof_repo_itm Src() {return src;} private Xof_repo_itm src; - public Xof_repo_itm Trg() {return trg;} private Xof_repo_itm trg; - public Xof_meta_mgr Trg_meta_mgr() {return trg_meta_mgr;} private Xof_meta_mgr trg_meta_mgr; - public byte[] Wiki_key() {return wiki_key;} private byte[] wiki_key; + public byte Repo_idx() {return repo_idx;} private byte repo_idx; + public byte[] Wiki_domain() {return wiki_domain;} private final byte[] wiki_domain; + public Xof_repo_itm Src() {return src;} private final Xof_repo_itm src; + public Xof_repo_itm Trg() {return trg;} private final Xof_repo_itm trg; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_repo_id_)) repo_id = m.ReadByte("v"); + if (ctx.Match(k, Invk_repo_id_)) repo_idx = m.ReadByte("v"); else return GfoInvkAble_.Rv_unhandled; return this; } private static final String Invk_repo_id_ = "repo_id_"; diff --git a/400_xowa/src/gplx/fsdb/Fsdb_xtn_tid_.java b/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java similarity index 73% rename from 400_xowa/src/gplx/fsdb/Fsdb_xtn_tid_.java rename to 400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java index dc9cf7bd3..77d455a29 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_xtn_tid_.java +++ b/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java @@ -15,7 +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.fsdb; import gplx.*; -public class Fsdb_xtn_tid_ { - public static final int Tid_none = 0, Tid_thm = 1, Tid_img = 2; +package gplx.xowa.files.repos; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +public interface Xow_repo_mgr { + Xof_repo_pair Repos_get_at(int i); + Xof_repo_pair Repos_get_by_id(int id); + Xof_repo_pair Repos_get_by_wiki(byte[] wiki); } diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xow_repo_mgr.java b/400_xowa/src/gplx/xowa/files/repos/Xowe_repo_mgr.java similarity index 85% rename from 400_xowa/src_162_xfer/gplx/xowa/Xow_repo_mgr.java rename to 400_xowa/src/gplx/xowa/files/repos/Xowe_repo_mgr.java index 02e749293..c42058103 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xow_repo_mgr.java +++ b/400_xowa/src/gplx/xowa/files/repos/Xowe_repo_mgr.java @@ -15,23 +15,24 @@ 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; import gplx.*; -import gplx.xowa.wikis.*; import gplx.xowa.files.*; -public class Xow_repo_mgr implements GfoInvkAble { - public Xow_repo_mgr(Xow_wiki wiki) { +package gplx.xowa.files.repos; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.xowa.wikis.*; +public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble { + private Xowe_wiki wiki; private final ListAdp repos = ListAdp_.new_(); + public Xowe_repo_mgr(Xowe_wiki wiki) { this.wiki = wiki; - Xoa_app app = wiki.App(); - xfer_mgr = new Xof_xfer_mgr(app.File_mgr()); + Xoae_app app = wiki.Appe(); + xfer_mgr = new Xof_xfer_mgr(app.File_mgr(), app.Wmf_mgr()); page_finder = new Xofw_wiki_wkr_base(wiki, app.Wiki_mgr()); - } private Xow_wiki wiki; + } public Xof_xfer_mgr Xfer_mgr() {return xfer_mgr;} private Xof_xfer_mgr xfer_mgr; - public Xofw_wiki_finder Page_finder() {return page_finder;} public Xow_repo_mgr Page_finder_(Xofw_wiki_finder v) {page_finder = v; return this;} private Xofw_wiki_finder page_finder; - public int Repos_len() {return repos.Count();} ListAdp repos = ListAdp_.new_(); + public Xowe_repo_mgr Page_finder_(Xofw_wiki_finder v) {page_finder = v; return this;} private Xofw_wiki_finder page_finder; + public int Repos_len() {return repos.Count();} public Xof_repo_pair Repos_get_by_wiki(byte[] wiki) { int len = repos.Count(); for (int i = 0; i < len; i++) { Xof_repo_pair pair = (Xof_repo_pair)repos.FetchAt(i); - if (Bry_.Eq(wiki, pair.Wiki_key())) + if (Bry_.Eq(wiki, pair.Wiki_domain())) return pair; } return null; @@ -41,10 +42,11 @@ public class Xow_repo_mgr implements GfoInvkAble { int len = repos.Count(); for (int i = 0; i < len; i++) { Xof_repo_pair pair = (Xof_repo_pair)repos.FetchAt(i); - if (pair.Repo_id() == id) return pair; + if (pair.Repo_idx() == id) return pair; } return null; } + public Xof_repo_pair[] Repos_ary() {if (repos_ary == null) repos_ary = (Xof_repo_pair[])repos.Xto_ary(Xof_repo_pair.class); return repos_ary;} private Xof_repo_pair[] repos_ary; public boolean Xfer_by_meta(Xof_xfer_itm xfer_itm, Xof_xfer_queue queue) { byte[] ttl = xfer_itm.Lnki_ttl(); Xof_meta_itm meta_itm = xfer_itm.Meta_itm(); @@ -79,12 +81,12 @@ public class Xow_repo_mgr implements GfoInvkAble { while (true) { boolean found = page_finder.Locate(tmp_rslt, repos, redirect); if (!found) return null; - Xow_wiki trg_wiki = wiki; + Xowe_wiki trg_wiki = wiki; int repo_idx = tmp_rslt.Repo_idx(); byte[] trg_wiki_key = Bry_.Empty; if (repo_idx != Xof_meta_itm.Repo_unknown) { - trg_wiki_key = wiki.File_mgr().Repo_mgr().Repos_get_at(repo_idx).Wiki_key(); - trg_wiki = wiki.App().Wiki_mgr().Get_by_key_or_make(trg_wiki_key); + trg_wiki_key = wiki.File_mgr().Repo_mgr().Repos_get_at(repo_idx).Wiki_domain(); + trg_wiki = wiki.Appe().Wiki_mgr().Get_by_key_or_make(trg_wiki_key); } Xof_meta_itm redirect_meta = trg_wiki.File_mgr().Meta_mgr().Get_itm_or_new(redirect, md5); if (tmp_rslt.Redirect() == Xop_redirect_mgr.Redirect_null_bry) { @@ -163,17 +165,17 @@ public class Xow_repo_mgr implements GfoInvkAble { } private Xofw_file_finder_rslt tmp_rslt = new Xofw_file_finder_rslt(); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_add)) return Add_repo(m.ReadBry("src"), m.ReadBry("trg")); - else if (ctx.Match(k, Invk_clear)) repos.Clear(); + else if (ctx.Match(k, Invk_clear)) {repos.Clear(); repos_ary = null;} // reset repos_ary variable else return GfoInvkAble_.Rv_unhandled; return this; } private static final String Invk_add = "add", Invk_clear = "clear"; public Xof_repo_pair Add_repo(byte[] src_repo_key, byte[] trg_repo_key) { - Xof_meta_mgr trg_meta = wiki.File_mgr().Meta_mgr(); - Xoa_repo_mgr repo_mgr = wiki.App().File_mgr().Repo_mgr(); + repos_ary = null; // reset repos_ary variable + Xoa_repo_mgr repo_mgr = wiki.Appe().File_mgr().Repo_mgr(); Xof_repo_itm src_repo = repo_mgr.Get_by(src_repo_key), trg_repo = repo_mgr.Get_by(trg_repo_key); byte[] src_wiki_key = src_repo.Wiki_key(), trg_wiki_key = trg_repo.Wiki_key(); - if (!Bry_.Eq(src_wiki_key, trg_wiki_key) && !Bry_.Eq(src_wiki_key, Xow_wiki_domain_.Key_home_bry)) throw Err_mgr._.fmt_(GRP_KEY, "add_repo", "wiki keys do not match: ~{0} ~{1}", String_.new_utf8_(src_wiki_key), String_.new_utf8_(trg_wiki_key)); - Xof_repo_pair pair = new Xof_repo_pair(repos.Count(), src_repo, trg_repo, trg_meta, src_wiki_key); + if (!Bry_.Eq(src_wiki_key, trg_wiki_key) && !Bry_.Eq(src_wiki_key, Xow_domain_.Tid_bry_home)) throw Err_mgr._.fmt_(GRP_KEY, "add_repo", "wiki keys do not match: ~{0} ~{1}", String_.new_utf8_(src_wiki_key), String_.new_utf8_(trg_wiki_key)); + Xof_repo_pair pair = new Xof_repo_pair((byte)repos.Count(), src_wiki_key, src_repo, trg_repo); repos.Add(pair); return pair; } @@ -204,7 +206,7 @@ public class Xow_repo_mgr implements GfoInvkAble { } return rv; } - private static final String GRP_KEY = "Xow_repo_mgr"; + private static final String GRP_KEY = "Xowe_repo_mgr"; } /* NOTE_1:reset_main_exists diff --git a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl.java b/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl.java deleted file mode 100644 index ca1271d60..000000000 --- a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl.java +++ /dev/null @@ -1,82 +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.files.wiki_orig; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.fsdb.*; import gplx.xowa2.files.orig_regy.*; -public class Xof_wiki_orig_tbl { - public static void Create_table(Db_conn p) { - Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql); - Sqlite_engine_.Idx_create(p, Idx_key); - } - public static void Select_list(Cancelable cancelable, Db_conn p, Xodb_ctx db_ctx, byte exec_tid, ListAdp itms, OrderedHash hash, Xof_url_bldr url_bldr, Xow_repo_mgr repo_mgr) { - Xof_wiki_orig_tbl_in_wkr in_wkr = new Xof_wiki_orig_tbl_in_wkr(); - in_wkr.Init(itms, hash); - in_wkr.Select_in(p, cancelable, db_ctx, 0, itms.Count()); - Xof_wiki_orig_tbl_evaluator.Rdr_done(exec_tid, itms, hash, url_bldr, repo_mgr); - } - public static Xof_orig_regy_itm Select_itm(Db_conn p, byte[] ttl) { - Xof_orig_regy_itm rv = Xof_orig_regy_itm.Null; - DataRdr rdr = Db_qry_.select_().From_(Tbl_name).Cols_all_().Where_(Db_crt_.eq_(String_.new_utf8_(ttl))).Exec_qry_as_rdr(p); - if (rdr.MoveNextPeer()) - rv = Xof_orig_regy_itm.load_(rdr); - rdr.Rls(); - return rv; - } - public static boolean Select_itm_exists(Db_conn p, byte[] ttl) { - Object o = Db_qry_.select_val_(Tbl_name, Fld_uid, Db_crt_.eq_(Fld_orig_ttl, String_.new_utf8_(ttl))).ExecRdr_val(p); - return o != null; - } - public static void Insert(Db_conn p, byte[] ttl, byte status, byte orig_repo, byte[] orig_redirect, int orig_ext, int orig_w, int orig_h) { - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Xof_wiki_orig_tbl.Insert_stmt(p); - Insert(stmt, ttl, status, orig_repo, orig_redirect, orig_ext, orig_w, orig_h); - } finally {stmt.Rls();} - } - public static Db_stmt Insert_stmt(Db_conn p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_orig_ttl, Fld_status, Fld_orig_repo, Fld_orig_ext, Fld_orig_w, Fld_orig_h, Fld_orig_redirect);} - public static void Insert(Db_stmt stmt, byte[] ttl, byte status, byte orig_repo, byte[] orig_redirect, int orig_ext, int orig_w, int orig_h) { - stmt.Clear() - .Val_bry_as_str(ttl) - .Val_byte(status) - .Val_byte(orig_repo) - .Val_int(orig_ext) - .Val_int(orig_w) - .Val_int(orig_h) - .Val_bry_as_str(orig_redirect) - .Exec_insert(); - } - public static final String Tbl_name = "wiki_orig" - , Fld_uid = "uid", Fld_orig_ttl = "orig_ttl", Fld_status = "status" - , Fld_orig_repo = "orig_repo", Fld_orig_ext = "orig_ext", Fld_orig_w = "orig_w", Fld_orig_h = "orig_h", Fld_orig_redirect = "orig_redirect" - ; - private static final Db_idx_itm - Idx_key = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS wiki_orig__ttl ON wiki_orig (orig_ttl);") - ; - public static final int Ord_uid = 0, Ord_orig_ttl = 1, Ord_status = 2, Ord_orig_repo = 3, Ord_orig_ext = 4, Ord_orig_w = 5, Ord_orig_h = 6, Ord_orig_redirect = 7; - static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS wiki_orig" - , "( uid integer NOT NULL PRIMARY KEY AUTOINCREMENT" - , ", orig_ttl varchar(1024) NOT NULL" - , ", status tinyint NOT NULL" // status of qry; 0=fail; 1=pass - , ", orig_repo tinyint NOT NULL" - , ", orig_ext integer NOT NULL" - , ", orig_w integer NOT NULL" - , ", orig_h integer NOT NULL" - , ", orig_redirect varchar(1024) NOT NULL" - , ");" - ); -} diff --git a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl_in_wkr.java b/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl_in_wkr.java deleted file mode 100644 index 5fed53b8a..000000000 --- a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_tbl_in_wkr.java +++ /dev/null @@ -1,101 +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.files.wiki_orig; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.core.primitives.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.files.fsdb.*; -import gplx.xowa2.files.orig_regy.*; -class Xof_wiki_orig_tbl_in_wkr extends gplx.xowa.dbs.tbls.Xodb_in_wkr_base { - private ListAdp itms_all; - @Override public int Interval() {return Sqlite_engine_.Stmt_arg_max;} - private OrderedHash itms_by_ttl; - public Xof_wiki_orig_tbl_in_wkr Init(ListAdp v, OrderedHash itms_by_ttl) {this.itms_all = v; this.itms_by_ttl = itms_by_ttl; return this;} - @Override public Db_qry Build_qry(Xodb_ctx db_ctx, int bgn, int end) { - Object[] part_ary = gplx.xowa.dbs.tbls.Xodb_in_wkr_base.In_ary(end - bgn); - String in_fld_name = Xof_wiki_orig_tbl.Fld_orig_ttl; - return Db_qry_.select_cols_ - ( Xof_wiki_orig_tbl.Tbl_name - , Db_crt_.in_(in_fld_name, part_ary) - ) - ; - } - @Override public void Fill_stmt(Db_stmt stmt, int bgn, int end) { - for (int i = bgn; i < end; i++) { - Xof_fsdb_itm itm = (Xof_fsdb_itm)itms_all.FetchAt(i); - stmt.Val_bry_as_str(itm.Lnki_ttl()); - } - } - @Override public void Eval_rslts(Cancelable cancelable, Xodb_ctx db_ctx, DataRdr rdr) { - while (rdr.MoveNextPeer()) { - if (cancelable.Canceled()) return; - Xof_orig_regy_itm itm = Xof_orig_regy_itm.load_(rdr); - byte[] itm_ttl = itm.Ttl(); - if (!itms_by_ttl.Has(itm_ttl)) // guard against dupes (shouldn't happen) - itms_by_ttl.Add(itm_ttl, itm); - } - } -} -class Xof_wiki_orig_tbl_evaluator { - public static void Rdr_done(byte exec_tid, ListAdp itms_all, OrderedHash itms_by_ttl, Xof_url_bldr url_bldr, Xow_repo_mgr repo_mgr) { - Xof_img_size img_size = new Xof_img_size(); - int len = itms_all.Count(); - for (int i = 0; i < len; i++) { - Xof_fsdb_itm fsdb_itm = (Xof_fsdb_itm)itms_all.FetchAt(i); - byte[] fsdb_itm_ttl = fsdb_itm.Lnki_ttl(); - fsdb_itm.Rslt_reg_(Xof_wiki_orig_wkr_.Tid_missing_reg); - Xof_orig_regy_itm regy_itm = (Xof_orig_regy_itm)itms_by_ttl.Fetch(fsdb_itm_ttl); if (regy_itm == null) continue; // not in reg; do full search - byte regy_itm_status = regy_itm.Status(); - fsdb_itm.Lnki_ext_(Xof_ext_.new_by_id_(regy_itm.Orig_ext())); // overwrite ext_id with whatever's in file_orig; needed for ogg -> oga / ogv - fsdb_itm.Rslt_reg_(regy_itm_status); - if (regy_itm_status > Xof_wiki_orig_wkr_.Tid_found_orig) continue; // only ignore if marked missing; DATE:2014-02-01 - byte repo_id = regy_itm.Repo_tid(); - Xof_repo_itm repo = null; - if (repo_id <= Xof_repo_itm.Repo_local) { // bounds check - fsdb_itm.Orig_repo_(repo_id); - Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_id(repo_id); - if (repo_pair == null) // shouldn't happen, but try to avoid null ref; - repo_pair = repo_mgr.Repos_get_at(repo_id); - fsdb_itm.Orig_wiki_(repo_pair.Wiki_key()); - repo = repo_pair.Trg(); - } - fsdb_itm.Orig_size_(regy_itm.Orig_w(), regy_itm.Orig_h()); - fsdb_itm.Rslt_reg_(Xof_wiki_orig_wkr_.Tid_found_orig); - if (Bry_.Len_gt_0(regy_itm.Orig_redirect())) // redirect exists; - fsdb_itm.Init_by_redirect(regy_itm.Orig_redirect()); - fsdb_itm.Html_size_calc(img_size, exec_tid); - Io_url html_url = url_bldr.Init_for_trg_file(fsdb_itm.Lnki_type_as_mode(), repo, fsdb_itm.Lnki_ttl(), fsdb_itm.Lnki_md5(), fsdb_itm.Lnki_ext(), fsdb_itm.Html_w(), fsdb_itm.Lnki_thumbtime(), fsdb_itm.Lnki_page()).Xto_url(); - fsdb_itm.Html_url_(html_url); - if (!Io_mgr._.ExistsFil(html_url)) - fsdb_itm.Rslt_reg_(Xof_wiki_orig_wkr_.Tid_missing_reg); - // build url; check if exists; - } - } -} -class Io_url_exists_mgr { - private gplx.cache.Gfo_cache_mgr_bry cache_mgr = new gplx.cache.Gfo_cache_mgr_bry(); - public Io_url_exists_mgr() { - cache_mgr.Compress_max_(Int_.MaxValue); - } - public boolean Has(Io_url url) { - byte[] url_key = url.RawBry(); - Object rv_obj = cache_mgr.Get_or_null(url_key); - if (rv_obj != null) return ((Bool_obj_ref)rv_obj).Val(); // cached val exists; use it - boolean exists = Io_mgr._.ExistsFil(url); - cache_mgr.Add(url_key, Bool_obj_ref.new_(exists)); - return exists; - } -} diff --git a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_wkr_.java b/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_wkr_.java deleted file mode 100644 index 17395cf98..000000000 --- a/400_xowa/src/gplx/xowa/files/wiki_orig/Xof_wiki_orig_wkr_.java +++ /dev/null @@ -1,21 +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.files.wiki_orig; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -public class Xof_wiki_orig_wkr_ { - public static final byte Tid_null = Byte_.Max_value_127, Tid_noop = 0, Tid_found_orig = 1, Tid_missing_reg = 2, Tid_missing_qry = 3, Tid_missing_bin = 4; -} diff --git a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm.java b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm.java index 3de6dc657..55e56eccc 100644 --- a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm.java +++ b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.fmtrs; import gplx.*; import gplx.xowa.*; public class Xoa_fmtr_itm implements GfoInvkAble { - public Xoa_fmtr_itm(Xoa_app app) {this.app = app;} private Xoa_app app; + public Xoa_fmtr_itm(Xoae_app app) {this.app = app;} private Xoae_app app; public String Src() {return src;} public Xoa_fmtr_itm Src_(String v) {this.src = v; return this;} private String src; public byte[] Fmt() {return fmt;} public Xoa_fmtr_itm Fmt_(byte[] v) {this.fmt = v; return this;} private byte[] fmt; public Object Sorter() { @@ -55,7 +55,7 @@ public class Xoa_fmtr_itm implements GfoInvkAble { ; } class Bfmtr_eval_invk implements Bry_fmtr_eval_mgr { - public Bfmtr_eval_invk(Xoa_app app) {this.app = app;} private Xoa_app app; + public Bfmtr_eval_invk(Xoae_app app) {this.app = app;} private Xoae_app app; public Bfmtr_eval_invk Invk_(GfoInvkAble invk) {this.invk = invk; return this;} private GfoInvkAble invk; public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = true; public byte[] Eval(byte[] cmd) { diff --git a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm_tst.java b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm_tst.java index 62b08777e..b85d9ad48 100644 --- a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm_tst.java +++ b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_itm_tst.java @@ -26,7 +26,7 @@ public class Xoa_fmtr_itm_tst { } } class Xoa_fmtr_itm_fxt { - private Xoa_app app; private Xoa_fmtr_itm itm; + private Xoae_app app; private Xoa_fmtr_itm itm; public void Clear() { app = Xoa_app_fxt.app_(); Xoa_app_fxt.wiki_tst_(app); // create enwiki diff --git a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_mgr.java b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_mgr.java index 96ce9d464..4e2055344 100644 --- a/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_mgr.java +++ b/400_xowa/src/gplx/xowa/fmtrs/Xoa_fmtr_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.fmtrs; import gplx.*; import gplx.xowa.*; import gplx.ios.*; public class Xoa_fmtr_mgr implements GfoInvkAble { - public Xoa_fmtr_mgr(Xoa_app app) {this.app = app;} private Xoa_app app; + public Xoa_fmtr_mgr(Xoae_app app) {this.app = app;} private Xoae_app app; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_new_grp)) return new Xoa_fmtr_itm(app); else return GfoInvkAble_.Rv_unhandled; diff --git a/400_xowa/src/gplx/xowa/gui/Xoa_gui_mgr.java b/400_xowa/src/gplx/xowa/gui/Xoa_gui_mgr.java index 44599b67c..afcb90394 100644 --- a/400_xowa/src/gplx/xowa/gui/Xoa_gui_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/Xoa_gui_mgr.java @@ -19,7 +19,7 @@ package gplx.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.gfui.*; import gplx.xowa.specials.search.*; import gplx.xowa.gui.menus.*; import gplx.xowa.gui.cmds.*; import gplx.xowa.cfgs.gui.*; import gplx.xowa.users.*; import gplx.xowa.gui.bnds.*; import gplx.xowa.gui.views.*; import gplx.xowa.gui.urls.url_macros.*; public class Xoa_gui_mgr implements GfoEvObj, GfoInvkAble { - public Xoa_gui_mgr(Xoa_app app) { + public Xoa_gui_mgr(Xoae_app app) { evMgr = GfoEvMgr.new_(this); this.app = app; browser_win = new Xog_win_itm(app, this); @@ -30,7 +30,7 @@ public class Xoa_gui_mgr implements GfoEvObj, GfoInvkAble { search_suggest_mgr = new Xog_search_suggest_mgr(this); } public GfoEvMgr EvMgr() {return evMgr;} private GfoEvMgr evMgr; - public Xoa_app App() {return app;} private Xoa_app app; + public Xoae_app App() {return app;} private Xoae_app app; public Xog_win_itm Browser_win() {return browser_win;} private Xog_win_itm browser_win; public IptCfgRegy Ipt_cfgs() {return ipt_cfgs;} IptCfgRegy ipt_cfgs = new IptCfgRegy(); public Xog_bnd_mgr Bnd_mgr() {return bnd_mgr;} private Xog_bnd_mgr bnd_mgr; @@ -60,7 +60,7 @@ public class Xoa_gui_mgr implements GfoEvObj, GfoInvkAble { public void Kit_(Gfui_kit kit) { this.kit = kit; kit.Kit_init(browser_win.Usr_dlg()); - kit.Kit_term_cbk_(GfoInvkAbleCmd.new_(app, Xoa_app.Invk_term_cbk)); + kit.Kit_term_cbk_(GfoInvkAbleCmd.new_(app, Xoae_app.Invk_term_cbk)); browser_win.Init_by_kit(kit); layout.Init(browser_win); cmd_mgr.Init_by_kit(app); diff --git a/400_xowa/src/gplx/xowa/gui/Xog_html_mgr.java b/400_xowa/src/gplx/xowa/gui/Xog_html_mgr.java index d62fefff3..44b5126b7 100644 --- a/400_xowa/src/gplx/xowa/gui/Xog_html_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/Xog_html_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.portal.*; public class Xog_html_mgr implements GfoInvkAble { - public Xog_html_mgr(Xoa_app app) {this.app = app; portal_mgr = new Xoa_portal_mgr(app);} private Xoa_app app; + public Xog_html_mgr(Xoae_app app) {this.app = app; portal_mgr = new Xoa_portal_mgr(app);} private Xoae_app app; public Xoa_portal_mgr Portal_mgr() {return portal_mgr;} private Xoa_portal_mgr portal_mgr; public boolean Javascript_enabled() {return javascript_enabled;} private boolean javascript_enabled = true; private void Javascript_enabled_(boolean v) { diff --git a/400_xowa/src/gplx/xowa/gui/Xog_resizer.java b/400_xowa/src/gplx/xowa/gui/Xog_resizer.java index 32add968f..b4e7b450e 100644 --- a/400_xowa/src/gplx/xowa/gui/Xog_resizer.java +++ b/400_xowa/src/gplx/xowa/gui/Xog_resizer.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.gui; import gplx.*; import gplx.xowa.*; import gplx.gfui.*; import gplx.xowa.users.*; import gplx.xowa.gui.views.*; public class Xog_resizer { - public void Exec_win_resize(Xoa_app app, int main_w, int main_h) { + public void Exec_win_resize(Xoae_app app, int main_w, int main_h) { Xog_layout layout = app.Gui_mgr().Layout(); Xog_win_itm main_win = app.Gui_mgr().Browser_win(); GfuiBtn go_bwd_btn = main_win.Go_bwd_btn(), go_fwd_btn = main_win.Go_fwd_btn(), url_exec_btn = main_win.Url_exec_btn(), search_exec_btn = main_win.Search_exec_btn(), find_fwd_btn = main_win.Find_fwd_btn(), find_bwd_btn = main_win.Find_bwd_btn(), find_close_btn = main_win.Find_close_btn(); diff --git a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_itm_srl_tst.java b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_itm_srl_tst.java index 52a34852e..3ad3a15dc 100644 --- a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_itm_srl_tst.java +++ b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_itm_srl_tst.java @@ -28,7 +28,7 @@ public class Xog_bnd_itm_srl_tst { } } class Xog_bnd_itm_srl_fxt { - private Xoa_app app; + private Xoae_app app; public void Reset() { app = Xoa_app_fxt.app_(); } diff --git a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java index 7197bcbc1..3cecc7caf 100644 --- a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java @@ -28,7 +28,7 @@ public class Xog_bnd_mgr { public int Len() {return regy.Count();} public Xog_bnd_itm Get_at(int i) {return (Xog_bnd_itm)regy.FetchAt(i);} public Xog_bnd_itm Get_or_null(String v) {return (Xog_bnd_itm)regy.Fetch(v);} - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { Add_system_bnds(); Add_custom_bnds(); // NOTE: should go after Add_system_bnds in case user overrides any; Bind_all(); diff --git a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr_srl.java b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr_srl.java index 51b43a86f..adb2588c2 100644 --- a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr_srl.java +++ b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr_srl.java @@ -18,10 +18,10 @@ along with this program. If not, see . package gplx.xowa.gui.bnds; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.core.primitives.*; import gplx.srls.dsvs.*; import gplx.gfui.*; import gplx.xowa.cfgs2.*; public class Xog_bnd_mgr_srl extends Dsv_wkr_base { - private Xoa_app app; + private Xoae_app app; private Xog_bnd_mgr bnd_mgr; private int uid; private byte[] box_bry, ipt_bry; - public Xog_bnd_mgr_srl(Xoa_app app, Xog_bnd_mgr bnd_mgr) { + public Xog_bnd_mgr_srl(Xoae_app app, Xog_bnd_mgr bnd_mgr) { this.app = app; this.bnd_mgr = bnd_mgr; } @@ -61,7 +61,7 @@ public class Xog_bnd_mgr_srl extends Dsv_wkr_base { Xog_bnd_mgr_srl.Update_cfg(app, bnd, box, ipt); uid = -1; box_bry = ipt_bry = null; } - public static void Update_cfg(Xoa_app app, Xog_bnd_itm bnd, int box, IptArg ipt) { + public static void Update_cfg(Xoae_app app, Xog_bnd_itm bnd, int box, IptArg ipt) { String src = Xocfg_bnd_itm_srl.Src(app, box, ipt); String cfg_key = String_.Concat("app.cfg.get.gui.bnds.init('", bnd.Key(), "').src"); app.Cfg_mgr().Set_by_app(cfg_key, src); diff --git a/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr.java b/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr.java index f9c4c2723..fac3f7be0 100644 --- a/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr.java @@ -18,28 +18,28 @@ along with this program. If not, see . package gplx.xowa.gui.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.apis.xowa.*; import gplx.xowa.langs.msgs.*; public class Xog_cmd_mgr { - public void Init_by_kit(Xoa_app app) { + public void Init_by_kit(Xoae_app app) { invk_mgr.Ctor(app, this); Load_ctg_msgs(app); Load_cmd_msgs(app); } public Xog_cmd_mgr_invk Invk_mgr() {return invk_mgr;} private Xog_cmd_mgr_invk invk_mgr = new Xog_cmd_mgr_invk(); - private void Load_ctg_msgs(Xoa_app app) { + private void Load_ctg_msgs(Xoae_app app) { Xog_cmd_ctg[] ary = Xog_ctg_itm_.Ary; int len = ary.length; Xol_lang lang = app.User().Lang(); for (int i = 0; i < len; i++) { Xog_cmd_ctg itm = ary[i]; - itm.Name_(Xol_msg_mgr_.Get_msg_val_gui_or_null(lang, Xog_cmd_itm_.Msg_pre_ctg, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_name)); + itm.Name_(Xol_msg_mgr_.Get_msg_val_gui_or_null(app.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_ctg, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_name)); } } - private void Load_cmd_msgs(Xoa_app app) { + private void Load_cmd_msgs(Xoae_app app) { int len = this.Len(); Xol_lang lang = app.User().Lang(); for (int i = 0; i < len; i++) { Xog_cmd_itm itm = this.Get_at(i); - itm.Name_(Xol_msg_mgr_.Get_msg_val_gui_or_null(lang, Xog_cmd_itm_.Msg_pre_api, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_name)); - itm.Tip_(Xol_msg_mgr_.Get_msg_val_gui_or_null(lang, Xog_cmd_itm_.Msg_pre_api, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_tip)); + itm.Name_(Xol_msg_mgr_.Get_msg_val_gui_or_null(app.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_api, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_name)); + itm.Tip_(Xol_msg_mgr_.Get_msg_val_gui_or_null(app.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_api, itm.Key_bry(), Xog_cmd_itm_.Msg_suf_tip)); } } public int Len() {return Xog_cmd_itm_.Regy_len();} diff --git a/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr_invk.java b/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr_invk.java index bc1d499fc..fb21f0e49 100644 --- a/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr_invk.java +++ b/400_xowa/src/gplx/xowa/gui/cmds/Xog_cmd_mgr_invk.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.xowa.gui.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; public class Xog_cmd_mgr_invk implements GfoInvkAble { - private Xoa_app app; private Xog_cmd_mgr cmd_mgr; - public void Ctor(Xoa_app app, Xog_cmd_mgr cmd_mgr) {this.app = app; this.cmd_mgr = cmd_mgr;} + private Xoae_app app; private Xog_cmd_mgr cmd_mgr; + public void Ctor(Xoae_app app, Xog_cmd_mgr cmd_mgr) {this.app = app; this.cmd_mgr = cmd_mgr;} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { Xog_cmd_itm cmd_itm = cmd_mgr.Get_or_null(k); if (cmd_itm == null) return GfoInvkAble_.Rv_unhandled; diff --git a/400_xowa/src/gplx/xowa/gui/history/Xog_history_mgr.java b/400_xowa/src/gplx/xowa/gui/history/Xog_history_mgr.java index 6d78aa543..0a4d37af2 100644 --- a/400_xowa/src/gplx/xowa/gui/history/Xog_history_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/history/Xog_history_mgr.java @@ -19,30 +19,30 @@ package gplx.xowa.gui.history; import gplx.*; import gplx.xowa.*; import gplx.xo public class Xog_history_mgr { private final OrderedHash hash = OrderedHash_.new_bry_(); private final Xog_history_stack stack = new Xog_history_stack(); public int Count() {return hash.Count();} - public Xoa_page Cur_page(Xow_wiki wiki) {return Get_or_fetch(wiki, stack.Cur_itm());} - public Xoa_page Go_bwd(Xow_wiki wiki) {return Go_by_dir(wiki, Bool_.N);} - public Xoa_page Go_fwd(Xow_wiki wiki) {return Go_by_dir(wiki, Bool_.Y);} - public Xoa_page Go_by_dir(Xow_wiki wiki, boolean fwd) { + public Xoae_page Cur_page(Xowe_wiki wiki) {return Get_or_fetch(wiki, stack.Cur_itm());} + public Xoae_page Go_bwd(Xowe_wiki wiki) {return Go_by_dir(wiki, Bool_.N);} + public Xoae_page Go_fwd(Xowe_wiki wiki) {return Go_by_dir(wiki, Bool_.Y);} + public Xoae_page Go_by_dir(Xowe_wiki wiki, boolean fwd) { Xog_history_itm itm = fwd ? stack.Go_fwd() : stack.Go_bwd(); - if (itm == Xog_history_itm.Null) return Xoa_page.Empty; - Xoa_page rv = Get_or_fetch(wiki, itm); + if (itm == Xog_history_itm.Null) return Xoae_page.Empty; + Xoae_page rv = Get_or_fetch(wiki, itm); byte[] anch_key = itm.Anch(); rv.Url().Anchor_bry_(anch_key); // must override anchor as it may be different for cached page rv.Html_data().Bmk_pos_(itm.Bmk_pos()); return rv; } - public void Add(Xoa_page page) { + public void Add(Xoae_page page) { Xog_history_itm new_itm = Xog_history_mgr.new_(page); stack.Add(new_itm); byte[] page_key = Build_page_key(page); if (!hash.Has(page_key)) hash.Add(page_key, page); } - public void Update_html_doc_pos(Xoa_page page, byte history_nav_type) { + public void Update_html_doc_pos(Xoae_page page, byte history_nav_type) { Xog_history_itm itm = Get_recent(page, history_nav_type); if (itm != null) itm.Bmk_pos_(page.Html_data().Bmk_pos()); } - private Xog_history_itm Get_recent(Xoa_page page, byte history_nav_type) { + private Xog_history_itm Get_recent(Xoae_page page, byte history_nav_type) { int pos = -1; int list_pos = stack.Cur_pos(); switch (history_nav_type) { @@ -55,16 +55,16 @@ public class Xog_history_mgr { Xog_history_itm page_itm = Xog_history_mgr.new_(page); return page_itm.Eq_wo_bmk_pos(recent) ? recent : null; // check that recent page actually matches current; DATE:2014-05-10 } - private Xoa_page Get_or_fetch(Xow_wiki wiki, Xog_history_itm itm) { + private Xoae_page Get_or_fetch(Xowe_wiki wiki, Xog_history_itm itm) { byte[] page_key = Build_page_key(itm.Wiki(), itm.Page(), itm.Qarg()); - Xoa_page rv = (Xoa_page)hash.Fetch(page_key); + Xoae_page rv = (Xoae_page)hash.Fetch(page_key); if (rv != null) return rv; Xoa_ttl ttl = Xoa_ttl.parse_(wiki, itm.Page()); return wiki.Data_mgr().Get_page(ttl, false); } - private static byte[] Build_page_key(Xoa_page page) {return Build_page_key(page.Wiki().Domain_bry(), page.Ttl().Full_url(), page.Url().Args_all_as_bry());} + private static byte[] Build_page_key(Xoae_page page) {return Build_page_key(page.Wiki().Domain_bry(), page.Ttl().Full_url(), page.Url().Args_all_as_bry());} private static byte[] Build_page_key(byte[] wiki_key, byte[] page_key, byte[] args_key) {return Bry_.Add_w_dlm(Byte_ascii.Pipe, wiki_key, page_key, args_key);} - public static Xog_history_itm new_(Xoa_page pg) { + public static Xog_history_itm new_(Xoae_page pg) { byte[] wiki = pg.Wiki().Domain_bry(); byte[] page = pg.Ttl().Full_url(); // get page_name only (no anchor; no query args) byte[] anch = pg.Url().Anchor_bry(); diff --git a/400_xowa/src/gplx/xowa/gui/history/Xog_history_stack_tst.java b/400_xowa/src/gplx/xowa/gui/history/Xog_history_stack_tst.java index b0aecff20..9bbadb2d1 100644 --- a/400_xowa/src/gplx/xowa/gui/history/Xog_history_stack_tst.java +++ b/400_xowa/src/gplx/xowa/gui/history/Xog_history_stack_tst.java @@ -47,7 +47,7 @@ class Xog_history_stack_fxt { url_parser = app.Url_parser(); } return this; - } private Xoa_app app; private Xow_wiki wiki; private Xog_history_stack stack = new Xog_history_stack(); private Xoa_url_parser url_parser; + } private Xoae_app app; private Xowe_wiki wiki; private Xog_history_stack stack = new Xog_history_stack(); private Xoa_url_parser url_parser; public Xog_history_stack_fxt Test_cur(String expd) { Xog_history_itm page = stack.Cur_itm(); String actl = page == null ? null : String_.new_utf8_(page.Page()); @@ -73,7 +73,7 @@ class Xog_history_stack_fxt { public Xog_history_stack_fxt Exec_add_one(String ttl_str, String arg_str) { byte[] ttl_bry = Bry_.new_utf8_(ttl_str); Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); - Xoa_page page = Xoa_page.test_(wiki, ttl); + Xoae_page page = Xoae_page.test_(wiki, ttl); byte[] url_bry = ttl_bry; if (arg_str != null) url_bry = Bry_.Add(url_bry, Bry_.new_utf8_(arg_str)); Xoa_url url = url_parser.Parse(url_bry); diff --git a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java index bfec379b9..e15474de3 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/menus/Xog_menu_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.gui.menus; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.gui.menus.dom.*; public class Xog_menu_mgr implements GfoInvkAble { - private Xoa_app app; + private Xoae_app app; public Xog_menu_mgr(Xoa_gui_mgr gui_mgr) { menu_bldr = new Xog_mnu_bldr(); regy = new Xog_mnu_regy(gui_mgr); @@ -29,7 +29,7 @@ public class Xog_menu_mgr implements GfoInvkAble { public Xog_popup_mnu_mgr Popup() {return popup_mnu_mgr;} private Xog_popup_mnu_mgr popup_mnu_mgr; public Xog_window_mnu_mgr Window() {return window_mnu_mgr;} private Xog_window_mnu_mgr window_mnu_mgr; public Xog_mnu_bldr Menu_bldr() {return menu_bldr;} private Xog_mnu_bldr menu_bldr; - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { this.app = app; regy.Init_by_app(app); } diff --git a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_base.java b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_base.java index 1cac50ecc..f1a255647 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_base.java +++ b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_base.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.gui.menus.dom; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.gui.menus.*; -import gplx.gfui.*; import gplx.xowa.gui.cmds.*; +import gplx.gfui.*; import gplx.xowa.langs.*; import gplx.xowa.gui.cmds.*; public abstract class Xog_mnu_base implements GfoInvkAble { private ListAdp list = ListAdp_.new_(); public Xog_mnu_base() {evt_mgr = new Xog_mnu_evt_mgr(this);} diff --git a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_bldr.java b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_bldr.java index 7bb78db29..107ad62e3 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_bldr.java +++ b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_bldr.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.gui.menus.dom; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.gui.menus.*; import gplx.gfui.*; import gplx.xowa.gui.cmds.*; public class Xog_mnu_bldr { - private Xoa_app app; private Gfui_kit kit; private Io_url img_dir; - public void Init_by_kit(Xoa_app app, Gfui_kit kit, Io_url img_dir) { + private Xoae_app app; private Gfui_kit kit; private Io_url img_dir; + public void Init_by_kit(Xoae_app app, Gfui_kit kit, Io_url img_dir) { this.app = app; this.kit = kit; this.img_dir = img_dir; } public void Build(Gfui_mnu_grp grp_gui, Xog_mnu_grp grp_dom) { diff --git a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_grp.java b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_grp.java index 2935087a8..696b63631 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_grp.java +++ b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_grp.java @@ -22,7 +22,7 @@ public class Xog_mnu_grp extends Xog_mnu_base { public Xog_mnu_grp(Xoa_gui_mgr gui_mgr, boolean mnu_is_popup, String key) { this.app = gui_mgr.App(); this.mnu_is_popup = mnu_is_popup; this.key = key; this.Ctor(gui_mgr); - } private Xoa_app app; + } private Xoae_app app; public String Key() {return key;} private String key; private boolean mnu_is_popup; public Gfui_mnu_grp Under_mnu() { if (under_mnu.Disposed()) Build(); // NOTE: menu may be disposed when calling .dispose on Swt_html; rebuild if needed; DATE:2014-07-09 diff --git a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_itm.java b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_itm.java index 6095ac03b..f507e0e60 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_itm.java +++ b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_itm.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.gui.menus.dom; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.gui.menus.*; -import gplx.gfui.*; import gplx.xowa.gui.cmds.*; import gplx.xowa.langs.msgs.*; +import gplx.gfui.*; import gplx.xowa.langs.*; import gplx.xowa.gui.cmds.*; import gplx.xowa.langs.msgs.*; public class Xog_mnu_itm extends Xog_mnu_base { private Xoa_gui_mgr gui_mgr; public Xog_mnu_itm(Xoa_gui_mgr gui_mgr, String key) { @@ -45,9 +45,9 @@ public class Xog_mnu_itm extends Xog_mnu_base { return this; } public void Init_by_lang(Xol_lang lang) { - this.name = Xol_msg_mgr_.Get_msg_val_gui_or(lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_name, name); // NOTE: custom cmds must use Get_val_or, not Get_val_or_null; DATE:2014-05-30 - this.shortcut = Xol_msg_mgr_.Get_msg_val_gui_or(lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_letter, shortcut); - this.img_nest = Img_nest_of(Xol_msg_mgr_.Get_msg_val_gui_or(lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_image, "")); + this.name = Xol_msg_mgr_.Get_msg_val_gui_or(lang.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_name, name); // NOTE: custom cmds must use Get_val_or, not Get_val_or_null; DATE:2014-05-30 + this.shortcut = Xol_msg_mgr_.Get_msg_val_gui_or(lang.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_letter, shortcut); + this.img_nest = Img_nest_of(Xol_msg_mgr_.Get_msg_val_gui_or(lang.Lang_mgr(), lang, Xog_cmd_itm_.Msg_pre_api, key_bry, Xog_cmd_itm_.Msg_suf_image, "")); this.gui_text = Gui_text_calc(name, shortcut); } public void Init_by_custom(String name, String shortcut, String img_nest_str) { diff --git a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_regy.java b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_regy.java index 56a7a5b40..9e3b17c6b 100644 --- a/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_regy.java +++ b/400_xowa/src/gplx/xowa/gui/menus/dom/Xog_mnu_regy.java @@ -23,7 +23,7 @@ public class Xog_mnu_regy { public Xog_mnu_regy(Xoa_gui_mgr gui_mgr) { this.gui_mgr = gui_mgr; } - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { hash = OrderedHash_.new_(); Xog_cmd_mgr cmd_mgr = app.Gui_mgr().Cmd_mgr(); int len = cmd_mgr.Len(); diff --git a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java index fb4654142..8026c9d9b 100644 --- a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java +++ b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java @@ -19,35 +19,37 @@ package gplx.xowa.gui.urls; import gplx.*; import gplx.xowa.*; import gplx.xowa. import gplx.xowa.files.*; import gplx.xowa.gui.views.*; public class Xog_url_wkr { private Xoh_href href = new Xoh_href(); - private Xoa_app app; private Xog_win_itm win; private Xoa_page page; + private Xoae_app app; private Xog_win_itm win; private Xowe_wiki wiki; private Xoae_page page; public byte Href_tid() {return href.Tid();} public Xog_url_wkr Parse(Xog_win_itm win, String href_str) { if (href_str == null) return this; // text is not link; return; byte[] href_bry = Bry_.new_utf8_(href_str); - this.win = win; this.app = win.App(); this.page = win.Active_page(); - app.Href_parser().Parse(href, href_bry, page.Wiki(), page.Ttl().Page_url()); + this.win = win; this.app = win.App(); + this.page = win.Active_page(); + this.wiki = win.Active_tab().Wiki(); + app.Href_parser().Parse(href, href_bry, wiki, page.Ttl().Page_url()); return this; } public Xoa_url Exec() { byte[] href_bry = href.Raw(); switch (href.Tid()) { - case Xoh_href.Tid_null: return Rslt_handled; // url is invalid; return handled (which effectively ignores) - case Xoh_href.Tid_xowa: return Exec_url_xowa(app); // xowa:app.version - case Xoh_href.Tid_http: return Exec_url_http(app); // http://site.org - case Xoh_href.Tid_anchor: return Exec_url_anchor(win); // #anchor - case Xoh_href.Tid_xcmd: return Exec_url_xcmd(win); // /xcmd/app.version - case Xoh_href.Tid_file: return Exec_url_file(app, page, win, href_bry); // file:///xowa/A.png - default: return Exec_url_page(app, page, win, href_bry); // Page /wiki/Page + case Xoh_href.Tid_null: return Rslt_handled; // url is invalid; return handled (which effectively ignores) + case Xoh_href.Tid_xowa: return Exec_url_xowa(app); // xowa:app.version + case Xoh_href.Tid_http: return Exec_url_http(app); // http://site.org + case Xoh_href.Tid_anchor: return Exec_url_anchor(win); // #anchor + case Xoh_href.Tid_xcmd: return Exec_url_xcmd(win); // /xcmd/app.version + case Xoh_href.Tid_file: return Exec_url_file(app, wiki, page, win, href_bry); // file:///xowa/A.png + default: return Exec_url_page(app, wiki, page, win, href_bry); // Page /wiki/Page } } - private Xoa_url Exec_url_xowa(Xoa_app app) { // EX: xowa:app.version + private Xoa_url Exec_url_xowa(Xoae_app app) { // EX: xowa:app.version // NOTE: must catch exception else it will bubble to SWT browser and raise secondary exception of xowa is not a registered protocol try {app.Gfs_mgr().Run_str(String_.new_utf8_(href.Page()));} catch (Exception e) {app.Gui_mgr().Kit().Ask_ok("", "", Err_.Message_gplx_brief(e));} return Rslt_handled; } - private Xoa_url Exec_url_http(Xoa_app app) { // EX: http:a.org - app.Launcher().Exec_view_web(href.Raw()); + private Xoa_url Exec_url_http(Xoae_app app) { // EX: http:a.org + app.Prog_mgr().Exec_view_web(href.Raw()); return Rslt_handled; } private Xoa_url Exec_url_anchor(Xog_win_itm win) { // EX: #anchor @@ -66,32 +68,31 @@ public class Xog_url_wkr { win.Invk(GfsCtx.new_(), 0, xowa_cmd_str, m); return Rslt_handled; } - private Xoa_url Exec_url_file(Xoa_app app, Xoa_page page, Xog_win_itm win, byte[] href_bry) { // EX: file:///xowa/A.png - href_bry = app.Encoder_mgr().Url().Decode(href_bry); + private Xoa_url Exec_url_file(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xog_win_itm win, byte[] href_bry) { // EX: file:///xowa/A.png + href_bry = Xoa_app_.Utl_encoder_mgr().Url().Decode(href_bry); Io_url href_url = Io_url_.http_any_(String_.new_utf8_(href_bry), Op_sys.Cur().Tid_is_wnt()); gplx.gfui.Gfui_html html_box = win.Active_html_box(); - String xowa_ttl = page.Wiki().Gui_mgr().Cfg_browser().Content_editable() + String xowa_ttl = wiki.Gui_mgr().Cfg_browser().Content_editable() ? html_box.Html_active_atr_get_str(gplx.xowa.html.Xoh_consts.Atr_xowa_title_str, null) - : Xoh_dom_.Title_by_href(app.Encoder_mgr().Comma(), app.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(), href_bry, Bry_.new_utf8_(html_box.Html_doc_html())); + : Xoh_dom_.Title_by_href(Xoa_app_.Utl_encoder_mgr().Comma(), app.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(), href_bry, Bry_.new_utf8_(html_box.Html_doc_html())); if (!Io_mgr._.ExistsFil(href_url)) { Xof_xfer_itm xfer_itm = new Xof_xfer_itm(); - byte[] title = app.Encoder_mgr().Url().Decode(Bry_.new_utf8_(xowa_ttl)); + byte[] title = Xoa_app_.Utl_encoder_mgr().Url().Decode(Bry_.new_utf8_(xowa_ttl)); xfer_itm.Init_by_lnki(title, Bry_.Empty, Xop_lnki_type.Id_none, -1, -1, -1, Xof_doc_thumb.Null, Xof_doc_page.Null); - page.Wiki().File_mgr().Find_meta(xfer_itm); + wiki.File_mgr().Find_meta(xfer_itm); page.File_queue().Clear(); page.File_queue().Add(xfer_itm); // NOTE: set elem_id to "impossible" number, otherwise it will auto-update an image on the page with a super-large size; [[File:Alfred Sisley 062.jpg]] - page.Wiki().File_mgr().Repo_mgr().Xfer_mgr().Force_orig_y_(); - page.File_queue().Exec(Xof_exec_tid.Tid_viewer_app, win.Usr_dlg(), page.Wiki(), page); - page.Wiki().File_mgr().Repo_mgr().Xfer_mgr().Force_orig_n_(); + wiki.File_mgr().Repo_mgr().Xfer_mgr().Force_orig_y_(); + page.File_queue().Exec(Xof_exec_tid.Tid_viewer_app, win.Usr_dlg(), wiki, page); + wiki.File_mgr().Repo_mgr().Xfer_mgr().Force_orig_n_(); } if (Io_mgr._.ExistsFil(href_url)) { - ProcessAdp media_player = app.Launcher().App_by_ext(href_url.Ext()); + ProcessAdp media_player = app.Prog_mgr().App_by_ext(href_url.Ext()); media_player.Run(href_url); } return Rslt_handled; } - private Xoa_url Exec_url_page(Xoa_app app, Xoa_page page, Xog_win_itm win, byte[] href_bry) { // EX: "Page"; "/wiki/Page"; // rewritten; DATE:2014-01-19 - Xow_wiki wiki = page.Wiki(); + private Xoa_url Exec_url_page(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xog_win_itm win, byte[] href_bry) { // EX: "Page"; "/wiki/Page"; // rewritten; DATE:2014-01-19 Xoa_url rv = app.Url_parser().Parse(href_bry); // needed for query_args byte[] anchor_bry = href.Anchor(); byte[] page_bry = rv.Page_bry(); diff --git a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr_tst.java b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr_tst.java index 7a0c79e1b..983c7349b 100644 --- a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr_tst.java @@ -67,11 +67,11 @@ public class Xog_url_wkr_tst { } } class Xog_url_wkr_fxt { - private Xoa_app app; private Xow_wiki wiki; + private Xoae_app app; private Xowe_wiki wiki; private Xog_win_itm win; private Xog_url_wkr url_wkr = new Xog_url_wkr(); private String init_raw; - public Xoa_app App() {return app;} + public Xoae_app App() {return app;} public Xog_url_wkr_fxt Expd_tid_(byte v) {expd_tid = v; return this;} private byte expd_tid; public Xog_url_wkr_fxt Expd_wiki_(String v) {expd_wiki = v; return this;} private String expd_wiki; public Xog_url_wkr_fxt Expd_page_(String v) {expd_page = v; return this;} private String expd_page; @@ -80,9 +80,9 @@ class Xog_url_wkr_fxt { public void Clear() { app = Xoa_app_fxt.app_(); wiki = Xoa_app_fxt.wiki_tst_(app); - Xoa_app_fxt.Init_gui(app); + Xoa_app_fxt.Init_gui(app, wiki); win = app.Gui_mgr().Browser_win(); - win.Active_page_(Xoa_page.test_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_utf8_("test")))); // TODO: remove unnecessary page init + win.Active_page_(Xoae_page.test_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_utf8_("test")))); // TODO: remove unnecessary page init expd_wiki = expd_page = expd_qargs = expd_anchor = null; } public Xog_url_wkr_fxt Init_exec(String raw) { diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java index 8e52601f0..ac4643dab 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.gfui.*; import gplx.html.*; import gplx.xowa.gui.menus.*; import gplx.xowa.gui.menus.dom.*; import gplx.xowa.html.modules.*; import gplx.xowa.pages.*; public class Xog_html_itm implements GfoInvkAble, GfoEvObj { - private Xoa_app app; + private Xoae_app app; public Xog_html_itm(Xog_tab_itm owner_tab) { this.owner_tab = owner_tab; app = owner_tab.Tab_mgr().Win().App(); @@ -48,21 +48,21 @@ public class Xog_html_itm implements GfoInvkAble, GfoEvObj { public String Html_selected_get_text_or_href() {return Html_extract_text(html_box.Html_doc_selected_get_text_or_href());} public String Html_selected_get_active_or_selection() {return Html_extract_text(html_box.Html_doc_selected_get_active_or_selection());} private String Html_extract_text(String v) { - Xoa_page page = owner_tab.Page(); - String site = page.Wiki().Domain_str(); + Xoae_page page = owner_tab.Page(); + String site = owner_tab.Wiki().Domain_str(); String ttl = String_.new_utf8_(page.Ttl().Full_db()); return Xog_html_itm__href_extractor.Html_extract_text(site, ttl, v); } - public void Show(Xoa_page page) { + public void Show(Xoae_page page) { byte view_mode = owner_tab.View_mode(); - byte[] html_src = page.Wiki().Html_mgr().Page_wtr_mgr().Gen(page, view_mode); + byte[] html_src = owner_tab.Wiki().Html_mgr().Page_wtr_mgr().Gen(page, view_mode); Html_src_(page, html_src); if (view_mode == Xopg_view_mode.Tid_read){ // used only for Xosrh test; DATE:2014-01-29 html_box.Html_doc_body_focus(); // NOTE: only focus if read so up / down will scroll box; edit / html should focus edit-box; DATE:2014-06-05 page.Root().Data_htm_(html_src); } } - private void Html_src_(Xoa_page page, byte[] html_bry) { + private void Html_src_(Xoae_page page, byte[] html_bry) { String html_str = String_.new_utf8_(html_bry); if (owner_tab.Tab_mgr().Html_load_tid__url()) { Io_url html_url = app.User().Fsys_mgr().App_temp_html_dir().GenSubFil_ary(owner_tab.Tab_key(), ".html"); @@ -122,7 +122,7 @@ public class Xog_html_itm implements GfoInvkAble, GfoEvObj { module_popups_done = true; } private boolean module_packed_done = false, module_popups_done = false; - public void Tab_selected(Xoa_page page) { + public void Tab_selected(Xoae_page page) { Xoh_module_mgr module_mgr = page.Html_data().Module_mgr(); if (module_mgr.Itm_gallery().Enabled() && !module_packed_done) this.Html_gallery_packed_exec(); @@ -150,7 +150,7 @@ public class Xog_html_itm implements GfoInvkAble, GfoEvObj { private boolean Scroll_page_by_id(String id) { return (id == null) ? false - : html_box.Html_elem_scroll_into_view(app.Encoder_mgr().Id().Encode_str(id)); + : html_box.Html_elem_scroll_into_view(Xoa_app_.Utl_encoder_mgr().Id().Encode_str(id)); } public void Js_enabled_(boolean v) { html_box.Html_js_enabled_(v); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java index eeac3eb1c..d092a91b1 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.threads.*; import gplx.xowa.xtns.pfuncs.ifs.*; public class Xog_html_js_cbk implements GfoInvkAble { - private Xoa_app app; + private Xoae_app app; private Xog_html_itm html_itm; private Xop_root_tkn root = new Xop_root_tkn(); private Bry_bfr bfr = Bry_bfr.reset_(255); @@ -41,8 +41,7 @@ public class Xog_html_js_cbk implements GfoInvkAble { return rv; } private String Parse_to_html(GfoMsg m) { - Xoa_page page = html_itm.Owner_tab().Page(); - Xow_wiki wiki = page.Wiki(); + Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); Xop_ctx ctx = wiki.Ctx(); boolean old_para_enabled = ctx.Para().Enabled(); byte[] raw = Bry_.new_utf8_(m.Args_getAt(0).Val_to_str_or_empty()); @@ -59,10 +58,10 @@ public class Xog_html_js_cbk implements GfoInvkAble { } } private String Get_page(GfoMsg m) { - Xow_wiki wiki = html_itm.Owner_tab().Page().Wiki(); + Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); try { Xoa_ttl ttl = Xoa_ttl.parse_(wiki, m.Args_getAt(0).Val_to_bry()); - Xoa_page page = wiki.Data_mgr().Get_page(ttl, false); + Xoae_page page = wiki.Data_mgr().Get_page(ttl, false); return String_.new_utf8_(page.Data_raw()); } catch (Exception e) {Err_.Noop(e); return null;} } @@ -70,7 +69,7 @@ public class Xog_html_js_cbk implements GfoInvkAble { try { byte[] js_cbk = m.Args_getAt(0).Val_to_bry(); byte[] href_bry = m.Args_getAt(1).Val_to_bry(); - return html_itm.Owner_tab().Page().Wiki().Html_mgr().Module_mgr().Popup_mgr().Get_async_bgn(js_cbk, href_bry); + return html_itm.Owner_tab().Wiki().Html_mgr().Module_mgr().Popup_mgr().Get_async_bgn(js_cbk, href_bry); } catch (Exception e) {Err_.Noop(e); return null;} } private String Popups_get_html(GfoMsg m) { @@ -78,10 +77,10 @@ public class Xog_html_js_cbk implements GfoInvkAble { int popups_id = Int_.Xby_double_(Double_.cast_(m.Args_getAt(0).Val())); byte[] href_bry = m.Args_getAt(1).Val_to_bry(); byte[] tooltip_bry = m.Args_getAt(2).Val_to_bry(); - return html_itm.Owner_tab().Page().Wiki().Html_mgr().Module_mgr().Popup_mgr().Show_init(popups_id, href_bry, tooltip_bry); + return html_itm.Owner_tab().Wiki().Html_mgr().Module_mgr().Popup_mgr().Show_init(popups_id, href_bry, tooltip_bry); } catch (Exception e) {Err_.Noop(e); return null;} } - private String[] Get_title_meta(Xow_wiki wiki, byte[] ttl_bry) { + private String[] Get_title_meta(Xowe_wiki wiki, byte[] ttl_bry) { synchronized (tmp_page) { tmp_page.Clear(); Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); @@ -90,7 +89,7 @@ public class Xog_html_js_cbk implements GfoInvkAble { return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.Xto_str(tmp_page.Id()), Int_.Xto_str(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_wo_ns()), Bool_.Xto_str_lower(tmp_page.Type_redirect()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.Xto_str(tmp_page.Text_len())); } private static final Xodb_page tmp_page = Xodb_page.tmp_(); private String[][] Get_titles_meta(GfoMsg m) { - Xow_wiki wiki = html_itm.Owner_tab().Page().Wiki(); + Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); try { byte[][] ttls = Bry_.Split(Bry_.new_utf8_((String)m.ReadValAt(0)), Byte_ascii.NewLine); int ttls_len = ttls.length; @@ -102,11 +101,11 @@ public class Xog_html_js_cbk implements GfoInvkAble { return rv; } catch (Exception e) {Err_.Noop(e); return null;} } - private boolean Get_title_exists(Xow_wiki wiki, byte[] ttl) { + private boolean Get_title_exists(Xowe_wiki wiki, byte[] ttl) { return Pfunc_ifexist.Exists(wiki, ttl); } private String[] Get_titles_exists(GfoMsg m) { - Xow_wiki wiki = html_itm.Owner_tab().Page().Wiki(); + Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); try { byte[][] ttls = Bry_.Ary_obj((Object[])m.ReadValAt(0)); int ttls_len = ttls.length; @@ -119,7 +118,7 @@ public class Xog_html_js_cbk implements GfoInvkAble { } catch (Exception e) {Err_.Noop(e); return null;} } private String Get_search_suggestions(GfoMsg m) { - Xow_wiki wiki = html_itm.Owner_tab().Page().Wiki(); + Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); byte[] search_str = Bry_.new_utf8_((String)m.ReadValAt(0)); byte[] cbk_func = Bry_.new_utf8_((String)m.ReadValAt(1)); app.Gui_mgr().Search_suggest_mgr().Search(wiki, search_str, cbk_func); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_tst.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_tst.java index 9f3ffb7af..56cfcd863 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_tst.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_tst.java @@ -28,13 +28,13 @@ public class Xog_html_js_cbk_tst { class Xog_html_js_cbk_fxt { public void Clear() { fxt = new Xop_fxt(); - Xoa_app_fxt.Init_gui(fxt.App()); + Xoa_app_fxt.Init_gui(fxt.App(), fxt.Wiki()); } private Xop_fxt fxt; public Xop_fxt Fxt() {return fxt;} public void Test_get_title(String ttl, Object... expd) { - Xoa_app app = fxt.App(); - Xow_wiki wiki = fxt.Wiki(); - Xoa_page page = Xoa_page.test_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_("mock_page"))); + Xoae_app app = fxt.App(); + Xowe_wiki wiki = fxt.Wiki(); + Xoae_page page = Xoae_page.test_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_("mock_page"))); Xog_tab_itm tab = app.Gui_mgr().Browser_win().Active_tab(); tab.Page_(page); Xog_html_js_cbk exec = tab.Html_itm().Js_cbk(); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java index 51d1a0570..f21698587 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java @@ -46,12 +46,12 @@ public class Xog_html_js_cbk_wdata_labels_tst { } private Wdata_doc doc_(String qid, String src) { gplx.json.Json_doc doc = gplx.json.Json_doc.new_apos_(src); - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); Wdata_doc rv = new Wdata_doc(Bry_.new_ascii_(qid), app.Wiki_mgr().Wdata_mgr(), doc); return rv; } private void Tst_wikidata_label_get(String[] args, String[] expd) { - Xoa_app_fxt.Init_gui(fxt.App()); + Xoa_app_fxt.Init_gui(fxt.App(), fxt.Wiki()); Xog_html_js_cbk exec = fxt.App().Gui_mgr().Browser_win().Active_html_itm().Js_cbk(); GfoMsg msg = GfoMsg_.new_cast_(Xog_html_js_cbk.Invk_wikidata_get_label); int args_len = args.length; diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java b/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java index f3d6dd8bf..483e1122b 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_launcher_tabs.java @@ -18,21 +18,21 @@ along with this program. If not, see . package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; class Xog_launcher_tabs { public void Launch(Xog_win_itm win) { - Xoa_app app = win.App(); Gfo_log_bfr log_bfr = app.Log_bfr(); + Xoae_app app = win.App(); Gfo_log_bfr log_bfr = app.Log_bfr(); log_bfr.Add("app.launch.page.bgn"); Io_fil_marker fil_marker = new Io_fil_marker().Usr_dlg_(app.Usr_dlg()).Url_(app.User().Fsys_mgr().App_temp_dir().GenSubFil_nest("session", "launch.tabs.marker")); boolean tabs_restored = false; - Xow_wiki home_wiki = app.User().Wiki(); + Xowe_wiki home_wiki = app.User().Wiki(); if (fil_marker.Bgn()) tabs_restored = Restore_tabs(app, home_wiki, win, fil_marker); if (!tabs_restored) Restore_tab_failover(app, home_wiki, win); // tab.Html_itm().Html_box().Focus(); // focus the html_box so wheel scroll works; DATE:2013-02-08 - app.Gui_wtr().Prog_none("", "", ""); + app.Usr_dlg().Prog_none("", "", ""); log_bfr.Add("app.launch.page.end"); - app.Gui_wtr().Log_wtr().Log_msg_to_session_direct(log_bfr.Xto_str()); + app.Usr_dlg().Log_wtr().Log_msg_to_session_direct(log_bfr.Xto_str()); } - private boolean Restore_tabs(Xoa_app app, Xow_wiki home_wiki, Xog_win_itm win, Io_fil_marker fil_marker) { + private boolean Restore_tabs(Xoae_app app, Xowe_wiki home_wiki, Xog_win_itm win, Io_fil_marker fil_marker) { String[] launch_urls = app.Api_root().App().Startup().Tabs().Calc_startup_strs(app); try { int launch_urls_len = launch_urls.length; @@ -49,7 +49,7 @@ class Xog_launcher_tabs { return false; } } - private void Restore_tab_failover(Xoa_app app, Xow_wiki home_wiki, Xog_win_itm win) { + private void Restore_tab_failover(Xoae_app app, Xowe_wiki home_wiki, Xog_win_itm win) { try { Launch_tab(win, home_wiki, gplx.xowa.users.Xouc_pages_mgr.Page_xowa); } @@ -57,12 +57,12 @@ class Xog_launcher_tabs { app.Usr_dlg().Warn_many("", "", "failed to launch failover tab: err=~{0}", Err_.Message_gplx(e)); } } - private void Launch_tab(Xog_win_itm win, Xow_wiki home_wiki, String launch_str) { - Xoa_app app = win.App(); + private void Launch_tab(Xog_win_itm win, Xowe_wiki home_wiki, String launch_str) { + Xoae_app app = win.App(); Xoa_url launch_url = Xoa_url_parser.Parse_from_url_bar(app, home_wiki, launch_str); - Xow_wiki launch_wiki = app.Wiki_mgr().Get_by_key_or_null(launch_url.Wiki_bry()); + Xowe_wiki launch_wiki = app.Wiki_mgr().Get_by_key_or_null(launch_url.Wiki_bry()); Xoa_ttl launch_ttl = Xoa_ttl.parse_(launch_wiki, launch_url.Page_bry()); - Xog_tab_itm tab = win.Tab_mgr().Tabs_new_init(Xoa_page.new_(launch_wiki, launch_ttl)); // WORKAROUND: set the tab to an empty page, else null ref later; DATE:2014-07-23 + Xog_tab_itm tab = win.Tab_mgr().Tabs_new_init(launch_wiki, Xoae_page.new_(launch_wiki, launch_ttl)); // WORKAROUND: set the tab to an empty page, else null ref later; DATE:2014-07-23 tab.Show_url_bgn(launch_url); } public static final Xog_launcher_tabs _ = new Xog_launcher_tabs(); Xog_launcher_tabs() {} diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java index abeb37afd..90e023ed0 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java @@ -20,16 +20,17 @@ import gplx.threads.*; import gplx.gfui.*; import gplx.xowa.gui.history.*; impor import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.cfgs2.*; import gplx.xowa.pages.*; public class Xog_tab_itm implements GfoInvkAble { private Xog_win_itm win; private Xocfg_tab_mgr cfg_tab_mgr; - public Xog_tab_itm(Xog_tab_mgr tab_mgr, Gfui_tab_itm_data tab_data, Xoa_page page) { - this.tab_mgr = tab_mgr; this.tab_data = tab_data; this.page = page; + public Xog_tab_itm(Xog_tab_mgr tab_mgr, Gfui_tab_itm_data tab_data, Xowe_wiki wiki, Xoae_page page) { + this.tab_mgr = tab_mgr; this.tab_data = tab_data; this.wiki = wiki; this.page = page; this.win = tab_mgr.Win(); this.cfg_tab_mgr = win.App().Cfg_regy ().App().Gui_mgr().Tab_mgr(); html_itm = new Xog_html_itm(this); cmd_sync = win.Kit().New_cmd_sync(this); } + public Xowe_wiki Wiki() {return wiki;} public void Wiki_(Xowe_wiki v) {this.wiki = v;} private Xowe_wiki wiki; public GfoInvkAble Cmd_sync() {return cmd_sync;} private GfoInvkAble cmd_sync; public void Make_html_box(int uid, Gfui_tab_itm tab_box, Xog_win_itm win, GfuiElem owner) { this.tab_box = tab_box; - Xoa_app app = win.App(); Xoa_gui_mgr gui_mgr = win.Gui_mgr(); Gfui_kit kit = win.Kit(); + Xoae_app app = win.App(); Xoa_gui_mgr gui_mgr = win.Gui_mgr(); Gfui_kit kit = win.Kit(); Gfui_html html_box = kit.New_html("html_box" + Int_.Xto_str(uid), owner); html_box.Html_js_enabled_(gui_mgr.Html_mgr().Javascript_enabled()); html_box.Html_invk_src_(win); @@ -49,7 +50,7 @@ public class Xog_tab_itm implements GfoInvkAble { this.html_itm = comp.html_itm; comp.html_itm = temp_html_itm; - Xoa_page temp_page = page; // switch .page, since its underlying html_box has changed and .page must reflect html_box + Xoae_page temp_page = page; // switch .page, since its underlying html_box has changed and .page must reflect html_box this.page = comp.page; comp.page = temp_page; page.Tab_(this); comp.Page().Tab_(comp); @@ -70,11 +71,11 @@ public class Xog_tab_itm implements GfoInvkAble { public boolean Tab_is_loading() {return tab_is_loading;} private boolean tab_is_loading; public Xog_html_itm Html_itm() {return html_itm;} private Xog_html_itm html_itm; public Gfui_html Html_box() {return html_itm.Html_box();} - public Xoa_page Page() {return page;} - public void Page_(Xoa_page page) { + public Xoae_page Page() {return page;} + public void Page_(Xoae_page page) { this.page = page; this.Page_update_ui(); // force tab button to update when page changes - } private Xoa_page page; + } private Xoae_page page; public void Page_update_ui() { this.Tab_name_(); tab_box.Tab_tip_text_(page.Url().Xto_full_str()); @@ -95,8 +96,8 @@ public class Xog_tab_itm implements GfoInvkAble { public void Pin_toggle() {} public void Show_url_bgn(Xoa_url url) { this.tab_is_loading = true; - Xoa_app app = win.App(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); - Xoa_page page = Xoa_page.Empty; + Xoae_app app = win.App(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); + Xoae_page page = Xoae_page.Empty; if ( url.Anchor_str() != null // url has anchor && url.Eq_page(page.Url()) // url has same page_name as existing page && url.Args().length == 0) { // url has no args; needed for Category:A?from=b#mw-pages @@ -107,7 +108,7 @@ public class Xog_tab_itm implements GfoInvkAble { app.Gui_mgr().Search_suggest_mgr().Cancel(); // cancel pending search_suggest calls app.Log_wtr().Queue_enabled_(true); usr_dlg.Clear(); - Xow_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(url.Wiki_bry()); + this.wiki = app.Wiki_mgr().Get_by_key_or_null(url.Wiki_bry()); // NOTE: must update wiki wiki.Init_assert(); // NOTE: assert wiki.Init before parsing; needed b/c lang (with lang-specific ns) is only loaded on init, and parse Xoa_ttl.parse_ will fail below; EX:pt.wikipedia.org/wiki/Wikipedia:P�gina principal Xoa_ttl ttl = Xoa_ttl.parse_(wiki, url.Page_bry()); if (ttl == null) {usr_dlg.Prog_one("", "", "title is invalid: ~{0}", String_.new_utf8_(url.Raw())); return;} @@ -116,14 +117,15 @@ public class Xog_tab_itm implements GfoInvkAble { this.Html_box().Html_js_eval_script("if (window.xowa_popups_hide_all != null) window.xowa_popups_hide_all();"); // should be more configurable; DATE:2014-07-09 app.Thread_mgr().Page_load_mgr().Add_at_end(new Load_page_wkr(this, wiki, url, ttl)).Run(); } - public void Show_url_loaded(Xoa_page page) { - Xow_wiki wiki = page.Wiki(); Xoa_url url = page.Url(); Xoa_ttl ttl = page.Ttl(); - Xoa_app app = wiki.App(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); + private void Show_url_loaded(Load_page_wkr wkr) { + Xowe_wiki wiki = wkr.Wiki(); Xoae_page page = wkr.Page(); + Xoa_url url = page.Url(); Xoa_ttl ttl = page.Ttl(); + Xoae_app app = wiki.Appe(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); try { wiki.Ctx().Cur_page_(page); if (page.Missing()) { if (wiki.Db_mgr().Save_mgr().Create_enabled()) { - page = Xoa_page.create_(wiki, ttl); + page = Xoae_page.create_(wiki, ttl); view_mode = Xopg_view_mode.Tid_edit; history_mgr.Add(page); // NOTE: must put new_page on stack so that pressing back will pop new_page, not previous page Xog_tab_itm_read_mgr.Show_page(this, page, false); @@ -162,12 +164,12 @@ public class Xog_tab_itm implements GfoInvkAble { try { Xog_tab_itm_read_mgr.Show_page_err(win, this, wkr.Wiki(), wkr.Url(), wkr.Ttl(), wkr.Exc()); } finally { - wkr.Wiki().App().Thread_mgr().Page_load_mgr().Resume(); + wkr.Wiki().Appe().Thread_mgr().Page_load_mgr().Resume(); } } public void Async() { if (page == null) return; // TEST: occurs during Xog_win_mgr_tst - Xow_wiki wiki = page.Wiki(); Xoa_app app = wiki.App(); Xog_win_itm win_itm = tab_mgr.Win(); Gfo_usr_dlg usr_dlg = win_itm.Usr_dlg(); + Xowe_wiki wiki = page.Wikie(); Xoae_app app = wiki.Appe(); Xog_win_itm win_itm = tab_mgr.Win(); Gfo_usr_dlg usr_dlg = win_itm.Usr_dlg(); app.Usr_dlg().Log_many("", "", "page.async: url=~{0}", page.Url().Xto_full_str_safe()); if (page.Url().Anchor_str() != null) html_itm.Scroll_page_by_id_gui(page.Url().Anchor_str()); if (usr_dlg.Canceled()) {usr_dlg.Prog_none("", "", ""); app.Log_wtr().Queue_enabled_(false); return;} @@ -210,8 +212,8 @@ public class Xog_tab_itm implements GfoInvkAble { } try { if (page.Tab() != null) { // needed b/c Preview has page.Tab of null which causes null_ref error in redlinks - Xop_lnki_logger_redlinks_wkr redlinks_wkr = new Xop_lnki_logger_redlinks_wkr(win_itm, page); - ThreadAdp_.invk_(redlinks_wkr, gplx.xowa.parsers.lnkis.redlinks.Xop_lnki_logger_redlinks_wkr.Invk_run).Start(); + Xog_redlink_mgr redlinks_wkr = new Xog_redlink_mgr(win_itm, page, app.User().Cfg_mgr().Log_mgr().Log_redlinks()); + ThreadAdp_.invk_(redlinks_wkr, gplx.xowa.parsers.lnkis.redlinks.Xog_redlink_mgr.Invk_run).Start(); usr_dlg.Prog_none("", "imgs.done", ""); } } catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.redlinks: page=~{0} err=~{1}", page_ttl_str, Err_.Message_gplx_brief(e));} @@ -223,7 +225,7 @@ public class Xog_tab_itm implements GfoInvkAble { app.Log_wtr().Queue_enabled_(false); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_show_url_loaded_swt)) this.Show_url_loaded((Xoa_page)m.ReadObj("v")); + if (ctx.Match(k, Invk_show_url_loaded_swt)) this.Show_url_loaded((Load_page_wkr)m.ReadObj("v")); else if (ctx.Match(k, Invk_show_url_failed_swt)) this.Show_url_failed((Load_page_wkr)m.ReadObj("v")); else return GfoInvkAble_.Rv_unhandled; return this; @@ -232,28 +234,29 @@ public class Xog_tab_itm implements GfoInvkAble { } class Load_page_wkr implements Gfo_thread_wkr { private Xog_tab_itm tab; - public Load_page_wkr(Xog_tab_itm tab, Xow_wiki wiki, Xoa_url url, Xoa_ttl ttl) {this.tab = tab; this.wiki = wiki; this.url = url; this.ttl = ttl;} + public Load_page_wkr(Xog_tab_itm tab, Xowe_wiki wiki, Xoa_url url, Xoa_ttl ttl) {this.tab = tab; this.wiki = wiki; this.url = url; this.ttl = ttl;} public String Name() {return "xowa.load_page_wkr";} public boolean Resume() {return false;} - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; + public Xoae_page Page() {return page;} private Xoae_page page; public Xoa_url Url() {return url;} private Xoa_url url; public Xoa_ttl Ttl() {return ttl;} private Xoa_ttl ttl; public Exception Exc() {return exc;} private Exception exc; public void Exec() { try { - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); app.Usr_dlg().Log_many("", "", "page.load: url=~{0}", url.Xto_full_str_safe()); if (Env_.System_memory_free() < app.Sys_cfg().Free_mem_when()) // check if low in memory app.Free_mem(false); // clear caches (which will clear bry_bfr_mk) else // not low in memory app.Utl_bry_bfr_mkr().Clear(); // clear bry_bfr_mk only; NOTE: call before page parse, not when page is first added, else threading errors; DATE:2014-05-30 - Xoa_page page = wiki.GetPageByTtl(url, ttl, wiki.Lang(), tab, false); + this.page = wiki.GetPageByTtl(url, ttl, wiki.Lang(), tab, false); int html_db_id = page.Revision_data().Html_db_id(); if (wiki.Db_mgr().Hdump_mgr().Enabled() && html_db_id != -1) wiki.Db_mgr().Hdump_mgr().Load(wiki, page, html_db_id); else wiki.ParsePage(page, false); - GfoInvkAble_.InvkCmd_val(tab.Cmd_sync(), Xog_tab_itm.Invk_show_url_loaded_swt, page); + GfoInvkAble_.InvkCmd_val(tab.Cmd_sync(), Xog_tab_itm.Invk_show_url_loaded_swt, this); } catch (Exception e) { this.exc = e; diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java index 5b10fe4c1..3b40bcb26 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java @@ -20,7 +20,7 @@ import gplx.gfui.*; import gplx.xowa.html.*; import gplx.xowa.pages.*; public class Xog_tab_itm_edit_mgr { public static void Save(Xog_tab_itm tab, boolean quick_save) { if (tab.View_mode() != Xopg_view_mode.Tid_edit) return; // exit if not edit; handles ctrl+s being pressed in read/html modes - Xoa_page page = tab.Page(); Xow_wiki wiki = page.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); + Xoae_page page = tab.Page(); Xowe_wiki wiki = tab.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); byte[] new_text = Get_new_text(tab); if (page.Edit_mode() == Xoa_page_.Edit_mode_create) { wiki.Db_mgr().Save_mgr().Data_create(page.Ttl(), new_text); @@ -34,9 +34,9 @@ public class Xog_tab_itm_edit_mgr { win_itm.Usr_dlg().Prog_one("", "", "saved page ~{0}", String_.new_utf8_(page.Ttl().Full_txt_raw())); // NOTE: show message after ParsePage_root, b/c ParsePage_root will flash "Loading page"; DATE:2014-05-17 if (!quick_save) { // full_save; save page and go to read mode page.Html_data().Edit_preview_(Bry_.Empty); - Xoa_page stack_page = tab.History_mgr().Cur_page(wiki); // NOTE: must be to CurPage() else changes will be lost when going Bwd,Fwd + Xoae_page stack_page = tab.History_mgr().Cur_page(wiki); // NOTE: must be to CurPage() else changes will be lost when going Bwd,Fwd stack_page.Data_raw_(page.Data_raw()); // NOTE: overwrite with "saved" changes - stack_page.Wiki().ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save + stack_page.Wikie().ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save win_itm.Page__mode_(Xopg_view_mode.Tid_read); win_itm.Page__async__bgn(tab); } @@ -44,11 +44,11 @@ public class Xog_tab_itm_edit_mgr { } public static void Preview(Xog_tab_itm tab) { if (tab.View_mode() != Xopg_view_mode.Tid_edit) return; // exit if not edit; handles preview somehow being called? - Xoa_page page = tab.Page(); Xow_wiki wiki = page.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); + Xoae_page page = tab.Page(); Xowe_wiki wiki = tab.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); Xog_html_itm html_itm = tab.Html_itm(); byte[] new_text = Get_new_text(tab); - Xoa_page new_page = Xoa_page.new_(wiki, page.Ttl()); + Xoae_page new_page = Xoae_page.new_(wiki, page.Ttl()); new_page.Revision_data().Id_(page.Revision_data().Id()); // NOTE: page_id needed for sqlite (was not needed for xdat) new_page.Data_raw_(new_text); wiki.ParsePage_root(new_page, true); // refresh html @@ -68,7 +68,7 @@ public class Xog_tab_itm_edit_mgr { } public static void Rename(Xog_tab_itm tab) { if (tab.View_mode() != Xopg_view_mode.Tid_edit) return; // exit if not edit; handles ctrl+r being pressed - Xoa_page page = tab.Page(); Xow_wiki wiki = page.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); + Xoae_page page = tab.Page(); Xowe_wiki wiki = tab.Wiki(); Xog_win_itm win_itm = tab.Tab_mgr().Win(); if (Bry_.Eq(page.Ttl().Page_db(), wiki.Props().Main_page())) { win_itm.Usr_dlg().Warn_many("", "", "The Main Page cannot be renamed"); win_itm.Kit().Ask_ok("", "", "The Main Page cannot be renamed"); @@ -94,12 +94,12 @@ public class Xog_tab_itm_edit_mgr { html_box.Html_elem_focus(elem_focus_id); } public static void Debug(Xog_win_itm win, byte view_tid) { - Xog_tab_itm tab = win.Tab_mgr().Active_tab(); Xoa_page page = tab.Page(); - Xow_wiki wiki = page.Wiki(); Xop_ctx ctx = wiki.Ctx(); + Xog_tab_itm tab = win.Tab_mgr().Active_tab(); Xoae_page page = tab.Page(); + Xowe_wiki wiki = tab.Wiki(); Xop_ctx ctx = wiki.Ctx(); ctx.Defn_trace().Clear(); // TODO: move_me ctx.Defn_trace_(Xot_defn_trace_dbg._); Xoa_ttl ttl = page.Ttl(); - Xoa_page new_page = Xoa_page.new_(page.Wiki(), ttl); + Xoae_page new_page = Xoae_page.new_(wiki, ttl); byte[] data = tab.Html_itm().Get_elem_value_for_edit_box_as_bry(); new_page.Data_raw_(data); wiki.ParsePage_root(new_page, true); @@ -113,7 +113,7 @@ public class Xog_tab_itm_edit_mgr { tab.History_mgr().Add(new_page); tab.View_mode_(old); } - private static void Invalidate(Xow_wiki wiki) {// invalidate everything on updates; especially needed for page transclusion; {{/my_subpage}} DATE:2014-04-10 + private static void Invalidate(Xowe_wiki wiki) {// invalidate everything on updates; especially needed for page transclusion; {{/my_subpage}} DATE:2014-04-10 gplx.xowa.xtns.scribunto.Scrib_core.Core_invalidate(); wiki.Cache_mgr().Free_mem_all(); } diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java index 615a10c00..6108dd4ff 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_read_mgr.java @@ -20,34 +20,35 @@ import gplx.gfui.*; import gplx.threads.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.gui.history.*; import gplx.xowa.pages.*; public class Xog_tab_itm_read_mgr { public static void Async(Xog_tab_itm tab) {tab.Async();} - public static void Show_page(Xog_tab_itm tab, Xoa_page new_page, boolean reset_to_read) {Show_page(tab, new_page, reset_to_read, false, false, Xog_history_stack.Nav_fwd);} - public static void Show_page(Xog_tab_itm tab, Xoa_page new_page, boolean reset_to_read, boolean new_page_is_same, boolean show_is_err, byte history_nav_type) { + public static void Show_page(Xog_tab_itm tab, Xoae_page new_page, boolean reset_to_read) {Show_page(tab, new_page, reset_to_read, false, false, Xog_history_stack.Nav_fwd);} + public static void Show_page(Xog_tab_itm tab, Xoae_page new_page, boolean reset_to_read, boolean new_page_is_same, boolean show_is_err, byte history_nav_type) { if (reset_to_read) tab.View_mode_(Xopg_view_mode.Tid_read); if (new_page.Url().Action_is_edit()) tab.View_mode_(Xopg_view_mode.Tid_edit); - Xoa_page cur_page = tab.Page(); Xog_html_itm html_itm = tab.Html_itm(); Gfui_html html_box = html_itm.Html_box(); - Xoa_app app = cur_page.App(); Xog_win_itm win = tab.Tab_mgr().Win(); + Xoae_page cur_page = tab.Page(); Xog_html_itm html_itm = tab.Html_itm(); Gfui_html html_box = html_itm.Html_box(); + Xog_win_itm win = tab.Tab_mgr().Win(); if (cur_page != null && !new_page_is_same) { // if new_page_is_same, don't update DocPos; will "lose" current position cur_page.Html_data().Bmk_pos_(html_box.Html_window_vpos()); tab.History_mgr().Update_html_doc_pos(cur_page, history_nav_type); // HACK: old_page is already in stack, but need to update its hdoc_pos } win.Usr_dlg().Prog_none("", "", "locating images"); + Xowe_wiki wiki = new_page.Wikie(); try {tab.Html_itm().Show(new_page);} catch (Exception e) { if (String_.Eq(Err_.Message_lang(e), "class org.eclipse.swt.SWTException Widget is disposed")) return; // ignore errors caused by user closing tab early; DATE:2014-07-26 if (show_is_err) { // trying to show error page, but failed; don't show again, else recursion until out of memory; TODO:always load error page; no reason it should fail; WHEN:html_skin; DATE:2014-06-08 - app.Usr_dlg().Warn_many("", "", "fatal error trying to load error page; page=~{0} err=~{1}" + new_page.Url().Xto_full_str_safe(), Err_.Message_gplx(e)); + Gfo_usr_dlg_._.Warn_many("", "", "fatal error trying to load error page; page=~{0} err=~{1}" + new_page.Url().Xto_full_str_safe(), Err_.Message_gplx(e)); return; } else - Show_page_err(win, tab, new_page.Wiki(), new_page.Url(), new_page.Ttl(), e); + Show_page_err(win, tab, wiki, new_page.Url(), new_page.Ttl(), e); return; } tab.Page_(new_page); if (tab == tab.Tab_mgr().Active_tab()) - Update_selected_tab(app, win, new_page.Url(), new_page.Ttl()); - Xol_font_info lang_font = new_page.Wiki().Lang().Gui_font(); - if (lang_font.Name() == null) lang_font = app.Gui_mgr().Win_cfg().Font(); - Xog_win_itm_.Font_update(tab.Tab_mgr().Win(), lang_font); + Update_selected_tab(win.App().Url_parser(), win, new_page.Url(), new_page.Ttl()); + Xol_font_info lang_font = wiki.Lang().Gui_font(); + if (lang_font.Name() == null) lang_font = win.Gui_mgr().Win_cfg().Font(); + Xog_win_itm_.Font_update(win, lang_font); tab.Tab_mgr().Tab_mgr().Focus(); html_box.Focus(); win.Usr_dlg().Prog_none("", "", ""); // blank out status bar @@ -56,13 +57,13 @@ public class Xog_tab_itm_read_mgr { else GfoInvkAble_.InvkCmd_val(tab.Html_itm().Cmd_async(), Xog_html_itm.Invk_html_elem_focus, Xog_html_itm.Elem_id__xowa_edit_data_box); // NOTE: must be async, else won't work; DATE:2014-06-05 } - public static void Update_selected_tab_blank(Xoa_app app, Xog_win_itm win) {Update_selected_tab(app, win, null, null);} // called when all tabs are null - public static void Update_selected_tab(Xoa_app app, Xog_win_itm win, Xoa_url url, Xoa_ttl ttl) { + public static void Update_selected_tab_blank(Xoa_url_parser url_parser, Xog_win_itm win) {Update_selected_tab(url_parser, win, null, null);} // called when all tabs are null + public static void Update_selected_tab(Xoa_url_parser url_parser, Xog_win_itm win, Xoa_url url, Xoa_ttl ttl) { String url_str = "", win_str = Win_text_blank; if (url != null && ttl != null) { - try {url_str = app.Url_parser().Build_str(url);} + try {url_str = url_parser.Build_str(url);} catch (Exception e) { // HACK: failed pages will have a null wiki; for now, catch and ignore; DATE:2014-06-22 - app.Usr_dlg().Warn_many("", "", "failed to build url: url=~{0}, err=~{1}", String_.new_utf8_(url.Raw()), Err_.Message_gplx(e)); + Gfo_usr_dlg_._.Warn_many("", "", "failed to build url: url=~{0}, err=~{1}", String_.new_utf8_(url.Raw()), Err_.Message_gplx(e)); url_str = String_.new_utf8_(ttl.Full_txt()); } win_str = String_.new_utf8_(Bry_.Add(ttl.Full_txt(), Win_text_suffix_page)); @@ -71,13 +72,13 @@ public class Xog_tab_itm_read_mgr { win.Win_box().Text_(win_str); } private static final byte[] Win_text_suffix_page = Bry_.new_ascii_(" - XOWA"); private static final String Win_text_blank = "XOWA"; - public static void Show_page_err(Xog_win_itm win, Xog_tab_itm tab, Xow_wiki wiki, Xoa_url url, Xoa_ttl ttl, Exception e) { + public static void Show_page_err(Xog_win_itm win, Xog_tab_itm tab, Xowe_wiki wiki, Xoa_url url, Xoa_ttl ttl, Exception e) { String err_msg = String_.Format("page_load fail: page={0} err={1}", String_.new_utf8_(url.Raw()), Err_.Message_gplx(e)); win.Usr_dlg().Warn_many("", "", err_msg); win.App().Log_wtr().Queue_enabled_(false); - Xoa_page fail_page = wiki.Data_mgr().Get_page(ttl, false); + Xoae_page fail_page = wiki.Data_mgr().Get_page(ttl, false); tab.View_mode_(Xopg_view_mode.Tid_edit); - Update_selected_tab(win.App(), win, url, ttl); + Update_selected_tab(win.App().Url_parser(), win, url, ttl); Show_page(tab, fail_page, false, false, true, Xog_history_stack.Nav_fwd); win.Win_box().Text_(err_msg); } diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_mgr.java index 6ce65c818..553dd0754 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_mgr.java @@ -70,23 +70,23 @@ public class Xog_tab_mgr implements GfoEvObj { } } public int Tabs_len() {return tab_regy.Count();} - public Xog_tab_itm Tabs_new_init(Xoa_page page) {return this.Tabs_new(true, true, page);} + public Xog_tab_itm Tabs_new_init(Xowe_wiki wiki, Xoae_page page) {return this.Tabs_new(true, true, wiki, page);} public Xog_tab_itm Tabs_get_at(int i) {return (Xog_tab_itm)tab_regy.FetchAt(i);} public Xog_tab_itm Tabs_new_dflt() {return Tabs_new_dflt(false);} public Xog_tab_itm Tabs_new_dflt(boolean focus) { boolean active_tab_is_null = this.Active_tab_is_null(); - Xow_wiki cur_wiki = active_tab_is_null ? win.App().User().Wiki() : active_tab.Page().Wiki(); + Xowe_wiki cur_wiki = active_tab_is_null ? win.App().User().Wiki() : active_tab.Wiki(); Xoa_ttl ttl = Xoa_ttl.parse_(cur_wiki, gplx.xowa.specials.xowa.default_tab.Default_tab_page.Ttl_full_bry); Xoa_url url = Xoa_url_parser.Parse_from_url_bar(win.App(), cur_wiki, ttl.Full_db_as_str()); - Xog_tab_itm rv = Tabs_new(focus, active_tab_is_null, Xoa_page.new_(cur_wiki, ttl)); + Xog_tab_itm rv = Tabs_new(focus, active_tab_is_null, cur_wiki, Xoae_page.new_(cur_wiki, ttl)); rv.Page_update_ui(); rv.Show_url_bgn(url); return rv; } - private Xog_tab_itm Tabs_new(boolean focus, boolean active_tab_is_null, Xoa_page page) { + private Xog_tab_itm Tabs_new(boolean focus, boolean active_tab_is_null, Xowe_wiki wiki, Xoae_page page) { String tab_key = "tab_" + Int_.Xto_str(tab_uid++); int tab_idx = tab_regy.Count(); Gfui_tab_itm_data tab_data = new Gfui_tab_itm_data(tab_key, tab_idx); - Xog_tab_itm rv = new Xog_tab_itm(this, tab_data, page); + Xog_tab_itm rv = new Xog_tab_itm(this, tab_data, wiki, page); Gfui_tab_itm tab_box = tab_mgr.Tabs_add(tab_data); rv.Make_html_box(tab_uid, tab_box, win, tab_mgr); tab_box.Subs_add(rv.Html_itm().Html_box()); @@ -116,8 +116,8 @@ public class Xog_tab_mgr implements GfoEvObj { private void Tabs_selected(String key) { Xog_tab_itm tab = Tabs_get_by_key_or_warn(key); if (tab == null) return; active_tab = tab; - Xoa_page page = tab.Page(); - Xog_tab_itm_read_mgr.Update_selected_tab(win.App(), win, page.Url(), page.Ttl()); + Xoae_page page = tab.Page(); + Xog_tab_itm_read_mgr.Update_selected_tab(win.App().Url_parser(), win, page.Url(), page.Ttl()); tab.Html_itm().Tab_selected(page); } public void Tabs_close_cur() { @@ -147,7 +147,7 @@ public class Xog_tab_mgr implements GfoEvObj { tab_regy.Del(key); if (tab_regy.Count() == 0) { active_tab = Xog_tab_itm_.Null; - Xog_tab_itm_read_mgr.Update_selected_tab_blank(win.App(), win); + Xog_tab_itm_read_mgr.Update_selected_tab_blank(win.App().Url_parser(), win); } else Tabs_recalc_idx(); @@ -198,10 +198,10 @@ public class Xog_tab_mgr implements GfoEvObj { Tabs_new_link(link, focus); } public void Tabs_new_link(String link, boolean focus) { - Xow_wiki wiki = active_tab.Page().Wiki(); + Xowe_wiki wiki = active_tab.Wiki(); Xoa_url url = Xoa_url_parser.Parse_from_url_bar(win.App(), wiki, link); // NOTE: link must be of form domain/wiki/page; DATE:2014-05-27 Xoa_ttl ttl = Xoa_ttl.parse_(wiki, url.Page_bry()); - Xog_tab_itm new_tab = Tabs_new(focus, false, Xoa_page.new_(wiki, ttl)); + Xog_tab_itm new_tab = Tabs_new(focus, false, wiki, Xoae_page.new_(wiki, ttl)); new_tab.Tab_name_(String_.new_utf8_(Xoa_ttl.Replace_unders(url.Page_bry()))); new_tab.Show_url_bgn(url); if (focus) diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm.java index f21557681..9040762a1 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm.java @@ -21,7 +21,7 @@ import gplx.xowa.gui.urls.*; import gplx.xowa.gui.views.*; import gplx.xowa.page import gplx.xowa.parsers.lnkis.redlinks.*; public class Xog_win_itm implements GfoInvkAble, GfoEvObj { private GfoInvkAble sync_cmd; - public Xog_win_itm(Xoa_app app, Xoa_gui_mgr gui_mgr) { + public Xog_win_itm(Xoae_app app, Xoa_gui_mgr gui_mgr) { this.app = app; this.gui_mgr = gui_mgr; this.tab_mgr = new Xog_tab_mgr(this); } @@ -41,10 +41,11 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { public GfuiTextBox Prog_box() {return prog_box;} private GfuiTextBox prog_box; public GfuiTextBox Info_box() {return info_box;} private GfuiTextBox info_box; public GfoEvMgr EvMgr() {if (evMgr == null) evMgr = GfoEvMgr.new_(this); return evMgr;} private GfoEvMgr evMgr; - public Xoa_app App() {return app;} private Xoa_app app; + public Xoae_app App() {return app;} private Xoae_app app; public Xog_tab_mgr Tab_mgr() {return tab_mgr;} private Xog_tab_mgr tab_mgr; public Xog_tab_itm Active_tab() {return tab_mgr.Active_tab();} - public Xoa_page Active_page() {return tab_mgr.Active_tab().Page();} public void Active_page_(Xoa_page v) {tab_mgr.Active_tab().Page_(v);} + public Xoae_page Active_page() {return tab_mgr.Active_tab().Page();} public void Active_page_(Xoae_page v) {tab_mgr.Active_tab().Page_(v);} + public Xowe_wiki Active_wiki() {return tab_mgr.Active_tab().Wiki();} public Xog_html_itm Active_html_itm() {return tab_mgr.Active_tab().Html_itm();} public Gfui_html Active_html_box() {return tab_mgr.Active_tab().Html_itm().Html_box();} public Xog_resizer Resizer() {return resizer;} private Xog_resizer resizer = new Xog_resizer(); @@ -56,7 +57,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_link_click)) Win__link_click(); else if (ctx.Match(k, Invk_link_print)) Xog_win_itm__prog_href_mgr.Print(this); - else if (ctx.Match(k, Gfui_html.Evt_link_hover)) Xog_win_itm__prog_href_mgr.Hover(app, this.Active_page(), m.ReadStr("v")); + else if (ctx.Match(k, Gfui_html.Evt_link_hover)) Xog_win_itm__prog_href_mgr.Hover(app, this.Active_tab().Wiki(), this.Active_page(), m.ReadStr("v")); else if (ctx.Match(k, Gfui_html.Evt_location_changed)) Win__link_clicked(m.ReadStr("v")); else if (ctx.Match(k, Gfui_html.Evt_location_changing)) Page__navigate_by_internal_href(m.ReadStr("v"), tab_mgr.Active_tab()); else if (ctx.Match(k, Gfui_html.Evt_win_resized)) Refresh_win_size(); @@ -84,7 +85,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { else if (ctx.Match(k, Invk_window_font_changed)) Xog_win_itm_.Font_update(this, (Xol_font_info)m.CastObj("font")); else if (ctx.Match(k, Invk_app)) return app; else if (ctx.Match(k, Invk_page)) return this.Active_page(); - else if (ctx.Match(k, Invk_wiki)) return this.Active_page().Wiki(); + else if (ctx.Match(k, Invk_wiki)) return this.Active_tab().Wiki(); else return GfoInvkAble_.Rv_unhandled; return this; } @@ -108,8 +109,8 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { , Invk_page_goto = "page_goto", Invk_page_goto_recent = "page_goto_recent" ; private void Win__link_click() { // NOTE: only applies when content_editable=y; if n, then link_click will be handled by SwtBrowser location changed (Win__link_clicked) - Xog_tab_itm tab = tab_mgr.Active_tab(); Xoa_page page = tab.Page(); - if (page.Wiki().Gui_mgr().Cfg_browser().Content_editable()) { + Xog_tab_itm tab = tab_mgr.Active_tab(); Xowe_wiki wiki = tab.Wiki(); + if (wiki.Gui_mgr().Cfg_browser().Content_editable()) { String href = tab.Html_itm().Html_box().Html_active_atr_get_str(Gfui_html.Atr_href, null); if (String_.Len_eq_0(href)) return; // NOTE: href can be null for images; EX: [[File:Loudspeaker.svg|11px|link=|alt=play]]; link= basically means don't link to image Page__navigate_by_internal_href(href, tab); @@ -121,7 +122,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { if (pos != Bry_.NotFound) url = String_.Mid(url, 0, pos); String anchor_str = Parse_evt_location_changing(anchor_raw); byte[] anchor_bry = Bry_.new_utf8_(anchor_str); - Xog_tab_itm tab = tab_mgr.Active_tab(); Xoa_page page = tab.Page(); + Xog_tab_itm tab = tab_mgr.Active_tab(); Xoae_page page = tab.Page(); if (anchor_str != null) { // link has anchor url_box.Text_(url + "#" + anchor_str); // update url box page.Html_data().Bmk_pos_(Xog_history_itm.Html_doc_pos_toc); // HACK: anchor clicked; set docPos of curentPage to TOC (so back will go back to TOC) @@ -145,14 +146,14 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { : String_.Mid(v, pos + 1); } public void Page__mode_(byte new_mode_tid) { - Xog_tab_itm tab = tab_mgr.Active_tab(); Xoa_page page = tab.Page(); + Xog_tab_itm tab = tab_mgr.Active_tab(); Xoae_page page = tab.Page(); Xowe_wiki wiki = tab.Wiki(); if ( new_mode_tid == Xopg_view_mode.Tid_read // used to be && cur_view_tid == Edit; removed clause else redlinks wouldn't show when going form html to read (or clicking read multiple times) DATE: 2013-11-26; && !page.Missing() // if new page, don't try to reload ) { // NOTE: if moving from "Edit" to "Read", reload page (else Preview changes will still show); NOTE: do not call Exec_page_reload / Exec_page_refresh, which will fire redlinks code - page = tab_mgr.Active_tab().History_mgr().Cur_page(page.Wiki()); // NOTE: must set to CurPage() else changes will be lost when going Bwd,Fwd + page = tab_mgr.Active_tab().History_mgr().Cur_page(wiki); // NOTE: must set to CurPage() else changes will be lost when going Bwd,Fwd tab.Page_(page); - page.Wiki().ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save + wiki.ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save Xoa_url url = page.Url(); if (url.Args_exists(Xoa_url_parser.Bry_arg_action, Xoa_url_parser.Bry_arg_action_edit)) // url has ?action=edit app.Url_parser().Parse(url, url.Xto_full_bry()); // remove all query args; handle (1) s.w:Earth?action=edit; (2) click on Read; DATE:2014-03-06 @@ -165,7 +166,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { public void Page__navigate_by_search() {Page__navigate_by_url_bar(app.Gui_mgr().Win_cfg().Search_box_fmtr().Bld_str_many(search_box.Text()));} public void Page__navigate_by_url_bar(String href) { Xog_tab_itm tab = tab_mgr.Active_tab_assert(); - Xoa_url url = Xoa_url_parser.Parse_from_url_bar(app, tab.Page().Wiki(), href); + Xoa_url url = Xoa_url_parser.Parse_from_url_bar(app, tab.Wiki(), href); tab.Show_url_bgn(url); } private void Page__navigate_by_internal_href(String href, Xog_tab_itm tab) { // NOTE: different from Navigate_by_url_bar in that it handles "file:///" and other @gplx.Internal protected formats; EX: "/site/", "about:blank"; etc.. @@ -176,8 +177,8 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { public void Page__navigate_by_history(boolean fwd) { Xog_tab_itm tab = tab_mgr.Active_tab(); if (tab == Xog_tab_itm_.Null) return; - Xoa_page cur_page = tab.Page(); - Xoa_page new_page = tab.History_mgr().Go_by_dir(cur_page.Wiki(), fwd); + Xoae_page cur_page = tab.Page(); Xowe_wiki cur_wiki = tab.Wiki(); + Xoae_page new_page = tab.History_mgr().Go_by_dir(cur_wiki, fwd); if (new_page.Missing()) return; byte history_nav_type = fwd ? Xog_history_stack.Nav_fwd : Xog_history_stack.Nav_bwd; boolean new_page_is_same = Bry_.Eq(cur_page.Ttl().Full_txt(), new_page.Ttl().Full_txt()); @@ -186,13 +187,13 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { } public void Page__reload() { Xog_tab_itm tab = tab_mgr.Active_tab(); - Xoa_page page = tab.History_mgr().Cur_page(tab.Page().Wiki()); // NOTE: must set to CurPage() else changes will be lost when going Bwd,Fwd + Xoae_page page = tab.History_mgr().Cur_page(tab.Wiki()); // NOTE: must set to CurPage() else changes will be lost when going Bwd,Fwd tab.Page_(page); - page.Wiki().ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save + page.Wikie().ParsePage_root(page, true); // NOTE: must reparse page if (a) Edit -> Read; or (b) "Options" save Page__refresh(); } public void Page__refresh() { - Xog_tab_itm tab = tab_mgr.Active_tab(); Xoa_page page = tab.Page(); Xog_html_itm html_itm = tab.Html_itm(); + Xog_tab_itm tab = tab_mgr.Active_tab(); Xoae_page page = tab.Page(); Xog_html_itm html_itm = tab.Html_itm(); page.Html_data().Bmk_pos_(html_itm.Html_box().Html_window_vpos()); html_itm.Show(page); if (page.Url().Anchor_str() == null) @@ -208,7 +209,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { if (page__async__thread.IsAlive()) { // cancel pending image downloads page__async__restart_url = url; this.Usr_dlg().Canceled_y_(); - app.File_mgr().Download_mgr().Download_wkr().Download_xrg().Prog_cancel_y_(); + app.Wmf_mgr().Download_wkr().Download_xrg().Prog_cancel_y_(); ThreadAdp_.invk_(this, Invk_page_async_cancel_wait).Start(); return true; } @@ -226,7 +227,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { tab_mgr.Active_tab().Show_url_bgn(page__async__restart_url); } private Xoa_url page__async__restart_url; public void Lang_changed(Xol_lang lang) { - Xoa_app app = gui_mgr.App(); + Xoae_app app = gui_mgr.App(); Xog_win_itm_.Update_tiptext(app, go_bwd_btn , Xol_msg_itm_.Id_xowa_window_go_bwd_btn_tooltip); Xog_win_itm_.Update_tiptext(app, go_fwd_btn , Xol_msg_itm_.Id_xowa_window_go_fwd_btn_tooltip); Xog_win_itm_.Update_tiptext(app, url_box , Xol_msg_itm_.Id_xowa_window_url_box_tooltip); @@ -244,13 +245,13 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { synchronized (App__retrieve__lock) { boolean output_html = String_.Eq(output_str, "html"); byte[] url_bry = Bry_.new_utf8_(url_str); - Xow_wiki home_wiki = app.User().Wiki(); + Xowe_wiki home_wiki = app.User().Wiki(); Xoa_ttl ttl = Xoa_ttl.parse_(home_wiki, Xoa_page_.Main_page_bry); // NOTE: must be Main_Page, not "" else Firefox Addon will fail; DATE:2014-03-13 - Xoa_page new_page = Xoa_page.new_(home_wiki, ttl); + Xoae_page new_page = Xoae_page.new_(home_wiki, ttl); gplx.xowa.servers.Gxw_html_server.Assert_tab(app, new_page); // HACK: assert at least 1 tab for Firefox addon; DATE:2015-01-23 this.Active_page_(new_page); Xoa_url url = Xoa_url.blank_(); - url = Xoa_url_parser.Parse_url(url, app, new_page.Wiki(), url_bry, 0, url_bry.length, true); + url = Xoa_url_parser.Parse_url(url, app, home_wiki, url_bry, 0, url_bry.length, true); new_page.Url_(url); return App__retrieve_by_href(url, output_html); } @@ -258,9 +259,9 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { public byte[] App__retrieve_by_href(String href, boolean output_html) {return App__retrieve_by_href(Xog_url_wkr.Exec_url(this, href), output_html);} // NOTE: used by drd private byte[] App__retrieve_by_href(Xoa_url url, boolean output_html) { if (url == null) return Bry_.new_ascii_("missing"); - Xow_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(url.Wiki_bry()); + Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(url.Wiki_bry()); Xoa_ttl ttl = Xoa_ttl.parse_(wiki, url.Page_bry()); - Xoa_page new_page = wiki.GetPageByTtl(url, ttl); + Xoae_page new_page = wiki.GetPageByTtl(url, ttl); if (new_page.Missing()) {return Bry_.Empty;} Xog_tab_itm tab = tab_mgr.Active_tab(); tab.Page_(new_page); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm_.java b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm_.java index 2b99cfcba..3010ca36a 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm_.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm_.java @@ -19,7 +19,7 @@ package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa import gplx.gfui.*; import gplx.xowa.gui.bnds.*; import gplx.xowa.gui.cmds.*; public class Xog_win_itm_ { public static void Show_win(Xog_win_itm win) { - Xoa_app app = win.App(); GfuiWin win_box = win.Win_box(); + Xoae_app app = win.App(); GfuiWin win_box = win.Win_box(); win_box.Focus_able_(false); win_box.BackColor_(ColorAdp_.White); @@ -31,17 +31,17 @@ public class Xog_win_itm_ { IconAdp.regy_loadDir_shallow(app.User().Fsys_mgr().Root_dir().GenSubDir_nest("app", "img", "win")); win_box.Icon_(IconAdp.regy_("xowa.app")); } - public static GfuiBtn new_btn(Xoa_app app, Gfui_kit kit, GfuiWin win, Io_url img_dir, String id, String file) { + public static GfuiBtn new_btn(Xoae_app app, Gfui_kit kit, GfuiWin win, Io_url img_dir, String id, String file) { GfuiBtn rv = kit.New_btn(id, win); rv.Btn_img_(kit.New_img_load(img_dir.GenSubFil(file))); return rv; } - public static GfuiTextBox new_txt(Xoa_app app, Gfui_kit kit, GfuiWin win, FontAdp ui_font, String id, boolean border_on) { + public static GfuiTextBox new_txt(Xoae_app app, Gfui_kit kit, GfuiWin win, FontAdp ui_font, String id, boolean border_on) { GfuiTextBox rv = kit.New_text_box(id, win, KeyVal_.new_(GfuiTextBox.CFG_border_on_, border_on)); rv.TextMgr().Font_(ui_font); return rv; } - public static void Update_tiptext(Xoa_app app, GfuiElem elem, int tiptext_id) { + public static void Update_tiptext(Xoae_app app, GfuiElem elem, int tiptext_id) { elem.TipText_(Xog_win_itm_.new_tiptext(app, tiptext_id)); } public static void Font_update(Xog_win_itm win, Xol_font_info itm_font) { @@ -54,5 +54,5 @@ public class Xog_win_itm_ { win.Tab_mgr().Tab_mgr().TextMgr().Font_(new_font); } } - public static String new_tiptext(Xoa_app app, int id) {return String_.new_utf8_(app.User().Lang().Msg_mgr().Val_by_id(app.User().Wiki(), id));} + public static String new_tiptext(Xoae_app app, int id) {return String_.new_utf8_(app.User().Lang().Msg_mgr().Val_by_id(app.User().Wiki(), id));} } diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java index 68d9c70f0..aa226b911 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java @@ -22,18 +22,17 @@ public class Xog_win_itm__prog_href_mgr { private static Bry_bfr tmp_bfr = Bry_bfr.reset_(512); public static void Print(Xog_win_itm win) { // PURPOSE: print href in prog box when in content editable mode String href = win.Active_html_box().Html_active_atr_get_str(Gfui_html.Atr_href, "");// get selected href from html_box - href = win.App().Encoder_mgr().Href().Decode_str(href); // remove url encodings + href = Xoa_app_.Utl_encoder_mgr().Href().Decode_str(href); // remove url encodings if (!String_.Eq(href, win.Prog_box().Text())) win.Usr_dlg().Prog_direct(href); } - public static void Hover(Xoa_app app, Xoa_page page, String href) { + public static void Hover(Xoae_app app, Xowe_wiki wiki, Xoae_page page, String href) { Gfo_usr_dlg usr_dlg = app.Usr_dlg(); if ( String_.Len_eq_0(href) // href is null / empty; occurs when hovering over empty space || String_.Eq(href, "file:///")) { usr_dlg.Prog_direct(""); // clear out previous entry return; } - Xow_wiki wiki = page.Wiki(); app.Href_parser().Parse(tmp_href, href, wiki, page.Ttl().Page_url()); tmp_href.Print_to_bfr(tmp_bfr, wiki.Gui_mgr().Cfg_browser().Link_hover_full()); usr_dlg.Prog_direct(tmp_bfr.Xto_str_and_clear()); diff --git a/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java b/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java index dd592c3e7..774b1d5f9 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.ios.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; public class Xob_hdump_bldr { private Xodb_fsys_mgr fsys_mgr; private Xodb_file core_db; private Xodb_xowa_db_tbl db_tbl; private Xodb_xowa_cfg_tbl cfg_tbl; private Db_stmt cfg_update_stmt; private int hdump_db_id; private long hdump_db_size, hdump_db_max; private Db_conn hdump_db_provider; @@ -40,7 +40,7 @@ public class Xob_hdump_bldr { Db_term(core_db, hdump_db_provider, hdump_db_id); } private Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_mb); private Xow_hzip_stats hzip_stats = new Xow_hzip_stats(); - public void Insert_page(Xoa_page page) { + public void Insert_page(Xoae_page page) { hdump_mgr.Write2(tmp_bfr, page, hzip_stats); hdump_db_size += hdump_save_mgr.Insert_body(page, hzip_stats, page.Revision_data().Id()); if (hdump_db_size > hdump_db_max) { diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java index d589c6b30..b7123c6bb 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java @@ -21,16 +21,16 @@ import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.saves.*; import gplx.xow import gplx.xowa2.gui.*; public class Xodb_hdump_mgr { private Xodb_file hdump_db_file; private Xow_hzip_mgr hzip_mgr; - public Xodb_hdump_mgr(Xow_wiki wiki) { + public Xodb_hdump_mgr(Xowe_wiki wiki) { this.wiki = wiki; load_mgr = new Hdump_load_mgr(); Tbl_(new Xodb_wiki_page_html_tbl()); text_tbl.Init_by_wiki(wiki); - Xoa_app app = wiki.App(); - html_mgr.Init_by_app(app.Usr_dlg(), app.Fsys_mgr(), app.Encoder_mgr().Fsys()); + Xoae_app app = wiki.Appe(); + html_mgr.Init_by_app(app.Usr_dlg(), app.Fsys_mgr(), Xoa_app_.Utl_encoder_mgr().Fsys()); hzip_mgr = wiki.Html_mgr().Hzip_mgr(); } - public Xow_wiki Wiki() {return wiki;} private final Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private final Xowe_wiki wiki; @gplx.Internal protected Hdump_load_mgr Load_mgr() {return load_mgr;} private Hdump_load_mgr load_mgr; @gplx.Internal protected Hdump_save_mgr Save_mgr() {return save_mgr;} private Hdump_save_mgr save_mgr = new Hdump_save_mgr(); public Hdump_html_body Html_mgr() {return html_mgr;} private Hdump_html_body html_mgr = new Hdump_html_body(); @@ -43,10 +43,10 @@ public class Xodb_hdump_mgr { public Db_conn Db_conn_by_page(int page_id) { return text_tbl.Conn(); } - public void Save_if_missing(Xoa_page page) { + public void Save_if_missing(Xoae_page page) { if (page.Revision_data().Html_db_id() == -1) Save(page); } - public void Save(Xoa_page page) { + public void Save(Xoae_page page) { if (!Enabled_chk()) return; Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); this.Write(tmp_bfr, page); @@ -54,13 +54,13 @@ public class Xodb_hdump_mgr { wiki.Db_mgr_as_sql().Tbl_page().Update_html_db_id(page.Revision_data().Id(), hdump_db_file.Id()); tmp_bfr.Mkr_rls(); } - public void Write(Bry_bfr bfr, Xoa_page page) { + public void Write(Bry_bfr bfr, Xoae_page page) { page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read); wkr.Write_body(bfr, Xoh_wtr_ctx.Hdump, page); page.Hdump_data().Body_(bfr.Xto_bry_and_clear()); } - public void Write2(Bry_bfr tmp_bfr, Xoa_page page, Xow_hzip_stats stats) { + public void Write2(Bry_bfr tmp_bfr, Xoae_page page, Xow_hzip_stats stats) { page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read); wkr.Write_body(tmp_bfr, Xoh_wtr_ctx.Hdump, page); @@ -68,7 +68,7 @@ public class Xodb_hdump_mgr { page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); hpg.Init(tmp_bfr, page); } private Xog_page hpg = new Xog_page(); - public void Load(Xow_wiki wiki, Xoa_page page, int html_db_id) { + public void Load(Xowe_wiki wiki, Xoae_page page, int html_db_id) { if (!Enabled_chk()) return; page.Root_(new Xop_root_tkn()); Xog_page hpg = new Xog_page().Init(page.Revision_data().Id(), page.Url(), page.Ttl()); @@ -78,7 +78,7 @@ public class Xodb_hdump_mgr { hpg.Page_body_(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); Load_page(wiki, page, hpg); } - private void Load_page(Xow_wiki wiki, Xoa_page page, Xog_page hpg) { + private void Load_page(Xowe_wiki wiki, Xoae_page page, Xog_page hpg) { Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); html_mgr.Init_by_page(wiki.Domain_bry(), hpg).Write(tmp_bfr); page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java index b85b3dc8b..425d17491 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import org.junit.*; import gplx.dbs.*; import gplx.xowa.files.*; +import org.junit.*; import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.loads.*; import gplx.xowa.hdumps.pages.*; public class Xodb_hdump_mgr__save_tst { @Before public void init() {fxt.Clear();} private Xodb_hdump_mgr__save_fxt fxt = new Xodb_hdump_mgr__save_fxt(); @@ -82,7 +82,7 @@ class Xodb_hdump_mgr__save_fxt extends Xodb_hdump_mgr__base_fxt { } public void Init_redlinks(int... uids) { this.init_redlinks = uids; - page.Lnki_redlinks_mgr().Clear(); + page.Redlink_lnki_list().Clear(); } private int[] init_redlinks; public Xodb_wiki_page_html_row Make_row_body(int imgs_count, String body) { page.Hdump_data().Body_(Bry_.new_utf8_(body)); @@ -97,7 +97,7 @@ class Xodb_hdump_mgr__save_fxt extends Xodb_hdump_mgr__base_fxt { return new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_data, imgs_bry); } public Xodb_wiki_page_html_row Make_row_redlink(int... uids) { - Xopg_redlink_mgr redlink_mgr = new Xopg_redlink_mgr(); + Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list(); for (int uid : uids) redlink_mgr.Add(uid); byte[] redlinks_bry = Hdump_save_mgr.Write_redlinks(tmp_bfr, redlink_mgr); @@ -106,7 +106,7 @@ class Xodb_hdump_mgr__save_fxt extends Xodb_hdump_mgr__base_fxt { @Override public void Exec_write(String raw) { super.Exec_write(raw); if (init_redlinks != null) { - Xopg_redlink_mgr redlink_mgr = page.Hdump_data().Redlink_mgr(); + Xopg_redlink_idx_list redlink_mgr = page.Hdump_data().Redlink_mgr(); int len = init_redlinks.length; for (int i = 0; i < len; ++i) { redlink_mgr.Add(init_redlinks[i]); diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java index acbe3b2c4..8a3af003b 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java @@ -103,7 +103,7 @@ public class Xodb_hdump_mgr__write_tst { class Xodb_hdump_mgr__base_fxt { protected Xodb_hdump_mgr hdump_mgr; protected Bry_bfr bfr = Bry_bfr.reset_(255); - protected Xow_wiki wiki; protected Xoa_page page; + protected Xowe_wiki wiki; protected Xoae_page page; public Xop_fxt Fxt() {return fxt;} protected Xop_fxt fxt; public void Clear() { if (fxt == null) { diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java index 52a722a1c..1f018ccd4 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.dbs.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.dbs.*; public class Xodb_hdump_mgr_setup { public static Xodb_file Hdump_db_file_init(Xodb_hdump_mgr hdump_mgr) { - Xow_wiki wiki = hdump_mgr.Wiki(); + Xowe_wiki wiki = hdump_mgr.Wiki(); Xodb_mgr_sql db_mgr_as_sql = wiki.Db_mgr_as_sql(); Xodb_file rv = db_mgr_as_sql.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_html); if (rv == null) rv = Setup(db_mgr_as_sql); @@ -45,7 +45,7 @@ public class Xodb_hdump_mgr_setup { private static Xodb_file Create_db(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) { Xodb_file html_db_file = fsys_mgr.Make(Xodb_file_tid.Tid_html); html_db_file.Conn().Exec_sql(Xodb_wiki_page_html_tbl.Tbl_sql); - db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Conn_core(), db_mgr.Fsys_mgr().Files_ary()); + db_mgr.Tbl_xowa_db().Commit_all(db_mgr.Fsys_mgr().Files_ary()); return html_db_file; } private static void Create_idx(Xodb_file html_db_file) { diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java b/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java index 26d469951..0564d6c1d 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; +import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; public class Xodbv_dbs_tbl { public static final String Tbl_name = "xowa_db", Fld_db_id = "db_id", Fld_db_type = "db_type", Fld_db_url = "db_url"; private static final String[] Flds__all = new String[] {Fld_db_id, Fld_db_type, Fld_db_url}; diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodbv_page_tbl.java b/400_xowa/src/gplx/xowa/hdumps/Xodbv_page_tbl.java deleted file mode 100644 index ccf811f3a..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xodbv_page_tbl.java +++ /dev/null @@ -1,65 +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.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; -public class Xodbv_page_tbl { - public boolean Select_by_ttl(Xodb_page rv, Db_conn conn, Xow_ns ns, byte[] ttl) { - Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), Select_by_id_flds__hdump)); - rdr = stmt.Val_int(ns.Id()).Val_str(String_.new_utf8_(ttl)).Exec_select_as_rdr(); - if (rdr.Move_next()) { - Read_page__all(rv, rdr); - return true; - } - } finally {rdr.Rls(); stmt.Rls();} - return false; - } - public boolean Select_by_id(Xodb_page rv, Db_conn conn, int page_id) { - Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_id), Select_by_id_flds__hdump)); - rdr = stmt.Val_int(page_id).Exec_select_as_rdr(); - if (rdr.Move_next()) { - Read_page__all(rv, rdr); - return true; - } - } finally {rdr.Rls(); stmt.Rls();} - return false; - } - public static void Read_page__all(Xodb_page page, Db_rdr rdr) { - page.Id_ (rdr.Read_int(0)); - page.Ns_id_ (rdr.Read_int(1)); - page.Ttl_wo_ns_ (rdr.Read_bry_by_str(2)); - page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(3), Page_touched_fmt)); - page.Type_redirect_ (rdr.Read_byte(4) == 1); - page.Text_len_ (rdr.Read_int(5)); - page.Text_db_id_ (rdr.Read_int(6)); - page.Html_db_id_ (rdr.Read_int(7)); - page.Redirect_id_ (rdr.Read_int(8)); - } - private static final String Page_touched_fmt = "yyyyMMddHHmmss"; - public static final String Tbl_name = "page" - , Fld_page_id = "page_id", Fld_page_ns = "page_namespace", Fld_page_title = "page_title" - , Fld_page_is_redirect = "page_is_redirect", Fld_page_touched = "page_touched", Fld_page_len = "page_len" - , Fld_page_random_int = "page_random_int", Fld_page_file_idx = "page_file_idx" - , Fld_page_html_db_id = "page_html_db_id", Fld_page_redirect_id = "page_redirect_id"; - private static final String[] Select_by_id_flds__hdump = new String[] - { Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_touched, Fld_page_is_redirect, Fld_page_len, Fld_page_file_idx, Fld_page_html_db_id, Fld_page_redirect_id - }; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java b/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java index e018022e3..844c25604 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java +++ b/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java @@ -18,7 +18,6 @@ along with this program. If not, see . package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.tbls.*; public class Xowd_db_tbl_mgr { - public Xodbv_page_tbl Tbl__page() {return tbl__page;} private final Xodbv_page_tbl tbl__page = new Xodbv_page_tbl(); public Xodb_xowa_ns_tbl Tbl__ns() {return tbl__ns;} private final Xodb_xowa_ns_tbl tbl__ns = new Xodb_xowa_ns_tbl(); public Xodbv_dbs_tbl Tbl__dbs_new() {return new Xodbv_dbs_tbl();} } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java index ca6e2328d..0412331e3 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.xowa.hdumps.dbs.*; +import gplx.xowa.hdumps.dbs.*; import gplx.xowa.files.repos.*; public abstract class Hdump_data_img__base implements Hdump_data_itm { public Hdump_data_img__base Init_by_base(byte[] lnki_ttl, int html_uid, int html_w, int html_h, int file_repo_id, int file_ext_id, boolean file_is_orig, int file_w, double file_time, int file_page) { this.lnki_ttl = lnki_ttl; diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java index c170d0296..2f44a9d39 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java @@ -20,7 +20,7 @@ import gplx.dbs.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.bldrs.*; impo import gplx.xowa2.gui.*; class Hdump_img_bldr_cmd extends Xob_itm_basic_base implements Xob_cmd { private Xodb_wiki_page_html_tbl text_tbl = new Xodb_wiki_page_html_tbl(); - public Hdump_img_bldr_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public Hdump_img_bldr_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return Key_const;} public static final String Key_const = "hdump.make.imgs"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java b/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java index 56e228c82..081a44540 100644 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java +++ b/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java @@ -16,12 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; public class Xodb_wiki_page_html_tbl { private Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr(); private Db_stmt stmt_select, stmt_insert, stmt_delete; - public void Init_by_wiki(Xow_wiki wiki) { - this.zip_mgr = wiki.App().Zip_mgr(); + public void Init_by_wiki(Xowe_wiki wiki) { + this.zip_mgr = wiki.Appe().Zip_mgr(); } public byte Zip_tid() {return zip_tid;} public void Zip_tid_(byte v) {zip_tid = v;} private byte zip_tid = Io_stream_.Tid_gzip; public Db_conn Conn() {return conn;} public Xodb_wiki_page_html_tbl Conn_(Db_conn v) {this.Rls_all(); conn = v; return this;} private Db_conn conn; diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java index f10fd634d..c8be91c46 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java +++ b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java @@ -16,8 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.brys.*; import gplx.core.btries.*; import gplx.html.*; import gplx.xowa.html.*; import gplx.xowa.files.*; -import gplx.xowa.apps.fsys.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.xtns.gallery.*; +import gplx.core.brys.*; import gplx.core.btries.*; import gplx.html.*; import gplx.xowa.html.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; +import gplx.xowa.wikis.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.xtns.gallery.*; import gplx.xowa2.gui.*; public class Hdump_html_body { private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); private Bry_rdr bry_rdr = new Bry_rdr(); private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; @@ -34,7 +35,7 @@ public class Hdump_html_body { } public Hdump_html_body Init_by_page(byte[] domain_bry, Xog_page hpg) { this.hpg = hpg; - file_dir_comm = tmp_bfr.Add(file_dir).Add(Xow_wiki_.Domain_commons_bry).Add_byte_slash().Xto_bry_and_clear(); + file_dir_comm = tmp_bfr.Add(file_dir).Add(Xow_domain_.Domain_bry_commons).Add_byte_slash().Xto_bry_and_clear(); file_dir_wiki = tmp_bfr.Add(file_dir).Add(domain_bry).Add_byte_slash().Xto_bry_and_clear(); return this; } diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java index 28c35c41a..6f0eaaf59 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java @@ -105,10 +105,10 @@ class Hdump_html_mgr_fxt { private Hdump_html_body html_mgr; private Bry_bfr bfr = Bry_bfr.reset_(255); private ListAdp img_list = ListAdp_.new_(); - private Xow_wiki wiki; + private Xowe_wiki wiki; public Xog_page Hpg() {return hpg;} private Xog_page hpg = new Xog_page(); public void Clear() { - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); wiki = Xoa_app_fxt.wiki_tst_(app); html_mgr = wiki.Db_mgr().Hdump_mgr().Html_mgr(); } diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java index 8dcbe0713..e5ca39877 100644 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java @@ -70,9 +70,9 @@ class Hdump_load_mgr_fxt { } public Hdump_load_mgr_fxt Init_row_body(String body, String display_ttl, String content_sub, String sidebar_div) { Bry_bfr tmp_bfr = Bry_bfr.reset_(255); - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); - Xoa_page page = Xoa_page.new_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_("Page_1"))); + Xoae_app app = Xoa_app_fxt.app_(); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xoae_page page = Xoae_page.new_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_("Page_1"))); if (display_ttl != null) page.Html_data().Display_ttl_(Bry_.new_utf8_(display_ttl)); if (content_sub != null) page.Html_data().Content_sub_(Bry_.new_utf8_(content_sub)); if (sidebar_div != null) page.Html_data().Xtn_skin_mgr().Add(new Xopg_xtn_skin_itm_mock(Bry_.new_utf8_(sidebar_div))); diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java index c08937acd..dbbce9c64 100644 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java +++ b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java @@ -21,7 +21,7 @@ import gplx.xowa.html.modules.*; import gplx.xowa2.gui.*; public class Hdump_page_body_srl { private static final Bry_bfr tmp_bfr = Bry_bfr.reset_(255); - public static void Save(Bry_bfr bfr, Xoa_page page) { + public static void Save(Bry_bfr bfr, Xoae_page page) { bfr.Add_int_fixed(0, 1).Add_byte_pipe(); // version Xopg_hdump_data hdump_data = page.Hdump_data(); bfr.Add_int_variable(hdump_data.Data_count_imgs()); // imgs_count @@ -58,7 +58,7 @@ public class Hdump_page_body_srl { tmp_bfr.Add_yn(v); tmp_bfr.Add_byte_pipe(); } - private static void Save_sidebars(Bry_bfr bfr, Xoa_page page, Xopg_html_data html_data) { + private static void Save_sidebars(Bry_bfr bfr, Xoae_page page, Xopg_html_data html_data) { Xopg_xtn_skin_mgr mgr = html_data.Xtn_skin_mgr(); int len = mgr.Count(); boolean sidebar_exists = false; diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java b/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java index bbb931595..535094cbf 100644 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java +++ b/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java @@ -22,7 +22,7 @@ public class Xopg_xtn_skin_itm_mock implements Xopg_xtn_skin_itm { public Xopg_xtn_skin_itm_mock(byte[] val) {this.val = val;} public byte Tid() {return Xopg_xtn_skin_itm_tid.Tid_sidebar;} public byte[] Key() {return Bry_.Empty;} - public void Write(Bry_bfr bfr, Xoa_page page) { + public void Write(Bry_bfr bfr, Xoae_page page) { bfr.Add(val); } } diff --git a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java b/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java index 9039c67d8..1c77d0acc 100644 --- a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java +++ b/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java @@ -17,8 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.hdumps.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.files.*; +import gplx.xowa.parsers.lnkis.redlinks.*; public class Xopg_hdump_data { - public Xopg_redlink_mgr Redlink_mgr() {return redlink_mgr;} private Xopg_redlink_mgr redlink_mgr = new Xopg_redlink_mgr(); + public Xopg_redlink_idx_list Redlink_mgr() {return redlink_mgr;} private Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list(); public int Data_count_imgs() {return data_count_imgs;} public void Data_count_imgs_(int v) {data_count_imgs = v;} private int data_count_imgs; public ListAdp Data() {return data;} private final ListAdp data = ListAdp_.new_(); public void Data_add(Hdump_data_itm itm) {data.Add(itm);} diff --git a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java index bd2c833d6..e7b6e9b2a 100644 --- a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java +++ b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java @@ -16,19 +16,19 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps.saves; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.srls.*; import gplx.xowa.html.hzips.*; +import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.srls.*; import gplx.xowa.html.hzips.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.hdumps.loads.*; import gplx.xowa2.gui.*; public class Hdump_save_mgr { private Bry_bfr tmp_bfr = Bry_bfr.reset_(1 * Io_mgr.Len_mb); private Xow_hzip_stats hzip_stats = new Xow_hzip_stats(); public Xodb_wiki_page_html_tbl Tbl() {return text_tbl;} public void Tbl_(Xodb_wiki_page_html_tbl v) {text_tbl = v;} private Xodb_wiki_page_html_tbl text_tbl; - public void Update(Xoa_page page) { + public void Update(Xoae_page page) { int page_id = page.Revision_data().Id(); text_tbl.Delete(page_id); this.Insert(page, hzip_stats); } public void Hdump_stats_enable_y_(Db_conn p) {hdump_stats_tbl = new Hdump_stats_tbl().Conn_(p).Create_tbl();} private Hdump_stats_tbl hdump_stats_tbl; - public void Insert(Xoa_page page, Xow_hzip_stats hzip_stats) { + public void Insert(Xoae_page page, Xow_hzip_stats hzip_stats) { int page_id = page.Revision_data().Id(); Insert_body(page, hzip_stats, page_id); byte[] redlinks_bry = Write_redlinks(tmp_bfr, page.Hdump_data().Redlink_mgr()); @@ -36,7 +36,7 @@ public class Hdump_save_mgr { byte[] imgs_bry = Write_imgs(tmp_bfr, page.Hdump_data().Data()); if (imgs_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_img, imgs_bry); } - public int Insert_body(Xoa_page page, Xow_hzip_stats hzip_stats, int page_id) { + public int Insert_body(Xoae_page page, Xow_hzip_stats hzip_stats, int page_id) { hpg.Init(tmp_bfr, page); srl_mgr.Save(hpg, tmp_bfr); byte[] body_bry = tmp_bfr.Xto_bry_and_clear(); @@ -52,7 +52,7 @@ public class Hdump_save_mgr { } return bfr.Xto_bry_and_clear(); } - public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_mgr redlink_mgr) { + public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_idx_list redlink_mgr) { int len = redlink_mgr.Len(); if (len == 0) return null; bfr.Add_int_variable(redlink_mgr.Max()); for (int i = 0; i < len; ++i) { diff --git a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java index ef2da9f70..dbc0d1238 100644 --- a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java +++ b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.hdumps.saves; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; import gplx.xowa2.gui.*; class Hdump_stats_tbl { private Db_stmt stmt_insert; diff --git a/400_xowa/src/gplx/xowa/html/Xoh_cmd_itm.java b/400_xowa/src/gplx/xowa/html/Xoh_cmd_itm.java index 568061e56..d5375295e 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_cmd_itm.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_cmd_itm.java @@ -18,6 +18,6 @@ along with this program. If not, see . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; public interface Xoh_cmd_itm { String Hcmd_id(); - void Hcmd_exec(Xoa_app app, Gfo_usr_dlg usr_dlg, Xoa_page page); - void Hcmd_write(Xoa_app app, Gfo_usr_dlg usr_dlg, Xoa_page page); + void Hcmd_exec(Xoae_app app, Gfo_usr_dlg usr_dlg, Xoae_page page); + void Hcmd_write(Xoae_app app, Gfo_usr_dlg usr_dlg, Xoae_page page); } diff --git a/400_xowa/src/gplx/xowa/html/Xoh_cmd_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_cmd_mgr.java index ec3d81894..1b49e33ab 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_cmd_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_cmd_mgr.java @@ -20,7 +20,7 @@ public class Xoh_cmd_mgr { public int Count() {return cmds.Count();} public void Clear() {cmds.Clear();} public void Add(Xoh_cmd_itm itm) {cmds.Add(itm);} ListAdp cmds = ListAdp_.new_(); - public void Exec(Xoa_app app, Xoa_page page) { + public void Exec(Xoae_app app, Xoae_page page) { int len = cmds.Count(); if (len == 0) return; Gfo_usr_dlg usr_dlg = app.Usr_dlg(); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java index c7cbcbd71..da505b169 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java @@ -18,11 +18,11 @@ along with this program. If not, see . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.tidy.*; import gplx.xowa.html.utils.*; import gplx.xowa.html.skins.*; public class Xoh_html_mgr implements GfoInvkAble { - public Xoh_html_mgr(Xoa_app app) { + public Xoh_html_mgr(Xoae_app app) { page_mgr = new Xoh_page_mgr(app); js_cleaner = new Xoh_js_cleaner(app); } - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { tidy_mgr.Init_by_app(app); } public Xop_xatr_whitelist_mgr Whitelist_mgr() {return whitelist_mgr;} private Xop_xatr_whitelist_mgr whitelist_mgr = new Xop_xatr_whitelist_mgr().Ini(); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java index 3e481f0de..bcdb93275 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java @@ -21,15 +21,15 @@ import gplx.core.btries.*; import gplx.html.*; import gplx.xowa.wikis.*; import import gplx.xowa.parsers.apos.*; import gplx.xowa.parsers.amps.*; import gplx.xowa.parsers.lnkes.*; import gplx.xowa.parsers.hdrs.*; import gplx.xowa.parsers.lists.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.parsers.tblws.*; import gplx.xowa.parsers.paras.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.dynamicPageList.*; import gplx.xowa.xtns.math.*; import gplx.xowa.langs.vnts.*; import gplx.xowa.xtns.cite.*; import gplx.xowa.html.hzips.*; public class Xoh_html_wtr { - private Xow_wiki wiki; private Xoa_app app; private Xoa_page page; private Xop_xatr_whitelist_mgr whitelist_mgr; - public Xoh_html_wtr(Xow_wiki wiki, Xow_html_mgr html_mgr) { - this.wiki = wiki; this.app = wiki.App(); this.whitelist_mgr = app.Html_mgr().Whitelist_mgr(); + private Xowe_wiki wiki; private Xoae_app app; private Xoae_page page; private Xop_xatr_whitelist_mgr whitelist_mgr; + public Xoh_html_wtr(Xowe_wiki wiki, Xow_html_mgr html_mgr) { + this.wiki = wiki; this.app = wiki.Appe(); this.whitelist_mgr = app.Html_mgr().Whitelist_mgr(); this.html_mgr = html_mgr; lnki_wtr = new Xoh_lnki_wtr(this, wiki, html_mgr, cfg); ref_wtr = new Ref_html_wtr(wiki); lnke_wtr = new Xoh_lnke_wtr(wiki); } - public void Init_by_wiki(Xow_wiki wiki) { + public void Init_by_wiki(Xowe_wiki wiki) { cfg.Toc_show_(true).Lnki_title_(true).Lnki_visited_(true).Lnki_id_(true); // NOTE: set during Init_by_wiki, b/c all tests assume these are false ref_wtr.Init_by_wiki(wiki); } @@ -38,7 +38,7 @@ public class Xoh_html_wtr { public Xoh_lnki_wtr Lnki_wtr() {return lnki_wtr;} private Xoh_lnki_wtr lnki_wtr; public Xoh_lnke_wtr Lnke_wtr() {return lnke_wtr;} private Xoh_lnke_wtr lnke_wtr; public Ref_html_wtr Ref_wtr() {return ref_wtr;} private Ref_html_wtr ref_wtr; - public void Init_by_page(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xoa_page page) {this.page = page; lnki_wtr.Init_by_page(ctx, hctx, src, page);} + public void Init_by_page(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xoae_page page) {this.page = page; lnki_wtr.Init_by_page(ctx, hctx, src, page);} public void Write_all(Bry_bfr bfr, Xop_ctx ctx, byte[] src, Xop_root_tkn root) {Write_all(bfr, ctx, Xoh_wtr_ctx.Basic, src, root);} public void Write_all(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_root_tkn root) { try { @@ -91,7 +91,7 @@ public class Xoh_html_wtr { case Xop_tkn_itm_.Tid_vnt: Vnt(ctx, hctx, bfr, src, (Xop_vnt_tkn)tkn); break; // case Xop_tkn_itm_.Tid_tab: bfr.Add_byte_repeat(Byte_ascii.Tab, tkn.Src_end() - tkn.Src_bgn()); break; default: - Xoh_html_wtr_escaper.Escape(app, bfr, src, tkn.Src_bgn(), tkn.Src_end(), true, false); // NOTE: always escape text including (a) lnki_alt text; and (b) any other text, especially failed xndes; DATE:2013-06-18 + Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, tkn.Src_bgn(), tkn.Src_end(), true, false); // NOTE: always escape text including (a) lnki_alt text; and (b) any other text, especially failed xndes; DATE:2013-06-18 break; } } @@ -302,7 +302,7 @@ public class Xoh_html_wtr { @gplx.Virtual public void Xnde(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) { if (hctx.Mode_is_alt()) { if (xnde.Tag_close_bgn() > 0) // NOTE: some tags are not closed; WP.EX: France;

- Xoh_html_wtr_escaper.Escape(app, bfr, src, xnde.Tag_open_end(), xnde.Tag_close_bgn(), true, false); + Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, xnde.Tag_open_end(), xnde.Tag_close_bgn(), true, false); else Xnde_subs(ctx, hctx, bfr, src, xnde); return; @@ -375,7 +375,7 @@ public class Xoh_html_wtr { if (xnde.Atrs_bgn() > Xop_tblw_wkr.Atrs_ignore_check) Xnde_atrs(tag_id, hctx, src, xnde.Atrs_bgn(), xnde.Atrs_end(), xnde.Atrs_ary(), bfr); bfr.Add_byte(Tag__end); int tag_close_bgn = Bry_finder.Find_bwd_while(src, xnde.Tag_close_bgn(), -1, Byte_ascii.Space) + 1; // trim space from end; PAGE:en.w:Comment_(computer_programming) DATE:2014-06-23 - Xoh_html_wtr_escaper.Escape(app, bfr, src, xnde.Tag_open_end(), tag_close_bgn, false, false); // is a .Xtn(); render literally everything between > and <; DATE:2014-03-11 + Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, xnde.Tag_open_end(), tag_close_bgn, false, false); // is a .Xtn(); render literally everything between > and <; DATE:2014-03-11 bfr.Add(Tag__end_bgn).Add(name).Add_byte(Tag__end); break; } @@ -418,7 +418,7 @@ public class Xoh_html_wtr { default: // unknown tag if (tag.Restricted()) { // a; img; script; etc.. if ( !page.Html_data().Html_restricted() // page is not marked restricted (only [[Special:]]) - || page.Wiki().Domain_tid() == Xow_wiki_domain_.Tid_home) { // page is in home wiki + || page.Wiki().Domain_tid() == Xow_domain_.Tid_int_home) { // page is in home wiki bfr.Add_mid(src, xnde.Src_bgn(), xnde.Src_end()); return; } @@ -492,7 +492,7 @@ public class Xoh_html_wtr { } } - public static void Xnde_atr_write(Bry_bfr bfr, Xoa_app app, Xoh_wtr_ctx hctx, byte[] src, Xop_xatr_itm atr) { + public static void Xnde_atr_write(Bry_bfr bfr, Xoae_app app, Xoh_wtr_ctx hctx, byte[] src, Xop_xatr_itm atr) { byte[] atr_key = atr.Key_bry(); if ( hctx.Mode_is_display_title() && Xoh_display_ttl_wtr._.Is_style_restricted(bfr, hctx, src, atr, atr_key)) @@ -521,8 +521,8 @@ public class Xoh_html_wtr { } bfr.Add_byte(quote_byte); } - private static void Xnde_atr_write_id(Bry_bfr bfr, Xoa_app app, byte[] bry, int bgn, int end) { - app.Encoder_mgr().Id().Encode(bfr, bry, bgn, end); + private static void Xnde_atr_write_id(Bry_bfr bfr, Xoae_app app, byte[] bry, int bgn, int end) { + Xoa_app_.Utl_encoder_mgr().Id().Encode(bfr, bry, bgn, end); } private void Xnde_subs(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) { int subs_len = xnde.Subs_len(); @@ -554,7 +554,7 @@ public class Xoh_html_wtr { if (amp_enable) bfr.Add_mid(src, sub.Src_bgn(), sub.Src_end()); else - Xoh_html_wtr_escaper.Escape(app, bfr, src, sub.Src_bgn(), sub.Src_end(), true, nowiki); + Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, sub.Src_bgn(), sub.Src_end(), true, nowiki); break; default: Write_tkn(bfr, ctx, hctx, src, xnde, i, sub); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_escaper.java b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_escaper.java index c30201c77..a09700fa8 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_escaper.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_escaper.java @@ -18,12 +18,11 @@ along with this program. If not, see . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.core.btries.*; import gplx.html.*; import gplx.xowa.parsers.amps.*; public class Xoh_html_wtr_escaper { - public static byte[] Escape(Xoa_app app, Bry_bfr tmp_bfr, byte[] src) { - Escape(app, tmp_bfr, src, 0, src.length, true, false); + public static byte[] Escape(Xop_amp_mgr amp_mgr, Bry_bfr tmp_bfr, byte[] src) { + Escape(amp_mgr, tmp_bfr, src, 0, src.length, true, false); return tmp_bfr.Xto_bry_and_clear(); } - public static void Escape(Xoa_app app, Bry_bfr bfr, byte[] src, int bgn, int end, boolean interpret_amp, boolean nowiki_skip) { - Xop_amp_mgr amp_mgr = app.Parser_amp_mgr(); + public static void Escape(Xop_amp_mgr amp_mgr, Bry_bfr bfr, byte[] src, int bgn, int end, boolean interpret_amp, boolean nowiki_skip) { Btrie_slim_mgr amp_trie = amp_mgr.Amp_trie(); for (int i = bgn; i < end; i++) { byte b = src[i]; @@ -33,7 +32,7 @@ public class Xoh_html_wtr_escaper { byte[] nowiki_name = Xop_xnde_tag_.Tag_nowiki.Name_bry(); int nowiki_name_len = nowiki_name.length; if (Bry_.Eq(nowiki_name, src, i + 1, i + 1 + nowiki_name_len)) { // . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.portal.*; public class Xoh_page_mgr implements GfoInvkAble { - public Xoh_page_mgr(Xoa_app app) { + public Xoh_page_mgr(Xoae_app app) { this.subpages_bldr = new Xoh_subpages_bldr(app); } public Xoh_subpages_bldr Subpages_bldr() {return subpages_bldr;} private Xoh_subpages_bldr subpages_bldr; diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java index 7cc80379d..e15e1a47f 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java @@ -18,9 +18,8 @@ along with this program. If not, see . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.xowa.pages.*; public class Xoh_page_wtr_mgr implements GfoInvkAble { - private Xoh_page_wtr_wkr edit_wtr, html_wtr, read_wtr; private Xoa_app app; - public Xoh_page_wtr_mgr(Xoa_app app, boolean html_capable) { - this.app = app; + private Xoh_page_wtr_wkr edit_wtr, html_wtr, read_wtr; + public Xoh_page_wtr_mgr(boolean html_capable) { page_edit_fmtr.Fmt_(String_.Concat_lines_nl_skip_last ( "" , "" @@ -47,8 +46,8 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { } public boolean Html_capable() {return html_capable;} public Xoh_page_wtr_mgr Html_capable_(boolean v) {html_capable = v; return this;} private boolean html_capable; public Bry_fmtr Page_read_fmtr() {return page_read_fmtr;} - public byte[] Css_common_bry() {return css_common_bry;} public Xoh_page_wtr_mgr Css_common_bry_(Io_url v) {css_common_bry = app.Encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_common_bry; - public byte[] Css_wiki_bry() {return css_wiki_bry;} public Xoh_page_wtr_mgr Css_wiki_bry_(Io_url v) {css_wiki_bry = app.Encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_wiki_bry; + public byte[] Css_common_bry() {return css_common_bry;} public Xoh_page_wtr_mgr Css_common_bry_(Io_url v) {css_common_bry = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_common_bry; + public byte[] Css_wiki_bry() {return css_wiki_bry;} public Xoh_page_wtr_mgr Css_wiki_bry_(Io_url v) {css_wiki_bry = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_wiki_bry; private static final String[] Fmtr_keys = new String[] { "app_root_dir", "app_version", "app_build_date", "xowa_mode_is_server" , "page_id", "page_name", "page_title", "page_modified_on_msg" @@ -76,16 +75,16 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , " " ), "src_full_db"); public void Init_(boolean v) {init = v;} private boolean init = true; - public byte[] Gen(Xoa_page page, byte output_tid) { + public byte[] Gen(Xoae_page page, byte output_tid) { Xoh_page_wtr_wkr wtr = Wkr(output_tid); - Xow_wiki wiki = page.Wiki(); + Xowe_wiki wiki = page.Wikie(); if (init) { init = false; page_read_fmtr.Eval_mgr_(wiki.Eval_mgr()); page_edit_fmtr.Eval_mgr_(wiki.Eval_mgr()); page_html_fmtr.Eval_mgr_(wiki.Eval_mgr()); } - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_m001(); byte[] bry = wtr.Write(this, page, wiki.Ctx(), tmp_bfr); tmp_bfr.Mkr_rls(); return bry; diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr_tst.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr_tst.java index c16866296..08d8bb239 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr_tst.java @@ -21,12 +21,12 @@ import gplx.xowa.gui.*; import gplx.xowa.html.*; import gplx.xowa.html.portal.*; public class Xoh_page_wtr_mgr_tst { @Before public void init() {} @Test public void Logo_has_correct_main_page() { // PURPOSE: Logo href should be "/site/en.wikipedia.org/wiki/", not "/wiki/Main_Page" - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + Xoae_app app = Xoa_app_fxt.app_(); + Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); Xow_portal_mgr portal_mgr = wiki.Html_mgr().Portal_mgr(); GfoInvkAble_.InvkCmd_val(portal_mgr, Xow_portal_mgr.Invk_div_logo_, Bry_.new_ascii_("~{portal_nav_main_href}")); portal_mgr.Init_assert(); - Xoh_page_wtr_mgr page_wtr_mgr = new Xoh_page_wtr_mgr(app, true); + Xoh_page_wtr_mgr page_wtr_mgr = new Xoh_page_wtr_mgr(true); page_wtr_mgr.Gen(wiki.Ctx().Cur_page(), Xopg_view_mode.Tid_read); Tfds.Eq(String_.new_ascii_(portal_mgr.Div_logo_bry()), "/site/en.wikipedia.org/wiki/"); } diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java index 2eec195f8..25888ffbc 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java @@ -19,16 +19,16 @@ package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.html.*; import gplx.xowa.html.portal.*; import gplx.xowa.pages.skins.*; import gplx.xowa.pages.*; import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.xtns.wdatas.*; public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { - private Xop_ctx ctx; private Xoa_page page; private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); + private Xop_ctx ctx; private Xoae_page page; private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public Xoh_page_wtr_wkr(byte page_mode) {this.page_mode = page_mode;} private byte page_mode; public Wdata_xwiki_link_wtr Wdata_lang_wtr() {return wtr_page_lang;} private Wdata_xwiki_link_wtr wtr_page_lang = new Wdata_xwiki_link_wtr(); - public Xoh_page_wtr_wkr Page_(Xoa_page v) {this.page = v; return this;} + public Xoh_page_wtr_wkr Page_(Xoae_page v) {this.page = v; return this;} public Xoh_page_wtr_wkr Mgr_(Xoh_page_wtr_mgr v) {this.mgr = v; return this;} private Xoh_page_wtr_mgr mgr; public boolean Ctgs_enabled() {return ctgs_enabled;} public Xoh_page_wtr_wkr Ctgs_enabled_(boolean v) {ctgs_enabled = v; return this;} private boolean ctgs_enabled = true; - public byte[] Write(Xoh_page_wtr_mgr mgr, Xoa_page page, Xop_ctx ctx, Bry_bfr html_bfr) { + public byte[] Write(Xoh_page_wtr_mgr mgr, Xoae_page page, Xop_ctx ctx, Bry_bfr html_bfr) { this.mgr = mgr; this.page = page; this.ctx = ctx; - Xow_wiki wiki = page.Wiki(); Xoa_app app = wiki.App(); - ctx.Cur_page_(page); // HACK: must update page for toc_mgr; WHEN: Xoa_page rewrite + Xowe_wiki wiki = page.Wikie(); Xoae_app app = wiki.Appe(); + ctx.Cur_page_(page); // HACK: must update page for toc_mgr; WHEN: Xoae_page rewrite Bry_fmtr fmtr = null; if (mgr.Html_capable()) { wtr_page_lang.Page_(page); @@ -37,7 +37,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { case Xopg_view_mode.Tid_edit: fmtr = mgr.Page_edit_fmtr(); break; case Xopg_view_mode.Tid_html: fmtr = mgr.Page_read_fmtr(); view_mode = Xopg_view_mode.Tid_read; break; // set view_mode to read, so that "read" is highlighted in HTML case Xopg_view_mode.Tid_read: fmtr = mgr.Page_read_fmtr(); - ctx.Cur_page().Lnki_redlinks_mgr().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately) + ctx.Cur_page().Redlink_lnki_list().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately) break; } Write_page(html_bfr, app, wiki, mgr, page, view_mode, fmtr, this); @@ -50,7 +50,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { this.page = null; return html_bfr.Xto_bry_and_clear(); } - private void Write_page(Bry_bfr html_bfr, Xoa_app app, Xow_wiki wiki, Xoh_page_wtr_mgr mgr, Xoa_page page, byte view_tid, Bry_fmtr fmtr, Object page_data) { + private void Write_page(Bry_bfr html_bfr, Xoae_app app, Xowe_wiki wiki, Xoh_page_wtr_mgr mgr, Xoae_page page, byte view_tid, Bry_fmtr fmtr, Object page_data) { byte[] custom_html = page.Html_data().Custom_html(); if (custom_html != null) { html_bfr.Add(custom_html); @@ -72,7 +72,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { , Xoh_page_wtr_wkr_.Bld_page_name(tmp_bfr, page_ttl, page.Html_data().Display_ttl()) , page_modified_on_msg , mgr.Css_common_bry(), mgr.Css_wiki_bry(), page.Html_data().Module_mgr().Init(app, wiki, page).Init_dflts() - , page.Lang().Dir_bry(), page.Html_data().Indicators(), page_content_sub, wiki.Html_mgr().Portal_mgr().Div_jump_to(), page_body_class, html_content_editable + , page.Lang().Dir_ltr_bry(), page.Html_data().Indicators(), page_content_sub, wiki.Html_mgr().Portal_mgr().Div_jump_to(), page_body_class, html_content_editable , page_data, wtr_page_lang , portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl_bry_bfr_mkr(), page_ttl, wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl_bry_bfr_mkr(), view_tid, page.Html_data().Xtn_search_text()) , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar), portal_mgr.Div_wikis_bry(app.Utl_bry_bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() @@ -82,8 +82,8 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { Xoh_page_wtr_wkr_.Bld_html_end(html_bfr, page); } public void XferAry(Bry_bfr bfr, int idx) {Write_body(bfr, Xoh_wtr_ctx.Basic, page);} - public void Write_body(Bry_bfr bfr, Xoh_wtr_ctx hctx, Xoa_page page) { - Xow_wiki wiki = page.Wiki(); Xoa_app app = wiki.App(); + public void Write_body(Bry_bfr bfr, Xoh_wtr_ctx hctx, Xoae_page page) { + Xowe_wiki wiki = page.Wikie(); Xoae_app app = wiki.Appe(); Xoa_ttl page_ttl = page.Ttl(); int page_ns_id = page_ttl.Ns().Id(); byte page_tid = Xow_page_tid.Identify(wiki.Domain_tid(), page_ns_id, page_ttl.Page_db()); // NOTE: can't cache page_tid b/c Write_body is called directly; DATE:2014-10-02 byte[] data_raw = page.Data_raw(); @@ -100,12 +100,12 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { case Xow_page_tid.Tid_json: app.Wiki_mgr().Wdata_mgr().Write_json_as_html(bfr, page_ttl.Page_db(), data_raw); break; } } - if ( wiki.Domain_tid() != Xow_wiki_domain_.Tid_home // allow home wiki to use javascript + if ( wiki.Domain_tid() != Xow_domain_.Tid_int_home // allow home wiki to use javascript && !page_tid_uses_pre) { // if .js, .css or .lua, skip test; may have js fragments, but entire text is escaped and put in pre; don't show spurious warning; DATE:2013-11-21 app.Html_mgr().Js_cleaner().Clean_bfr(wiki, page_ttl, bfr, bfr_page_bgn); } } - private void Write_body_wikitext(Bry_bfr bfr, Xoa_app app, Xow_wiki wiki, byte[] data_raw, Xoh_wtr_ctx hctx, Xoa_page page, byte page_tid, int ns_id) { + private void Write_body_wikitext(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, byte[] data_raw, Xoh_wtr_ctx hctx, Xoae_page page, byte page_tid, int ns_id) { byte[] hdump_data = page.Hdump_data().Body(); if (Bry_.Len_gt_0(hdump_data)) { bfr.Add(hdump_data); @@ -120,14 +120,14 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { gplx.xowa.html.tidy.Xoh_tidy_mgr tidy_mgr = app.Html_mgr().Tidy_mgr(); boolean tidy_enabled = tidy_mgr.Enabled(); Bry_bfr hdom_bfr = tidy_enabled ? app.Utl_bry_bfr_mkr().Get_m001() : bfr; // if tidy, then write to tidy_bfr; note that bfr already has and written to it, so this can't be passed to tidy; DATE:2014-06-11 - wiki.Html_mgr().Html_wtr().Write_all(hdom_bfr, page.Wiki().Ctx(), hctx, page.Root().Data_mid(), page.Root()); + wiki.Html_mgr().Html_wtr().Write_all(hdom_bfr, page.Wikie().Ctx(), hctx, page.Root().Data_mid(), page.Root()); if (tidy_enabled) { tidy_mgr.Run_tidy_html(page, hdom_bfr); bfr.Add_bfr_and_clear(hdom_bfr); hdom_bfr.Mkr_rls(); } if (ns_id == Xow_ns_.Id_category) // if Category, render rest of html (Subcategories; Pages; Files); note that a category may have other html which requires wikitext processing - wiki.Html_mgr().Ns_ctg().Bld_html(page, bfr); + wiki.Html_mgr().Ns_ctg().Bld_html(wiki, page, bfr); int ctgs_len = page.Category_list().length; // add Categories if ( ctgs_enabled @@ -141,8 +141,8 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { wiki.Html_mgr().Ctg_mgr().Bld(bfr, page, ctgs_len); } } - private void Write_body_pre(Bry_bfr bfr, Xoa_app app, Xow_wiki wiki, byte[] data_raw, Bry_bfr tmp_bfr) { - Xoh_html_wtr_escaper.Escape(app, tmp_bfr, data_raw, 0, data_raw.length, false, false); + private void Write_body_pre(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, byte[] data_raw, Bry_bfr tmp_bfr) { + Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), tmp_bfr, data_raw, 0, data_raw.length, false, false); app.Html_mgr().Page_mgr().Content_code_fmtr().Bld_bfr_many(bfr, tmp_bfr); tmp_bfr.Clear(); } @@ -153,7 +153,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { data_raw = gplx.xowa.apps.Xoa_gfs_php_mgr.Xto_php(tmp_bfr, Bool_.N, data_raw); int data_raw_len = data_raw.length; if (mgr.Html_capable()) - Xoh_html_wtr_escaper.Escape(page.Wiki().App(), bfr, data_raw, 0, data_raw_len, false, false); // NOTE: must escape; assume that browser will automatically escape (<) (which Mozilla does) + Xoh_html_wtr_escaper.Escape(page.Wikie().Appe().Parser_amp_mgr(), bfr, data_raw, 0, data_raw_len, false, false); // NOTE: must escape; assume that browser will automatically escape (<) (which Mozilla does) else bfr.Add(data_raw); if (data_raw_len > 0) // do not add nl if empty String diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java index f6723c0c8..f32025421 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.html.*; import gplx.xowa.xtns.relatedSites.*; public class Xoh_page_wtr_wkr_ { - public static byte[] Bld_page_content_sub(Xoa_app app, Xow_wiki wiki, Xoa_page page, Bry_bfr tmp_bfr) { + public static byte[] Bld_page_content_sub(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Bry_bfr tmp_bfr) { byte[] subpages = app.Html_mgr().Page_mgr().Subpages_bldr().Bld(wiki.Ns_mgr(), page.Ttl()); byte[] page_content_sub = page.Html_data().Content_sub(); // contentSub exists; SEE: {{#isin}} byte[] redirect_msg = Xop_redirect_mgr.Bld_redirect_msg(app, wiki, page); @@ -33,22 +33,22 @@ public class Xoh_page_wtr_wkr_ { else return ttl.Full_txt(); // NOTE: include ns with ttl as per defect d88a87b3 } - public static void Bld_head_end(Bry_bfr html_bfr, Xoa_page page) { + public static void Bld_head_end(Bry_bfr html_bfr, Xoae_page page) { byte[] head_end = page.Html_data().Custom_head_end(); if (head_end == null) return; int insert_pos = Bry_finder.Find_fwd(html_bfr.Bfr(), Html_tag_.Head_rhs); if (insert_pos == Bry_finder.Not_found) { - page.App().Usr_dlg().Warn_many("", "", "could not find "); + Gfo_usr_dlg_._.Warn_many("", "", "could not find "); return; } html_bfr.Insert_at(insert_pos, head_end); } - public static void Bld_html_end(Bry_bfr html_bfr, Xoa_page page) { + public static void Bld_html_end(Bry_bfr html_bfr, Xoae_page page) { byte[] html_end = page.Html_data().Custom_html_end(); if (html_end == null) return; int insert_pos = Bry_finder.Find_bwd(html_bfr.Bfr(), Html_tag_.Html_rhs, html_bfr.Len()); if (insert_pos == Bry_finder.Not_found) { - page.App().Usr_dlg().Warn_many("", "", "could not find "); + Gfo_usr_dlg_._.Warn_many("", "", "could not find "); return; } html_bfr.Insert_at(insert_pos, html_end); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_tst.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_tst.java index e156ddc85..15067026d 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_tst.java @@ -45,8 +45,8 @@ class Xoh_page_wtr_wkr_fxt { app = Xoa_app_fxt.app_(); wiki = Xoa_app_fxt.wiki_tst_(app); } - } private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); private Xow_wiki wiki; - public Xoa_app App() {return app;} private Xoa_app app; + } private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); private Xowe_wiki wiki; + public Xoae_app App() {return app;} private Xoae_app app; public void Test_page_name_by_display(String ttl, String display, String expd) { Tfds.Eq(expd, String_.new_ascii_(Xoh_page_wtr_wkr_.Bld_page_name(tmp_bfr, Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl)), Bry_.new_ascii_(display)))); } @@ -55,7 +55,7 @@ class Xoh_page_wtr_wkr_fxt { } public void Test_edit(String raw, String expd) { wiki.Html_mgr().Page_wtr_mgr().Html_capable_(true); - Xoa_page page = wiki.Ctx().Cur_page(); + Xoae_page page = wiki.Ctx().Cur_page(); page.Data_raw_(Bry_.new_utf8_(raw)); Xoh_page_wtr_mgr mgr = wiki.Html_mgr().Page_wtr_mgr(); Xoh_page_wtr_wkr wkr = mgr.Wkr(Xopg_view_mode.Tid_edit).Page_(page).Mgr_(mgr); @@ -64,7 +64,7 @@ class Xoh_page_wtr_wkr_fxt { } public void Test_read(String page_name, String page_text, String expd) { wiki.Html_mgr().Page_wtr_mgr().Html_capable_(true); - Xoa_page page = wiki.Ctx().Cur_page(); + Xoae_page page = wiki.Ctx().Cur_page(); page.Ttl_(Xoa_ttl.parse_(wiki, Bry_.new_ascii_(page_name))); page.Data_raw_(Bry_.new_utf8_(page_text)); Xoh_page_wtr_mgr mgr = wiki.Html_mgr().Page_wtr_mgr(); diff --git a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java index ae11a2bbf..1e264fb3f 100644 --- a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java @@ -35,23 +35,23 @@ public class Xohp_ctg_grp_mgr { ), "itm_href", "itm_title", "itm_text" ); Xoh_ctg_itm_fmtr itm_mgr = new Xoh_ctg_itm_fmtr(); - public void Bld(Bry_bfr bfr, Xoa_page page, int ctgs_len) { - byte[] categories_lbl = page.Wiki().Msg_mgr().Val_by_id(Xol_msg_itm_.Id_ctg_tbl_hdr); + public void Bld(Bry_bfr bfr, Xoae_page page, int ctgs_len) { + byte[] categories_lbl = page.Wikie().Msg_mgr().Val_by_id(Xol_msg_itm_.Id_ctg_tbl_hdr); itm_mgr.Set(page, itm_fmtr); grp_fmtr.Bld_bfr_many(bfr, categories_lbl, itm_mgr); } } class Xoh_ctg_itm_fmtr implements Bry_fmtr_arg { - public void Set(Xoa_page page, Bry_fmtr itm_fmtr) {this.page = page; this.itm_fmtr = itm_fmtr;} private Xoa_page page; Bry_fmtr itm_fmtr; + public void Set(Xoae_page page, Bry_fmtr itm_fmtr) {this.page = page; this.itm_fmtr = itm_fmtr;} private Xoae_page page; Bry_fmtr itm_fmtr; public void XferAry(Bry_bfr bfr, int idx) { int ctgs_len = page.Category_list().length; - Bry_bfr tmp_bfr = page.Wiki().App().Utl_bry_bfr_mkr().Get_b128(); - Bry_bfr tmp_href = page.Wiki().App().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_href = Xoa_app_.Utl_bry_bfr_mkr().Get_b128(); byte[] ctg_prefix = page.Wiki().Ns_mgr().Ns_category().Name_db_w_colon(); for (int i = 0; i < ctgs_len; i++) { byte[] page_name = page.Category_list()[i]; tmp_bfr.Add(ctg_prefix).Add(page_name); - page.Wiki().App().Href_parser().Build_to_bfr(tmp_href, page.Wiki(), tmp_bfr.Xto_bry_and_clear()); + page.Wikie().Appe().Href_parser().Build_to_bfr(tmp_href, page.Wikie(), tmp_bfr.Xto_bry_and_clear()); itm_fmtr.Bld_bfr(bfr, tmp_href.Xto_bry_and_clear(), page_name, page_name); } tmp_bfr.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr_tst.java b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr_tst.java index 3c721d268..1b7ae0da9 100644 --- a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr_tst.java @@ -44,11 +44,11 @@ class Xoh_ctg_mgr_fxt { wiki = Xoa_app_fxt.wiki_tst_(app); ctg_grp_mgr = new Xohp_ctg_grp_mgr(); return this; - } private Xohp_ctg_grp_mgr ctg_grp_mgr; Xoa_app app; Xow_wiki wiki; Bry_bfr tmp_bfr = Bry_bfr.new_(); + } private Xohp_ctg_grp_mgr ctg_grp_mgr; Xoae_app app; Xowe_wiki wiki; Bry_bfr tmp_bfr = Bry_bfr.new_(); public Xoh_ctg_mgr_fxt Init_ctgs(String... v) {init_ctgs = v; return this;} private String[] init_ctgs; public void Test_html(String expd) { byte[][] ctgs_bry_ary = Bry_.Ary(init_ctgs); - Xoa_page page = wiki.Ctx().Cur_page(); + Xoae_page page = wiki.Ctx().Cur_page(); page.Category_list_(ctgs_bry_ary); ctg_grp_mgr.Bld(tmp_bfr, page, ctgs_bry_ary.length); Tfds.Eq_str_lines(expd, tmp_bfr.Xto_str_and_clear()); diff --git a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java index 4b993611e..cdb2fc92b 100644 --- a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java @@ -19,29 +19,29 @@ package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.ctgs.*; import gplx.xowa.xtns.gallery.*; import gplx.xowa.html.portal.*; import gplx.xowa.html.tocs.*; import gplx.xowa.wikis.modules.*; import gplx.xowa.html.hzips.*; public class Xow_html_mgr implements GfoInvkAble { - public Xow_html_mgr(Xow_wiki wiki) { + public Xow_html_mgr(Xowe_wiki wiki) { this.wiki = wiki; html_wtr = new Xoh_html_wtr(wiki, this); - Xoa_app app = wiki.App(); - page_wtr_mgr = new Xoh_page_wtr_mgr(app, app.Gui_mgr().Kit().Tid() != gplx.gfui.Gfui_kit_.Swing_tid); // reverse logic to handle swt,drd but not mem + Xoae_app app = wiki.Appe(); + page_wtr_mgr = new Xoh_page_wtr_mgr(app.Gui_mgr().Kit().Tid() != gplx.gfui.Gfui_kit_.Swing_tid); // reverse logic to handle swt,drd but not mem Io_url file_dir = app.User().Fsys_mgr().App_img_dir().GenSubDir_nest("file"); - img_media_play_btn = app.Encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("play.png")); - img_media_info_btn = app.Encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("info.png")); - img_thumb_magnify = app.Encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("magnify-clip.png")); - img_xowa_protocol = app.Encoder_mgr().Fsys().Encode_http(app.User().Fsys_mgr().App_img_dir().GenSubFil_nest("xowa", "protocol.png")); + img_media_play_btn = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("play.png")); + img_media_info_btn = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("info.png")); + img_thumb_magnify = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("magnify-clip.png")); + img_xowa_protocol = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(app.User().Fsys_mgr().App_img_dir().GenSubFil_nest("xowa", "protocol.png")); portal_mgr = new Xow_portal_mgr(wiki); imgs_mgr = new Xoh_imgs_mgr(this); module_mgr = new Xow_module_mgr(wiki); hzip_mgr = new Xow_hzip_mgr(app.Usr_dlg(), wiki); } - public void Init_by_wiki(Xow_wiki wiki) { + public void Init_by_wiki(Xowe_wiki wiki) { html_wtr.Init_by_wiki(wiki); module_mgr.Init_by_wiki(wiki); } public void Init_by_lang(Xol_lang lang) { portal_mgr.Init_by_lang(lang); } - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public Xoh_html_wtr Html_wtr() {return html_wtr;} private Xoh_html_wtr html_wtr; public Xoh_page_wtr_mgr Page_wtr_mgr() {return page_wtr_mgr;} private Xoh_page_wtr_mgr page_wtr_mgr; public Xow_portal_mgr Portal_mgr() {return portal_mgr;} private Xow_portal_mgr portal_mgr; diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java index a0b9a8d59..c7fca2b87 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java @@ -16,11 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.html.*; import gplx.xowa.apps.ttls.*; import gplx.xowa.hdumps.srls.*; +import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.html.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.hdumps.srls.*; public class Xow_hzip_itm__anchor { - private Xow_hzip_mgr hzip_mgr; private Xoa_ttl_parser ttl_parser; private Byte_obj_ref xtid_ref = Byte_obj_ref.zero_(); + private Xow_hzip_mgr hzip_mgr; private Xow_ttl_parser ttl_parser; private Byte_obj_ref xtid_ref = Byte_obj_ref.zero_(); private Bry_rdr bry_rdr = new Bry_rdr(); - public Xow_hzip_itm__anchor(Xow_hzip_mgr hzip_mgr, Xoa_ttl_parser ttl_parser) {this.hzip_mgr = hzip_mgr; this.ttl_parser = ttl_parser;} + public Xow_hzip_itm__anchor(Xow_hzip_mgr hzip_mgr, Xow_ttl_parser ttl_parser) {this.hzip_mgr = hzip_mgr; this.ttl_parser = ttl_parser;} public int Save_a_rhs(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos) { bfr.Add(Xow_hzip_dict.Bry_a_rhs); stats.A_rhs_add(); diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java index 326908be9..6ace01bf3 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.html.*; import gplx.xowa.apps.ttls.*; import gplx.xowa.hdumps.srls.*; +import gplx.html.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.hdumps.srls.*; public class Xow_hzip_itm__header { private Xow_hzip_mgr hzip_mgr; public Xow_hzip_itm__header(Xow_hzip_mgr hzip_mgr) {this.hzip_mgr = hzip_mgr;} diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java index 7983cf123..9d0689d6a 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java @@ -16,11 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.xowa.apps.ttls.*; +import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.xowa.wikis.ttls.*; public class Xow_hzip_mgr { private Gfo_usr_dlg usr_dlg; private byte[] page_url; private byte[] src; private int src_len; - public Xow_hzip_mgr(Gfo_usr_dlg usr_dlg, Xoa_ttl_parser ttl_parser) { + public Xow_hzip_mgr(Gfo_usr_dlg usr_dlg, Xow_ttl_parser ttl_parser) { this.usr_dlg = usr_dlg; itm__anchor = new Xow_hzip_itm__anchor(this, ttl_parser); itm__header = new Xow_hzip_itm__header(this); diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr_fxt.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr_fxt.java index 975157fe8..58606db1c 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr_fxt.java @@ -17,11 +17,11 @@ along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; class Xow_hzip_mgr_fxt { - private Bry_bfr bfr = Bry_bfr.reset_(Io_mgr.Len_mb); private Xow_hzip_mgr hzip_mgr; private Xow_wiki wiki; + private Bry_bfr bfr = Bry_bfr.reset_(Io_mgr.Len_mb); private Xow_hzip_mgr hzip_mgr; private Xowe_wiki wiki; private Xow_hzip_stats stats = new Xow_hzip_stats(); public void Clear() { if (hzip_mgr == null) { - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); wiki = Xoa_app_fxt.wiki_tst_(app); hzip_mgr = new Xow_hzip_mgr(Gfo_usr_dlg_._, wiki); } @@ -40,7 +40,7 @@ class Xow_hzip_mgr_fxt { public void Test_html(String html, String expd) { Xop_ctx ctx = wiki.Ctx(); Xop_parser parser = wiki.Parser(); Xop_tkn_mkr tkn_mkr = ctx.Tkn_mkr(); ctx.Para().Enabled_n_(); - ctx.Cur_page().Lnki_redlinks_mgr().Clear(); + ctx.Cur_page().Redlink_lnki_list().Clear(); byte[] html_bry = Bry_.new_utf8_(html); Xop_root_tkn root = ctx.Tkn_mkr().Root(html_bry); parser.Parse_page_all_clear(root, ctx, tkn_mkr, html_bry); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java index 465d0db52..851ba3152 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java @@ -30,7 +30,7 @@ public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { , "" ), "a_href", "a_xowa_title", "html" ); - @gplx.Virtual public void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoa_page page, Xof_xfer_itm xfer_itm, int uid + @gplx.Virtual public void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoae_page page, Xof_xfer_itm xfer_itm, int uid , byte[] a_href, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other ) { @@ -59,11 +59,11 @@ public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { , "" ), "uid", "div1_halign", "style", "div2_content" ); - public byte[] Html_thumb_part_img(Bry_bfr tmp_bfr, Xoa_page page, Xof_xfer_itm xfer_itm, Xop_lnki_tkn lnki, int uid, byte[] a_href, byte[] img_src, byte[] img_alt) { + public byte[] Html_thumb_part_img(Bry_bfr tmp_bfr, Xoae_page page, Xof_xfer_itm xfer_itm, Xop_lnki_tkn lnki, int uid, byte[] a_href, byte[] img_src, byte[] img_alt) { Html_thumb_part_img(tmp_bfr, page, xfer_itm, uid, a_href, lnki.Ttl().Page_txt(), xfer_itm.Html_w(), xfer_itm.Html_h(), img_src, img_alt); return tmp_bfr.Xto_bry_and_clear(); } - public void Html_thumb_part_img(Bry_bfr tmp_bfr, Xoa_page page, Xof_xfer_itm xfer_itm, int uid, byte[] a_href, byte[] a_title, int img_w, int img_h, byte[] img_src, byte[] img_alt) { + public void Html_thumb_part_img(Bry_bfr tmp_bfr, Xoae_page page, Xof_xfer_itm xfer_itm, int uid, byte[] a_href, byte[] a_title, int img_w, int img_h, byte[] img_src, byte[] img_alt) { fmtr_thumb_part_img.Bld_bfr_many(tmp_bfr, uid, a_href, a_title, arg_img_core.Init(uid, img_src, img_w, img_h), img_alt); } private Bry_fmtr fmtr_thumb_part_img = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java index b2fba9f09..443c8dc99 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java @@ -24,7 +24,7 @@ public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { // public override void Html_full_media(Bry_bfr tmp_bfr, byte[] a_href, byte[] a_title, Bry_fmtr_arg html) { // fmtr_full_media.Bld_bfr_many(tmp_bfr, a_href, a_title, html); // } -// public override void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoa_page page, Xof_xfer_itm xfer_itm, int uid +// public override void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoae_page page, Xof_xfer_itm xfer_itm, int uid // , byte[] a_href, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title // , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other) { // tmp_bfr.Add_str_ascii(" add to xwiki_langs; cur=w xwikid=d -> don't add to xwiki_langs; DATE:2014-09-14 && xwiki_lang.Type_is_xwiki_lang(wiki.Domain_itm().Lang_orig_uid())// NOTE: use Lang_orig_id to handle xwikis between s.w and en.w; PAGE:s.q:Anonymous DATE:2014-09-10 && !lnki_ttl.ForceLiteralLink() // not literal; [[:en:A]] ) { @@ -66,7 +66,7 @@ public class Xoh_lnki_wtr { } Write_plain_by_tkn(bfr, hctx, src, lnki, lnki_ttl); } - public void Write_file(Bry_bfr bfr, Xoa_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, byte[] alt) { + public void Write_file(Bry_bfr bfr, Xoae_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, byte[] alt) { file_wtr.Write_or_queue(bfr, page, ctx, hctx, src, lnki, alt); } public void Write_file(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, Xof_xfer_itm xfer, byte[] alt) { diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm.java index cbc5af6f3..5e2aea1b3 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; public interface Xoh_module_itm { byte[] Key(); - void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); - void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); - void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); - void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); - void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); - void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr); + void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); + void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); + void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); + void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); + void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); + void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr); void Clear(); } /* diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__collapsible.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__collapsible.java index ea80a892c..9e3a1e397 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__collapsible.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__collapsible.java @@ -20,12 +20,12 @@ public class Xoh_module_itm__collapsible implements Xoh_module_itm { public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("collapsible"); public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_global_ini_atr_val(Key_enabled , true); wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Collapsible().Collapsed()); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__css.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__css.java index 5d1c6381f..ac2e4fd8e 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__css.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__css.java @@ -21,8 +21,8 @@ public class Xoh_module_itm__css implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("css"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_css_style_itm(app.Ctg_mgr().Missing_ctg_cls_css()); if (app.Html_mgr().Page_mgr().Font_enabled()) @@ -31,8 +31,8 @@ public class Xoh_module_itm__css implements Xoh_module_itm { if (Bry_.Len_gt_0(css_xtn)) wtr.Write_css_style_itm(css_xtn); } - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java index 2f710cb9c..e37478436 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java @@ -22,14 +22,14 @@ along with this program. If not, see . // public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; // public void Clear() {enabled = false;} // public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("div_toggle"); -// public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} -// public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} -// public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { } -// public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} -// public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { +// public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} +// public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} +// public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { } +// public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} +// public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { // if (!enabled) return; // wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "xowa.div_toggle", "xowa.div_toggle.js")); // } -// public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} +// public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} // } //} diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__gallery.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__gallery.java index 715bd7adc..47a3dfc83 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__gallery.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__gallery.java @@ -21,12 +21,12 @@ public class Xoh_module_itm__gallery implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("gallery"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_global_ini_atr_val(Key_enabled , true); } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java index 3b2af700c..569f35b87 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java @@ -22,13 +22,13 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("globals"); public boolean Enabled() {return enabled;} public void Enabled_n_() {enabled = false;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_core_css == null) Url_core_css = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "core", "core.css").To_http_file_bry(); wtr.Write_css_include(Url_core_css); } - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_core_js == null) { Io_url core_dir = app.Fsys_mgr().Bin_any_dir().GenSubDir_nest("xowa", "html", "res", "src", "xowa", "core"); @@ -38,13 +38,13 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { wtr.Write_js_include(Url_core_js); wtr.Write_js_include(Url_DOMContentLoaded_js); } - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_var(Var_xowa_root_dir , Bool_.Y, app.Fsys_mgr().Root_dir().To_http_file_bry()); wtr.Write_js_var(Var_xowa_mode_is_server , Bool_.N, app.Tcp_server().Running() ? Bool_.True_bry : Bool_.False_bry); } - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_global_ini_atr_val(Key_mode_is_gui , app.Mode() == Xoa_app_.Mode_gui); wtr.Write_js_global_ini_atr_val(Key_mode_is_http , app.Mode() == Xoa_app_.Mode_http); @@ -52,7 +52,7 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_ascending); wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_descending); Xol_lang lang = wiki.Lang(); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); - Bry_bfr tmp_bfr = lang.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512(); tmp_wtr.Init(tmp_bfr); byte[] months_long = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_name_january, Xol_msg_itm_.Id_dte_month_name_december); byte[] months_short = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_abrv_jan, Xol_msg_itm_.Id_dte_month_abrv_dec); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__hiero.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__hiero.java index b48c9fc58..0b6c4e792 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__hiero.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__hiero.java @@ -21,15 +21,15 @@ public class Xoh_module_itm__hiero implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("hiero"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_css == null) Url_css = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "xtns", "Wikihiero", "modules", "ext.wikihiero.css").To_http_file_bry(); wtr.Write_css_include(Url_css); } - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} private static byte[] Url_css; } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__mathjax.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__mathjax.java index 975136332..e7ad8435a 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__mathjax.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__mathjax.java @@ -21,15 +21,15 @@ public class Xoh_module_itm__mathjax implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("mathjax"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_mathjax == null) Url_mathjax = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "xtns", "Math", "modules", "mathjax", "xowa_mathjax.js").To_http_file_bry(); wtr.Write_js_include(Url_mathjax); } - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} private static byte[] Url_mathjax; } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__navframe.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__navframe.java index a3e82206d..2094d92a1 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__navframe.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__navframe.java @@ -20,12 +20,12 @@ public class Xoh_module_itm__navframe implements Xoh_module_itm { public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("navframe"); public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_global_ini_atr_val(Key_enabled , true); wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Navframe().Collapsed() || wiki.Html_mgr().Module_mgr().Itm_navframe().Enabled_n()); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java index 26def1b10..8c939d051 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java @@ -23,20 +23,20 @@ public class Xoh_module_itm__popups implements Xoh_module_itm { public boolean Bind_hover_area() {return bind_hover_area;} public void Bind_hover_area_(boolean v) {bind_hover_area = v;} private boolean bind_hover_area; public void Clear() {enabled = false; bind_hover_area = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("popups"); - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Css_url == null) Css_url = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "popups", "popups.css").To_http_file_bry(); wtr.Write_css_include(Css_url); } - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_line(Jquery_init); // NOTE: must assert that jquery is init'd, else popup.js will not compile after going back / forward; DATE:2014-09-10 wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "popups", "popups.js")); } public static final byte[] Jquery_init = Bry_.new_ascii_("xowa.js.jquery.init();"), Mw_init = Bry_.new_ascii_("xowa.js.mediaWiki.init();"); - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups(); wtr.Write_js_global_ini_atr_val(Key_win_show_delay , api_popups.Win_show_delay()); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__search_suggest.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__search_suggest.java index 9160e9af2..f6c0ce5b3 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__search_suggest.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__search_suggest.java @@ -21,19 +21,19 @@ public class Xoh_module_itm__search_suggest implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = false; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("xowa.search_suggest"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_css == null) Url_css = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "search-suggest", "search-suggest.css").To_http_file_bry(); wtr.Write_css_include(Url_css); } - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_js == null) Url_js = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "search-suggest", "search-suggest.js").To_http_file_bry(); wtr.Write_js_include(Url_js); } - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} private static byte[] Url_css, Url_js; } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__timeline.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__timeline.java index 6c53e6948..d64fab4e5 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__timeline.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__timeline.java @@ -21,15 +21,15 @@ public class Xoh_module_itm__timeline implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = false; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("xowa.timeline"); - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Url_js == null) Url_js = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "timeline", "timeline.js").To_http_file_bry(); wtr.Write_js_include(Url_js); } - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} private static byte[] Url_js; } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__toc.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__toc.java index 1a91b057c..163b479b8 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__toc.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__toc.java @@ -21,17 +21,17 @@ public class Xoh_module_itm__toc implements Xoh_module_itm { public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("toc"); public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { // if (!enabled) return; // wtr.Write_js_line(Xoh_module_itm__popups.Jquery_init); // wtr.Write_js_line(Xoh_module_itm__popups.Mw_init); // wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "mw.toc", "mw.toc.js")); } - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_global_ini_atr_val(Key_exists , true); wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Collapsible().Collapsed() ? Val_collapsed_y : Val_collapsed_n); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java index 2feeac6f7..e313f068a 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java @@ -22,18 +22,18 @@ public class Xoh_module_itm__top_icon implements Xoh_module_itm { public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("top_icon"); - public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_css_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_css_include(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; if (Css_url == null) Css_url = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "gadgets", "top-icon", "top-icon.css").To_http_file_bry(); wtr.Write_css_include(Css_url); } - public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} - public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + public void Write_js_head_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) { if (!enabled) return; wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "gadgets", "top-icon", "top-icon.js")); } - public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_module_wtr wtr) {} private static byte[] Css_url; } diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java index 61beca6aa..0eb55680d 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; public class Xoh_module_mgr implements Bry_fmtr_arg { - private Xoa_app app; private Xow_wiki wiki; private Xoa_page page; private Xoh_module_itm[] itms; private int itms_len; + private Xoae_app app; private Xowe_wiki wiki; private Xoae_page page; private Xoh_module_itm[] itms; private int itms_len; private Xoh_module_wtr wtr = new Xoh_module_wtr(); public Xoh_module_mgr() { Itms_add(itm_css, itm_globals, itm_popups, itm_toc, itm_collapsible, itm_navframe, itm_gallery, itm_mathjax, itm_hiero, itm_top_icon, itm_search_suggest, itm_timeline); @@ -34,7 +34,7 @@ public class Xoh_module_mgr implements Bry_fmtr_arg { public Xoh_module_itm__top_icon Itm_top_icon() {return itm_top_icon;} private Xoh_module_itm__top_icon itm_top_icon = new Xoh_module_itm__top_icon(); public Xoh_module_itm__search_suggest Itm_search_suggest() {return itm_search_suggest;} private Xoh_module_itm__search_suggest itm_search_suggest = new Xoh_module_itm__search_suggest(); public Xoh_module_itm__timeline Itm_timeline() {return itm_timeline;} private Xoh_module_itm__timeline itm_timeline = new Xoh_module_itm__timeline(); - public Xoh_module_mgr Init(Xoa_app app, Xow_wiki wiki, Xoa_page page) { + public Xoh_module_mgr Init(Xoae_app app, Xowe_wiki wiki, Xoae_page page) { this.app = app; this.wiki = wiki; this.page = page; return this; } @@ -54,7 +54,7 @@ public class Xoh_module_mgr implements Bry_fmtr_arg { itms[i].Clear(); } public void XferAry(Bry_bfr bfr, int idx) {Write(bfr, app, wiki, page);} - public void Write(Bry_bfr bfr, Xoa_app app, Xow_wiki wiki, Xoa_page page) { + public void Write(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xoae_page page) { wtr.Init(bfr); wtr.Indent_add(); for (int i = 0; i < itms_len; ++i) { diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java index c36abd782..ab57daacf 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java @@ -108,9 +108,9 @@ class Xoh_module_mgr_fxt { private Xop_fxt fxt = new Xop_fxt(); private Xoh_module_mgr mgr; private Bry_bfr bfr = Bry_bfr.reset_(255); - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public Xoh_module_mgr Mgr() {return mgr;} - public Xol_lang Make_lang(String key) {return wiki.App().Lang_mgr().Get_by_key_or_new(Bry_.new_ascii_(key));} + public Xol_lang Make_lang(String key) {return wiki.Appe().Lang_mgr().Get_by_key_or_new(Bry_.new_ascii_(key));} public void Clear() { fxt.Reset(); mgr = fxt.Page().Html_data().Module_mgr(); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java index c865b463a..723a2eced 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java @@ -109,7 +109,7 @@ public class Xoh_module_wtr { public void Write_js_global_ini_atr_val(byte[] key, boolean val) {Write_js_global_ini_atr(key, Bool_.N, val ? Bool_.True_bry : Bool_.False_bry);} public void Write_js_global_ini_atr_val(byte[] key, byte[] val) {Write_js_global_ini_atr(key, Bool_.Y, val);} public void Write_js_global_ini_atr_obj(byte[] key, byte[] val) {Write_js_global_ini_atr(key, Bool_.N, val);} - public void Write_js_global_ini_atr_msg(Xow_wiki wiki, byte[] key) {Write_js_global_ini_atr(key, Bool_.Y, wiki.Msg_mgr().Val_by_key_obj(key));} + public void Write_js_global_ini_atr_msg(Xowe_wiki wiki, byte[] key) {Write_js_global_ini_atr(key, Bool_.Y, wiki.Msg_mgr().Val_by_key_obj(key));} private void Write_js_global_ini_atr(byte[] key, boolean quote_val, byte[] val) { Write_js_global_ini_atr_bgn(key); if (quote_val) diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java index ca71ae46c..368c2f35a 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java @@ -18,29 +18,29 @@ along with this program. If not, see . package gplx.xowa.html.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.modules.*; import gplx.xowa.apis.xowa.html.modules.*; public class Xow_popup_html_mkr { - private Xoa_app app; private Xow_wiki wiki; + private Xoae_app app; private Xowe_wiki wiki; public Bry_fmtr Fmtr_popup() {return fmtr_popup;} private Bry_fmtr fmtr_popup = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_popup_keys); public Bry_fmtr Fmtr_viewed() {return fmtr_viewed;} private Bry_fmtr fmtr_viewed = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_viewed_keys); public Bry_fmtr Fmtr_wiki() {return fmtr_wiki;} private Bry_fmtr fmtr_wiki = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_wiki_keys); public Bry_fmtr Fmtr_next_sect() {return fmtr_next_sect;} private Bry_fmtr fmtr_next_sect = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_next_sect_keys); public void Output_js_clean_(boolean v) {output_js_clean = v;} private boolean output_js_clean = true; public void Output_tidy_(boolean v) {output_tidy = v;} private boolean output_tidy = true; - public void Ctor(Xoa_app app, Xow_wiki wiki) { + public void Ctor(Xoae_app app, Xowe_wiki wiki) { this.wiki = wiki; this.app = app; wiki.Eval_mgr().Eval_mgr_(fmtr_popup, fmtr_viewed, fmtr_wiki, fmtr_next_sect); } - public byte[] Bld(Xow_wiki cur_wiki, Xoa_page page, Xow_popup_itm popup_itm, Bry_bfr wrdx_bfr) { + public byte[] Bld(Xowe_wiki cur_wiki, Xoae_page page, Xow_popup_itm popup_itm, Bry_bfr wrdx_bfr) { if (output_js_clean) app.Html_mgr().Js_cleaner().Clean_bfr(wiki, page.Ttl(), wrdx_bfr, 0); if (output_tidy) app.Html_mgr().Tidy_mgr().Run_tidy_html(page, wrdx_bfr); byte[] hdom_bry = wrdx_bfr.Xto_bry_and_clear(); - String page_url = wrdx_bfr.Add(page.Wiki().Domain_bry()).Add(Xoa_consts.Url_wiki_intermediary).Add(app.Encoder_mgr().Href() + String page_url = wrdx_bfr.Add(page.Wiki().Domain_bry()).Add(Xoa_consts.Url_wiki_intermediary).Add(Xoa_app_.Utl_encoder_mgr().Href() .Encode(page.Ttl().Full_db())) // NOTE: was page.Url().Raw(), but that doesn't work for Special:Search; PAGE:en.w:Earth and "Quotations"; DATE:2014-06-29 .Xto_str_and_clear() ; fmtr_popup.Bld_bfr_many ( wrdx_bfr , hdom_bry - , wiki.Lang().Dir_bry() + , wiki.Lang().Dir_ltr_bry() , page_url , String_.new_utf8_(page.Ttl().Full_txt()) , popup_itm.Popup_id() @@ -59,7 +59,7 @@ class Xow_popup_html_bldr_ { ? Bry_.Empty // same domain; return ""; : fmtr.Bld_bry_many(wrdx_bfr, page_domain); } - public static byte[] Bld_fmtr_viewed(Bry_fmtr fmtr, Xoa_app app, Xow_wiki wiki, Bry_bfr wrdx_bfr, Xoa_ttl ttl) { + public static byte[] Bld_fmtr_viewed(Bry_fmtr fmtr, Xoae_app app, Xowe_wiki wiki, Bry_bfr wrdx_bfr, Xoa_ttl ttl) { byte[] view_time_item = Bry_.Empty; gplx.xowa.users.history.Xou_history_itm history_itm = app.User().History_mgr().Get_or_null(wiki.Domain_bry(), ttl.Full_txt()); if (history_itm != null) diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java index 7c48e1e2b..c8a531b48 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_mgr.java @@ -21,17 +21,17 @@ import gplx.xowa.gui.views.*; import gplx.xowa.specials.search.*; import gplx.xowa.apis.xowa.html.modules.*; public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { - private Xoa_app app; private Xow_wiki wiki; private Js_wtr js_wtr = new Js_wtr(); + private Xoae_app app; private Xowe_wiki wiki; private Js_wtr js_wtr = new Js_wtr(); private int show_init_word_count = Xoapi_popups.Dflt_show_init_word_count, show_more_word_count = Xoapi_popups.Dflt_show_more_word_count; private Xoh_href temp_href = new Xoh_href(); private Object async_thread_guard = new Object(); private Xow_popup_itm async_itm; private GfoInvkAble async_cmd_show; private int async_id_next = 1; - public Xow_popup_mgr(Xow_wiki wiki) { - this.wiki = wiki; this.app = wiki.App(); + public Xow_popup_mgr(Xowe_wiki wiki) { + this.wiki = wiki; this.app = wiki.Appe(); ev_mgr = GfoEvMgr.new_(this); } public GfoEvMgr EvMgr() {return ev_mgr;} private GfoEvMgr ev_mgr; public Xow_popup_parser Parser() {return parser;} private Xow_popup_parser parser = new Xow_popup_parser(); - public void Init_by_wiki(Xow_wiki wiki) { + public void Init_by_wiki(Xowe_wiki wiki) { parser.Init_by_wiki(wiki); Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups(); show_init_word_count = api_popups.Show_init_word_count(); @@ -61,23 +61,23 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { ); } public String Show_init(int id, byte[] href, byte[] tooltip) { - Xoa_page cur_page = Cur_page(); + Xoae_page cur_page = Cur_page(); Xog_tab_itm tab = cur_page.Tab(); if (tab != null && tab.Tab_is_loading()) return ""; // NOTE: tab is null when previewing Xow_popup_itm itm = new Xow_popup_itm(id, href, tooltip, show_init_word_count); - String rv = String_.new_utf8_(Get_popup_html(cur_page, itm)); + String rv = String_.new_utf8_(Get_popup_html(Cur_wiki(), cur_page, itm)); return tab != null && tab.Tab_is_loading() ? "" : rv; } public void Show_more(String popup_id) { - Xoa_page cur_page = Cur_page(); + Xoae_page cur_page = Cur_page(); Xow_popup_itm popup_itm = Itms_get_or_null(cur_page, popup_id).Mode_more_(show_more_word_count); - popup_itm.Popup_html_(Get_popup_html(cur_page, popup_itm)); + popup_itm.Popup_html_(Get_popup_html(Cur_wiki(), cur_page, popup_itm)); Show_popup_html(Cbk_xowa_popups_show_update, Mode_show_more, popup_itm); } public void Show_all(String popup_id) { - Xoa_page cur_page = Cur_page(); + Xoae_page cur_page = Cur_page(); Xow_popup_itm popup_itm = Itms_get_or_null(cur_page, popup_id).Mode_all_(); - popup_itm.Popup_html_(Get_popup_html(cur_page, popup_itm)); + popup_itm.Popup_html_(Get_popup_html(Cur_wiki(), cur_page, popup_itm)); Show_popup_html(Cbk_xowa_popups_show_update, Mode_show_all, popup_itm); } public String Get_async_bgn(byte[] js_cbk, byte[] href) { @@ -90,7 +90,7 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { return id_str; } } - private byte[] Get_popup_html(Xoa_page cur_page, Xow_popup_itm itm) { + private byte[] Get_popup_html(Xowe_wiki cur_wiki, Xoae_page cur_page, Xow_popup_itm itm) { try { synchronized (async_thread_guard) { // queue popups to reduce contention with Load_page_wkr; DATE:2014-08-24 // Load_popup_wkr load_popup_wkr = new Load_popup_wkr(wiki, cur_page, itm, temp_href, ns_allowed_regy, ns_allowed_regy_key); @@ -103,14 +103,14 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { if (itm.Canceled()) return null; cur_page.Popup_mgr().Itms().AddReplace(itm.Popup_id(), itm); app.Href_parser().Parse(temp_href, itm.Page_href(), wiki, cur_page.Ttl().Full_url()); // NOTE: use Full_url, not Page_url, else anchors won't work for non-main ns; PAGE:en.w:Project:Sandbox; DATE:2014-08-07 - Xow_wiki popup_wiki = app.Wiki_mgr().Get_by_key_or_null(temp_href.Wiki()); + Xowe_wiki popup_wiki = app.Wiki_mgr().Get_by_key_or_null(temp_href.Wiki()); popup_wiki.Init_assert(); Xoa_ttl popup_ttl = Xoa_ttl.parse_(popup_wiki, temp_href.Page_and_anchor()); if (ns_allowed_regy.Count() > 0 && !ns_allowed_regy.Has(ns_allowed_regy_key.Val_(popup_ttl.Ns().Id()))) return Bry_.Empty; itm.Init(popup_wiki.Domain_bry(), popup_ttl); - Xoa_page popup_page = popup_wiki.Data_mgr().Get_page(popup_ttl, false); + Xoae_page popup_page = popup_wiki.Data_mgr().Get_page(popup_ttl, false); byte[] rv = popup_wiki.Html_mgr().Module_mgr().Popup_mgr().Parser().Parse(wiki, popup_page, cur_page.Tab(), itm); - Update_progress_bar(app, cur_page, itm); + Update_progress_bar(app, cur_wiki, cur_page, itm); return rv; } } @@ -119,12 +119,12 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { return null; } } - public static void Update_progress_bar(Xoa_app app, Xoa_page cur_page, Xow_popup_itm itm) { + public static void Update_progress_bar(Xoae_app app, Xowe_wiki cur_wiki, Xoae_page cur_page, Xow_popup_itm itm) { byte[] href = itm.Page_href(); byte[] tooltip = itm.Tooltip(); if (Bry_.Len_gt_0(tooltip)) href = Bry_.Add(tooltip); - Xog_win_itm__prog_href_mgr.Hover(app, cur_page, String_.new_utf8_(href)); // set page ttl again in prog bar; DATE:2014-06-28 + Xog_win_itm__prog_href_mgr.Hover(app, cur_wiki, cur_page, String_.new_utf8_(href)); // set page ttl again in prog bar; DATE:2014-06-28 } public void Show_popup_html(String cbk, byte[] mode, Xow_popup_itm popup_itm) { Xog_tab_itm cur_tab = app.Gui_mgr().Browser_win().Active_tab(); @@ -133,8 +133,8 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { private void Show_popup_async() { try { synchronized (async_thread_guard) { - Xoa_page cur_page = app.Gui_mgr().Browser_win().Active_page(); - async_itm.Popup_html_(Get_popup_html(cur_page, async_itm)); + Xoae_page cur_page = app.Gui_mgr().Browser_win().Active_page(); + async_itm.Popup_html_(Get_popup_html(app.Gui_mgr().Browser_win().Active_wiki(), cur_page, async_itm)); } if (async_cmd_show == null) async_cmd_show = app.Gui_mgr().Kit().New_cmd_sync(this); @@ -157,7 +157,7 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { ns_allowed_regy.Add(ns_id, ns_id); } } - public static Int_obj_ref[] Ns_allowed_parse(Xow_wiki wiki, byte[] raw) { + public static Int_obj_ref[] Ns_allowed_parse(Xowe_wiki wiki, byte[] raw) { ListAdp rv = ListAdp_.new_(); byte[][] ary = Bry_.Split(raw, Byte_ascii.Pipe); int ary_len = ary.length; @@ -170,7 +170,7 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { : ns_mgr.Names_get_or_null(bry) ; if (ns == null) { - wiki.App().Usr_dlg().Log_many("", "", "popup.ns_allowed: ns not in wiki: ns=~{0} wiki=~{1}", String_.new_utf8_(bry), wiki.Domain_str()); // ns may not be in wiki; EX: Portal and www.wikidata.org + wiki.Appe().Usr_dlg().Log_many("", "", "popup.ns_allowed: ns not in wiki: ns=~{0} wiki=~{1}", String_.new_utf8_(bry), wiki.Domain_str()); // ns may not be in wiki; EX: Portal and www.wikidata.org continue; } Int_obj_ref ns_id_itm = Int_obj_ref.new_(ns.Id()); @@ -178,8 +178,9 @@ public class Xow_popup_mgr implements GfoInvkAble, GfoEvObj { } return (Int_obj_ref[])rv.Xto_ary(Int_obj_ref.class); } private HashAdp ns_allowed_regy = HashAdp_.new_(); private Int_obj_ref ns_allowed_regy_key = Int_obj_ref.zero_(); - private Xoa_page Cur_page() {return app.Gui_mgr().Browser_win().Active_page();} - private Xow_popup_itm Itms_get_or_null(Xoa_page page, String popup_id) {return (Xow_popup_itm)page.Popup_mgr().Itms().Fetch(popup_id);} + private Xoae_page Cur_page() {return app.Gui_mgr().Browser_win().Active_page();} + private Xowe_wiki Cur_wiki() {return app.Gui_mgr().Browser_win().Active_tab().Wiki();} + private Xow_popup_itm Itms_get_or_null(Xoae_page page, String popup_id) {return (Xow_popup_itm)page.Popup_mgr().Itms().Fetch(popup_id);} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_show_popup_async)) Show_popup_async(); else if (ctx.Match(k, Invk_show_popup)) Show_popup(); @@ -224,32 +225,32 @@ class Xow_popup_mgr_ { } } class Load_popup_wkr implements Gfo_thread_wkr { - private Xow_popup_itm itm; private Xoa_page cur_page; private Xoh_href temp_href; + private Xow_popup_itm itm; private Xoae_page cur_page; private Xoh_href temp_href; private HashAdp ns_allowed_regy; private Int_obj_ref ns_allowed_regy_key = Int_obj_ref.zero_(); - public Load_popup_wkr(Xow_wiki wiki, Xoa_page cur_page, Xow_popup_itm itm, Xoh_href temp_href, HashAdp ns_allowed_regy, Int_obj_ref ns_allowed_regy_key) { + public Load_popup_wkr(Xowe_wiki wiki, Xoae_page cur_page, Xow_popup_itm itm, Xoh_href temp_href, HashAdp ns_allowed_regy, Int_obj_ref ns_allowed_regy_key) { this.wiki = wiki; this.cur_page = cur_page; this.itm = itm; this.temp_href = temp_href; this.ns_allowed_regy = ns_allowed_regy; this.ns_allowed_regy_key = ns_allowed_regy_key; } public String Name() {return "xowa.load_popup_wkr";} public boolean Resume() {return false;} - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public byte[] Rslt_bry() {return rslt_bry;} private byte[] rslt_bry; public boolean Rslt_done() {return rslt_done;} private boolean rslt_done; public void Rslt_(byte[] bry) {this.rslt_done = true; rslt_bry = bry;} public void Exec() { - Xoa_app app = wiki.App(); + Xoae_app app = wiki.Appe(); try { if (itm.Canceled()) {Rslt_(null); return;} cur_page.Popup_mgr().Itms().AddReplace(itm.Popup_id(), itm); app.Href_parser().Parse(temp_href, itm.Page_href(), wiki, cur_page.Ttl().Full_url()); // NOTE: use Full_url, not Page_url, else anchors won't work for non-main ns; PAGE:en.w:Project:Sandbox; DATE:2014-08-07 - Xow_wiki popup_wiki = app.Wiki_mgr().Get_by_key_or_null(temp_href.Wiki()); + Xowe_wiki popup_wiki = app.Wiki_mgr().Get_by_key_or_null(temp_href.Wiki()); popup_wiki.Init_assert(); Xoa_ttl popup_ttl = Xoa_ttl.parse_(popup_wiki, temp_href.Page_and_anchor()); if (ns_allowed_regy.Count() > 0 && !ns_allowed_regy.Has(ns_allowed_regy_key.Val_(popup_ttl.Ns().Id()))) {Rslt_(Bry_.Empty); return;} itm.Init(popup_wiki.Domain_bry(), popup_ttl); - Xoa_page popup_page = popup_wiki.Data_mgr().Get_page(popup_ttl, false); + Xoae_page popup_page = popup_wiki.Data_mgr().Get_page(popup_ttl, false); byte[] rv = popup_wiki.Html_mgr().Module_mgr().Popup_mgr().Parser().Parse(wiki, popup_page, cur_page.Tab(), itm); - Xow_popup_mgr.Update_progress_bar(app, cur_page, itm); + Xow_popup_mgr.Update_progress_bar(app, popup_wiki, cur_page, itm); Rslt_(rv); } catch(Exception e) { diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java index 86ba2df23..70b3ee174 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java @@ -20,7 +20,7 @@ import gplx.core.btries.*; import gplx.xowa.wikis.*; import gplx.xowa.apis.xowa.html.modules.*; import gplx.xowa.html.modules.popups.keeplists.*; import gplx.xowa.gui.views.*; import gplx.xowa.parsers.hdrs.*; import gplx.xowa.parsers.tblws.*; public class Xow_popup_parser { - private Xoa_app app; private Xow_wiki wiki; private Xop_parser parser; + private Xoae_app app; private Xowe_wiki wiki; private Xop_parser parser; private Btrie_fast_mgr tmpl_trie, wtxt_trie; private Xop_tkn_mkr tkn_mkr; private Xop_ctx tmpl_ctx; private Xop_root_tkn tmpl_root, wtxt_root; private Xot_compile_data tmpl_props = new Xot_compile_data(); private Xoh_wtr_ctx hctx = Xoh_wtr_ctx.Popup; @@ -36,8 +36,8 @@ public class Xow_popup_parser { tmpl_ctx.Tmpl_tkn_max_(v); wtxt_ctx.Tmpl_tkn_max_(v); } - public void Init_by_wiki(Xow_wiki wiki) { - this.wiki = wiki; this.app = wiki.App(); this.parser = wiki.Parser(); this.tkn_mkr = app.Tkn_mkr(); + public void Init_by_wiki(Xowe_wiki wiki) { + this.wiki = wiki; this.app = wiki.Appe(); this.parser = wiki.Parser(); this.tkn_mkr = app.Tkn_mkr(); this.tmpl_ctx = Xop_ctx.new_(wiki); this.wtxt_ctx = Xop_ctx.new_(wiki); Xop_lxr_mgr tmpl_lxr_mgr = Xop_lxr_mgr.Popup_lxr_mgr; tmpl_lxr_mgr.Init_by_wiki(wiki); @@ -67,8 +67,8 @@ public class Xow_popup_parser { Wtxt_ctx_init(true, tmpl_src); wtxt_ctx.Cur_page().Ttl_(ttl); // NOTE: must set cur_page, or rel lnkis won't work; EX: [[../A]] } - public byte[] Parse(Xow_wiki cur_wiki, Xoa_page page, Xog_tab_itm cur_tab, Xow_popup_itm popup_itm) { // NOTE: must pass cur_wiki for xwiki label; DATE:2014-07-02 - if (Bry_.Eq(popup_itm.Wiki_domain(), Xow_wiki_domain_.Url_wikidata)) { + public byte[] Parse(Xowe_wiki cur_wiki, Xoae_page page, Xog_tab_itm cur_tab, Xow_popup_itm popup_itm) { // NOTE: must pass cur_wiki for xwiki label; DATE:2014-07-02 + if (Bry_.Eq(popup_itm.Wiki_domain(), Xow_domain_.Domain_bry_wikidata)) { data.Wrdx_bfr().Add(app.Wiki_mgr().Wdata_mgr().Popup_text(page)); } else { @@ -206,9 +206,9 @@ public class Xow_popup_parser { } } class Xow_popup_parser_ { - public static int Tmpl_bgn_get_(Xoa_app app, Xow_popup_itm itm, Xoa_ttl page_ttl, Xow_popup_anchor_finder hdr_finder, byte[] src, int src_len) { + public static int Tmpl_bgn_get_(Xoae_app app, Xow_popup_itm itm, Xoa_ttl page_ttl, Xow_popup_anchor_finder hdr_finder, byte[] src, int src_len) { int rv = Xop_parser_.Doc_bgn_bos; if (itm.Mode_all()) return rv; - byte[] anch = itm.Page_href()[0] == Byte_ascii.Hash ? Bry_.Mid(app.Encoder_mgr().Href().Decode(itm.Page_href()), 1) : page_ttl.Anch_txt(); + byte[] anch = itm.Page_href()[0] == Byte_ascii.Hash ? Bry_.Mid(Xoa_app_.Utl_encoder_mgr().Href().Decode(itm.Page_href()), 1) : page_ttl.Anch_txt(); if (anch == null) return rv; int hdr_bgn = hdr_finder.Find(src, src_len, anch, rv); // NOTE: starting search from Xop_parser_.Doc_bgn_bos return hdr_bgn == Bry_finder.Not_found ? rv : hdr_bgn; diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser_tst.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser_tst.java index 5c8ccedb8..82548f8d3 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser_tst.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser_tst.java @@ -456,10 +456,10 @@ public class Xow_popup_parser_tst { } } class Xop_popup_parser_fxt { - private Xow_popup_parser parser; private Xow_wiki wiki; + private Xow_popup_parser parser; private Xowe_wiki wiki; private int word_min = 2; public void Clear() { - Xoa_app app = Xoa_app_fxt.app_(); + Xoae_app app = Xoa_app_fxt.app_(); this.wiki = Xoa_app_fxt.wiki_(app, "en.wiki"); parser = wiki.Html_mgr().Module_mgr().Popup_mgr().Parser(); parser.Init_by_wiki(wiki); @@ -497,7 +497,7 @@ class Xop_popup_parser_fxt { } public void Test_parse(String raw, String expd) {Test_parse(raw, "Test_1", expd);} public void Test_parse(String raw, String ttl, String expd) { - Xoa_page page = Xoa_page.create_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl))); + Xoae_page page = Xoae_page.create_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl))); page.Data_raw_(Bry_.new_utf8_(raw)); Xow_popup_itm itm = new Xow_popup_itm(1, Bry_.new_utf8_(raw), Bry_.Empty, word_min); itm.Init(wiki.Domain_bry(), page.Ttl()); diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki.java b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki.java index d40d22dc0..c307d9bd1 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.html.modules.popups.keeplists; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.modules.*; import gplx.xowa.html.modules.popups.*; import gplx.core.regxs.*; public class Xop_keeplist_wiki { - public Xop_keeplist_wiki(Xow_wiki wiki) { + public Xop_keeplist_wiki(Xowe_wiki wiki) { srl = new Xop_keeplist_wiki_srl(wiki); } public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = false; // NOTE: default to false, b/c wikis that are not listed in cfg will not call Rules_seal diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_srl.java b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_srl.java index ddcdafbbc..88f2a7398 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_srl.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_srl.java @@ -20,12 +20,12 @@ import gplx.srls.dsvs.*; import gplx.core.regxs.*; import gplx.xowa.langs.cases.*; public class Xop_keeplist_wiki_srl extends Dsv_wkr_base { - private Xol_case_mgr case_mgr; private Xow_wiki wiki; + private Xol_case_mgr case_mgr; private Xowe_wiki wiki; private byte[] wiki_bry; private byte[] keeps_bry; private byte[] skips_bry; private int rules_count; - public Xop_keeplist_wiki_srl(Xow_wiki wiki) {this.wiki = wiki; this.case_mgr = wiki.Lang().Case_mgr();} + public Xop_keeplist_wiki_srl(Xowe_wiki wiki) {this.wiki = wiki; this.case_mgr = wiki.Lang().Case_mgr();} @Override public Dsv_fld_parser[] Fld_parsers() {return new Dsv_fld_parser[] {Dsv_fld_parser_.Bry_parser, Dsv_fld_parser_.Bry_parser, Dsv_fld_parser_.Bry_parser};} @Override public boolean Write_bry(Dsv_tbl_parser parser, int fld_idx, byte[] src, int bgn, int end) { switch (fld_idx) { diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_tst.java b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_tst.java index 81d8640fa..0aed561cf 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_tst.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/keeplists/Xop_keeplist_wiki_tst.java @@ -41,8 +41,8 @@ class Xop_keeplist_wiki_fxt { public void Clear() { } public Xop_keeplist_wiki keeplist_wiki_(String raw) { - Xoa_app app = Xoa_app_fxt.app_(); - Xow_wiki wiki = Xoa_app_fxt.wiki_(app, "enwiki"); + Xoae_app app = Xoa_app_fxt.app_(); + Xowe_wiki wiki = Xoa_app_fxt.wiki_(app, "enwiki"); Xow_popup_mgr popup_mgr = wiki.Html_mgr().Module_mgr().Popup_mgr(); popup_mgr.Init_by_wiki(wiki); popup_mgr.Parser().Tmpl_keeplist_init_(Bry_.new_utf8_(raw)); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java index 9e3d12345..996c9a94f 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java @@ -19,7 +19,7 @@ package gplx.xowa.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xo import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; public class Xoa_available_wikis_mgr implements GfoInvkAble { private Bry_fmtr itms_as_html_fmtr = Bry_fmtr.new_("\n

  • ~{domain}
  • ", "domain", "itm_cls"); - public Xoa_available_wikis_mgr(Xoa_app app) {this.app = app;} private Xoa_app app; + public Xoa_available_wikis_mgr(Xoae_app app) {this.app = app;} private Xoae_app app; public String Itms_as_html() { if (itms_as_html == null) { String itm_cls = app.Api_root().Html().Modules().Popups().Enabled() ? " class='xowa-hover-off'" : ""; @@ -29,9 +29,9 @@ public class Xoa_available_wikis_mgr implements GfoInvkAble { int len = xwiki_mgr.Len(); for (int i = 0; i < len; i++) { Xow_xwiki_itm itm = xwiki_mgr.Get_at(i); - if (itm.Wiki_tid() == Xow_wiki_domain_.Tid_home) continue;// don't show home wiki + if (itm.Domain_tid() == Xow_domain_.Tid_int_home) continue;// don't show home wiki if (!itm.Offline()) continue; // only show items marked Offline (added by Available_from_fsys); DATE:2014-09-21 - itms_as_html_fmtr.Bld_bfr_many(tmp_bfr, itm.Domain(), itm_cls); + itms_as_html_fmtr.Bld_bfr_many(tmp_bfr, itm.Domain_bry(), itm_cls); } itms_as_html = tmp_bfr.Xto_str(); } diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoa_portal_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xoa_portal_mgr.java index 951ba512c..e7621a0b1 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoa_portal_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoa_portal_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; public class Xoa_portal_mgr implements GfoInvkAble { - public Xoa_portal_mgr(Xoa_app app) {wikis = new Xoa_available_wikis_mgr(app);} + public Xoa_portal_mgr(Xoae_app app) {wikis = new Xoa_available_wikis_mgr(app);} public Xoa_available_wikis_mgr Wikis() {return wikis;} private Xoa_available_wikis_mgr wikis; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_wikis)) return wikis; diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoh_page_body_cls_tst.java b/400_xowa/src/gplx/xowa/html/portal/Xoh_page_body_cls_tst.java index ee215fec3..e9c317604 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoh_page_body_cls_tst.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoh_page_body_cls_tst.java @@ -37,7 +37,7 @@ public class Xoh_page_body_cls_tst { } } class Xoh_page_body_cls_fxt { - private Bry_bfr tmp_bfr; private Xoa_app app; private Xow_wiki wiki; + private Bry_bfr tmp_bfr; private Xoae_app app; private Xowe_wiki wiki; public void Test_escape_cls(String raw, String expd) { Tfds.Eq(expd, String_.new_utf8_(Xoh_page_body_cls.Escape_cls(Bry_.new_utf8_(raw)))); } diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java index fd07224a5..4c9281643 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java @@ -17,10 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; public class Xoh_subpages_bldr implements Bry_fmtr_arg { - private Xoa_app app; + private Xoae_app app; private Bry_bfr tmp_bfr = Bry_bfr.reset_(255), ttl_bfr = Bry_bfr.reset_(255); private byte[][] segs; - public Xoh_subpages_bldr(Xoa_app app) {this.app = app;} + public Xoh_subpages_bldr(Xoae_app app) {this.app = app;} public byte[] Bld(Xow_ns_mgr ns_mgr, Xoa_ttl ttl) { Xow_ns ns = ttl.Ns(); if (! ( ns.Subpages_enabled() // ns has subpages diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java index 80c518342..69f6658fb 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java @@ -34,9 +34,9 @@ public class Xoh_subpages_bldr_tst { } } class Xoh_subpages_bldr_fxt { - private Xoa_app app; + private Xoae_app app; private Xoh_subpages_bldr subpages_bldr; - public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public void Init() { this.app = Xoa_app_fxt.app_(); this.wiki = Xoa_app_fxt.wiki_tst_(app); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java index a645e6294..1fddb4f35 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java @@ -19,11 +19,11 @@ package gplx.xowa.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xo import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.html.sidebar.*; import gplx.xowa.pages.*; import gplx.xowa.apis.xowa.html.*; import gplx.xowa.apis.xowa.html.skins.*; public class Xow_portal_mgr implements GfoInvkAble { - private Xow_wiki wiki; private boolean lang_is_rtl; private Xoapi_toggle_itm toggle_itm; - public Xow_portal_mgr(Xow_wiki wiki) { + private Xowe_wiki wiki; private boolean lang_is_rtl; private Xoapi_toggle_itm toggle_itm; + public Xow_portal_mgr(Xowe_wiki wiki) { this.wiki = wiki; this.sidebar_mgr = new Xowh_sidebar_mgr(wiki); - this.missing_ns_cls = Bry_.Eq(wiki.Domain_bry(), Xow_wiki_domain_.Key_home_bry) ? Missing_ns_cls_hide : null; // if home wiki, set missing_ns to application default; if any other wiki, set to null; will be overriden during init + this.missing_ns_cls = Bry_.Eq(wiki.Domain_bry(), Xow_domain_.Tid_bry_home) ? Missing_ns_cls_hide : null; // if home wiki, set missing_ns to application default; if any other wiki, set to null; will be overriden during init } public void Init_by_lang(Xol_lang lang) { lang_is_rtl = !lang.Dir_ltr(); @@ -36,9 +36,9 @@ public class Xow_portal_mgr implements GfoInvkAble { public void Init() { init_needed = false; if (missing_ns_cls == null) // if missing_ns_cls not set for wiki, use the home wiki's - Missing_ns_cls_(wiki.App().User().Wiki().Html_mgr().Portal_mgr().Missing_ns_cls()); - Xoapi_skins skins = wiki.App().Api_root().Html().Skins(); - api_skin = wiki.App().Mode() == Xoa_app_.Mode_gui ? skins.Desktop() : skins.Server(); + Missing_ns_cls_(wiki.Appe().User().Wiki().Html_mgr().Portal_mgr().Missing_ns_cls()); + Xoapi_skins skins = wiki.Appe().Api_root().Html().Skins(); + api_skin = wiki.Appe().Mode() == Xoa_app_.Mode_gui ? skins.Desktop() : skins.Server(); Bry_fmtr_eval_mgr eval_mgr = wiki.Eval_mgr(); Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); Init_fmtr(tmp_bfr, eval_mgr, div_view_fmtr); @@ -46,7 +46,7 @@ public class Xow_portal_mgr implements GfoInvkAble { byte[] wiki_user_name = wiki.User().Name(); div_personal_bry = Init_fmtr(tmp_bfr, eval_mgr, div_personal_fmtr, Bry_.Add(Xoh_href_parser.Href_wiki_bry, wiki.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_user).Name_db_w_colon(), wiki_user_name), wiki_user_name, Ns_cls_by_id(wiki.Ns_mgr(), Xow_ns_.Id_user), Bry_.Add(Xoh_href_parser.Href_wiki_bry, wiki.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_user_talk).Name_db_w_colon(), wiki_user_name), Ns_cls_by_id(wiki.Ns_mgr(), Xow_ns_.Id_user_talk)); byte[] main_page_href_bry = tmp_bfr.Add(Xoh_href_parser.Href_site_bry).Add(wiki.Domain_bry()).Add(Xoh_href_parser.Href_wiki_bry).Xto_bry_and_clear(); // NOTE: build /site/en.wikipedia.org/wiki/ href; no Main_Page, as that will be inserted by Xoh_href_parser - div_logo_bry = Init_fmtr(tmp_bfr, eval_mgr, div_logo_fmtr, main_page_href_bry, wiki.App().Encoder_mgr().Fsys().Encode_http(wiki.App().User().Fsys_mgr().Wiki_root_dir().GenSubFil_nest(wiki.Domain_str(), "html", "logo.png"))); + div_logo_bry = Init_fmtr(tmp_bfr, eval_mgr, div_logo_fmtr, main_page_href_bry, Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(wiki.Appe().User().Fsys_mgr().Wiki_root_dir().GenSubFil_nest(wiki.Domain_str(), "html", "logo.png"))); div_home_bry = Init_fmtr(tmp_bfr, eval_mgr, div_home_fmtr); div_wikis_fmtr.Eval_mgr_(eval_mgr); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); @@ -94,7 +94,7 @@ public class Xow_portal_mgr implements GfoInvkAble { public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty; public byte[] Div_wikis_bry(Bry_bfr_mkr bfr_mkr) { if (toggle_itm == null) // TEST:lazy-new b/c Init_by_wiki - toggle_itm = wiki.App().Api_root().Html().Page().Toggle_mgr().Get_or_new("offline-wikis").Init(wiki.App().User().Wiki()); + toggle_itm = wiki.Appe().Api_root().Html().Page().Toggle_mgr().Get_or_new("offline-wikis").Init(wiki.Appe().User().Wiki()); Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); div_wikis_fmtr.Bld_bfr_many(tmp_bfr, toggle_itm.Html_toggle_btn(), toggle_itm.Html_toggle_hdr()); return tmp_bfr.Mkr_rls().Xto_bry_and_clear(); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java index 04f708ed7..dd62dc06b 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java @@ -38,7 +38,7 @@ class Xowh_portal_mgr_fxt { wiki.Ns_mgr().Ns_main().Exists_(true); // needed for ns wiki.Html_mgr().Portal_mgr().Init_assert(); // needed for personal } - } private Xoa_app app; Xow_wiki wiki; + } private Xoae_app app; Xowe_wiki wiki; public void Test_div_ns_bry(String ttl, String expd) { Tfds.Eq(expd, String_.new_ascii_(wiki.Html_mgr().Portal_mgr().Div_ns_bry(wiki.Utl_bry_bfr_mkr(), Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl)), wiki.Ns_mgr()))); } diff --git a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_itm.java b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_itm.java index 3f39a4c11..255e0567b 100644 --- a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_itm.java +++ b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_itm.java @@ -36,11 +36,11 @@ public class Xowh_sidebar_itm { public static final byte Tid_grp = 1, Tid_itm = 2; // NOTE: values are used by parse to indicate # of asterisks } class Xowh_sidebar_grp_fmtr_arg implements Bry_fmtr_arg { - private Xow_wiki wiki; private Xowh_sidebar_itm grp; private Bry_fmtr fmtr; - public void Grp_(Xow_wiki wiki, Xowh_sidebar_itm grp, Bry_fmtr fmtr) {this.wiki = wiki; this.grp = grp; this.fmtr = fmtr;} + private Xowe_wiki wiki; private Xowh_sidebar_itm grp; private Bry_fmtr fmtr; + public void Grp_(Xowe_wiki wiki, Xowh_sidebar_itm grp, Bry_fmtr fmtr) {this.wiki = wiki; this.grp = grp; this.fmtr = fmtr;} public void XferAry(Bry_bfr bfr, int idx) { int len = grp.Itms_len(); - boolean popups_enabled = wiki.App().Api_root().Html().Modules().Popups().Enabled(); + boolean popups_enabled = wiki.Appe().Api_root().Html().Modules().Popups().Enabled(); String itm_cls = popups_enabled ? " class='xowa-hover-off'" : ""; for (int i = 0; i < len; i++) { Xowh_sidebar_itm itm = (Xowh_sidebar_itm )grp.Itms_get_at(i); diff --git a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java index 0f9dfd578..9abda3af0 100644 --- a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java +++ b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.html.sidebar; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.langs.msgs.*; public class Xowh_sidebar_mgr implements GfoInvkAble { - public Xowh_sidebar_mgr(Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; + public Xowh_sidebar_mgr(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki; public int Grps_len() {return grps.Count();} ListAdp grps = ListAdp_.new_(); public Xowh_sidebar_itm Grps_get_at(int i) {return (Xowh_sidebar_itm)grps.FetchAt(i);} public byte[] Html_bry() {return html_bry;} private byte[] html_bry; @@ -28,7 +28,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { Xol_msg_itm sidebar_msg = Xol_msg_mgr_.Get_msg_itm(bfr, wiki, wiki.Lang(), CONST_sidebar_ttl); if ( sidebar_msg.Src() == Xol_msg_itm.Src_missing || ( sidebar_msg.Src() == Xol_msg_itm.Src_lang - && wiki.Domain_tid() == gplx.xowa.wikis.Xow_wiki_domain_.Tid_home + && wiki.Domain_tid() == gplx.xowa.wikis.Xow_domain_.Tid_int_home )) { html_bry = Bry_.Empty; bfr.Mkr_rls(); @@ -40,7 +40,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { html_bry = bfr.Mkr_rls().Xto_bry_and_clear(); comment_bfr = comment_bfr.Mkr_rls().Clear(); } catch (Exception e) { - wiki.App().Usr_dlg().Warn_many(GRP_KEY, "sidebar.init", "sidebar init failed: ~{0} ~{1}", wiki.Domain_str(), Err_.Message_gplx_brief(e)); + wiki.Appe().Usr_dlg().Warn_many(GRP_KEY, "sidebar.init", "sidebar init failed: ~{0} ~{1}", wiki.Domain_str(), Err_.Message_gplx_brief(e)); html_bry = Bry_.Empty; } } @@ -53,7 +53,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { public void Parse(Bry_bfr bfr, Bry_bfr comment_bfr, byte[] src) { byte[][] lines = Bry_.Split(src, Byte_ascii.NewLine); int lines_len = lines.length; - Xoa_app app = wiki.App(); Url_encoder id_encoder = app.Encoder_mgr().Id(); + Url_encoder id_encoder = Xoa_app_.Utl_encoder_mgr().Id(); Xowh_sidebar_itm cur_grp = null; Xop_link_parser link_parser = new Xop_link_parser(); for (int i = 0; i < lines_len; i++) { @@ -77,7 +77,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { else { if (pipe_pos == Bry_.NotFound) { // not of format of "href|main"; (EX: "href_only") if (!Ignore(wiki.Domain_bry(), bry)) // suppress warning if ignored; DATE:2014-02-11 - wiki.App().Usr_dlg().Warn_many(GRP_KEY, "parse.line.missing_text", "sidebar item is missing pipe; only href is available; item will be hidden: item=~{0}", String_.new_utf8_(bry)); + wiki.Appe().Usr_dlg().Warn_many(GRP_KEY, "parse.line.missing_text", "sidebar item is missing pipe; only href is available; item will be hidden: item=~{0}", String_.new_utf8_(bry)); continue; } byte[] href_key = Bry_.Mid(bry, 0, pipe_pos); diff --git a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr_tst.java b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr_tst.java index 0282a7e69..48baf0297 100644 --- a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr_tst.java @@ -182,7 +182,7 @@ public class Xowh_sidebar_mgr_tst { } } class Xowh_sidebar_mgr_fxt { - private Xoa_app app; private Xow_wiki wiki; private Xowh_sidebar_mgr sidebar_mgr; private Bry_bfr bfr, comment_bfr; + private Xoae_app app; private Xowe_wiki wiki; private Xowh_sidebar_mgr sidebar_mgr; private Bry_bfr bfr, comment_bfr; public Xowh_sidebar_mgr_fxt Clear() { // if (app == null) { app = Xoa_app_fxt.app_(); @@ -194,7 +194,7 @@ class Xowh_sidebar_mgr_fxt { // } return this; } - public Xow_wiki Wiki() {return wiki;} + public Xowe_wiki Wiki() {return wiki;} public Xowh_sidebar_itm nav_grp_(String text, String title, Xowh_sidebar_itm... itms) {return new Xowh_sidebar_itm(Xowh_sidebar_itm.Tid_grp).Text_(Bry_.new_ascii_(text)).Title_(Bry_.new_ascii_(title));} public Xowh_sidebar_itm nav_itm_(String text, String title, String accesskey, String href) {return new Xowh_sidebar_itm(Xowh_sidebar_itm.Tid_itm).Text_(Bry_.new_ascii_(text)).Title_(Bry_.new_ascii_(title)).Accesskey_(Bry_.new_ascii_(accesskey)).Href_(Bry_.new_ascii_(href));} public Xowh_sidebar_mgr_fxt Init_popups_enabled_(boolean v) {app.Api_root().Html().Modules().Popups().Enabled_(v); return this;} diff --git a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_mgr.java b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_mgr.java index 87bcb99a9..b61f2685f 100644 --- a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_mgr.java +++ b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_mgr.java @@ -21,11 +21,11 @@ import gplx.xowa.apps.fsys.*; public class Xoh_tidy_mgr implements GfoInvkAble { private Xoh_tidy_wkr wkr = Xoh_tidy_wkr_.Wkr_null; // TEST: set default wkr to null private Xoh_tidy_wkr_tidy wkr_tidy = new Xoh_tidy_wkr_tidy(); private Xoh_tidy_wkr_jtidy wkr_jtidy = new Xoh_tidy_wkr_jtidy(); - public void Init_by_app(Xoa_app app) { + public void Init_by_app(Xoae_app app) { wkr_tidy.Init_by_app(app); wkr_jtidy.Init_by_app(app); Xoa_fsys_eval cmd_eval = app.Url_cmd_eval(); - ProcessAdp.ini_(this, app.Gui_wtr(), wkr_tidy, cmd_eval, ProcessAdp.Run_mode_sync_timeout, 1 * 60, "~{<>bin_plat_dir<>}tidy" + Op_sys.Cur().Fsys_dir_spr_str() + "tidy", Xoh_tidy_wkr_tidy.Args_fmt, "source", "target"); + ProcessAdp.ini_(this, app.Usr_dlg(), wkr_tidy, cmd_eval, ProcessAdp.Run_mode_sync_timeout, 1 * 60, "~{<>bin_plat_dir<>}tidy" + Op_sys.Cur().Fsys_dir_spr_str() + "tidy", Xoh_tidy_wkr_tidy.Args_fmt, "source", "target"); Wkr_tid_(Xoh_tidy_wkr_.Tid_jtidy); } public boolean Enabled() {return enabled;} private boolean enabled = true; @@ -36,7 +36,7 @@ public class Xoh_tidy_mgr implements GfoInvkAble { : (Xoh_tidy_wkr)wkr_tidy ; } - public void Run_tidy_html(Xoa_page page, Bry_bfr bfr) { + public void Run_tidy_html(Xoae_page page, Bry_bfr bfr) { if (bfr.Len_eq_0()) return; // document is empty; do not exec b/c tidy will never generate files for 0 len files, and previous file will remain; DATE:2014-06-04 Tidy_wrap(bfr); wkr.Exec_tidy(page, bfr); diff --git a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr.java b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr.java index f3b4554ad..2f1e22d4b 100644 --- a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr.java +++ b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr.java @@ -18,5 +18,5 @@ along with this program. If not, see . package gplx.xowa.html.tidy; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; public interface Xoh_tidy_wkr { byte Tid(); - void Exec_tidy(Xoa_page page, Bry_bfr bfr); + void Exec_tidy(Xoae_page page, Bry_bfr bfr); } diff --git a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_.java b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_.java index 47357b969..bf2eef0e1 100644 --- a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_.java +++ b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_.java @@ -38,5 +38,5 @@ public class Xoh_tidy_wkr_ { } class Xoh_tidy_wkr_null implements Xoh_tidy_wkr { public byte Tid() {return Xoh_tidy_wkr_.Tid_null;} - public void Exec_tidy(Xoa_page page, Bry_bfr bfr) {} + public void Exec_tidy(Xoae_page page, Bry_bfr bfr) {} } diff --git a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy.java b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy.java index 6a43e52cf..bb23e883d 100644 --- a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy.java +++ b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy.java @@ -48,12 +48,12 @@ class Xoh_tidy_wkr_jtidy implements Xoh_tidy_wkr { tidy.setShowErrors(0); // NOTE: otherwise errors printed to output window; EX: Error: