diff --git a/100_core/src_000_err/gplx/ErrMsgWtr.java b/100_core/src_000_err/gplx/ErrMsgWtr.java index 9f56ce113..39027b31c 100644 --- a/100_core/src_000_err/gplx/ErrMsgWtr.java +++ b/100_core/src_000_err/gplx/ErrMsgWtr.java @@ -49,7 +49,7 @@ public class ErrMsgWtr { String msg = err.Hdr(); String typ = String_.Eq(err.Key(), "") ? "" : String_.Concat(" <", err.Key(), ">"); boolean onlyOne = errAry.length == 1; - String idxStr = onlyOne ? "" : Int_.XtoStr(i); + String idxStr = onlyOne ? "" : Int_.Xto_str(i); sb.Add(idxStr).Add("\t").Add(msg).Add(typ).Add_char_crlf(); // ex: " @count must be > 0 " WriteKeyValAry(sb, err.Args()); sb.Add("\t").Add(err.Proc().SignatureRaw()).Add_char_crlf(); @@ -87,7 +87,7 @@ public class ErrMsgWtr { ErrProcData comp = errAry[j].Proc(); if (String_.Eq(proc.Raw(), comp.Raw())) {idx = j; break;} } - String idxStr = onlyOne ? "" : Int_.XtoStr(idx); + String idxStr = onlyOne ? "" : Int_.Xto_str(idx); String hdr = idx == -1 ? "\t" : idxStr + "\t"; String ideAddressSpr = String_.CrLf + "\t\t"; String ideAddress = String_.Eq(proc.IdeAddress(), "") ? "" : ideAddressSpr + proc.IdeAddress(); // NOTE: ideAddress will be blank in compiled mode diff --git a/100_core/src_000_err/gplx/ErrProcData.java b/100_core/src_000_err/gplx/ErrProcData.java index 255b19736..ba23b0135 100644 --- a/100_core/src_000_err/gplx/ErrProcData.java +++ b/100_core/src_000_err/gplx/ErrProcData.java @@ -59,7 +59,7 @@ class ErrProcData { int linEnd = String_.FindFwd(raw, ")", linBgn); if (linEnd == String_.Find_none) return rv; String linRaw = String_.Mid(raw, linBgn, linEnd); rv.sourceLine = Int_.parse_(linRaw); - rv.ideAddress = String_.Concat("(", rv.sourceFileRaw, ":", Int_.XtoStr(rv.sourceLine), ")"); + rv.ideAddress = String_.Concat("(", rv.sourceFileRaw, ":", Int_.Xto_str(rv.sourceLine), ")"); return rv; } public static ErrProcData new_() {return new ErrProcData();} ErrProcData() {} diff --git a/100_core/src_110_primitive/gplx/Bool_.java b/100_core/src_110_primitive/gplx/Bool_.java index aa7f0c8f7..d51801d62 100644 --- a/100_core/src_110_primitive/gplx/Bool_.java +++ b/100_core/src_110_primitive/gplx/Bool_.java @@ -19,8 +19,8 @@ package gplx; public class Bool_ implements GfoInvkAble { public static final boolean[] Ary_empty = new boolean[0]; public static final Class ClassOf = Boolean.class; - public static int XtoInt(boolean v) {return v ? 1 : 0;} - public static String XtoStr_lower(boolean v) {return v ? "true" : "false";} + public static int Xto_int(boolean v) {return v ? 1 : 0;} + public static String Xto_str_lower(boolean v) {return v ? "true" : "false";} public static byte Xto_byte(boolean v) {return v ? Y_byte : N_byte;} public static boolean cast_(Object obj) {try {return (Boolean)obj;} catch (Exception e) {throw Err_.type_mismatch_exc_(e, boolean.class, obj);}} public static boolean cast_or_(Object obj, boolean v) {try {return (Boolean)obj;} catch (Exception e) {Err_.Noop(e); return v;}} diff --git a/100_core/src_110_primitive/gplx/Bool_obj_ref.java b/100_core/src_110_primitive/gplx/Bool_obj_ref.java index 76dd3490a..4fa867267 100644 --- a/100_core/src_110_primitive/gplx/Bool_obj_ref.java +++ b/100_core/src_110_primitive/gplx/Bool_obj_ref.java @@ -22,7 +22,7 @@ public class Bool_obj_ref { public Bool_obj_ref Val_n_() {val = false; return this;} public Bool_obj_ref Val_(boolean v) {val = v; return this;} public Bool_obj_ref Val_toggle_() {val = !val; return this;} - @Override public String toString() {return Bool_.XtoStr_lower(val);} + @Override public String toString() {return Bool_.Xto_str_lower(val);} public static Bool_obj_ref n_() {return new_(false);} public static Bool_obj_ref y_() {return new_(true);} public static Bool_obj_ref new_(boolean val) { diff --git a/100_core/src_110_primitive/gplx/Bry_.java b/100_core/src_110_primitive/gplx/Bry_.java index 6a4d097c8..f39235d11 100644 --- a/100_core/src_110_primitive/gplx/Bry_.java +++ b/100_core/src_110_primitive/gplx/Bry_.java @@ -19,6 +19,7 @@ package gplx; import java.lang.*; import gplx.ios.*; public class Bry_ { + public static final String Cls_name = "byte[]"; public static final int NotFound = -1; public static final byte[] Empty = new byte[0]; public static final byte[][] Ary_empty = new byte[0][]; diff --git a/100_core/src_110_primitive/gplx/Bry_bfr.java b/100_core/src_110_primitive/gplx/Bry_bfr.java index 399b00284..e594a051f 100644 --- a/100_core/src_110_primitive/gplx/Bry_bfr.java +++ b/100_core/src_110_primitive/gplx/Bry_bfr.java @@ -248,8 +248,8 @@ public class Bry_bfr { return this; } public Bry_bfr Add_str(String v) {return Add(Bry_.new_utf8_(v));} - public Bry_bfr Add_float(float f) {Add_str(Float_.XtoStr(f)); return this;} - public Bry_bfr Add_double(double v) {Add_str(Double_.XtoStr(v)); return this;} + public Bry_bfr Add_float(float f) {Add_str(Float_.Xto_str(f)); return this;} + public Bry_bfr Add_double(double v) {Add_str(Double_.Xto_str(v)); return this;} public Bry_bfr Add_dte(DateAdp val) {return Add_dte_segs(val.Year(), val.Month(),val.Day(), val.Hour(), val.Minute(), val.Second(), val.Frac());} public Bry_bfr Add_dte_segs(int y, int M, int d, int H, int m, int s, int f) { // yyyyMMdd HHmmss.fff if (bfr_len + 19 > bfr_max) Resize((bfr_len + 19) * 2); diff --git a/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java b/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java index 12876d43e..b625ebea2 100644 --- a/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java +++ b/100_core/src_110_primitive/gplx/Bry_bfr_mkr.java @@ -63,7 +63,7 @@ class Bry_bfr_mkr_mgr { for (int i = 0; i < ary_max; i++) { Bry_bfr itm = ary[i]; if (itm != null) { - if (itm.Mkr_mgr() != null) throw Err_.new_("failed to clear bfr: " + Int_.XtoStr(i)); + if (itm.Mkr_mgr() != null) throw Err_.new_("failed to clear bfr: " + Int_.Xto_str(i)); itm.Clear(); } ary[i] = null; diff --git a/100_core/src_110_primitive/gplx/Bry_fmtr.java b/100_core/src_110_primitive/gplx/Bry_fmtr.java index 16a296302..6772fe29a 100644 --- a/100_core/src_110_primitive/gplx/Bry_fmtr.java +++ b/100_core/src_110_primitive/gplx/Bry_fmtr.java @@ -259,4 +259,5 @@ public class Bry_fmtr { byte[] bry = bfr.XtoAryAndClear(); this.Fmt_(bry).Compile(); } + public static String Escape_tilde(String v) {return String_.Replace(v, "~", "~~");} } diff --git a/100_core/src_110_primitive/gplx/Bry_fmtr_tst.java b/100_core/src_110_primitive/gplx/Bry_fmtr_tst.java index c84d88625..2045e211c 100644 --- a/100_core/src_110_primitive/gplx/Bry_fmtr_tst.java +++ b/100_core/src_110_primitive/gplx/Bry_fmtr_tst.java @@ -53,6 +53,9 @@ public class Bry_fmtr_tst { Bry_fmtr_fxt fxt = new Bry_fmtr_fxt().Clear(); fxt.Bld_bfr_many_and_set_fmt("a~{0}c", Object_.Ary("b"), "abc"); } + @Test public void Escape_tilde() { + Tfds.Eq("~~~~~~", Bry_fmtr.Escape_tilde("~~~")); + } } class Bry_fmtr_tst_mok implements Bry_fmtr_eval_mgr { public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; diff --git a/100_core/src_110_primitive/gplx/Byte_.java b/100_core/src_110_primitive/gplx/Byte_.java index 30178c893..24f9c539c 100644 --- a/100_core/src_110_primitive/gplx/Byte_.java +++ b/100_core/src_110_primitive/gplx/Byte_.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx; public class Byte_ { public static final byte MinValue = Byte.MIN_VALUE; + public static final String Cls_name = "byte"; public static byte[] Ary(byte... ary) {return ary;} public static byte[] Ary_by_ints(int... ary) { int ary_len = ary.length; @@ -26,8 +27,8 @@ public class Byte_ { rv[i] = int_(ary[i]); return rv; } - public static String XtoStr(byte v) {return new Byte(v).toString();} - public static int XtoInt(byte v) {return v < 0 ? (int)v + 256 : v;} + public static String Xto_str(byte v) {return new Byte(v).toString();} + public static int Xto_int(byte v) {return v < 0 ? (int)v + 256 : v;} public static boolean In(byte v, byte... ary) { for (byte itm : ary) if (v == itm) return true; diff --git a/100_core/src_110_primitive/gplx/Byte__tst.java b/100_core/src_110_primitive/gplx/Byte__tst.java index 4311b70eb..ad7a691a2 100644 --- a/100_core/src_110_primitive/gplx/Byte__tst.java +++ b/100_core/src_110_primitive/gplx/Byte__tst.java @@ -31,5 +31,5 @@ public class Byte__tst { tst_XtoInt( 128, 128); tst_XtoInt( 255, 255); tst_XtoInt( 256, 0); - } void tst_XtoInt(int v, int expd) {Tfds.Eq(expd, Byte_.XtoInt((byte)v));} // WORKAROUND/JAVA: v is of type int b/c java promotes numbers to ints + } void tst_XtoInt(int v, int expd) {Tfds.Eq(expd, Byte_.Xto_int((byte)v));} // WORKAROUND/JAVA: v is of type int b/c java promotes numbers to ints } diff --git a/100_core/src_110_primitive/gplx/Byte_obj_ref.java b/100_core/src_110_primitive/gplx/Byte_obj_ref.java index 0c190fb3c..986de8fe6 100644 --- a/100_core/src_110_primitive/gplx/Byte_obj_ref.java +++ b/100_core/src_110_primitive/gplx/Byte_obj_ref.java @@ -21,7 +21,7 @@ public class Byte_obj_ref { public Byte_obj_ref Val_(byte v) {val = v; return this;} @Override public int hashCode() {return val;} @Override public boolean equals(Object obj) {return obj == null ? false : val == ((Byte_obj_ref)obj).Val();} - @Override public String toString() {return Int_.XtoStr(val);} + @Override public String toString() {return Int_.Xto_str(val);} public static Byte_obj_ref zero_() {return new_(Byte_.Zero);} public static Byte_obj_ref new_(byte val) { Byte_obj_ref rv = new Byte_obj_ref(); diff --git a/100_core/src_110_primitive/gplx/Byte_obj_val.java b/100_core/src_110_primitive/gplx/Byte_obj_val.java index fd19c2b5a..1bc1add79 100644 --- a/100_core/src_110_primitive/gplx/Byte_obj_val.java +++ b/100_core/src_110_primitive/gplx/Byte_obj_val.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; public class Byte_obj_val { public byte Val() {return val;} private byte val; - @Override public String toString() {return Int_.XtoStr(val);} + @Override public String toString() {return Int_.Xto_str(val);} @Override public int hashCode() {return val;} @Override public boolean equals(Object obj) {return obj == null ? false : val == ((Byte_obj_val)obj).Val();} public static Byte_obj_val new_(byte val) { diff --git a/100_core/src_110_primitive/gplx/Double_.java b/100_core/src_110_primitive/gplx/Double_.java index 950323a18..bcb7489fe 100644 --- a/100_core/src_110_primitive/gplx/Double_.java +++ b/100_core/src_110_primitive/gplx/Double_.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx; public class Double_ { public static final Class ClassOf = Double.class; + public static final String Cls_name = "double"; public static final double Inf_pos = Double.POSITIVE_INFINITY;; public static final double NaN = Double.NaN;; public static final byte[] NaN_bry = Bry_.new_ascii_("NaN"); @@ -31,15 +32,15 @@ public class Double_ { try {String s = String_.as_(v); return s == null ? Double_.cast_(v) : Double_.parse_(s);} catch (Exception e) {throw Err_.cast_(e, double.class, v);} } - public static String XtoStr(double v) { + public static String Xto_str(double v) { int v_int = (int)v; - return v - v_int == 0 ? Int_.XtoStr(v_int) : Double.toString(v); + return v - v_int == 0 ? Int_.Xto_str(v_int) : Double.toString(v); } public static String Xto_str_loose(double v) { int v_as_int = (int)v; return v == v_as_int - ? Int_.XtoStr(v_as_int) // convert to int, and call print String to eliminate any trailing decimal places - : Float_.XtoStr((float)v); // calling ((float)v).toString is better at removing trailing 0s than String.format("%g", v). note that .net .toString() handles it better; EX:2449.600000000000d; DATE:2014-07-29 + ? Int_.Xto_str(v_as_int) // convert to int, and call print String to eliminate any trailing decimal places + : Float_.Xto_str((float)v); // calling ((float)v).toString is better at removing trailing 0s than String.format("%g", v). note that .net .toString() handles it better; EX:2449.600000000000d; DATE:2014-07-29 } public static double cast_(Object o) {try {return (Double)o;} catch(Exception e) {throw Err_.type_mismatch_exc_(e, double.class, o);}} public static double parse_(String raw) {try {return Double.parseDouble(raw);} catch(Exception e) {throw Err_.parse_type_exc_(e, double.class, raw);}} diff --git a/100_core/src_110_primitive/gplx/Double_obj_val.java b/100_core/src_110_primitive/gplx/Double_obj_val.java index 1c79c4a72..706dfebf0 100644 --- a/100_core/src_110_primitive/gplx/Double_obj_val.java +++ b/100_core/src_110_primitive/gplx/Double_obj_val.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; public class Double_obj_val implements CompareAble { public double Val() {return val;} double val; - @Override public String toString() {return Double_.XtoStr(val);} + @Override public String toString() {return Double_.Xto_str(val);} @Override public int hashCode() {return (int)val;} @Override public boolean equals(Object obj) {return obj == null ? false : val == ((Double_obj_val)obj).Val();} public int compareTo(Object obj) {Double_obj_val comp = (Double_obj_val)obj; return Double_.Compare(val, comp.val);} diff --git a/100_core/src_110_primitive/gplx/Float_.java b/100_core/src_110_primitive/gplx/Float_.java index dd09ac362..7152c648c 100644 --- a/100_core/src_110_primitive/gplx/Float_.java +++ b/100_core/src_110_primitive/gplx/Float_.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx; public class Float_ { + public static final String Cls_name = "float"; public static final float NaN = Float.NaN;; public static boolean IsNaN(float v) {return Float.isNaN(v);} public static int RoundUp(float val) { @@ -25,9 +26,9 @@ public class Float_ { } public static float Div(int val, int divisor) {return (float)val / (float)divisor;} public static float Div(long val, long divisor) {return (float)val / (float)divisor;} - public static String XtoStr(float v) { + public static String Xto_str(float v) { int v_int = (int)v; - return v - v_int == 0 ? Int_.XtoStr(v_int) : Float.toString(v); + return v - v_int == 0 ? Int_.Xto_str(v_int) : Float.toString(v); } public static float cast_double_(double v) {return (float)v;} public static float cast_(Object obj) {try {return (Float)obj;} catch(Exception exc) {throw Err_.type_mismatch_exc_(exc, float.class, obj);}} diff --git a/100_core/src_110_primitive/gplx/Int_.java b/100_core/src_110_primitive/gplx/Int_.java index 0d2db1ca9..7338275c8 100644 --- a/100_core/src_110_primitive/gplx/Int_.java +++ b/100_core/src_110_primitive/gplx/Int_.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx; public class Int_ implements GfoInvkAble { public static final Class ClassOf = Integer.class; + public static final String Cls_name = "int"; public static final int Base1 = 1; public static final int Const_dlm_len = 1; public static final int Const_position_after_char = 1; @@ -132,11 +133,11 @@ public class Int_ implements GfoInvkAble { if (val < 0) throw Err_.new_("key must be >= 0").Add("key", key).Add("val", val); return this; } - public static String XtoStr_PadBgn_space(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Space, true);} // EX: 1, 3 returns " 1" - public static String XtoStr_PadBgn(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Num_0, true);} // EX: 1, 3 returns "001" + public static String Xto_str_pad_bgn_space(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Space, true);} // EX: 1, 3 returns " 1" + public static String Xto_str_pad_bgn(int v, int reqdPlaces) {return Xto_str_pad_bgn(v, reqdPlaces, Byte_ascii.Num_0, true);} // EX: 1, 3 returns "001" static String Xto_str_pad_bgn(int val, int places, byte pad_chr, boolean bgn) { int len = DigitCount(val); - int pad_len = places - len; if (pad_len < 0) return Int_.XtoStr(val); + int pad_len = places - len; if (pad_len < 0) return Int_.Xto_str(val); Bry_bfr bfr = Bry_bfr.new_(); boolean neg = val < 0; if (bgn) { // special logic to handle negative numbers; EX: -1 -> "-001", not "00-1" @@ -157,13 +158,13 @@ public class Int_ implements GfoInvkAble { public static int cast_(Object obj) {try {return (Integer)obj;} catch(Exception exc) {throw Err_.type_mismatch_exc_(exc, int.class, obj);}} public static int cast_or_(Object obj, int or) {try {return (Integer)obj;} catch(Exception e) {Err_.Noop(e); return or;}} public static int Xby_double_(double v) {return (int)v;} - public static String XtoStr(int v) {return new Integer(v).toString();} - public static String XtoStr_fmt(int v, String fmt) {return new java.text.DecimalFormat(fmt).format(v);} + public static String Xto_str(int v) {return new Integer(v).toString();} + public static String Xto_str_fmt(int v, String fmt) {return new java.text.DecimalFormat(fmt).format(v);} public static boolean TypeMatch(Class type) {return type == int.class || type == Integer.class;} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_XtoStr_PadBgn)) { int v = m.ReadInt(GfsCore_.Arg_primitive), pad = m.ReadInt("pad"); - return ctx.Deny() ? (Object)this : XtoStr_PadBgn(v, pad); + return ctx.Deny() ? (Object)this : Xto_str_pad_bgn(v, pad); } else if (ctx.Match(k, "Add")) { int v = m.ReadInt(GfsCore_.Arg_primitive), operand = m.ReadInt("operand"); @@ -196,16 +197,16 @@ public class Int_ implements GfoInvkAble { return -1; } } - public static String XtoStr_hex(int v) { + public static String Xto_str_hex(int v) { String rv = Integer.toHexString(v); int rvLen = String_.Len(rv); if (rvLen < 8) rv = String_.Repeat("0", 8 - rvLen) + rv; return String_.Upper(rv); } - public static String XtoStr(int[] ary) { + public static String Xto_str(int[] ary) { String_bldr sb = String_bldr_.new_(); for (int i = 0; i < ary.length; i++) - sb.Add_spr_unless_first(Int_.XtoStr(ary[i]), " ", i); + sb.Add_spr_unless_first(Int_.Xto_str(ary[i]), " ", i); return sb.XtoStr(); } public static int[] Ary_parse(String raw_str, int reqd_len, int[] or) { diff --git a/100_core/src_110_primitive/gplx/Int__tst.java b/100_core/src_110_primitive/gplx/Int__tst.java index d551c1b38..23402ac51 100644 --- a/100_core/src_110_primitive/gplx/Int__tst.java +++ b/100_core/src_110_primitive/gplx/Int__tst.java @@ -26,7 +26,7 @@ public class Int__tst { tst_XtoStr_PadLeft_Zeroes(-12 , 3, "-12"); // negative tst_XtoStr_PadLeft_Zeroes(-123 , 3, "-123"); // negative tst_XtoStr_PadLeft_Zeroes(-1234 , 3, "-1234"); // negative - } void tst_XtoStr_PadLeft_Zeroes(int val, int zeros, String expd) {Tfds.Eq(expd, Int_.XtoStr_PadBgn(val, zeros));} + } void tst_XtoStr_PadLeft_Zeroes(int val, int zeros, String expd) {Tfds.Eq(expd, Int_.Xto_str_pad_bgn(val, zeros));} @Test public void parseOr_() { tst_ParseOr("", -1); // empty tst_ParseOr("123", 123); // single @@ -41,7 +41,7 @@ public class Int__tst { @Test public void Xto_fmt() { tst_XtoStr_fmt(1, "1"); tst_XtoStr_fmt(1000, "1,000"); - } void tst_XtoStr_fmt(int v, String expd) {Tfds.Eq(expd, Int_.XtoStr_fmt(v, "#,###"));} + } void tst_XtoStr_fmt(int v, String expd) {Tfds.Eq(expd, Int_.Xto_str_fmt(v, "#,###"));} @Test public void AryRng() { tst_AryRng(1, 3, Int_.Ary(1, 2, 3)); } void tst_AryRng(int bgn, int end, int[] expd) {Tfds.Eq_ary(expd, Int_.AryRng(bgn, end));} @@ -71,7 +71,7 @@ public class Int__tst { tst_DigitCount(100, 3); tst_DigitCount(-1, 2); tst_DigitCount(-100, 4); - } void tst_DigitCount(int val, int expd) {Tfds.Eq(expd, Int_.DigitCount(val), Int_.XtoStr(val));} + } void tst_DigitCount(int val, int expd) {Tfds.Eq(expd, Int_.DigitCount(val), Int_.Xto_str(val));} @Test public void Log10() { tst_Log10( 0, 0); tst_Log10( 1, 0); @@ -104,8 +104,8 @@ public class Int__tst { Ary_parse__tst("123,321,213" , 3, Int_.Ary_empty, 123, 321, 213); Ary_parse__tst(" 1, 2,3" , 3, Int_.Ary_empty, 1, 2, 3); Ary_parse__tst("-1,+2,-3" , 3, Int_.Ary_empty, -1, 2, -3); - Ary_parse__tst(Int_.XtoStr(Int_.MinValue) , 1, Int_.Ary_empty, Int_.MinValue); - Ary_parse__tst(Int_.XtoStr(Int_.MaxValue) , 1, Int_.Ary_empty, Int_.MaxValue); + Ary_parse__tst(Int_.Xto_str(Int_.MinValue) , 1, Int_.Ary_empty, Int_.MinValue); + Ary_parse__tst(Int_.Xto_str(Int_.MaxValue) , 1, Int_.Ary_empty, Int_.MaxValue); Ary_parse__tst("1,2" , 1, Int_.Ary_empty); Ary_parse__tst("1" , 2, Int_.Ary_empty); Ary_parse__tst("a" , 1, Int_.Ary_empty); diff --git a/100_core/src_110_primitive/gplx/Int_obj_ref.java b/100_core/src_110_primitive/gplx/Int_obj_ref.java index bb0ea7a47..dddcee95e 100644 --- a/100_core/src_110_primitive/gplx/Int_obj_ref.java +++ b/100_core/src_110_primitive/gplx/Int_obj_ref.java @@ -23,7 +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;} - @Override public String toString() {return Int_.XtoStr(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();} public static Int_obj_ref neg1_() {return new_(-1);} diff --git a/100_core/src_110_primitive/gplx/Int_obj_val.java b/100_core/src_110_primitive/gplx/Int_obj_val.java index 32df5211e..0dfa2d479 100644 --- a/100_core/src_110_primitive/gplx/Int_obj_val.java +++ b/100_core/src_110_primitive/gplx/Int_obj_val.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; public class Int_obj_val implements CompareAble { public int Val() {return val;} int val; - @Override public String toString() {return Int_.XtoStr(val);} + @Override public String toString() {return Int_.Xto_str(val);} @Override public int hashCode() {return val;} @Override public boolean equals(Object obj) {return obj == null ? false : val == ((Int_obj_val)obj).Val();} public int compareTo(Object obj) {Int_obj_val comp = (Int_obj_val)obj; return Int_.Compare(val, comp.val);} diff --git a/100_core/src_110_primitive/gplx/Long_.java b/100_core/src_110_primitive/gplx/Long_.java index 7c230b8e7..491e81bc7 100644 --- a/100_core/src_110_primitive/gplx/Long_.java +++ b/100_core/src_110_primitive/gplx/Long_.java @@ -19,6 +19,7 @@ package gplx; public class Long_ { public static final long MinValue = Long.MIN_VALUE; public static final long MaxValue = Long.MAX_VALUE; + public static final String Cls_name = "long"; public static final long Neg1 = -1; public static final int Log10Ary_len = 21; public static long[] Log10Ary = new long[] @@ -28,8 +29,8 @@ public class Long_ { , Long_.Pow(10, 15), Long_.Pow(10, 16), Long_.Pow(10, 17), Long_.Pow(10, 18), Long_.Pow(10, 19) , Long_.MaxValue }; - public static String XtoStr(long v) {return Long.toString(v);} - public static String XtoStr_PadBgn(long v, int reqdPlaces) {return String_.Pad(XtoStr(v), reqdPlaces, "0", true);} // ex: 1, 3 returns 001 + public static String Xto_str(long v) {return Long.toString(v);} + public static String Xto_str_PadBgn(long v, int reqdPlaces) {return String_.Pad(Xto_str(v), reqdPlaces, "0", true);} // ex: 1, 3 returns 001 public static long parse_or_(String raw, int or) { if (raw == null) return or; try { diff --git a/100_core/src_110_primitive/gplx/String_.java b/100_core/src_110_primitive/gplx/String_.java index 3632c28f4..7d55976d6 100644 --- a/100_core/src_110_primitive/gplx/String_.java +++ b/100_core/src_110_primitive/gplx/String_.java @@ -19,6 +19,7 @@ package gplx; import java.lang.*; public class String_ implements GfoInvkAble { public static final Class ClassOf = String.class; + public static final String Cls_name = "str" + "ing"; public static final int Find_none = -1, Pos_neg1 = -1; public static final String Null = null, Empty = "", Null_mark = "<>", Tab = "\t", Lf = "\n", CrLf = "\r\n"; public static String cast_(Object v) {return (String)v;} diff --git a/100_core/src_120_basicDataType/gplx/DecimalAdp.java b/100_core/src_120_basicDataType/gplx/DecimalAdp.java index ff9574c06..3e13c6c07 100644 --- a/100_core/src_120_basicDataType/gplx/DecimalAdp.java +++ b/100_core/src_120_basicDataType/gplx/DecimalAdp.java @@ -25,21 +25,21 @@ public class DecimalAdp implements CompareAble { protected DecimalAdp(BigDecimal v) {this.under = v;} BigDecimal under; protected DecimalAdp(int v) {this.under = new BigDecimal(v);} - public String XtoStr() { + public String Xto_str() { BigDecimal tmp = under; if (tmp.scale() > 14) tmp = tmp.setScale(14, RoundingMode.DOWN); // NOTE: setting to 14 to match PHP/C# values more closely; RoundingMode.Down for same reason; see E, Pi tests return tmp .stripTrailingZeros() // NOTE: stripTrailingZeros for exp tests; EX: 120.0 -> 120; 0.01200000000000 -> .012 .toPlainString(); // NOTE: toPlainString b/c stripTrailingZeros now converts 120 to 1.2E+2 (and any other value that is a multiple of 10) } - public String XtoStr(String fmt) {return new DecimalFormat(fmt).format(under);} + public String Xto_str(String fmt) {return new DecimalFormat(fmt).format(under);} @Override public String toString() {return under.toString();} public boolean Eq(DecimalAdp v) {return v.under.doubleValue() == under.doubleValue();} - public BigDecimal XtoDecimal() {return under;} - public long XtoLong_Mult1000() {return under.movePointRight(3).longValue();} + public BigDecimal Xto_decimal() {return under;} + public long Xto_long_mult_1000() {return under.movePointRight(3).longValue();} public int Fraction1000() {return (int)(under.movePointRight(3).floatValue() % 1000);} - public double XtoDouble() {return under.doubleValue();} - public int XtoInt() {return (int)under.doubleValue();} - public long XtoLong() {return (long)under.doubleValue();} + public double Xto_double() {return under.doubleValue();} + public int Xto_int() {return (int)under.doubleValue();} + public long Xto_long() {return (long)under.doubleValue();} public DecimalAdp Op_add(DecimalAdp v) {return new DecimalAdp(under.add(v.under, DecimalAdp_.Gplx_rounding_context));} public DecimalAdp Op_subtract(DecimalAdp v) {return new DecimalAdp(under.subtract(v.under, DecimalAdp_.Gplx_rounding_context));} public DecimalAdp Op_mult(DecimalAdp v) {return new DecimalAdp(under.multiply(v.under));} diff --git a/100_core/src_120_basicDataType/gplx/DecimalAdp_.java b/100_core/src_120_basicDataType/gplx/DecimalAdp_.java index 64dbe7c3b..8ce1bb876 100644 --- a/100_core/src_120_basicDataType/gplx/DecimalAdp_.java +++ b/100_core/src_120_basicDataType/gplx/DecimalAdp_.java @@ -46,7 +46,7 @@ import java.math.BigDecimal; import java.math.MathContext; import java.math.Roun } public static String CalcPctStr(long dividend, long divisor, String fmt) { if (divisor == 0) return "%ERR"; - return DecimalAdp_.float_(Float_.Div(dividend, divisor) * 100).XtoStr(fmt) + "%"; + return DecimalAdp_.float_(Float_.Div(dividend, divisor) * 100).Xto_str(fmt) + "%"; } public static DecimalAdp divide_safe_(long lhs, long rhs) {return rhs == 0 ? Zero : divide_(lhs, rhs);} public static DecimalAdp divide_(long lhs, long rhs) { return new DecimalAdp(new BigDecimal(lhs).divide(new BigDecimal(rhs), Gplx_rounding_context)); } public static DecimalAdp int_(int v) {return new DecimalAdp(new BigDecimal(v));} public static DecimalAdp long_(long v) {return new DecimalAdp(new BigDecimal(v));} diff --git a/100_core/src_120_basicDataType/gplx/DecimalAdp__tst.java b/100_core/src_120_basicDataType/gplx/DecimalAdp__tst.java index 6e762c442..8e0db6b64 100644 --- a/100_core/src_120_basicDataType/gplx/DecimalAdp__tst.java +++ b/100_core/src_120_basicDataType/gplx/DecimalAdp__tst.java @@ -22,28 +22,28 @@ public class DecimalAdp__tst { tst_divide_(1, 1000, "0.001"); tst_divide_(1, 3, "0.33333333333333"); tst_divide_(1, 7, "0.14285714285714"); - } void tst_divide_(int lhs, int rhs, String expd) {Tfds.Eq(expd, DecimalAdp_.divide_(lhs, rhs).XtoStr());} + } void tst_divide_(int lhs, int rhs, String expd) {Tfds.Eq(expd, DecimalAdp_.divide_(lhs, rhs).Xto_str());} @Test public void base1000_() { tst_base1000_(1000, "1"); tst_base1000_(1234, "1.234"); tst_base1000_(123, "0.123"); - } void tst_base1000_(int val, String expd) {Tfds.Eq(expd, DecimalAdp_.base1000_(val).XtoStr());} + } void tst_base1000_(int val, String expd) {Tfds.Eq(expd, DecimalAdp_.base1000_(val).Xto_str());} @Test public void parts_() { tst_parts_(1, 0, "1"); tst_parts_(1, 2, "1.2"); tst_parts_(1, 23, "1.23"); tst_parts_(123, 4567, "123.4567"); - } void tst_parts_(int num, int fracs, String expd) {Tfds.Eq(expd, DecimalAdp_.parts_(num, fracs).XtoStr());} + } void tst_parts_(int num, int fracs, String expd) {Tfds.Eq(expd, DecimalAdp_.parts_(num, fracs).Xto_str());} @Test public void parse_() { tst_parse_("1", "1"); tst_parse_("1.2", "1.2"); tst_parse_("0.1", "0.1"); - } void tst_parse_(String raw, String expd) {Tfds.Eq(expd, DecimalAdp_.parse_(raw).XtoStr());} + } void tst_parse_(String raw, String expd) {Tfds.Eq(expd, DecimalAdp_.parse_(raw).Xto_str());} @Test public void Truncate_decimal() { tst_Truncate_decimal("1", "1"); tst_Truncate_decimal("1.1", "1"); tst_Truncate_decimal("1.9", "1"); - } void tst_Truncate_decimal(String raw, String expd) {Tfds.Eq(DecimalAdp_.parse_(expd).XtoStr(), DecimalAdp_.parse_(raw).Op_truncate_decimal().XtoStr());} + } void tst_Truncate_decimal(String raw, String expd) {Tfds.Eq(DecimalAdp_.parse_(expd).Xto_str(), DecimalAdp_.parse_(raw).Op_truncate_decimal().Xto_str());} @Test public void Fraction1000() { tst_Fraction1000(1, 1000, 1); // 0.001 tst_Fraction1000(1, 3, 333); // 0.33333333 @@ -58,5 +58,5 @@ public class DecimalAdp__tst { tst_XtoStr_fmt(1, 2, "0.0", "0.5"); tst_XtoStr_fmt(1, 3, "0.0", "0.3"); tst_XtoStr_fmt(10000, 7, "0,000.000", "1,428.571"); - } void tst_XtoStr_fmt(int l, int r, String fmt, String expd) {Tfds.Eq(expd, DecimalAdp_.divide_(l, r).XtoStr(fmt));} + } void tst_XtoStr_fmt(int l, int r, String fmt, String expd) {Tfds.Eq(expd, DecimalAdp_.divide_(l, r).Xto_str(fmt));} } diff --git a/100_core/src_120_basicDataType/gplx/TimeSpanAdp.java b/100_core/src_120_basicDataType/gplx/TimeSpanAdp.java index 498b24bf4..05bfec406 100644 --- a/100_core/src_120_basicDataType/gplx/TimeSpanAdp.java +++ b/100_core/src_120_basicDataType/gplx/TimeSpanAdp.java @@ -77,7 +77,7 @@ public class TimeSpanAdp implements CompareAble, EqAble { case 1: return "s"; case 2: return "m"; case 3: return "h"; - default: return "unknown:<" + Int_.XtoStr(i) + ">"; + default: return "unknown:<" + Int_.Xto_str(i) + ">"; } } @gplx.Internal protected TimeSpanAdp(long fracs) {this.fracs = fracs;} diff --git a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java index ae622d123..4efff325f 100644 --- a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java +++ b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_.java @@ -25,7 +25,7 @@ public class TimeSpanAdp_ { return new TimeSpanAdp(fracs); } public static TimeSpanAdp decimal_(DecimalAdp seconds) { - return new TimeSpanAdp(seconds.XtoLong_Mult1000()); + return new TimeSpanAdp(seconds.Xto_long_mult_1000()); } public static TimeSpanAdp units_(int frc, int sec, int min, int hour) { int[] units = new int[] {frc, sec, min, hour}; @@ -92,7 +92,7 @@ public class TimeSpanAdp_ { sb.Add(Sprs[i]); if (val < 10) // zeroPad sb.Add("0"); - sb.Add(Int_.XtoStr(val)); + sb.Add(Int_.Xto_str(val)); } return sb.XtoStrAndClear(); } @@ -115,7 +115,7 @@ public class TimeSpanAdp_ { zeros = first && !fmt_padZeros ? 1 : padZerosAry[i]; // if first, don't zero pad (avoid "01") dlm = first ? "" : Sprs[i]; // if first, don't use dlm (avoid ":01") sb.Add(dlm); - sb.Add(Int_.XtoStr_PadBgn(val, zeros)); + sb.Add(Int_.Xto_str_pad_bgn(val, zeros)); first = false; } return sb.XtoStr(); diff --git a/100_core/src_130_crt/gplx/criterias/Criteria_bool_base.java b/100_core/src_130_crt/gplx/criterias/Criteria_bool_base.java index c77b0c346..6b44a9c19 100644 --- a/100_core/src_130_crt/gplx/criterias/Criteria_bool_base.java +++ b/100_core/src_130_crt/gplx/criterias/Criteria_bool_base.java @@ -39,7 +39,7 @@ class Criteria_or extends Criteria_bool_base { class Criteria_const implements Criteria { public byte Crt_tid() {return Criteria_.Tid_const;} public boolean Matches(Object comp) {return val;} private boolean val; - public String XtoStr() {return String_.Concat(" IS ", Bool_.XtoStr_lower(val));} + public String XtoStr() {return String_.Concat(" IS ", Bool_.Xto_str_lower(val));} public Criteria_const(boolean val) {this.val = val;} } class Criteria_not implements Criteria { diff --git a/100_core/src_140_list/gplx/ListAdp_tst.java b/100_core/src_140_list/gplx/ListAdp_tst.java index 1531c87a6..db7dad9c4 100644 --- a/100_core/src_140_list/gplx/ListAdp_tst.java +++ b/100_core/src_140_list/gplx/ListAdp_tst.java @@ -118,7 +118,7 @@ public class ListAdp_tst { list_AddMany("0", "1", "2"); for (Object valObj : list) { String val = (String)valObj; - Tfds.Eq(Int_.XtoStr(pos++), val); + Tfds.Eq(Int_.Xto_str(pos++), val); tst_Enumerator("0", "1", "2"); } } diff --git a/100_core/src_140_list/gplx/OrderedHash_base.java b/100_core/src_140_list/gplx/OrderedHash_base.java index 842d8ca1b..5c9858b74 100644 --- a/100_core/src_140_list/gplx/OrderedHash_base.java +++ b/100_core/src_140_list/gplx/OrderedHash_base.java @@ -62,9 +62,9 @@ public class OrderedHash_base extends HashAdp_base implements OrderedHash, GfoIn public String XtoStr_ui() { String_bldr sb = String_bldr_.new_(); int count = ordered.Count(); - int pad = String_.Len(Int_.XtoStr(count)); + int pad = String_.Len(Int_.Xto_str(count)); for (int i = 0; i < count; i++) { - sb .Add(Int_.XtoStr_PadBgn(i, pad)) + sb .Add(Int_.Xto_str_pad_bgn(i, pad)) .Add(":").Add(ordered.FetchAt(i).toString()) .Add(Op_sys.Cur().Nl_str()); } diff --git a/100_core/src_150_text/gplx/texts/HexDecUtl.java b/100_core/src_150_text/gplx/texts/HexDecUtl.java index 31e28ddb8..24f9eae0d 100644 --- a/100_core/src_150_text/gplx/texts/HexDecUtl.java +++ b/100_core/src_150_text/gplx/texts/HexDecUtl.java @@ -74,7 +74,7 @@ public class HexDecUtl { case 0: return '0'; case 1: return '1'; case 2: return '2'; case 3: return '3'; case 4: return '4'; case 5: return '5'; case 6: return '6'; case 7: return '7'; case 8: return '8'; case 9: return '9'; case 10: return 'A'; case 11: return 'B'; case 12: return 'C'; case 13: return 'D'; case 14: return 'E'; case 15: return 'F'; - default: throw Err_.parse_("hexstring", Int_.XtoStr(val)); + default: throw Err_.parse_("hexstring", Int_.Xto_str(val)); } } static byte Xto_byte(int v) { @@ -82,7 +82,7 @@ public class HexDecUtl { case 0: return Byte_ascii.Num_0; case 1: return Byte_ascii.Num_1; case 2: return Byte_ascii.Num_2; case 3: return Byte_ascii.Num_3; case 4: return Byte_ascii.Num_4; case 5: return Byte_ascii.Num_5; case 6: return Byte_ascii.Num_6; case 7: return Byte_ascii.Num_7; case 8: return Byte_ascii.Num_8; case 9: return Byte_ascii.Num_9; case 10: return Byte_ascii.Ltr_A; case 11: return Byte_ascii.Ltr_B; case 12: return Byte_ascii.Ltr_C; case 13: return Byte_ascii.Ltr_D; case 14: return Byte_ascii.Ltr_E; case 15: return Byte_ascii.Ltr_F; - default: throw Err_.parse_("hexstring", Int_.XtoStr(v)); + default: throw Err_.parse_("hexstring", Int_.Xto_str(v)); } } public static void Write(byte[] bry, int bgn, int end, int val) { diff --git a/100_core/src_150_text/gplx/texts/RegxAdp.java b/100_core/src_150_text/gplx/texts/RegxAdp.java index 2071b660a..76d420f83 100644 --- a/100_core/src_150_text/gplx/texts/RegxAdp.java +++ b/100_core/src_150_text/gplx/texts/RegxAdp.java @@ -52,7 +52,11 @@ public class RegxAdp { if (match.Rslt_none()) break; rv.Add(match); int find_bgn = match.Find_bgn(); - idx = find_bgn + match.Find_len(); + int find_len = match.Find_len(); + idx = find_len == 0 // find_bgn == find_end + ? find_bgn + 1 // add 1 to resume search from next char; DATE:2014-09-02 + : find_bgn + find_len // otherwise search after find_end + ; } return (RegxMatch[])rv.XtoAry(RegxMatch.class); } diff --git a/100_core/src_150_text/gplx/texts/RegxAdp__tst.java b/100_core/src_150_text/gplx/texts/RegxAdp__tst.java index 590bdbcb3..8173c34f3 100644 --- a/100_core/src_150_text/gplx/texts/RegxAdp__tst.java +++ b/100_core/src_150_text/gplx/texts/RegxAdp__tst.java @@ -26,7 +26,8 @@ public class RegxAdp__tst implements TfdsEqListItmStr { tst_Match("[^a]", "b", true); // charSet_negate } void tst_Match(String find, String input, boolean expd) {Tfds.Eq(expd, RegxAdp_.Match(input, find));} @Test public void Match_all() { - tst_Match_all("#REDIRECT [[Template:Error]]", "^\\p{Nd}*", 0); // handle match = true but len = 0 DATE:2013-04-10 + tst_Match_all("#REDIRECT [[Template:Error]]", "^\\p{Nd}*", 1); // handle match = true but len = 0; DATE:2013-04-11 + tst_Match_all("a", "$", 1); // $ should match once, not zero; DATE:2014-09-02 } void tst_Match_all(String input, String regx, int expd) {Tfds.Eq(expd, RegxAdp_.new_(regx).Match_all(input, 0).length);} @Test public void Replace() { tst_Replace("ab", "a", "b", "bb"); // basic diff --git a/100_core/src_150_text/gplx/texts/RegxMatch.java b/100_core/src_150_text/gplx/texts/RegxMatch.java index 07ec19656..011b67885 100644 --- a/100_core/src_150_text/gplx/texts/RegxMatch.java +++ b/100_core/src_150_text/gplx/texts/RegxMatch.java @@ -19,7 +19,7 @@ package gplx.texts; import gplx.*; public class RegxMatch { public RegxMatch(boolean rslt, int find_bgn, int find_end, RegxGroup[] groups) {this.rslt = rslt; this.find_bgn = find_bgn; this.find_end = find_end; this.groups = groups;} public boolean Rslt() {return rslt;} private boolean rslt; - public boolean Rslt_none() {return !rslt || (find_end - find_bgn) == 0;} // NOTE: find_end - find_bgn == 0 means find.length == 0; treating these as failed match, even thought matcher.find = true; DATE:2013-04-10 + public boolean Rslt_none() {return !rslt;} // NOTE: was "|| find_end - find_bgn == 0"; DATE:2013-04-11; DATE:2014-09-02 public int Find_bgn() {return find_bgn;} int find_bgn; public int Find_end() {return find_end;} int find_end; public int Find_len() {return find_end - find_bgn;} diff --git a/100_core/src_160_hash/gplx/security/HashAlgo_tth192.java b/100_core/src_160_hash/gplx/security/HashAlgo_tth192.java index a629391cb..448ec4460 100644 --- a/100_core/src_160_hash/gplx/security/HashAlgo_tth192.java +++ b/100_core/src_160_hash/gplx/security/HashAlgo_tth192.java @@ -159,7 +159,7 @@ class HashDlgWtrDefault implements HashDlgWtr { current += increment; int percentage = (current * 100) / total; if (percentage <= lastPercentage) return; - dialog.WriteTempText(String_.LimitToFirst(p, dialog.CharsPerLineMax()) + Int_.XtoStr(percentage) + "%"); + dialog.WriteTempText(String_.LimitToFirst(p, dialog.CharsPerLineMax()) + Int_.Xto_str(percentage) + "%"); lastPercentage = percentage; } public void End() {} diff --git a/100_core/src_200_io/gplx/ios/Io_size_.java b/100_core/src_200_io/gplx/ios/Io_size_.java index e3f5260f2..53c16cc13 100644 --- a/100_core/src_200_io/gplx/ios/Io_size_.java +++ b/100_core/src_200_io/gplx/ios/Io_size_.java @@ -26,7 +26,7 @@ public class Io_size_ { long div = (long)Math_.Pow((long)1024, (long)pow); DecimalAdp valDecimal = DecimalAdp_.divide_(val, div); String[] unit = Io_size_.Units[pow]; - return valDecimal.XtoStr("#,###.000") + " " + String_.PadBgn(unit[0], 2, " "); + return valDecimal.Xto_str("#,###.000") + " " + String_.PadBgn(unit[0], 2, " "); } public static long parse_or_(String raw, long or) { if (raw == null || raw == String_.Empty) return or; @@ -48,7 +48,7 @@ public class Io_size_ { } DecimalAdp comp = val.Op_truncate_decimal(); if (!val.Eq(comp)) return or; - return val.XtoLong(); + return val.Xto_long(); } static int parse_unitPow_(String unitStr) { int unitLen = Array_.Len(Units); @@ -104,7 +104,7 @@ class Io_size_fmtr_arg implements Bry_fmtr_arg { } long div = (long)Math_.Pow((long)1024, (long)pow); DecimalAdp val_decimal = DecimalAdp_.divide_(val, div); - bfr.Add_str(val_decimal.XtoStr("#,###.000")).Add_byte(Byte_ascii.Space).Add(gplx.ios.Io_size_.Units_bry[pow]); + bfr.Add_str(val_decimal.Xto_str("#,###.000")).Add_byte(Byte_ascii.Space).Add(gplx.ios.Io_size_.Units_bry[pow]); if (suffix != null) bfr.Add(suffix); } diff --git a/100_core/src_300_classXtn/gplx/DecimalAdpClassXtn.java b/100_core/src_300_classXtn/gplx/DecimalAdpClassXtn.java index 909846dc4..73fe24814 100644 --- a/100_core/src_300_classXtn/gplx/DecimalAdpClassXtn.java +++ b/100_core/src_300_classXtn/gplx/DecimalAdpClassXtn.java @@ -22,6 +22,6 @@ public class DecimalAdpClassXtn extends ClassXtn_base implements ClassXtn { public Object DefaultValue() {return 0;} public boolean Eq(Object lhs, Object rhs) {try {return DecimalAdp_.cast_(lhs).Eq(DecimalAdp_.cast_(rhs));} catch (Exception e) {Err_.Noop(e); return false;}} @Override public Object ParseOrNull(String raw) {return DecimalAdp_.parse_(raw);} - @Override public String XtoUi(Object obj, String fmt) {return DecimalAdp_.cast_(obj).XtoStr();} + @Override public String XtoUi(Object obj, String fmt) {return DecimalAdp_.cast_(obj).Xto_str();} public static final DecimalAdpClassXtn _ = new DecimalAdpClassXtn(); DecimalAdpClassXtn() {} // added to ClassXtnPool by default } diff --git a/100_core/src_310_gfoNde/gplx/GfoNdeFxt.java b/100_core/src_310_gfoNde/gplx/GfoNdeFxt.java index d0cdb9300..819db4e41 100644 --- a/100_core/src_310_gfoNde/gplx/GfoNdeFxt.java +++ b/100_core/src_310_gfoNde/gplx/GfoNdeFxt.java @@ -29,7 +29,7 @@ public class GfoNdeFxt { static GfoFldList GfoFldList_by_count_(int count) { GfoFldList rv = GfoFldList_.new_(); for (int i = 0; i < count; i++) - rv.Add("fld" + Int_.XtoStr(i), StringClassXtn._); + rv.Add("fld" + Int_.Xto_str(i), StringClassXtn._); return rv; } } diff --git a/100_core/src_311_gfoObj/gplx/GfoMsg_.java b/100_core/src_311_gfoObj/gplx/GfoMsg_.java index 623785ba2..7cdc3d79e 100644 --- a/100_core/src_311_gfoObj/gplx/GfoMsg_.java +++ b/100_core/src_311_gfoObj/gplx/GfoMsg_.java @@ -259,7 +259,7 @@ class XtoStrWkr_gplx implements XtoStrWkr { Class type = ClassAdp_.ClassOf_obj(o); String rv = null; if (type == String.class) rv = String_.cast_(o); - else if (Int_.TypeMatch(type)) return Int_.XtoStr(Int_.cast_(o)); + else if (Int_.TypeMatch(type)) return Int_.Xto_str(Int_.cast_(o)); else if (Bool_.TypeMatch(type)) return Yn.Xto_str(Bool_.cast_(o)); else if (type == DateAdp.class) return DateAdp_.cast_(o).XtoStr_gplx(); else rv = Object_.Xto_str_strict_or_empty(o); diff --git a/100_core/src_330_store/gplx/DataWtr_base.java b/100_core/src_330_store/gplx/DataWtr_base.java index 341f93eba..6dbf4dd85 100644 --- a/100_core/src_330_store/gplx/DataWtr_base.java +++ b/100_core/src_330_store/gplx/DataWtr_base.java @@ -44,7 +44,7 @@ public abstract class DataWtr_base implements SrlMgr { public long SrlLongOr(String key, long or) {WriteData(key, or); return or;} public String SrlStrOr(String key, String or) {WriteData(key, or); return or;} public DateAdp SrlDateOr(String key, DateAdp or) {WriteData(key, or.XtoStr_gplx()); return or;} - public DecimalAdp SrlDecimalOr(String key, DecimalAdp or) {WriteData(key, or.XtoDecimal()); return or;} + public DecimalAdp SrlDecimalOr(String key, DecimalAdp or) {WriteData(key, or.Xto_decimal()); return or;} public double SrlDoubleOr(String key, double or) {WriteData(key, or); return or;} public Object SrlObjOr(String key, Object or) {throw Err_.not_implemented_();} public void TypeKey_(String v) {} diff --git a/100_core/src_800_tst/gplx/Tfds.java b/100_core/src_800_tst/gplx/Tfds.java index 3729f81d8..9cef56024 100644 --- a/100_core/src_800_tst/gplx/Tfds.java +++ b/100_core/src_800_tst/gplx/Tfds.java @@ -24,7 +24,7 @@ public class Tfds { // URL:doc/gplx.tfds/Tfds.txt public static void Eq_byte(byte expd, byte actl) {Eq_wkr(expd, actl, true, EmptyStr);} public static void Eq_long(long expd, long actl) {Eq_wkr(expd, actl, true, EmptyStr);} public static void Eq_float(float expd, float actl) {Eq_wkr(expd, actl, true, EmptyStr);} - public static void Eq_decimal(DecimalAdp expd, DecimalAdp actl) {Eq_wkr(expd.XtoDouble(), actl.XtoDouble(), true, EmptyStr);} + public static void Eq_decimal(DecimalAdp expd, DecimalAdp actl) {Eq_wkr(expd.Xto_double(), actl.Xto_double(), true, EmptyStr);} public static void Eq_date(DateAdp expd, DateAdp actl) {Eq_wkr(expd.XtoStr_gplx(), actl.XtoStr_gplx(), true, EmptyStr);} public static void Eq_date(DateAdp expd, DateAdp actl, String fmt, Object... args){Eq_wkr(expd.XtoStr_gplx(), actl.XtoStr_gplx(), true, String_.Format(fmt, args));} public static void Eq_url(Io_url expd, Io_url actl) {Eq_wkr(expd.Raw(), actl.Raw(), true, EmptyStr);} @@ -206,14 +206,14 @@ class TfdsMsgBldr { for (int i = 0; i < list.Count(); i++) { TfdsEqAryItm itm = (TfdsEqAryItm)list.FetchAt(i); sb.Add_fmt_line("{0}: {1} {2} {3}" - , Int_.XtoStr_PadBgn(itm.Idx(), 4) + , Int_.Xto_str_pad_bgn(itm.Idx(), 4) , String_.PadBgn(itm.Lhs(), lhsLenMax, " ") , itm.Eq() ? "==" : "!=" , String_.PadBgn(itm.Rhs(), rhsLenMax, " ") ); } // String compSym = isEq ? " " : "!="; -// String result = String_.Format("{0}: {1}{2} {3} {4}", Int_.XtoStr_PadBgn(i, 4), lhsString, String_.CrLf + "\t\t", compSym, rhsString); +// String result = String_.Format("{0}: {1}{2} {3} {4}", Int_.Xto_str_pad_bgn(i, 4), lhsString, String_.CrLf + "\t\t", compSym, rhsString); // foreach (Object obj in list) { // String itmComparison = (String)obj; // sb.Add_fmt_line("{0}{1}", "\t\t", itmComparison); diff --git a/100_core/src_900_xml/gplx/HierStrBldr.java b/100_core/src_900_xml/gplx/HierStrBldr.java index cb83b09aa..f94629493 100644 --- a/100_core/src_900_xml/gplx/HierStrBldr.java +++ b/100_core/src_900_xml/gplx/HierStrBldr.java @@ -41,8 +41,8 @@ public class HierStrBldr { multipleAry[i] = (idx / multiple) * multiple; // NOTE: rounds down to multiple; EX: 11 -> 10 } for (int i = 0; i < multipleAry.length; i++) - sb.Add_fmt(dirFmt, Int_.XtoStr_fmt(multipleAry[i], numFmt)); - sb.Add_fmt(filFmt, Int_.XtoStr_fmt(idx, numFmt)); + sb.Add_fmt(dirFmt, Int_.Xto_str_fmt(multipleAry[i], numFmt)); + sb.Add_fmt(filFmt, Int_.Xto_str_fmt(idx, numFmt)); return sb.XtoStr(); } public HierStrBldr Ctor_io(Io_url root, String dirFmt, String filFmt, String numFmt, int... filCountMaxs) { diff --git a/110_gfml/src_300_gdoc/gplx/gfml/GfmlDoc_.java b/110_gfml/src_300_gdoc/gplx/gfml/GfmlDoc_.java index 200048bc8..b498bafc4 100644 --- a/110_gfml/src_300_gdoc/gplx/gfml/GfmlDoc_.java +++ b/110_gfml/src_300_gdoc/gplx/gfml/GfmlDoc_.java @@ -39,7 +39,7 @@ class GfmlUsrMsgs { Err rv = Err_.new_("gfml parse error"); for (int i = 0; i < bldr.Doc().UsrMsgs().Count(); i++) { UsrMsg um = (UsrMsg)bldr.Doc().UsrMsgs().FetchAt(i); - rv.Add("err" + Int_.XtoStr(i), um.XtoStr()); + rv.Add("err" + Int_.Xto_str(i), um.XtoStr()); } return rv; } diff --git a/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java b/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java index 5b655c993..c47032306 100644 --- a/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java +++ b/110_gfml/src_500_build/gplx/gfml/GfmlStringHighlighter.java @@ -66,12 +66,12 @@ class GfmlStringHighlighter { int gap = nxtMarkBgn - endPos; if (gap > 0) { int gapDigits = Int_.DigitCount(gap); - posBfr.Add_fmt("[{0}]", Int_.XtoStr_PadBgn(gap, gapDigits)); + posBfr.Add_fmt("[{0}]", Int_.Xto_str_pad_bgn(gap, gapDigits)); rawBfr.Add_fmt("[{0}]", String_.Repeat(".", gapDigits)); symBfr.Add_fmt(" {0} ", String_.Repeat(" ", gapDigits)); } if (curMark.Sym() != ' ') - symList.Add(String_.Format("[{0}] {1} {2}", Int_.XtoStr_PadBgn(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg())); + symList.Add(String_.Format("[{0}] {1} {2}", Int_.Xto_str_pad_bgn(curMark.Pos(), rawLenDigits), curMark.Sym(), curMark.Msg())); } if (rawBfrBgn == 0) { posBfr.Add_at(0, "<"); diff --git a/110_gfml/src_600_rdrWtr/gplx/gfml/SqlDoc.java b/110_gfml/src_600_rdrWtr/gplx/gfml/SqlDoc.java index 73c5186d9..aff77727e 100644 --- a/110_gfml/src_600_rdrWtr/gplx/gfml/SqlDoc.java +++ b/110_gfml/src_600_rdrWtr/gplx/gfml/SqlDoc.java @@ -82,7 +82,7 @@ class SqlCmd_quote_end implements GfmlBldrCmd { GfmlTkn pnd = (GfmlTkn)list.FetchAt(i); sb.Add(pnd.Val()); } - //Int_.XtoStr(bldr.CurNdeFrame().Nde().SubTkns().length) + //Int_.Xto_str(bldr.CurNdeFrame().Nde().SubTkns().length) GfmlAtr atr = GfmlAtr.new_(GfmlTkn_.raw_("word"), GfmlTkn_.raw_(sb.XtoStr()), GfmlType_.String); bldr.CurNdeFrame().CurNde().SubObjs_Add(atr); bldr.Frames_end(); diff --git a/110_gfml/tst/gplx/gfml/yfxts_GfmlTypeCompiler_fxt.java b/110_gfml/tst/gplx/gfml/yfxts_GfmlTypeCompiler_fxt.java index 6eacdc222..4fa12b2fa 100644 --- a/110_gfml/tst/gplx/gfml/yfxts_GfmlTypeCompiler_fxt.java +++ b/110_gfml/tst/gplx/gfml/yfxts_GfmlTypeCompiler_fxt.java @@ -57,7 +57,7 @@ class GfmlTypeCompiler_fxt { for (int i = 0; i < max; i++) { GfmlFld_mok expdFld = (GfmlFld_mok)tstr.List_FetchAtOrNull(expd.Subs(), i); GfmlFld_mok actlFld = (GfmlFld_mok)tstr.List_FetchAtOrNull(actl.Subs(), i); - tstr.SubName_push(Int_.XtoStr(i) + " fld"); + tstr.SubName_push(Int_.Xto_str(i) + " fld"); tst(tstr, expdFld, actlFld); tstr.SubName_pop(); } diff --git a/110_gfml/tst/gplx/gfml/ymoks_GfmlAtr_GfmlNde_mok.java b/110_gfml/tst/gplx/gfml/ymoks_GfmlAtr_GfmlNde_mok.java index 28479bd1b..b564487a2 100644 --- a/110_gfml/tst/gplx/gfml/ymoks_GfmlAtr_GfmlNde_mok.java +++ b/110_gfml/tst/gplx/gfml/ymoks_GfmlAtr_GfmlNde_mok.java @@ -52,7 +52,7 @@ class GfmlNde_mok implements GfmlItm_mok { public ListAdp Subs() {return subs;} public String XtoStrStub() { String_bldr sb = String_bldr_.new_(); - sb.Add_kv("key=", key).Add_kv("hnd=", hnd).Add_kv("typ=", typ).Add_kv("subs=", Int_.XtoStr(subs.Count())); + sb.Add_kv("key=", key).Add_kv("hnd=", hnd).Add_kv("typ=", typ).Add_kv("subs=", Int_.Xto_str(subs.Count())); return sb.XtoStr(); } public GfmlNde_mok Subs_(GfmlItm_mok... ary) { @@ -141,7 +141,7 @@ class GfmlTypeResolver_fxt { for (int i = 0; i < max; i++) { GfmlItm_mok expdSub = (GfmlItm_mok)tstr.List_FetchAtOrNull(expd.Subs(), i); GfmlItm_mok actlSub = (GfmlItm_mok)tstr.List_FetchAtOrNull(actl.Subs(), i); - tstr.SubName_push(Int_.XtoStr(i)); + tstr.SubName_push(Int_.Xto_str(i)); if (expdSub == null) { GfmlNde_mok mm = GfmlNde_mok.as_(actlSub); String actlSubStr = mm == null ? "sub:null" : mm.XtoStrStub(); diff --git a/110_gfml/tst/gplx/gfml/ymoks_GfmlTkn_mok.java b/110_gfml/tst/gplx/gfml/ymoks_GfmlTkn_mok.java index 5f54d27e1..98e6c671b 100644 --- a/110_gfml/tst/gplx/gfml/ymoks_GfmlTkn_mok.java +++ b/110_gfml/tst/gplx/gfml/ymoks_GfmlTkn_mok.java @@ -68,7 +68,7 @@ class GfmlTkn_mok { for (int i = 0; i < max; i++) { GfmlTkn_mok expdSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(expd.Subs(), i); GfmlTkn_mok actlSub = (GfmlTkn_mok)tstr.List_FetchAtOrNull(actl.Subs(), i); - tstr.SubName_push(Int_.XtoStr(i)); + tstr.SubName_push(Int_.Xto_str(i)); tst(tstr, expdSub, actlSub); tstr.SubName_pop(); } diff --git a/110_gfml/tst/gplx/gfml/z901_perf_tst.java b/110_gfml/tst/gplx/gfml/z901_perf_tst.java index aa896fae2..c40c6edcf 100644 --- a/110_gfml/tst/gplx/gfml/z901_perf_tst.java +++ b/110_gfml/tst/gplx/gfml/z901_perf_tst.java @@ -108,7 +108,7 @@ class TimerWatch { this.End(); Tfds.Write(XtoStr_ms() + " " + text); } - public String XtoStr_ms() {return Long_.XtoStr(duration);} + public String XtoStr_ms() {return Long_.Xto_str(duration);} public static TimerWatch new_() { TimerWatch rv = new TimerWatch(); rv.Bgn(); diff --git a/140_dbs/src_100_core/gplx/dbs/Db_conn_info.java b/140_dbs/src_100_core/gplx/dbs/Db_conn_info.java new file mode 100644 index 000000000..c7d90ff1b --- /dev/null +++ b/140_dbs/src_100_core/gplx/dbs/Db_conn_info.java @@ -0,0 +1,97 @@ +/* +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 interface Db_conn_info { + String Key(); + String Server(); + String Database(); + String Str_raw(); + String Str_api(); + Db_conn_info Make_new(String raw, GfoMsg m); +} +class Db_conn_info__null extends Db_conn_info__base { + @Override public String Key() {return Key_const;} public static final String Key_const = "null_db"; + @Override public Db_conn_info Make_new(String raw, GfoMsg m) {return this;} + public static final Db_conn_info__null _ = new Db_conn_info__null(); Db_conn_info__null() {this.Ctor_of_db_connect("", "", "gplx_key=null_db", "");} +} +class Db_conn_info__mysql extends Db_conn_info__base { + @Override public String Key() {return Key_const;} public static final String Key_const = "mysql"; + public String Uid() {return uid;} private String uid; + public String Pwd() {return pwd;} private String pwd; + public static Db_conn_info new_(String server, String database, String uid, String pwd) { + return Db_conn_info_.parse_(BldRaw(GfoMsg_.new_cast_("Db_conn_info") + .Add("gplx_key", Key_const) + .Add("server", server) + .Add("database", database) + .Add("uid", uid) + .Add("pwd", pwd) + .Add("charset", "utf8") + )); + } + @Override public Db_conn_info Make_new(String raw, GfoMsg m) { + Db_conn_info__mysql rv = new Db_conn_info__mysql(); + rv.Ctor_of_db_connect(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_conn_info__mysql _ = new Db_conn_info__mysql(); Db_conn_info__mysql() {} +} +class Db_conn_info__postgres extends Db_conn_info__base { + @Override public String Key() {return Key_const;} public static final String Key_const = "postgresql"; + public String Uid() {return uid;} private String uid; + public String Pwd() {return pwd;} private String pwd; + public static Db_conn_info new_(String server, String database, String uid, String pwd) { + return Db_conn_info_.parse_(BldRaw(GfoMsg_.new_cast_("Db_conn_info") + .Add("gplx_key", Key_const) + .Add("server", server) + .Add("database", database) + .Add("port", 5432) + .Add("user id", uid) + .Add("password", pwd) + .Add("encoding", "unicode") // needed for 1.1 provider; otherwise, ascii + )); + } + @Override public Db_conn_info Make_new(String raw, GfoMsg m) { + Db_conn_info__postgres rv = new Db_conn_info__postgres(); + rv.Ctor_of_db_connect(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_conn_info__postgres _ = new Db_conn_info__postgres(); Db_conn_info__postgres() {} +} +class Db_conn_info__tdb extends Db_conn_info__base { + public Io_url Url() {return url;} Io_url url; + @Override public String Key() {return Key_const;} public static final String Key_const = "tdb"; + public static Db_conn_info new_(Io_url url) { + return Db_conn_info_.parse_(BldRaw(GfoMsg_.new_cast_("Db_conn_info") + .Add("gplx_key", Key_const) + .Add("url", url.Raw()) + )); + } Db_conn_info__tdb() {} + @Override public Db_conn_info Make_new(String raw, GfoMsg m) { + Db_conn_info__tdb rv = new Db_conn_info__tdb(); + String urlStr = m.ReadStr("url"); + Io_url url = Io_url_.new_any_(urlStr); + rv.Ctor_of_db_connect(urlStr, url.NameOnly(), raw, BldApi(m)); + rv.url = url; + return rv; + } + public static final Db_conn_info__tdb _ = new Db_conn_info__tdb(); +} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_conn_info_.java b/140_dbs/src_100_core/gplx/dbs/Db_conn_info_.java new file mode 100644 index 000000000..8de486efc --- /dev/null +++ b/140_dbs/src_100_core/gplx/dbs/Db_conn_info_.java @@ -0,0 +1,52 @@ +/* +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_conn_info_ { + public static final Db_conn_info Null = Db_conn_info__null._; + public static final Db_conn_info Test = Db_conn_info__mysql.new_("127.0.0.1", "unit_tests", "root", "mysql7760"); + public static Db_conn_info parse_(String raw) {return Db_conn_info_pool._.Parse(raw);} + public static Db_conn_info sqlite_(Io_url url) {return Db_conn_info__sqlite.load_(url);} + public static Db_conn_info tdb_(Io_url url) {return Db_conn_info__tdb.new_(url);} + public static final String Key_tdb = TdbEngine.KeyDef; +} +class Db_conn_info_pool { + private OrderedHash regy = OrderedHash_.new_(); + public Db_conn_info_pool() { + this.Add(Db_conn_info__null._).Add(Db_conn_info__tdb._).Add(Db_conn_info__mysql._).Add(Db_conn_info__postgres._).Add(Db_conn_info__sqlite._); + } + public Db_conn_info_pool Add(Db_conn_info itm) {regy.AddReplace(itm.Key(), itm); return this;} + public Db_conn_info Parse(String raw) {// assume each pair has format of: name=val; + try { + GfoMsg m = GfoMsg_.new_parse_("db_conn_info"); + String[] terms = String_.Split(raw, ";"); + String conn_info_key = ""; + for (String term : terms) { + if (String_.Len(term) == 0) continue; + String[] kv = String_.Split(term, "="); + if (String_.Eq(kv[0], "gplx_key")) + conn_info_key = kv[1]; // NOTE: do not add to GfoMsg; will not be part of ApiStr + else + m.Add(kv[0], kv[1]); + } + Db_conn_info prototype = (Db_conn_info)regy.Fetch(conn_info_key); + return prototype.Make_new(raw, m); + } + catch(Exception exc) {throw Err_.parse_type_exc_(exc, Db_conn_info.class, raw);} + } + public static final Db_conn_info_pool _ = new Db_conn_info_pool(); +} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_connect_base.java b/140_dbs/src_100_core/gplx/dbs/Db_conn_info__base.java similarity index 68% rename from 140_dbs/src_100_core/gplx/dbs/Db_connect_base.java rename to 140_dbs/src_100_core/gplx/dbs/Db_conn_info__base.java index 05d4aee58..1e518be4e 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_connect_base.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_conn_info__base.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; import gplx.*; -public abstract class Db_connect_base implements Db_connect { - public abstract String Key_of_db_connect(); - public String Database() {return database;} public Db_connect_base Database_(String v) {database = v; return this;} private String database = ""; - public String Server() {return server;} public Db_connect_base Server_(String v) {server = v; return this;} private String server = ""; - public String Raw_of_db_connect() {return raw;} public Db_connect XtoStr_raw_(String v) {raw = v; return this;} private String raw = ""; - public String Api_of_db_connect() {return api;} public Db_connect XtoStr_std_(String v) {api = v; return this;} private String api = ""; - public abstract Db_connect Clone_of_db_connect(String raw, GfoMsg m); +public abstract class Db_conn_info__base implements Db_conn_info { + public abstract String Key(); + public String Database() {return database;} public Db_conn_info__base Database_(String v) {database = v; return this;} private String database = ""; + public String Server() {return server;} public Db_conn_info__base Server_(String v) {server = v; return this;} private String server = ""; + public String Str_raw() {return raw;} public Db_conn_info XtoStr_raw_(String v) {raw = v; return this;} private String raw = ""; + public String Str_api() {return api;} public Db_conn_info XtoStr_std_(String v) {api = v; return this;} private String api = ""; + public abstract Db_conn_info Make_new(String raw, GfoMsg m); protected void Ctor_of_db_connect(String server, String database, String raw, String api) {this.server = server; this.database = database; this.raw = raw; this.api = api;} + protected static String BldApi(GfoMsg m, KeyVal... xtnAry) { String_bldr sb = String_bldr_.new_(); HashAdp hash = HashAdp_.new_(); diff --git a/140_dbs/src_100_core/gplx/dbs/Db_connect_sqlite.java b/140_dbs/src_100_core/gplx/dbs/Db_conn_info__sqlite.java similarity index 50% rename from 140_dbs/src_100_core/gplx/dbs/Db_connect_sqlite.java rename to 140_dbs/src_100_core/gplx/dbs/Db_conn_info__sqlite.java index b6e5f9a2c..a6684338b 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_connect_sqlite.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_conn_info__sqlite.java @@ -16,30 +16,30 @@ 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_connect_sqlite extends Db_connect_base { - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "sqlite"; - public Io_url Url() {return url;} Io_url url; - public static Db_connect load_(Io_url url) { - return Db_connect_.parse_(BldRaw(GfoMsg_.new_cast_("Db_connect") - .Add("gplx_key", KeyDef) +public class Db_conn_info__sqlite extends Db_conn_info__base { + @Override public String Key() {return Key_const;} public static final String Key_const = "sqlite"; + public Io_url Url() {return url;} private Io_url url; + public static Db_conn_info load_(Io_url url) { + return Db_conn_info_.parse_(BldRaw(GfoMsg_.new_cast_("Db_conn_info") + .Add("gplx_key", Key_const) .Add("data source", url.Xto_api()) .Add("version", 3) )); } - public static Db_connect make_(Io_url url) { + public static Db_conn_info make_(Io_url url) { Io_mgr._.CreateDirIfAbsent(url.OwnerDir()); - return Db_connect_.parse_(BldRaw(GfoMsg_.new_cast_("Db_connect") - .Add("gplx_key", KeyDef) + return Db_conn_info_.parse_(BldRaw(GfoMsg_.new_cast_("Db_conn_info") + .Add("gplx_key", Key_const) .Add("data source", url.Xto_api()) .Add("version", 3) )); } - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) { - Db_connect_sqlite rv = new Db_connect_sqlite(); - String dataSourceUrl = m.ReadStr("data source"); - rv.url = Io_url_.new_any_(dataSourceUrl); - rv.Ctor_of_db_connect("", dataSourceUrl, raw, BldApi(m, KeyVal_.new_("version", "3"))); + @Override public Db_conn_info Make_new(String raw, GfoMsg m) { + Db_conn_info__sqlite rv = new Db_conn_info__sqlite(); + String url = m.ReadStr("data source"); + rv.url = Io_url_.new_any_(url); + rv.Ctor_of_db_connect("", url, raw, BldApi(m, KeyVal_.new_("version", "3"))); return rv; } - public static final Db_connect_sqlite _ = new Db_connect_sqlite(); Db_connect_sqlite() {} + public static final Db_conn_info__sqlite _ = new Db_conn_info__sqlite(); Db_conn_info__sqlite() {} } \ No newline at end of file diff --git a/140_dbs/src_100_core/gplx/dbs/Db_connect_tst.java b/140_dbs/src_100_core/gplx/dbs/Db_conn_info_tst.java similarity index 71% rename from 140_dbs/src_100_core/gplx/dbs/Db_connect_tst.java rename to 140_dbs/src_100_core/gplx/dbs/Db_conn_info_tst.java index c0dfa6036..965e32910 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_connect_tst.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_conn_info_tst.java @@ -17,11 +17,11 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; import org.junit.*; -public class Db_connect_tst { +public class Db_conn_info_tst { @Before public void setup() { - regy = new Db_connect_pool(); - regy.Add(Db_connect_mock._); - } Db_connect_pool regy; + regy = new Db_conn_info_pool(); + regy.Add(Db_conn_info_mock._); + } Db_conn_info_pool regy; @Test public void Parse() { tst_Parse("gplx_key=mock;id=1;", kv_("id", "1")); // one; gplx_key removed tst_Parse("gplx_key=mock;id=1;name=me;", kv_("id", "1"), kv_("name", "me")); // many @@ -29,19 +29,19 @@ public class Db_connect_tst { } KeyVal kv_(String key, Object val) {return KeyVal_.new_(key, val);} void tst_Parse(String raw, KeyVal... expd) { - Db_connect_mock mock = (Db_connect_mock)regy.Parse(raw); + Db_conn_info_mock mock = (Db_conn_info_mock)regy.Parse(raw); Tfds.Eq_ary_str(expd, mock.Kvs()); } } -class Db_connect_mock extends Db_connect_base { +class Db_conn_info_mock extends Db_conn_info__base { public KeyVal[] Kvs() {return kvs;} KeyVal[] kvs; - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "mock"; - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) { - Db_connect_mock rv = new Db_connect_mock(); + @Override public String Key() {return Key_const;} public static final String Key_const = "mock"; + @Override public Db_conn_info Make_new(String raw, GfoMsg m) { + Db_conn_info_mock rv = new Db_conn_info_mock(); rv.kvs = new KeyVal[m.Args_count()]; for (int i = 0; i < m.Args_count(); i++) rv.kvs[i] = m.Args_getAt(i); return rv; } - public static final Db_connect_mock _ = new Db_connect_mock(); Db_connect_mock() {} + public static final Db_conn_info_mock _ = new Db_conn_info_mock(); Db_conn_info_mock() {} } diff --git a/140_dbs/src_100_core/gplx/dbs/Db_connect.java b/140_dbs/src_100_core/gplx/dbs/Db_connect.java deleted file mode 100644 index 1059a005d..000000000 --- a/140_dbs/src_100_core/gplx/dbs/Db_connect.java +++ /dev/null @@ -1,97 +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 interface Db_connect { - String Key_of_db_connect(); - String Server(); - String Database(); - String Raw_of_db_connect(); - String Api_of_db_connect(); - Db_connect Clone_of_db_connect(String raw, GfoMsg m); -} -class Db_connect_null extends Db_connect_base { - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "null_db"; - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) {return this;} - public static final Db_connect_null _ = new Db_connect_null(); Db_connect_null() {this.Ctor_of_db_connect("", "", "gplx_key=null_db", "");} -} -class Db_connect_mysql extends Db_connect_base { - public String Uid() {return uid;} private String uid; - public String Pwd() {return pwd;} private String pwd; - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "mysql"; - public static Db_connect new_(String server, String database, String uid, String pwd) { - return Db_connect_.parse_(BldRaw(GfoMsg_.new_cast_("Db_connect") - .Add("gplx_key", KeyDef) - .Add("server", server) - .Add("database", database) - .Add("uid", uid) - .Add("pwd", pwd) - .Add("charset", "utf8") - )); - } - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) { - Db_connect_mysql rv = new Db_connect_mysql(); - rv.Ctor_of_db_connect(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_connect_mysql _ = new Db_connect_mysql(); Db_connect_mysql() {} -} -class Db_connect_postgres extends Db_connect_base { - public String Uid() {return uid;} private String uid; - public String Pwd() {return pwd;} private String pwd; - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "postgresql"; - public static Db_connect new_(String server, String database, String uid, String pwd) { - return Db_connect_.parse_(BldRaw(GfoMsg_.new_cast_("Db_connect") - .Add("gplx_key", KeyDef) - .Add("server", server) - .Add("database", database) - .Add("port", 5432) - .Add("user id", uid) - .Add("password", pwd) - .Add("encoding", "unicode") // needed for 1.1 provider; otherwise, ascii - )); - } - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) { - Db_connect_postgres rv = new Db_connect_postgres(); - rv.Ctor_of_db_connect(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_connect_postgres _ = new Db_connect_postgres(); Db_connect_postgres() {} -} -class Db_connect_tdb extends Db_connect_base { - public Io_url Url() {return url;} Io_url url; - @Override public String Key_of_db_connect() {return KeyDef;} public static final String KeyDef = "tdb"; - public static Db_connect new_(Io_url url) { - return Db_connect_.parse_(BldRaw(GfoMsg_.new_cast_("Db_connect") - .Add("gplx_key", KeyDef) - .Add("url", url.Raw()) - )); - } Db_connect_tdb() {} - @Override public Db_connect Clone_of_db_connect(String raw, GfoMsg m) { - Db_connect_tdb rv = new Db_connect_tdb(); - String urlStr = m.ReadStr("url"); - Io_url url = Io_url_.new_any_(urlStr); - rv.Ctor_of_db_connect(urlStr, url.NameOnly(), raw, BldApi(m)); - rv.url = url; - return rv; - } - public static final Db_connect_tdb _ = new Db_connect_tdb(); -} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_connect_.java b/140_dbs/src_100_core/gplx/dbs/Db_connect_.java deleted file mode 100644 index 98370bdf9..000000000 --- a/140_dbs/src_100_core/gplx/dbs/Db_connect_.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.dbs; import gplx.*; -public class Db_connect_ { - public static final Db_connect Null = Db_connect_null._; - public static final Db_connect Test = Db_connect_mysql.new_("127.0.0.1", "unit_tests", "root", "mysql7760"); - public static Db_connect parse_(String raw) {return Db_connect_pool._.Parse(raw);} - public static Db_connect tdb_(Io_url url) {return Db_connect_tdb.new_(url);} - public static Db_connect sqlite_(Io_url url) {return Db_connect_sqlite.load_(url);} - public static final String TdbKey = TdbEngine.KeyDef; -} -class Db_connect_pool { - public Db_connect_pool() { - this.Add(Db_connect_null._).Add(Db_connect_tdb._).Add(Db_connect_mysql._).Add(Db_connect_postgres._).Add(Db_connect_sqlite._); - } - public Db_connect_pool Add(Db_connect prototype) {regy.AddReplace(prototype.Key_of_db_connect(), prototype); return this;} - public Db_connect Parse(String raw) {// assume each pair has format of: name=val; - try { - GfoMsg m = GfoMsg_.new_parse_("dbConnectionString"); - String[] terms = String_.Split(raw, ";"); - String gplxKey = ""; - for (String term : terms) { - if (String_.Len(term) == 0) continue; - String[] kv = String_.Split(term, "="); - if (String_.Eq(kv[0], "gplx_key")) - gplxKey = kv[1]; // NOTE: do not add to GfoMsg; will not be part of ApiStr - else - m.Add(kv[0], kv[1]); - } - Db_connect prototype = (Db_connect)regy.Fetch(gplxKey); - return prototype.Clone_of_db_connect(raw, m); - } - catch(Exception exc) {throw Err_.parse_type_exc_(exc, Db_connect.class, raw);} - } - OrderedHash regy = OrderedHash_.new_(); - public static final Db_connect_pool _ = new Db_connect_pool(); -} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_provider.java b/140_dbs/src_100_core/gplx/dbs/Db_provider.java index bc31e8cfc..98ec57992 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_provider.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_provider.java @@ -16,21 +16,22 @@ 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_provider implements RlsAble { +public class Db_provider { @gplx.Internal protected Db_provider(Db_engine engine) { this.engine = engine; - txn_mgr = new Db_txn_mgr_base(engine); + this.txn_mgr = new Db_txn_mgr_base(engine); } - @gplx.Internal protected Db_engine Engine() {return engine;} private Db_engine engine; - public Db_connect ConnectInfo() {return engine.ConnectInfo();} - public Db_stmt Prepare(Db_qry qry) {return engine.New_db_stmt(this, qry);} - public int Exec_qry(Db_qry qry) {txn_mgr.Txn_count_(txn_mgr.Txn_count() + 1); return Int_.cast_(engine.Execute(qry));} - public DataRdr Exec_qry_as_rdr(Db_qry qry) {return DataRdr_.cast_(engine.Execute(qry));} - public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));} - public DataRdr Exec_sql_as_rdr(String sql) {return this.Exec_qry_as_rdr(Db_qry_sql.rdr_(sql));} - public Db_txn_mgr Txn_mgr() {return txn_mgr;} Db_txn_mgr txn_mgr; - public void Rls() { - engine.Rls(); - Db_provider_pool._.Del(this.ConnectInfo()); // remove from pool, else rls'd instance will be cached and fail upon next use + public Db_conn_info Conn_info() {return engine.Conn_info();} + public Db_engine Engine() {return engine;} private final Db_engine engine; + public Db_txn_mgr Txn_mgr() {return txn_mgr;} private final Db_txn_mgr txn_mgr; + + public Db_stmt Prepare(Db_qry qry) {return engine.New_db_stmt(this, qry);} + public int Exec_qry(Db_qry qry) {txn_mgr.Txn_count_(txn_mgr.Txn_count() + 1); return Int_.cast_(engine.Execute(qry));} + public DataRdr Exec_qry_as_rdr(Db_qry qry) {return DataRdr_.cast_(engine.Execute(qry));} + public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));} + public DataRdr Exec_sql_as_rdr(String sql) {return this.Exec_qry_as_rdr(Db_qry_sql.rdr_(sql));} + public void Conn_term() { + engine.Conn_term(); + Db_provider_pool._.Del(this.Conn_info()); // remove from pool, else rls'd instance will be cached and fail upon next use } } diff --git a/140_dbs/src_100_core/gplx/dbs/Db_provider_.java b/140_dbs/src_100_core/gplx/dbs/Db_provider_.java index 04c1f879d..610c8e285 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_provider_.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_provider_.java @@ -16,15 +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; import gplx.*; -public class Db_provider_ { - public static final Db_provider Null = new_(Db_connect_.Null); - public static Db_provider new_(Db_connect dbInfo) { - Db_engine prototype = Db_engineRegy._.Get(dbInfo.Key_of_db_connect()); - Db_engine engine = prototype.MakeEngine(dbInfo); - engine.Connect(); - Db_provider rv = new Db_provider(engine); -// Env_.Dispose_reg(rv); // NOTE: need to dispose or else mysql error: Unable to release semaphore - return rv; +public class Db_provider_ { + public static final Db_provider Null = new_and_open_(Db_conn_info_.Null); + public static Db_provider new_and_open_(Db_conn_info conn_info) { + Db_engine prototype = Db_engine_regy._.Get(conn_info.Key()); + Db_engine engine = prototype.Make_new(conn_info); + engine.Conn_open(); // auto-open + return new Db_provider(engine); } public static int Select_fld0_as_int_or(Db_provider p, String sql, int or) { DataRdr rdr = DataRdr_.Null; @@ -43,10 +41,3 @@ public class Db_provider_ { } } } -class Db_engineRegy { - public Db_engine Get(String key) {return (Db_engine)hash.FetchOrFail(key);} - HashAdp hash = HashAdp_.new_(); - Db_engineRegy Add(Db_engine engine) {hash.Add(engine.Key(), engine); return this;} - Db_engineRegy() {this.Add(Db_engine_null._).Add(TdbEngine._).Add(Mysql_engine._).Add(Postgres_engine._).Add(Sqlite_engine._);} - public static final Db_engineRegy _ = new Db_engineRegy(); -} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_provider_pool.java b/140_dbs/src_100_core/gplx/dbs/Db_provider_pool.java index 058986a1a..bdc2ed0e8 100644 --- a/140_dbs/src_100_core/gplx/dbs/Db_provider_pool.java +++ b/140_dbs/src_100_core/gplx/dbs/Db_provider_pool.java @@ -16,25 +16,25 @@ 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_provider_pool { - public void Del(Db_connect connectInfo) {hash.Del(connectInfo.Raw_of_db_connect());} - public Db_provider FetchOrNew(Db_connect connectInfo) {return FetchOrNew(connectInfo.Raw_of_db_connect());} - public Db_provider FetchOrNew(String raw) { +public class Db_provider_pool { + private final OrderedHash hash = OrderedHash_.new_(); + public Db_provider Get_or_new(Db_conn_info connectInfo) {return Get_or_new(connectInfo.Str_raw());} + public Db_provider Get_or_new(String raw) { Db_provider rv = (Db_provider)hash.Fetch(raw); if (rv == null) { - rv = Db_provider_.new_(Db_connect_.parse_(raw)); + rv = Db_provider_.new_and_open_(Db_conn_info_.parse_(raw)); hash.Add(raw, rv); } return rv; } + public void Del(Db_conn_info connectInfo) {hash.Del(connectInfo.Str_raw());} public void Clear() { - for (int i = 0; i < hash.Count(); i++) { - Db_provider provider = (Db_provider)hash.FetchAt(i); - provider.Rls(); + int len = hash.Count(); + for (int i = 0; i < len; i++) { + Db_provider provider = (Db_provider)hash.FetchAt(0); + provider.Conn_term(); } hash.Clear(); - } - OrderedHash hash = OrderedHash_.new_(); - @gplx.Internal protected static Db_provider_pool new_() {return new Db_provider_pool();} Db_provider_pool() {} - public static final Db_provider_pool _ = new Db_provider_pool(); + } + public static final Db_provider_pool _ = new Db_provider_pool(); Db_provider_pool() {} } diff --git a/140_dbs/src_100_core/gplx/dbs/Db_rdr.java b/140_dbs/src_100_core/gplx/dbs/Db_rdr.java new file mode 100644 index 000000000..86591502e --- /dev/null +++ b/140_dbs/src_100_core/gplx/dbs/Db_rdr.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; import gplx.*; +public interface Db_rdr { + boolean Move_next(); + byte[] Read_bry(int i); + byte[] Read_bry_by_str(int i); + String Read_str(int i); + byte Read_byte(int i); + int Read_int(int i); + long Read_long(int i); + float Read_float(int i); + double Read_double(int i); + void Close(); +} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_rdr_.java b/140_dbs/src_100_core/gplx/dbs/Db_rdr_.java new file mode 100644 index 000000000..c2fb81b5a --- /dev/null +++ b/140_dbs/src_100_core/gplx/dbs/Db_rdr_.java @@ -0,0 +1,33 @@ +/* +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_rdr_ { + public static final Db_rdr Null = new Db_rdr__null(); +} +class Db_rdr__null implements Db_rdr { + public boolean Move_next() {return false;} + public byte[] Read_bry(int i) {return Bry_.Empty;} + public byte[] Read_bry_by_str(int i) {return Bry_.Empty;} + public byte Read_byte(int i) {return Byte_.MaxValue_127;} + public String Read_str(int i) {return String_.Empty;} + public int Read_int(int i) {return Int_.MinValue;} + public long Read_long(int i) {return Long_.MinValue;} + public float Read_float(int i) {return Float_.NaN;} + public double Read_double(int i) {return Double_.NaN;} + public void Close() {} +} diff --git a/140_dbs/src_100_core/gplx/dbs/Db_rdr__basic.java b/140_dbs/src_100_core/gplx/dbs/Db_rdr__basic.java new file mode 100644 index 000000000..358bbcfea --- /dev/null +++ b/140_dbs/src_100_core/gplx/dbs/Db_rdr__basic.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; import gplx.*; +import java.sql.ResultSet; +class Db_rdr__basic implements Db_rdr { + private final ResultSet rdr; + public Db_rdr__basic(ResultSet rdr, String sql) {this.rdr = rdr; this.sql = sql;} + public String Sql() {return sql;} private final String sql; + public boolean Move_next() { + 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);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Bry_.Cls_name, Err_.Message_lang(e));}} + public byte[] Read_bry_by_str(int i) {try {return Bry_.new_utf8_(rdr.getString(i));} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_name, Err_.Message_lang(e));}} + public String Read_str(int i) {try {return rdr.getString(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, String_.Cls_name, Err_.Message_lang(e));}} + public int Read_int(int i) {try {return rdr.getInt(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Int_.Cls_name, Err_.Message_lang(e));}} + public long Read_long(int i) {try {return rdr.getLong(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Long_.Cls_name, Err_.Message_lang(e));}} + public float Read_float(int i) {try {return rdr.getFloat(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Float_.Cls_name, Err_.Message_lang(e));}} + public double Read_double(int i) {try {return rdr.getDouble(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Double_.Cls_name, Err_.Message_lang(e));}} + public byte Read_byte(int i) {try {return rdr.getByte(i);} catch (Exception e) {throw Err_.new_("read failed: i={0} type={1} err={2}", i, Byte_.Cls_name, Err_.Message_lang(e));}} + public void Close() {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_qry.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry.java index edb7798c3..ef526fa6c 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public interface Db_qry { + int Tid(); String KeyOfDb_qry(); boolean ExecRdrAble(); String XtoSql(); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java index 318fe00a0..55cbc0f9e 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_.java @@ -47,6 +47,7 @@ public class Db_qry_ { } public static final Object WhereAll = null; public static Db_qry as_(Object obj) {return obj instanceof Db_qry ? (Db_qry)obj : null;} + public static final int Tid_basic = 0, Tid_select_in_tbl = 1; } interface Db_qryWkr { Object Exec(Db_engine engine, Db_qry cmd); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.java new file mode 100644 index 000000000..f940a19a6 --- /dev/null +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry__select_in_tbl.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.dbs; import gplx.*; +public class Db_qry__select_in_tbl implements Db_qry { + public Db_qry__select_in_tbl(String tbl_name, String[] select_flds, String[] where_flds, String group_by_sql, String having_sql, String order_by_sql, String limit_sql) { + this.tbl_name = tbl_name; this.select_flds = select_flds; this.where_flds = where_flds; this.group_by_sql = group_by_sql; this.having_sql = having_sql; this.order_by_sql = order_by_sql; this.limit_sql = limit_sql; + } + public int Tid() {return Db_qry_.Tid_select_in_tbl;} + public String Tbl_name() {return tbl_name;} private final String tbl_name; + public String[] Select_flds() {return select_flds;} private final String[] select_flds; + public String[] Where_flds() {return where_flds;} private final String[] where_flds; + public void Where_sql(String_bldr sb) { + if (where_flds == null) return; + int where_flds_len = where_flds.length; + if (where_flds_len == 0) return; + for (int i = 0; i < where_flds_len; ++i) { + if (i != 0) sb.Add("AND "); + sb.Add(where_flds[i]).Add(" = ? "); + } + } + public String Group_by_sql() {return group_by_sql;} private final String group_by_sql; + public String Having_sql() {return having_sql;} private final String having_sql; + public String Order_by_sql() {return order_by_sql;} private final String order_by_sql; + public String Limit_sql() {return limit_sql;} private final String limit_sql; + public static Db_qry__select_in_tbl new_(String tbl_name, String[] where_flds, String[] select_flds) {return new Db_qry__select_in_tbl(tbl_name, select_flds, where_flds, null, null, null, null);} + public String KeyOfDb_qry() {return "select_in_tbl";} + public boolean ExecRdrAble() {return true;} + 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]); + } + sb.Add(" FROM ").Add(tbl_name).Add(" "); + if (where_flds != null) {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_sql); + if (limit_sql != null) sb.Add(limit_sql); + return sb.XtoStr(); + } +} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java index 09ac1fc94..6bdefeb9e 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_delete.java @@ -18,11 +18,11 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; import gplx.criterias.*; public class Db_qry_delete implements Db_qry { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "DELETE"; public boolean ExecRdrAble() {return false;} public String XtoSql() {return Sql_cmd_wtr_.Ansi.XtoSqlQry(this, false);} public int Exec_qry(Db_provider provider) {return provider.Exec_qry(this);} - public Db_qry_delete Where_add_(String key, int val) { Criteria crt = Db_crt_.eq_(key, val); where = Sql_where.merge_or_new_(where, crt); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java index 202ba516d..307faf9f8 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_flush.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public class Db_qry_flush implements Db_qry { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "FLUSH"; public boolean ExecRdrAble() {return false;} public int Exec_qry(Db_provider provider) {return provider.Exec_qry(this);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java index f18ffa3f8..2218460c3 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_insert.java @@ -17,12 +17,13 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public class Db_qry_insert implements Db_qry_arg_owner { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "INSERT"; public boolean ExecRdrAble() {return false;} public String XtoSql() {return Sql_cmd_wtr_.Ansi.XtoSqlQry(this, false);} public int Exec_qry(Db_provider provider) {return provider.Exec_qry(this);} public Db_qry_arg_owner From_(String tbl) {baseTable = tbl; return this;} - public Db_qry_arg_owner Arg_(String k, DecimalAdp v) {return Arg_obj_type_(k, v.XtoDecimal(), Db_val_type.Tid_decimal);} + public Db_qry_arg_owner Arg_(String k, DecimalAdp v) {return Arg_obj_type_(k, v.Xto_decimal(), Db_val_type.Tid_decimal);} public Db_qry_arg_owner Arg_(String k, DateAdp v) {return Arg_obj_type_(k, v, Db_val_type.Tid_date);} public Db_qry_arg_owner Arg_byte_(String k, byte v) {return Arg_obj_type_(k, v, Db_val_type.Tid_byte);} public Db_qry_arg_owner Arg_(String k, int v) {return Arg_obj_type_(k, v, Db_val_type.Tid_int32);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java index f0490acd4..0d9d9f6db 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_select.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; import gplx.criterias.*; public class Db_qry_select implements Db_qry { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "SELECT"; public boolean ExecRdrAble() {return true;} public DataRdr Exec_qry_as_rdr(Db_provider provider) {return provider.Exec_qry_as_rdr(this);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java index 4c915a59b..b266a404b 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_sql.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public class Db_qry_sql implements Db_qry { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "SQL"; public boolean ExecRdrAble() {return isReader;} private boolean isReader; public int Exec_qry(Db_provider provider) {return provider.Exec_qry(this);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java index 389699846..e6dc51299 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_qry_update.java @@ -18,13 +18,14 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; import gplx.criterias.*; public class Db_qry_update implements Db_qry_arg_owner { + public int Tid() {return Db_qry_.Tid_basic;} public String KeyOfDb_qry() {return KeyConst;} public static final String KeyConst = "UPDATE"; public boolean ExecRdrAble() {return false;} public int Exec_qry(Db_provider provider) {return provider.Exec_qry(this);} public String XtoSql() {return Sql_cmd_wtr_.Ansi.XtoSqlQry(this, false);} public Db_qry_arg_owner From_(String tbl) {baseTable = tbl; return this;} - public Db_qry_arg_owner Arg_(String k, DecimalAdp v) {return Arg_obj_type_(k, v.XtoDecimal(), Db_val_type.Tid_decimal);} + public Db_qry_arg_owner Arg_(String k, DecimalAdp v) {return Arg_obj_type_(k, v.Xto_decimal(), Db_val_type.Tid_decimal);} public Db_qry_arg_owner Arg_(String k, DateAdp v) {return Arg_obj_type_(k, v, Db_val_type.Tid_date);} public Db_qry_arg_owner Arg_byte_(String k, byte v) {return Arg_obj_type_(k, v, Db_val_type.Tid_byte);} public Db_qry_arg_owner Arg_(String k, int v) {return Arg_obj_type_(k, v, Db_val_type.Tid_int32);} diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java index 362cd72d9..a6f72aad9 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt.java @@ -35,6 +35,7 @@ public interface Db_stmt extends RlsAble { int Exec_update(); int Exec_delete(); DataRdr Exec_select(); + Db_rdr Exec_select_as_rdr(); Object Exec_select_val(); Db_stmt Clear(); Db_stmt New(); diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java index 8bfc276b6..95f2a4956 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_.java @@ -47,4 +47,7 @@ public class Db_stmt_ { public static Db_stmt new_select_all_(Db_provider provider, String tbl) { return provider.Prepare(Db_qry_.select_tbl_(tbl)); } + public static Db_stmt new_select_as_rdr(Db_provider provider, Db_qry__select_in_tbl qry) { + return provider.Prepare(qry); + } } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java index 200225f7f..d0a92e28d 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_cmd.java @@ -18,13 +18,13 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; import java.sql.*; class Db_stmt_cmd implements Db_stmt { - Db_engine engine; - PreparedStatement stmt = null; - String sql; - int val_idx = 0; + private Db_engine engine; + private PreparedStatement stmt = null; + private String sql; + private int val_idx = 0; public Db_stmt_cmd(Db_provider provider, Db_qry qry) { this.provider = provider; this.engine = provider.Engine(); - sql = Sql_cmd_wtr_.Ansi.XtoSqlQry(qry, true); + sql = qry.Tid() == Db_qry_.Tid_select_in_tbl ? ((Db_qry__select_in_tbl)qry).Xto_sql() : Sql_cmd_wtr_.Ansi.XtoSqlQry(qry, true); New(); } public Db_stmt New() { @@ -58,7 +58,7 @@ class Db_stmt_cmd implements Db_stmt { return this; } public Db_stmt Val_decimal_(DecimalAdp v) { - try {stmt.setBigDecimal(++val_idx, v.XtoDecimal());} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", 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);} return this; } public Db_stmt Val_bry_by_str_(String v) {return Val_bry_(Bry_.new_utf8_(v));} @@ -87,6 +87,9 @@ class Db_stmt_cmd implements Db_stmt { public DataRdr Exec_select() { try {DataRdr rv = engine.NewDataRdr(stmt.executeQuery(), sql); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} } + public Db_rdr Exec_select_as_rdr() { + try {return engine.New_db_rdr(stmt.executeQuery(), sql);} catch (Exception e) {throw Err_.err_(e, "select failed: sql={0}", sql);} + } public Object Exec_select_val() { try {Object rv = Db_qry_select.Rdr_to_val(engine.NewDataRdr(stmt.executeQuery(), sql)); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} } diff --git a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java index d27896b7d..4adb4eabd 100644 --- a/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java +++ b/140_dbs/src_110_dbQry/gplx/dbs/Db_stmt_sql.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; class Db_stmt_sql implements Db_stmt { - Bry_bfr tmp_bfr = Bry_bfr.new_(); - Bry_fmtr tmp_fmtr = Bry_fmtr.new_(); - int val_idx = 0; + private Bry_bfr tmp_bfr = Bry_bfr.new_(); + private Bry_fmtr tmp_fmtr = Bry_fmtr.new_(); + private int val_idx = 0; public Db_provider Provider() {return provider;} public void Provider_(Db_provider v) {this.provider = v;} Db_provider provider; public Db_stmt New() {return this;} public Db_stmt Val_bool_(boolean v) { @@ -28,27 +28,27 @@ class Db_stmt_sql implements Db_stmt { } public Db_stmt Val_byte_by_bool_(boolean v) {return Val_byte_(v ? Bool_.Y_byte : Bool_.N_byte);} public Db_stmt Val_byte_(byte v) { - try {Add(++val_idx, Byte_.XtoStr(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "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);} return this; } public Db_stmt Val_int_(int v) { - try {Add(++val_idx, Int_.XtoStr(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "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);} return this; } public Db_stmt Val_long_(long v) { - try {Add(++val_idx, Long_.XtoStr(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "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);} return this; } public Db_stmt Val_float_(float v) { - try {Add(++val_idx, Float_.XtoStr(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "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);} return this; } public Db_stmt Val_double_(double v) { - try {Add(++val_idx, Double_.XtoStr(v));} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "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);} return this; } public Db_stmt Val_decimal_(DecimalAdp v) { - try {Add(++val_idx, v.XtoStr());} catch (Exception e) {throw Err_.err_(e, "failed to add value: type={0} val={1}", "decimal", 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);} return this; } public Db_stmt Val_bry_by_str_(String v) {return Val_bry_(Bry_.new_utf8_(v));} @@ -84,6 +84,7 @@ class Db_stmt_sql implements Db_stmt { public DataRdr Exec_select() { try {DataRdr rv = provider.Exec_qry_as_rdr(Db_qry_sql.rdr_(this.Xto_sql())); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);} } + public Db_rdr Exec_select_as_rdr() {throw Err_.not_implemented_();} 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 prepared statement: sql={0}", sql_orig);} } diff --git a/140_dbs/src_120_sql/gplx/dbs/Sql_cmd_wtr_ansi.java b/140_dbs/src_120_sql/gplx/dbs/Sql_cmd_wtr_ansi.java index 0d0f68a56..cd3728818 100644 --- a/140_dbs/src_120_sql/gplx/dbs/Sql_cmd_wtr_ansi.java +++ b/140_dbs/src_120_sql/gplx/dbs/Sql_cmd_wtr_ansi.java @@ -151,7 +151,7 @@ class Sql_cmd_wtr_ansi implements Sql_cmd_wtr { } Class valType = val.getClass(); if (valType == Boolean.class) - sb.Add_obj(Bool_.XtoInt(Bool_.cast_(val))); // NOTE!: save boolean to 0 or 1, b/c (a) db may not support bit datatype (sqllite) and (b) avoid i18n issues with "true"/"false" + sb.Add_obj(Bool_.Xto_int(Bool_.cast_(val))); // NOTE!: save boolean to 0 or 1, b/c (a) db may not support bit datatype (sqllite) and (b) avoid i18n issues with "true"/"false" else if ( valType == Byte.class || valType == Short.class || valType == Integer.class || valType == Long.class @@ -162,7 +162,7 @@ class Sql_cmd_wtr_ansi implements Sql_cmd_wtr { XtoSqlVal_DateAdp(sb, prm, (DateAdp)val); else if (valType == DecimalAdp.class) { DecimalAdp valDecimal = (DecimalAdp)val; - sb.Add(valDecimal.XtoStr()); + sb.Add(valDecimal.Xto_str()); } // else if (valType == System.Enum.class) // sb.Add_any(Enm_.XtoInt(val)); // save enum as 0 or 1, since (a) no db supports enum datatype; (b) names are fungible; (c) int is less space than name diff --git a/140_dbs/src_130_misc/gplx/dbs/PoolIds.java b/140_dbs/src_130_misc/gplx/dbs/PoolIds.java index 302031b4a..4b7855701 100644 --- a/140_dbs/src_130_misc/gplx/dbs/PoolIds.java +++ b/140_dbs/src_130_misc/gplx/dbs/PoolIds.java @@ -31,7 +31,7 @@ public class PoolIds { return rv; } public int FetchNextAndCommit(String dbInfo, String url) { - Db_provider provider = Db_provider_pool._.FetchOrNew(dbInfo); + Db_provider provider = Db_provider_pool._.Get_or_new(dbInfo); int rv = PoolIds._.FetchNext(provider, url); PoolIds._.Commit(provider, url, rv + 1); return rv; @@ -41,7 +41,7 @@ public class PoolIds { if (rv == 0) { rv = provider.Exec_qry(Db_qry_.insert_(Tbl_Name).Arg_(Fld_id_path, url).Arg_(Fld_id_next_id, val)); } - if (rv != 1) throw Err_.new_("failed to update nextId").Add("provider", provider.ConnectInfo().Raw_of_db_connect()).Add("url", url).Add("nextId", val); + if (rv != 1) throw Err_.new_("failed to update nextId").Add("provider", provider.Conn_info().Str_raw()).Add("url", url).Add("nextId", val); } public static final String Tbl_Name = "pool_ids"; @gplx.Internal protected static final String Fld_id_path = "id_path"; diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine.java b/140_dbs/src_200_engine/gplx/dbs/Db_engine.java index 4175625d5..bce385553 100644 --- a/140_dbs/src_200_engine/gplx/dbs/Db_engine.java +++ b/140_dbs/src_200_engine/gplx/dbs/Db_engine.java @@ -16,30 +16,35 @@ 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.*; -interface Db_engine extends RlsAble { - String Key(); - Db_connect ConnectInfo(); - void Connect(); - Object Execute(Db_qry cmd); - DataRdr NewDataRdr(java.sql.ResultSet rdr, String sql); - Db_stmt New_db_stmt(Db_provider provider, Db_qry sql); - Object New_db_cmd(String sql); - void Txn_bgn(); - void Txn_end(); - Db_engine MakeEngine(Db_connect connectInfo); +public interface Db_engine { + String Key(); + Db_conn_info Conn_info(); + void Conn_open(); + void Conn_term(); + void Txn_bgn(); + void Txn_end(); + Db_engine Make_new(Db_conn_info conn_info); + + Db_rdr New_db_rdr(Object o, String sql); // ResultSet if desktop; Cursor if android + Db_stmt New_db_stmt(Db_provider provider, Db_qry sql); + Object Execute(Db_qry cmd); + DataRdr NewDataRdr(java.sql.ResultSet rdr, String sql); + Object New_db_cmd(String sql); } class Db_engine_null implements Db_engine { - public String Key() {return Db_connect_.Null.Key_of_db_connect();} - public Db_connect ConnectInfo() {return Db_connect_.Null;} - public void Connect() {} + public String Key() {return Db_conn_info_.Null.Key();} + public Db_conn_info Conn_info() {return Db_conn_info_.Null;} + public void Conn_open() {} + public void Conn_term() {} + public void Txn_bgn() {} + public void Txn_end() {} + public Db_engine Make_new(Db_conn_info conn_info) {return this;} + public Object Execute(Db_qry cmd) {return cmd.ExecRdrAble() ? (Object)DataRdr_.Null : -1;} - public Object New_db_cmd(String sql) {throw Err_.not_implemented_();} - public DataRdr NewDataRdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;} - public Db_stmt New_db_stmt(Db_provider provider, Db_qry qry) {return Db_stmt_.Null;} - public void Txn_bgn() {} - public void Txn_end() {} - public void Rls() {} - public Db_engine MakeEngine(Db_connect connectInfo) {return this;} + public Object New_db_cmd(String sql) {throw Err_.not_implemented_();} + public DataRdr NewDataRdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;} + public Db_rdr New_db_rdr(Object o, String sql) {return Db_rdr_.Null;} + public Db_stmt New_db_stmt(Db_provider provider, Db_qry qry) {return Db_stmt_.Null;} public static final Db_engine_null _ = new Db_engine_null(); Db_engine_null() {} } class ExecSqlWkr implements Db_qryWkr { diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java b/140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java new file mode 100644 index 000000000..56981b18c --- /dev/null +++ b/140_dbs/src_200_engine/gplx/dbs/Db_engine_regy.java @@ -0,0 +1,32 @@ +/* +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_engine_regy { + private final HashAdp hash = HashAdp_.new_(); + Db_engine_regy() { + this.Add(Db_engine_null._) + .Add(TdbEngine._) + .Add(Mysql_engine._) + .Add(Postgres_engine._) + .Add(Sqlite_engine._) + ; + } + public Db_engine_regy Add(Db_engine engine) {hash.Add(engine.Key(), 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(); +} diff --git a/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java b/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java index eb582140b..adeecb1f4 100644 --- a/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java +++ b/140_dbs/src_200_engine/gplx/dbs/Db_engine_sql_base.java @@ -17,19 +17,19 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; import java.sql.*; -abstract class Db_engine_sql_base implements Db_engine, RlsAble { +abstract class Db_engine_sql_base implements Db_engine { public abstract String Key(); - public Db_connect ConnectInfo() {return dbInfo;} protected Db_connect dbInfo; - public abstract Db_engine MakeEngine(Db_connect dbInfo); + public Db_conn_info Conn_info() {return conn_info;} protected Db_conn_info conn_info; + @gplx.Virtual public void Txn_bgn() {Execute(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));} + @gplx.Virtual public void Txn_end() {Execute(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));} + public abstract Db_engine Make_new(Db_conn_info conn_info); @gplx.Virtual public Sql_cmd_wtr SqlWtr() {return Sql_cmd_wtr_.Ansi;} public Object Execute(Db_qry cmd) { Db_qryWkr wkr = (Db_qryWkr)wkrs.FetchOrFail(cmd.KeyOfDb_qry()); return wkr.Exec(this, cmd); } - @gplx.Virtual public void Txn_bgn() {Execute(Db_qry_sql.xtn_("BEGIN TRANSACTION;"));} - @gplx.Virtual public void Txn_end() {Execute(Db_qry_sql.xtn_("COMMIT TRANSACTION;"));} - @gplx.Internal protected void ctor_SqlEngineBase(Db_connect dbInfo) { - this.dbInfo = dbInfo; + @gplx.Internal protected void ctor_SqlEngineBase(Db_conn_info conn_info) { + this.conn_info = conn_info; wkrs.Add(Db_qry_select.KeyConst, new ExecSqlWkr()); wkrs.Add(Db_qry_insert.KeyConst, new ExecSqlWkr()); wkrs.Add(Db_qry_update.KeyConst, new ExecSqlWkr()); @@ -53,21 +53,22 @@ abstract class Db_engine_sql_base implements Db_engine, RlsAble { } catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));} } - @gplx.Internal protected abstract Connection NewDbCon(); + @gplx.Internal protected abstract Connection Conn_new(); @gplx.Virtual public DataRdr NewDataRdr(ResultSet rdr, String sql) {return gplx.stores.Db_data_rdr_.new_(rdr, sql);} - public Db_stmt New_db_stmt(Db_provider provider, Db_qry qry) {return new Db_stmt_cmd(provider, qry);} + public Db_rdr New_db_rdr(Object rdr, String sql) {return new Db_rdr__basic((ResultSet)rdr, sql);} + public Db_stmt New_db_stmt(Db_provider provider, Db_qry qry) {return new Db_stmt_cmd(provider, qry);} public Object New_db_cmd(String sql) { try {return connection.prepareStatement(sql);} catch (Exception e) { throw Err_.err_(e, "failed to prepare sql; sql={0}", sql);} } - public void Connect() { - connection = NewDbCon(); + public void Conn_open() { + connection = Conn_new(); } private Connection connection; - public void Rls() { + public void Conn_term() { // if (Env_.Mode_testing()) return; // WORKAROUND:MYSQL:else errors randomly when running all tests. possible connection pooling issue (?); // commented out 2013-08-22 try {connection.close();} - catch (SQLException e) {throw Err_.err_(e, "close connection failed").Add("ConnectInfo", dbInfo.Raw_of_db_connect());} + catch (SQLException e) {throw Err_.err_(e, "close connection failed").Add("ConnectInfo", conn_info.Str_raw());} } Statement NewDbCmd(String commandText) { Statement cmd = null; @@ -77,6 +78,6 @@ abstract class Db_engine_sql_base implements Db_engine, RlsAble { } protected Connection NewDbCon(String url, String uid, String pwd) { try {return DriverManager.getConnection(url, uid, pwd);} - catch (SQLException e) {throw Err_.err_(e, "connection open failed").Add("ConnectInfo", ConnectInfo().Raw_of_db_connect());} + catch (SQLException e) {throw Err_.err_(e, "connection open failed").Add("ConnectInfo", Conn_info().Str_raw());} } } diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java b/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java index b6ae02f06..0818be62e 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/Mysql_engine.java @@ -19,16 +19,16 @@ package gplx.dbs; import gplx.*; import gplx.stores.*; import java.sql.*; class Mysql_engine extends Db_engine_sql_base { - @Override public String Key() {return Db_connect_mysql.KeyDef;} + @Override public String Key() {return Db_conn_info__mysql.Key_const;} @Override public Sql_cmd_wtr SqlWtr() {return Sql_cmd_wtr_.BackslashSensitive;} - @Override public Db_engine MakeEngine(Db_connect connectInfo) { + @Override public Db_engine Make_new(Db_conn_info connectInfo) { Mysql_engine rv = new Mysql_engine(); rv.ctor_SqlEngineBase(connectInfo); return rv; } @Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Mysql_rdr.new_(rdr, commandText);} - @gplx.Internal @Override protected Connection NewDbCon() { - Db_connect_mysql connUrl = (Db_connect_mysql)dbInfo; + @gplx.Internal @Override protected Connection Conn_new() { + Db_conn_info__mysql connUrl = (Db_conn_info__mysql)conn_info; return NewDbCon("jdbc:mysql://localhost/" + connUrl.Database() + "?characterEncoding=UTF8", connUrl.Uid(), connUrl.Pwd()); } @gplx.Internal protected static final Mysql_engine _ = new Mysql_engine(); Mysql_engine() {} diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java b/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java index 102cdaf7f..b038c8822 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/Postgres_engine.java @@ -19,17 +19,17 @@ package gplx.dbs; import gplx.*; import gplx.stores.*; import java.sql.*; class Postgres_engine extends Db_engine_sql_base { - @Override public String Key() {return Db_connect_postgres.KeyDef;} + @Override public String Key() {return Db_conn_info__postgres.Key_const;} @Override public Sql_cmd_wtr SqlWtr() {return Sql_cmd_wtr_.BackslashSensitive;} - @Override public Db_engine MakeEngine(Db_connect connectInfo) { + @Override public Db_engine Make_new(Db_conn_info connectInfo) { Postgres_engine rv = new Postgres_engine(); rv.ctor_SqlEngineBase(connectInfo); return rv; } @Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Db_data_rdr_.new_(rdr, commandText);} - @gplx.Internal @Override protected Connection NewDbCon() { - Db_connect_postgres connUrl = (Db_connect_postgres)dbInfo; - return NewDbCon("jdbc:" + connUrl.Key_of_db_connect() + "://localhost/" + connUrl.Database(), connUrl.Uid(), connUrl.Pwd()); + @gplx.Internal @Override protected Connection Conn_new() { + Db_conn_info__postgres connUrl = (Db_conn_info__postgres)conn_info; + return NewDbCon("jdbc:" + connUrl.Key() + "://localhost/" + connUrl.Database(), connUrl.Uid(), connUrl.Pwd()); } @gplx.Internal protected static final Postgres_engine _ = new Postgres_engine(); Postgres_engine() {} } diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java index 5fc36bc52..da41c1c9f 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine.java @@ -19,15 +19,15 @@ package gplx.dbs; import gplx.*; import gplx.stores.*; import java.sql.*; class Sqlite_engine extends Db_engine_sql_base { - @Override public String Key() {return Db_connect_sqlite.KeyDef;} - @Override public Db_engine MakeEngine(Db_connect connectInfo) { + @Override public String Key() {return Db_conn_info__sqlite.Key_const;} + @Override public Db_engine Make_new(Db_conn_info connectInfo) { Sqlite_engine rv = new Sqlite_engine(); rv.ctor_SqlEngineBase(connectInfo); return rv; } @Override public DataRdr NewDataRdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);} static boolean loaded = false; - @gplx.Internal @Override protected Connection NewDbCon() { + @gplx.Internal @Override protected Connection Conn_new() { if (!loaded) { try { Class.forName("org.sqlite.JDBC"); @@ -35,7 +35,7 @@ class Sqlite_engine extends Db_engine_sql_base { catch (ClassNotFoundException e) {throw Err_.new_("could not load sqlite jdbc driver");} loaded = true; } - Db_connect_sqlite connUrl = (Db_connect_sqlite)dbInfo; + Db_conn_info__sqlite connUrl = (Db_conn_info__sqlite)conn_info; return NewDbCon("jdbc:sqlite://" + String_.Replace(connUrl.Database(), "\\", "/"), "", ""); } private boolean pragma_needed = true; diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java index 85ff2e065..9e9136bb4 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java @@ -51,7 +51,7 @@ public class Sqlite_engine_ { } public static void Pragma_page_size_4096(Db_provider p) {Pragma_page_size(p, 4096);} public static void Pragma_page_size(Db_provider p, int val) { - Db_qry qry = Db_qry_sql.ddl_("PRAGMA page_size = " + Int_.XtoStr(val) + ";"); + Db_qry qry = Db_qry_sql.ddl_("PRAGMA page_size = " + Int_.Xto_str(val) + ";"); p.Exec_qry(qry); } public static void Idx_create(Db_provider p, Db_idx_itm... idxs) {Idx_create(Gfo_usr_dlg_.Null, p, "", idxs);} @@ -68,15 +68,15 @@ public class Sqlite_engine_ { public static Db_provider Provider_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_connect connect = Db_connect_sqlite.load_(url); - return Db_provider_.new_(connect); + Db_conn_info connect = Db_conn_info__sqlite.load_(url); + return Db_provider_.new_and_open_(connect); } public static Db_provider Provider_load_or_make_(Io_url url) {return Provider_load_or_make_(url, Bool_obj_ref.n_());} public static Db_provider Provider_load_or_make_(Io_url url, Bool_obj_ref created) { boolean exists = Io_mgr._.ExistsFil(url); created.Val_(!exists); - Db_connect connect = exists ? Db_connect_sqlite.load_(url) : Db_connect_sqlite.make_(url); - Db_provider p = Db_provider_.new_(connect); + Db_conn_info connect = exists ? Db_conn_info__sqlite.load_(url) : Db_conn_info__sqlite.make_(url); + Db_provider p = Db_provider_.new_and_open_(connect); if (!exists) Pragma_page_size(p, 4096); return p; diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java b/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java index 0553f6c82..876358fd2 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/db_DataTypes_tst.java @@ -24,7 +24,7 @@ public class db_DataTypes_tst { fx.RunAll(Db_provider_fxt.Mysql()); } @Test public void Tdb() {if (Tfds.SkipDb) return; - fx.Select_FloatStr_(Float_.XtoStr(Float_.Div(1, 3))); + fx.Select_FloatStr_(Float_.Xto_str(Float_.Div(1, 3))); fx.RunAll(Db_provider_fxt.Tdb("110_dbs_multiple_data_types.dsv")); } @Test public void Postgres() {if (Db_provider_fxt.SkipPostgres) return; @@ -51,12 +51,12 @@ INSERT INTO dbs_multiple_data_types VALUES (1, 'John Doe', B'1', '3/30/2006 10:2 class DataTypes_base_fxt { public Db_provider Provider() {return provider;} Db_provider provider; public DataTypes_base_fxt() {} - public void Rls() {provider.Rls();} + public void Rls() {provider.Conn_term();} public String Select_FloatStr() {return select_FloatStr;} public DataTypes_base_fxt Select_FloatStr_(String v) {select_FloatStr = v; return this;} private String select_FloatStr; public void RunAll(Db_provider provider) { this.provider = provider; this.Select_hook(select_FloatStr); - provider.Rls(); + provider.Conn_term(); } public void Select_hook(String floatStr) { DataRdr rdr = Db_qry_.select_tbl_("dbs_multiple_data_types").Exec_qry_as_rdr(provider); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java b/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java index f6eb4e071..464920904 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java +++ b/140_dbs/src_400_tdbs/gplx/dbs/TdbConnectInfo_tst.java @@ -19,14 +19,14 @@ package gplx.dbs; import gplx.*; import org.junit.*; public class TdbConnectInfo_tst { @Test public void Full() { - Db_connect connectInfo = Db_connect_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb;format=dsv;"); + Db_conn_info connectInfo = Db_conn_info_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb;format=dsv;"); tst_Parse(connectInfo, Io_url_.new_any_("C:\\dir\\xmpl.tdb"), "dsv"); } @Test public void DefaultFormat() { - Db_connect connectInfo = Db_connect_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb"); // dsv Format inferred + Db_conn_info connectInfo = Db_conn_info_.parse_("gplx_key=tdb;url=C:\\dir\\xmpl.tdb"); // dsv Format inferred tst_Parse(connectInfo, Io_url_.new_any_("C:\\dir\\xmpl.tdb"), "dsv"); } - void tst_Parse(Db_connect connectInfo, Io_url url, String format) { - Tfds.Eq(((Db_connect_tdb)connectInfo).Url(), url); + void tst_Parse(Db_conn_info connectInfo, Io_url url, String format) { + Tfds.Eq(((Db_conn_info__tdb)connectInfo).Url(), url); } } diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java b/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java index aa70b5a3d..29dc94f96 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java +++ b/140_dbs/src_400_tdbs/gplx/dbs/TdbDatabase.java @@ -43,5 +43,5 @@ public class TdbDatabase { } int FileId_next = TdbFile.MainFileId + 1; int TableId_next = 1; -// public static Io_url UrlOf(Db_connect url) {return Io_url_.new_any_(url.ServerName());} +// public static Io_url UrlOf(Db_conn_info url) {return Io_url_.new_any_(url.ServerName());} } diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java b/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java index be93b15b6..3d6142bb2 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java +++ b/140_dbs/src_400_tdbs/gplx/dbs/TdbEngine.java @@ -18,17 +18,20 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; class TdbEngine implements Db_engine { public String Key() {return KeyDef;} public static final String KeyDef = "tdb"; - public Db_connect ConnectInfo() {return connectInfo;} Db_connect connectInfo; + public Db_conn_info Conn_info() {return conn_info;} Db_conn_info conn_info; public TdbDatabase Db() {return db;} TdbDatabase db; - public Db_engine MakeEngine(Db_connect connectInfo) { - TdbEngine rv = new TdbEngine(); - rv.CtorTdbEngine(connectInfo); - return rv; - } - public void Connect() { - String urlStr = (String)connectInfo.Server(); + public void Conn_open() { + String urlStr = (String)conn_info.Server(); db = loadMgr.LoadTbls(Io_url_.new_any_(urlStr)); } + public void Conn_term() {} + public void Txn_bgn() {} + public void Txn_end() {} + public Db_engine Make_new(Db_conn_info conn_info) { + TdbEngine rv = new TdbEngine(); + rv.CtorTdbEngine(conn_info); + return rv; + } public Object Execute(Db_qry cmd) { Db_qryWkr wkr = (Db_qryWkr)wkrs.FetchOrFail(cmd.KeyOfDb_qry()); return wkr.Exec(this, cmd); @@ -36,8 +39,7 @@ class TdbEngine implements Db_engine { public DataRdr NewDataRdr(java.sql.ResultSet rdr, String sql) {return DataRdr_.Null;} public Db_stmt New_db_stmt(Db_provider provider, Db_qry qry) {return new Db_stmt_sql().Parse(Sql_cmd_wtr_.Ansi.XtoSqlQry(qry, true));} public Object New_db_cmd(String sql) {throw Err_.not_implemented_();} - public void Txn_bgn() {} - public void Txn_end() {} + public Db_rdr New_db_rdr(Object o, String sql) {return Db_rdr_.Null;} public TdbTable FetchTbl(String name) { TdbTable tbl = db.Tables().FetchOrFail(name); if (!tbl.IsLoaded()) loadMgr.LoadTbl(db, tbl); @@ -49,13 +51,12 @@ class TdbEngine implements Db_engine { public void FlushTbl(TdbTable tbl) { saveMgr.SaveFile(db, tbl.File()); } - public void Rls() {} HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_(); @gplx.Internal protected static final TdbEngine _ = new TdbEngine(); - //TdbEngine() {this.connectInfo = TdbConnectUrl._;} - void CtorTdbEngine(Db_connect connectInfo) { - this.connectInfo = connectInfo; + //TdbEngine() {this.conn_info = TdbConnectUrl._;} + void CtorTdbEngine(Db_conn_info conn_info) { + this.conn_info = conn_info; wkrs.Add(Db_qry_select.KeyConst, TdbSelectWkr._); wkrs.Add(Db_qry_insert.KeyConst, TdbInsertWkr.new_()); wkrs.Add(Db_qry_update.KeyConst, TdbUpdateWkr.new_()); diff --git a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java b/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java index c10794766..a01eb81da 100644 --- a/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java +++ b/140_dbs/src_400_tdbs/gplx/dbs/TdbFlush_tst.java @@ -81,9 +81,9 @@ public class TdbFlush_tst { } class TdbEngineFxt { public TdbEngine run_MakeEngine(Io_url url) { - Db_connect connectInfo = Db_connect_.tdb_(url); - TdbEngine engine = (TdbEngine)TdbEngine._.MakeEngine(connectInfo); - engine.Connect(); + Db_conn_info connectInfo = Db_conn_info_.tdb_(url); + TdbEngine engine = (TdbEngine)TdbEngine._.Make_new(connectInfo); + engine.Conn_open(); return engine; } public TdbFile run_MakeFile(TdbEngine engine, Io_url url) {return engine.Db().MakeFile(url);} diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java b/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java index 55b849e28..241f1d19d 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java +++ b/140_dbs/src_410_stores/gplx/stores/DbMaprMgr_tst.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.stores; import gplx.*; import org.junit.*; -import gplx.dbs.*; /*Db_connect*/ +import gplx.dbs.*; /*Db_conn_info*/ public class DbMaprMgr_tst { @Before public void setup() { mgr = DbMaprMgr.new_().RootIndexFlds_(DbMaprArg.new_("id", "disc_id")) @@ -37,9 +37,9 @@ public class DbMaprMgr_tst { . Flds_add(MockStream.id_idk, "stream_id").Flds_add(MockStream.name_idk, "stream_name") . ConstantFlds_add("stream_type", 1) ))); - wtr = DbMaprWtr.new_by_url_(Db_connect_.Test); + wtr = DbMaprWtr.new_by_url_(Db_conn_info_.Test); wtr.EnvVars().Add(DbMaprWtr.Key_Mgr, mgr); - provider = Db_provider_pool._.FetchOrNew(Db_connect_.Test); + provider = Db_provider_pool._.Get_or_new(Db_conn_info_.Test); Db_qry_fxt.DeleteAll(provider, "mock_discs", "mock_titles", "mock_chapters", "mock_streams"); } DbMaprMgr mgr; DbMaprWtr wtr; Db_provider provider; MockDisc disc; MockTitle title; MockChapter chapter; MockStream audio, subtitle; SrlMgr rdr; @Test public void PurgeObjTree() { @@ -133,7 +133,7 @@ public class DbMaprMgr_tst { Tfds.Eq("subtitle1", ((MockStream)t.Subtitles().FetchAt(0)).Name()); } DbMaprRdr rdr_() { - DbMaprRdr rv = DbMaprRdr.new_(Db_connect_.Test, Db_crt_.eq_("disc_id", 1)); + DbMaprRdr rv = DbMaprRdr.new_(Db_conn_info_.Test, Db_crt_.eq_("disc_id", 1)); rv.EnvVars().Add(DbMaprWtr.Key_Mgr, mgr); return rv; } diff --git a/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java b/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java index 19e50bc7b..3af5bdd70 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java +++ b/140_dbs/src_410_stores/gplx/stores/DbMaprRdr.java @@ -114,9 +114,9 @@ public class DbMaprRdr extends DataRdr_base implements SrlMgr { HashAdp tables = HashAdp_.new_(); Db_provider provider; Criteria rootCrt; DbMaprMgr mgr; ListAdp rowStack = ListAdp_.new_(); - public static DbMaprRdr new_(Db_connect dbInfo, Criteria rootCrt) { + public static DbMaprRdr new_(Db_conn_info dbInfo, Criteria rootCrt) { DbMaprRdr rv = new DbMaprRdr(); - rv.provider = Db_provider_pool._.FetchOrNew(dbInfo); rv.rootCrt = rootCrt; + rv.provider = Db_provider_pool._.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_410_stores/gplx/stores/DbMaprWtr.java index 320991584..61bbc6af1 100644 --- a/140_dbs/src_410_stores/gplx/stores/DbMaprWtr.java +++ b/140_dbs/src_410_stores/gplx/stores/DbMaprWtr.java @@ -83,9 +83,9 @@ public class DbMaprWtr extends DataWtr_base implements DataWtr { public String XtoStr() {return "";} @Override public SrlMgr SrlMgr_new(Object o) {return new DbMaprWtr();} DbMaprMgr mgr; Db_provider provider; String curTableName; Db_qry_insert insertCmd; - public static DbMaprWtr new_by_url_(Db_connect url) { + public static DbMaprWtr new_by_url_(Db_conn_info url) { DbMaprWtr rv = new DbMaprWtr(); - rv.provider = Db_provider_pool._.FetchOrNew(url); + rv.provider = Db_provider_pool._.Get_or_new(url); return rv; } DbMaprWtr() {} public static final String Key_Mgr = "DbMapr.mgr"; diff --git a/140_dbs/tst/gplx/dbs/Db_provider_fxt.java b/140_dbs/tst/gplx/dbs/Db_provider_fxt.java index a378c6c14..530062275 100644 --- a/140_dbs/tst/gplx/dbs/Db_provider_fxt.java +++ b/140_dbs/tst/gplx/dbs/Db_provider_fxt.java @@ -43,12 +43,12 @@ public class Db_provider_fxt implements RlsAble { Tfds.Eq_ary(actlValAry, expdValAry); return record; } - public void Rls() {provider.Rls();} + public void Rls() {provider.Conn_term();} - public static Db_provider Mysql() {return Db_provider_.new_(Db_connect_mysql.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} - public static Db_provider Tdb(String fileName) {return Db_provider_.new_(Db_connect_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));} - public static Db_provider Postgres() {return Db_provider_.new_(Db_connect_postgres.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} - public static Db_provider Sqlite() {return Db_provider_.new_(Db_connect_sqlite.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));} + public static Db_provider Mysql() {return Db_provider_.new_and_open_(Db_conn_info__mysql.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} + public static Db_provider Tdb(String fileName) {return Db_provider_.new_and_open_(Db_conn_info_.tdb_(Tfds.RscDir.GenSubDir_nest("140_dbs", "tdbs").GenSubFil(fileName)));} + public static Db_provider Postgres() {return Db_provider_.new_and_open_(Db_conn_info__postgres.new_("127.0.0.1", "unit_tests", "gplx_user", "gplx_password"));} + public static Db_provider Sqlite() {return Db_provider_.new_and_open_(Db_conn_info__sqlite.load_(Tfds.RscDir.GenSubFil_nest("140_dbs", "sqlite", "unit_tests.db")));} // public static Db_provider Mssql() {return MssqlConnectUrl.WindowsAuth(".", "unit_tests"); public static final boolean SkipPostgres = Tfds.SkipDb || true; } \ No newline at end of file diff --git a/140_dbs/tst/gplx/dbs/PoolIds_tst.java b/140_dbs/tst/gplx/dbs/PoolIds_tst.java index 6ec258d22..479ec6ec6 100644 --- a/140_dbs/tst/gplx/dbs/PoolIds_tst.java +++ b/140_dbs/tst/gplx/dbs/PoolIds_tst.java @@ -19,7 +19,7 @@ package gplx.dbs; import gplx.*; import org.junit.*; public class PoolIds_tst { @Before public void setup() { - provider = Db_provider_pool._.FetchOrNew(Db_connect_.Test); + provider = Db_provider_pool._.Get_or_new(Db_conn_info_.Test); Db_qry_fxt.DeleteAll(provider, PoolIds.Tbl_Name); mgr = PoolIds._; } 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 f01e56db8..097424ea7 100644 --- a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java @@ -25,7 +25,7 @@ public abstract class GroupBys_base_tst { Db_qry_.delete_tbl_("dbs_group_bys").Exec_qry(provider); } @After public void teardown() { - provider.Rls(); + provider.Conn_term(); } protected void GroupBy_1fld_hook() { provider.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 1)); 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 d2ce86616..dbbbbeae4 100644 --- a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java +++ b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java @@ -26,7 +26,7 @@ public abstract class InsertIntos_base_tst { provider.Exec_qry(Db_qry_delete.new_().BaseTable_("dbs_insert_intos")); } @After public void teardown() { - provider.Rls(); + provider.Conn_term(); } protected void Select_hook() { provider.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 1)); 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 b55699ad8..ab4dafb43 100644 --- a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java +++ b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java @@ -25,7 +25,7 @@ public abstract class Joins_base_tst { Db_qry_delete.new_().BaseTable_("dbs_join1").Exec_qry(provider); } @After public void teardown() { - provider.Rls(); + provider.Conn_term(); } protected void InnerJoin_hook() { provider.Exec_qry(Db_qry_insert.new_().BaseTable_("dbs_crud_ops").Arg_("id", 0).Arg_("name", "me")); 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 f2b83fb64..01ce53b99 100644 --- a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java @@ -23,7 +23,7 @@ public abstract class OrderBys_base_tst { fx.Provider_(provider); Db_qry_delete.new_().BaseTable_("dbs_crud_ops").Exec_qry(provider); } protected Db_provider_fxt fx = new Db_provider_fxt(); - @After public void teardown() {provider.Rls();} + @After public void teardown() {provider.Conn_term();} protected abstract Db_provider provider_(); protected Db_provider provider; protected void Basic_hook() { fx.tst_ExecDml(1, Db_qry_insert.new_().BaseTable_("dbs_crud_ops").Arg_("id", 1).Arg_("name", "you")); diff --git a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java index 025c05b22..8d19db77f 100644 --- a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java +++ b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java @@ -82,7 +82,7 @@ public class SqliteDbMain { } long time_elapsed = (Env_.TickCount() - time_bgn); // provider.Txn_mgr().Txn_end(); - provider.Rls(); + provider.Conn_term(); Tfds.Write(time_elapsed, number / time_elapsed); // 250; 260 Tfds.Write(""); diff --git a/150_gfui/src_200_ipt/gplx/gfui/IptBnd_upDownRange.java b/150_gfui/src_200_ipt/gplx/gfui/IptBnd_upDownRange.java index a79091996..9cbab34f4 100644 --- a/150_gfui/src_200_ipt/gplx/gfui/IptBnd_upDownRange.java +++ b/150_gfui/src_200_ipt/gplx/gfui/IptBnd_upDownRange.java @@ -41,7 +41,7 @@ public class IptBnd_upDownRange implements InjectAble, GfoInvkAble, GfoEvObj { public int Adj() {return adj;} public IptBnd_upDownRange Adj_(int v) {adj = v; return this;} int adj; void WhenEvt(GfsCtx ctx, GfoMsg m) { curVal = m.ReadInt(arg) + adj; - txtBox.Text_(Int_.XtoStr(curVal)); + txtBox.Text_(Int_.Xto_str(curVal)); } void ExecCmd(String c, int val) { GfoInvkAble_.InvkCmd_val(src, c, val - adj); diff --git a/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java b/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java index 74f326456..42f03d35c 100644 --- a/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java +++ b/150_gfui/src_200_ipt/gplx/gfui/IptKey_.java @@ -31,7 +31,7 @@ public class IptKey_ { } public static IptKey api_(int val) { IptKey rv = (IptKey)enmMgr.Get(val); - return (rv == null) ? new_(val, "key_" + Int_.XtoStr(val)) : rv; + return (rv == null) ? new_(val, "key_" + Int_.Xto_str(val)) : rv; } public static IptKey parse_(String raw) {return getOrNew_(enmMgr.GetVal(raw));} public static IptKey rdr_or_(DataRdr rdr, String key, IptKey or) { diff --git a/150_gfui/src_210_lyt/gplx/gfui/GftGrid_fx.java b/150_gfui/src_210_lyt/gplx/gfui/GftGrid_fx.java index c6be91c92..c7fa1fd0a 100644 --- a/150_gfui/src_210_lyt/gplx/gfui/GftGrid_fx.java +++ b/150_gfui/src_210_lyt/gplx/gfui/GftGrid_fx.java @@ -27,7 +27,7 @@ class GftGrid_fx { } public GftGrid_fx ini_AddItms(int num) { for (int i = 0; i < num; i++) - itms.Add(new GftItem_mok());//.Key_("key" + Int_.XtoStr(i))); + itms.Add(new GftItem_mok());//.Key_("key" + Int_.Xto_str(i))); return this; } public GftGrid_fx ini_ItmWidth(int i, int width) { diff --git a/150_gfui/src_300_gxw/gplx/gfui/GxwTextHtml_lang.java b/150_gfui/src_300_gxw/gplx/gfui/GxwTextHtml_lang.java index faa25e57d..64e6ef27f 100644 --- a/150_gfui/src_300_gxw/gplx/gfui/GxwTextHtml_lang.java +++ b/150_gfui/src_300_gxw/gplx/gfui/GxwTextHtml_lang.java @@ -158,8 +158,8 @@ class GxwTextHtml_editor extends JEditorPane implements GxwTextHtml { } public String Html_print() { String_bldr sb = String_bldr_.new_(); - sb.Add("selBgn=").Add(Int_.XtoStr(Html_sel_bgn())).Add_char_crlf(); - sb.Add("selEnd=").Add(Int_.XtoStr(Html_sel_end())).Add_char_crlf(); + sb.Add("selBgn=").Add(Int_.Xto_str(Html_sel_bgn())).Add_char_crlf(); + sb.Add("selEnd=").Add(Int_.Xto_str(Html_sel_end())).Add_char_crlf(); sb.Add("selTxt=").Add(Html_sel_text()).Add_char_crlf(); KeyVal[] atrs = Html_sel_atrs(); for (int i = 0; i < atrs.length; i++) { diff --git a/150_gfui/src_400_win/gplx/gfui/GfuiMenuBar.java b/150_gfui/src_400_win/gplx/gfui/GfuiMenuBar.java index 40a7606ee..935fcb3c4 100644 --- a/150_gfui/src_400_win/gplx/gfui/GfuiMenuBar.java +++ b/150_gfui/src_400_win/gplx/gfui/GfuiMenuBar.java @@ -79,7 +79,7 @@ public class GfuiMenuBar implements GfoInvkAble { GfuiMenuBarItm itm = GfuiMenuBarItm.sub_(curOwnerItm); itm.Type_(GfuiMenuBarItmType.Spr); itm.Text_(text); - itm.Key_(curOwnerItm.Key() + "." + text + Int_.XtoStr(separatorIdx++)); + itm.Key_(curOwnerItm.Key() + "." + text + Int_.Xto_str(separatorIdx++)); itm.ExecProps(); } else if (ctx.Match(k, Invk_RegCmd)) { diff --git a/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html.java b/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html.java index 5a35f9701..dcea68c46 100644 --- a/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html.java +++ b/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html.java @@ -73,7 +73,7 @@ public class Gfui_html extends GfuiElemBase { String proc = (String)args[0]; GfoMsg rv = GfoMsg_.new_parse_(proc); for (int i = 1; i < args.length; i++) - rv.Add(Int_.XtoStr(i), args[i]); // NOTE: args[i] can be either String or String[] + rv.Add(Int_.Xto_str(i), args[i]); // NOTE: args[i] can be either String or String[] return rv; } public static final String Atr_href = "href", Atr_title = "title", Atr_value = "value", Atr_innerHTML = "innerHTML", Atr_src = "src"; diff --git a/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html_cfg.java b/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html_cfg.java index 246db8cd3..75b157937 100644 --- a/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html_cfg.java +++ b/150_gfui/src_420_box_basic/gplx/gfui/Gfui_html_cfg.java @@ -24,10 +24,10 @@ public class Gfui_html_cfg implements GfoInvkAble { public String Doc_selected_get_href_or_text() {return Exec_fmt(fmtr_doc_selected_get_href_or_text);} private Bry_fmtr fmtr_doc_selected_get_href_or_text = Bry_fmtr.keys_(); public String Doc_selected_get_src_or_empty() {return Exec_fmt(fmtr_doc_selected_get_src_or_empty);} private Bry_fmtr fmtr_doc_selected_get_src_or_empty = Bry_fmtr.keys_(); public String Doc_find_html(String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean search_text_is_diff, int prv_find_bgn) { - return Exec_fmt(fmtr_doc_find_html, find, Bool_.XtoStr_lower(dir_fwd), Bool_.XtoStr_lower(case_match), Bool_.XtoStr_lower(wrap_find), Bool_.XtoStr_lower(search_text_is_diff), Int_.XtoStr(prv_find_bgn)); + return Exec_fmt(fmtr_doc_find_html, find, Bool_.Xto_str_lower(dir_fwd), Bool_.Xto_str_lower(case_match), Bool_.Xto_str_lower(wrap_find), Bool_.Xto_str_lower(search_text_is_diff), Int_.Xto_str(prv_find_bgn)); } private Bry_fmtr fmtr_doc_find_html = Bry_fmtr.keys_("find_text", "dir_fwd", "case_match", "wrap_find", "find_text_is_diff", "prv_find_bgn"); public String Doc_find_edit(String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean search_text_is_diff, int prv_find_bgn) { - return Exec_fmt(fmtr_doc_find_edit, find, Bool_.XtoStr_lower(dir_fwd), Bool_.XtoStr_lower(case_match), Bool_.XtoStr_lower(wrap_find), Bool_.XtoStr_lower(search_text_is_diff), Int_.XtoStr(prv_find_bgn)); + return Exec_fmt(fmtr_doc_find_edit, find, Bool_.Xto_str_lower(dir_fwd), Bool_.Xto_str_lower(case_match), Bool_.Xto_str_lower(wrap_find), Bool_.Xto_str_lower(search_text_is_diff), Int_.Xto_str(prv_find_bgn)); } private Bry_fmtr fmtr_doc_find_edit = Bry_fmtr.keys_("find_text", "dir_fwd", "case_match", "wrap_find", "find_text_is_diff", "prv_find_bgn"); public String Elem_atr_get(String elem_id, String atr_key) {return Exec_fmt(fmtr_elem_atr_get, elem_id, atr_key);} private Bry_fmtr fmtr_elem_atr_get = Bry_fmtr.keys_("elem_id", "atr_key"); public String Elem_atr_get_toString(String elem_id, String atr_key) {return Exec_fmt(fmtr_elem_atr_get_toString, elem_id, atr_key);} private Bry_fmtr fmtr_elem_atr_get_toString = Bry_fmtr.keys_("elem_id", "atr_key"); @@ -40,7 +40,7 @@ public class Gfui_html_cfg implements GfoInvkAble { public String Gallery_packed_exec() {return Exec_fmt(fmtr_gallery_packed_exec);} private Bry_fmtr fmtr_gallery_packed_exec = Bry_fmtr.keys_(); public String Elem_focus(String elem_id) {return Exec_fmt(fmtr_elem_focus, elem_id);} private Bry_fmtr fmtr_elem_focus = Bry_fmtr.keys_("elem_id"); public String Elem_scroll_into_view(String elem_id) {return Exec_fmt(fmtr_elem_scroll_into_view, elem_id);} private Bry_fmtr fmtr_elem_scroll_into_view = Bry_fmtr.keys_("elem_id"); - public String Elem_img_update(String id, String src, int w, int h) {return Exec_fmt(fmtr_elem_img_update, id, src, Int_.XtoStr(w), Int_.XtoStr(h));} Bry_fmtr fmtr_elem_img_update = Bry_fmtr.keys_("elem_id", "elem_src", "elem_width", "elem_height"); + public String Elem_img_update(String id, String src, int w, int h) {return Exec_fmt(fmtr_elem_img_update, id, src, Int_.Xto_str(w), Int_.Xto_str(h));} Bry_fmtr fmtr_elem_img_update = Bry_fmtr.keys_("elem_id", "elem_src", "elem_width", "elem_height"); public String Window_vpos() {return Exec_fmt(fmtr_window_vpos);} private Bry_fmtr fmtr_window_vpos = Bry_fmtr.new_(); public String Window_vpos_(String node_path, String scroll_top) {return Exec_fmt(fmtr_window_vpos_, node_path, scroll_top);} private Bry_fmtr fmtr_window_vpos_ = Bry_fmtr.keys_("node_path", "scroll_top"); public String Window_print_preview() {return Exec_fmt(fmtr_window_print_preview);} private Bry_fmtr fmtr_window_print_preview = Bry_fmtr.keys_(); diff --git a/150_gfui/src_700_env/gplx/gfui/Gfui_mnu_itm_.java b/150_gfui/src_700_env/gplx/gfui/Gfui_mnu_itm_.java index 49c75e69d..7478255fc 100644 --- a/150_gfui/src_700_env/gplx/gfui/Gfui_mnu_itm_.java +++ b/150_gfui/src_700_env/gplx/gfui/Gfui_mnu_itm_.java @@ -17,6 +17,6 @@ along with this program. If not, see . */ package gplx.gfui; import gplx.*; public class Gfui_mnu_itm_ { - public static String Gen_uid() {return "mnu_" + Int_.XtoStr(++uid_next);} private static int uid_next = 0; + public static String Gen_uid() {return "mnu_" + Int_.Xto_str(++uid_next);} private static int uid_next = 0; public static final int Tid_nil = 0, Tid_grp = 1, Tid_spr = 2, Tid_btn = 3, Tid_chk = 4, Tid_rdo = 5; } diff --git a/150_gfui/src_700_env/gplx/gfui/Swt_kit.java b/150_gfui/src_700_env/gplx/gfui/Swt_kit.java index b3b4bcccd..9914ebbec 100644 --- a/150_gfui/src_700_env/gplx/gfui/Swt_kit.java +++ b/150_gfui/src_700_env/gplx/gfui/Swt_kit.java @@ -86,15 +86,16 @@ public class Swt_kit implements Gfui_kit { while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); - } - cursor.dispose(); + } + gui_wtr.Log_many("", "", "swt.kit.term:bgn"); + cursor.dispose(); gui_wtr.Log_many("", "", "swt.kit.term:cursor"); Kit_term(); } public void Kit_term() { mode_is_shutdown = true; // NOTE: must mark kit as shutting down, else writing to status.bar will create stack overflow exception; DATE:2014-05-05 - usrMsgWkr_Stop.Rls(); - clipboard.Rls(); - display.dispose(); + usrMsgWkr_Stop.Rls(); gui_wtr.Log_many("", "", "swt.kit.term:usrMsgWkr"); + clipboard.Rls(); gui_wtr.Log_many("", "", "swt.kit.term:clipboard"); + display.dispose(); gui_wtr.Log_many("", "", "swt.kit.term:display"); } private Swt_UsrMsgWkr_Stop usrMsgWkr_Stop; public boolean Ask_yes_no(String grp_key, String msg_key, String fmt, Object... args) { Swt_dlg_msg dlg = (Swt_dlg_msg)New_dlg_msg(ask_fmtr.Bld_str_many(ask_bfr, fmt, args)).Init_btns_(Gfui_dlg_msg_.Btn_yes, Gfui_dlg_msg_.Btn_no).Init_ico_(Gfui_dlg_msg_.Ico_question); diff --git a/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java b/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java index b0beab0b5..9a73656a6 100644 --- a/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java +++ b/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java @@ -69,7 +69,7 @@ public class GfuiFocusOrderer_tst { GfuiElem sub_(GfuiElem owner, int i) {return owner.SubElems().FetchAt(i);} void ini_Subs(GfuiElem owner, ListAdp list, PointAdp... points) { for (int i = 0; i < points.length; i++) { - GfuiElem sub = GfuiElem_.sub_(Int_.XtoStr(i), owner); + GfuiElem sub = GfuiElem_.sub_(Int_.Xto_str(i), owner); sub.Pos_(points[i]); sub.UnderElem().Core().Focus_index_set(i); list.Add(sub); diff --git a/150_gfui/tst/gplx/gfui/TabBox_tst.java b/150_gfui/tst/gplx/gfui/TabBox_tst.java index 931e18e2b..89a981f5a 100644 --- a/150_gfui/tst/gplx/gfui/TabBox_tst.java +++ b/150_gfui/tst/gplx/gfui/TabBox_tst.java @@ -70,7 +70,7 @@ class TabBoxFxt implements GfoInvkAble { for (int i = 0; i < tabBox.Tabs_Count(); i++) tabBox.Tabs_DelAt(0); for (int i = 0; i < count; i++) - tabBox.Tabs_Add(Int_.XtoStr(i), Int_.XtoStr(i)); + tabBox.Tabs_Add(Int_.Xto_str(i), Int_.Xto_str(i)); return this; } @gplx.Internal protected TabBoxFxt DelAt(int index) {tabBox.Tabs_DelAt(index); return this;} diff --git a/150_gfui/xtn/gplx/gfui/Swt_app_browser.java b/150_gfui/xtn/gplx/gfui/Swt_app_browser.java index 6e9c1d81d..f2081d99e 100644 --- a/150_gfui/xtn/gplx/gfui/Swt_app_browser.java +++ b/150_gfui/xtn/gplx/gfui/Swt_app_browser.java @@ -23,7 +23,8 @@ public class Swt_app_browser { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); - System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xowa\\bin\\windows\\xulrunner"); + try { + System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "E:\\موسوعات\\Xowa\\bin\\windows\\xulrunner"); Swt_app_browser_mgr mgr = new Swt_app_browser_mgr(shell); New_btn(shell, 0, "loa&d", new Swt_app_browser_cmd_load(mgr)); New_btn(shell, 1, "&free", new Swt_app_browser_cmd_free(mgr)); @@ -35,6 +36,9 @@ public class Swt_app_browser { } mgr.Free(); display.dispose(); + } catch (SWTError e) { + Tfds.Write("a"); + } } private static Button New_btn(Shell shell, int idx, String text, SelectionListener lnr) { Button rv = new Button(shell, SWT.BORDER); @@ -55,8 +59,8 @@ class Swt_app_browser_mgr { browser.setBounds(0, 40, size.x, size.y - 40); } // browser.setUrl("about:blank"); - browser.setUrl("file:///C:/temp.html"); -// browser.setText(Io_mgr._.LoadFilStr("C:\\temp.html")); +// browser.setUrl("file:///C:/temp.html"); + browser.setText("hello"); } public void Free() { if (browser != null) { diff --git a/150_gfui/xtn/gplx/gfui/Swt_tab_mgr.java b/150_gfui/xtn/gplx/gfui/Swt_tab_mgr.java index b7e9e58be..957446add 100644 --- a/150_gfui/xtn/gplx/gfui/Swt_tab_mgr.java +++ b/150_gfui/xtn/gplx/gfui/Swt_tab_mgr.java @@ -83,8 +83,8 @@ public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, Gfo Gfui_tab_itm_data tab_data = Get_tab_data(itm); CTabItem next_tab = Tabs_select_after_closing_itm(tab_data); // NOTE: must calc next_tab before calling Pub_tab_closed; latter will recalc idx Pub_tab_closed(tab_data.Key()); // NOTE: dispose does not call event for .close; must manually raise event; - itm.dispose(); this.Tabs_select_by_itm(next_tab); + itm.dispose(); } @Override public void Tabs_select_by_idx(int i) { if (i == Gfui_tab_itm_data.Idx_null) return; // 0 tabs; return; diff --git a/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java index c2a8b4c44..8cf8f8ea0 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_cfg_mgr.java @@ -32,7 +32,7 @@ public class Fsdb_cfg_mgr { this.Update_next_id(); } public void Rls() {cfg_tbl.Rls();} - private void Update_next_id() {cfg_tbl.Update("core", "next_id", Int_.XtoStr(next_id));} + 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) { String cur_val = cfg_tbl.Select_as_str_or(grp, key, null); if (cur_val == null) diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java index 1c2889515..2f513aab8 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_abc_mgr.java @@ -75,19 +75,19 @@ public class Fsdb_db_abc_mgr implements RlsAble { atr_mgr.Rls(); bin_mgr.Rls(); cfg_mgr.Rls(); - boot_provider.Rls(); + boot_provider.Conn_term(); } private void Init_load(Io_url dir, Io_url boot_url) { - Db_connect connect = Db_connect_sqlite.load_(boot_url); - boot_provider = Db_provider_.new_(connect); + Db_conn_info connect = Db_conn_info__sqlite.load_(boot_url); + boot_provider = Db_provider_.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_connect connect = Db_connect_sqlite.make_(boot_url); - boot_provider = Db_provider_.new_(connect); + Db_conn_info connect = Db_conn_info__sqlite.make_(boot_url); + boot_provider = Db_provider_.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); diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java index b4a6f4af6..b34cf2392 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_fil.java @@ -22,8 +22,8 @@ public class Fsdb_db_atr_fil implements RlsAble { 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) { this.abc_mgr = abc_mgr; - Db_connect connect = create ? Db_connect_sqlite.make_(url) : Db_connect_sqlite.load_(url); - provider = Db_provider_.new_(connect); + Db_conn_info connect = create ? Db_conn_info__sqlite.make_(url) : Db_conn_info__sqlite.load_(url); + provider = Db_provider_.new_and_open_(connect); Sqlite_engine_.Pragma_page_size_4096(provider); tbl_dir = new Fsdb_dir_tbl(provider, create); tbl_fil = new Fsdb_fil_tbl(provider, create); @@ -40,7 +40,7 @@ public class Fsdb_db_atr_fil implements RlsAble { tbl_fil.Rls(); tbl_thm.Rls(); provider.Txn_mgr().Txn_end_all(); - provider.Rls(); + provider.Conn_term(); } public void Txn_open() { provider.Txn_mgr().Txn_bgn_if_none(); diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java index aadd01d7b..0951d8b9f 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_atr_mgr.java @@ -69,7 +69,7 @@ public class Fsdb_db_atr_mgr implements RlsAble { return rv; } private static Io_url url_(Io_url dir, int id) { - return dir.GenSubFil_ary("fsdb.atr.", Int_.XtoStr_PadBgn(id, 2), ".sqlite3"); + 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_bin_fil.java b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java index 597726e51..31c54891c 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_fil.java @@ -34,16 +34,16 @@ public class Fsdb_db_bin_fil implements RlsAble { public Db_provider Provider() { if (provider == null) { if (cmd_mode == Db_cmd_mode.Create) { - provider = Db_provider_.new_(Db_connect_sqlite.make_(url)); + provider = Db_provider_.new_and_open_(Db_conn_info__sqlite.make_(url)); Sqlite_engine_.Pragma_page_size_4096(provider); Fsdb_bin_tbl.Create_table(provider); } else - provider = Db_provider_.new_(Db_connect_sqlite.load_(url)); + provider = Db_provider_.new_and_open_(Db_conn_info__sqlite.load_(url)); } return provider; } private Db_provider provider; - public void Rls() {if (provider != null) provider.Rls();} + public void Rls() {if (provider != null) provider.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 { diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java index 45edffdc4..9ff2ee8e4 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_bin_mgr.java @@ -81,7 +81,7 @@ public class Fsdb_db_bin_mgr implements RlsAble { Fsdb_db_bin_fil cur = Get_cur(); if (cur != null) { cur.Provider().Txn_mgr().Txn_end_all(); - cur.Provider().Rls(); + cur.Provider().Conn_term(); } int new_itms_len = itms_len + 1; Fsdb_db_bin_fil[] new_itms = new Fsdb_db_bin_fil[new_itms_len]; @@ -94,6 +94,6 @@ public class Fsdb_db_bin_mgr implements RlsAble { this.Txn_open(); } private static Io_url url_(Io_url dir, int id) { - return dir.GenSubFil_ary("fsdb.bin.", Int_.XtoStr_PadBgn(id, 4), ".sqlite3"); + return dir.GenSubFil_ary("fsdb.bin.", Int_.Xto_str_pad_bgn(id, 4), ".sqlite3"); } } diff --git a/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java b/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java index 30bb9f3d1..730dc66a3 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_mnt_mgr.java @@ -44,7 +44,7 @@ public class Fsdb_mnt_mgr implements GfoInvkAble { Fsdb_mnt_tbl.Create_table(provider); Fsdb_mnt_tbl.Insert(provider, Mnt_idx_main, "fsdb.main", "fsdb.main"); Fsdb_mnt_tbl.Insert(provider, Mnt_idx_user, "fsdb.user", "fsdb.user"); - tbl_cfg.Insert("core", "mnt.insert_idx", Int_.XtoStr(Mnt_idx_user)); + tbl_cfg.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user)); } return Fsdb_mnt_tbl.Select_all(provider); } diff --git a/400_xowa/src/gplx/intl/String_surrogate_utl.java b/400_xowa/src/gplx/intl/String_surrogate_utl.java index 568ed9321..a3e1eaf79 100644 --- a/400_xowa/src/gplx/intl/String_surrogate_utl.java +++ b/400_xowa/src/gplx/intl/String_surrogate_utl.java @@ -24,8 +24,9 @@ public class String_surrogate_utl { int char_count = 0, codepoint_count = 0; byte_pos = byte_bgn; while (true) { - if (stop_idx == (stop_idx_is_char ? char_count : codepoint_count)) return codepoint_count - char_count; - if (byte_pos >= src_len) throw Err_.new_("codepoint_idx is not in string; stop_idx={0} stop_idx_is_char={1} byte_bgn={2} string={3}", stop_idx, stop_idx_is_char, byte_bgn, String_.new_utf8_(src)); + if ( stop_idx == (stop_idx_is_char ? char_count : codepoint_count) // requested # of chars found + || byte_pos >= src_len // eos reached; DATE:2014-09-02 + ) return codepoint_count - char_count; int char_len_in_bytes = gplx.intl.Utf8_.Len_of_char_by_1st_byte(src[byte_pos]); ++char_count; // char_count always incremented by 1 codepoint_count += (char_len_in_bytes == 4) ? 2 : 1; // codepoint_count incremented by 2 if surrogate pair; else 1 diff --git a/400_xowa/src/gplx/intl/String_surrogate_utl_tst.java b/400_xowa/src/gplx/intl/String_surrogate_utl_tst.java index c8e7d333e..e4035e277 100644 --- a/400_xowa/src/gplx/intl/String_surrogate_utl_tst.java +++ b/400_xowa/src/gplx/intl/String_surrogate_utl_tst.java @@ -28,6 +28,7 @@ public class String_surrogate_utl_tst { fxt.Test_count_surrogates__char_idx (test_str, 7, 2, 0, 10); // bî fxt.Test_count_surrogates__char_idx (test_str, 7, 3, 1, 14); // bî𡼾 fxt.Test_count_surrogates__char_idx (test_str, 0, 6, 2, 14); // aé𡼾bî𡼾 + fxt.Test_count_surrogates__char_idx (test_str, 14, 7, 0, 14); // PURPOSE: test out of bounds; DATE:2014-09-02 } @Test public void Codepoint_idx() { String test_str = "aé𡼾bî𡼾"; diff --git a/400_xowa/src/gplx/json/Json_itm_tmp.java b/400_xowa/src/gplx/json/Json_itm_tmp.java index 892e09f97..d2fd6d458 100644 --- a/400_xowa/src/gplx/json/Json_itm_tmp.java +++ b/400_xowa/src/gplx/json/Json_itm_tmp.java @@ -27,5 +27,5 @@ public class Json_itm_tmp implements Json_itm { public boolean Data_eq(byte[] comp) {return false;} public void Clear() {} public static Json_itm new_str_(String v) {return new Json_itm_tmp(Json_itm_.Tid_string, "\"" + v + "\"");} - public static Json_itm new_int_(int v) {return new Json_itm_tmp(Json_itm_.Tid_int, Int_.XtoStr(v));} + public static Json_itm new_int_(int v) {return new Json_itm_tmp(Json_itm_.Tid_int, Int_.Xto_str(v));} } diff --git a/400_xowa/src/gplx/json/Json_kv_ary_srl.java b/400_xowa/src/gplx/json/Json_kv_ary_srl.java index 64f5effc0..1980abddf 100644 --- a/400_xowa/src/gplx/json/Json_kv_ary_srl.java +++ b/400_xowa/src/gplx/json/Json_kv_ary_srl.java @@ -28,7 +28,7 @@ public class Json_kv_ary_srl { } private static Object Val_by_itm(Json_itm itm) { switch (itm.Tid()) { - case Json_itm_.Tid_bool: return Bool_.XtoStr_lower(Bool_.cast_(itm.Data())); + case Json_itm_.Tid_bool: return Bool_.Xto_str_lower(Bool_.cast_(itm.Data())); case Json_itm_.Tid_int: case Json_itm_.Tid_null: case Json_itm_.Tid_string: @@ -44,7 +44,7 @@ public class Json_kv_ary_srl { KeyVal[] rv = new KeyVal[subs_len]; for (int i = 0; i < subs_len; i++) { Json_itm sub = itm.Subs_get_at(i); - KeyVal kv = KeyVal_.new_(Int_.XtoStr(i + Int_.Base1), Val_by_itm(sub)); + KeyVal kv = KeyVal_.new_(Int_.Xto_str(i + Int_.Base1), Val_by_itm(sub)); rv[i] = kv; } return rv; diff --git a/400_xowa/src/gplx/json/Json_kv_ary_srl_tst.java b/400_xowa/src/gplx/json/Json_kv_ary_srl_tst.java index 923966645..a1af1852f 100644 --- a/400_xowa/src/gplx/json/Json_kv_ary_srl_tst.java +++ b/400_xowa/src/gplx/json/Json_kv_ary_srl_tst.java @@ -45,6 +45,6 @@ class Json_kv_ary_srl_fxt { public KeyVal kv_obj_(String key, Object val) {return KeyVal_.new_(key, val);} public KeyVal kv_str_(String key, String val) {return KeyVal_.new_(key, val);} public KeyVal kv_int_(String key, int val) {return KeyVal_.new_(key, val);} - public KeyVal kv_bool_(String key, boolean val) {return KeyVal_.new_(key, Bool_.XtoStr_lower(val));} - public KeyVal kv_dec_(String key, DecimalAdp val) {return KeyVal_.new_(key, val.XtoStr());} + public KeyVal kv_bool_(String key, boolean val) {return KeyVal_.new_(key, Bool_.Xto_str_lower(val));} + public KeyVal kv_dec_(String key, DecimalAdp val) {return KeyVal_.new_(key, val.Xto_str());} } diff --git a/400_xowa/src/gplx/json/Json_parser.java b/400_xowa/src/gplx/json/Json_parser.java index 8ae07fb55..2084c1898 100644 --- a/400_xowa/src/gplx/json/Json_parser.java +++ b/400_xowa/src/gplx/json/Json_parser.java @@ -161,7 +161,7 @@ public class Json_parser { } Err err_(byte[] src, int bgn, String fmt, Object... args) {return err_(src, bgn, src.length, fmt, args);} Err err_(byte[] src, int bgn, int src_len, String fmt, Object... args) { - String msg = String_.Format(fmt, args) + " " + Int_.XtoStr(bgn) + " " + String_.new_utf8_len_safe_(src, bgn, 20); + String msg = String_.Format(fmt, args) + " " + Int_.Xto_str(bgn) + " " + String_.new_utf8_len_safe_(src, bgn, 20); return Err_.new_(msg); } } diff --git a/400_xowa/src/gplx/php/Php_srl_parser.java b/400_xowa/src/gplx/php/Php_srl_parser.java index 357223b97..36178e815 100644 --- a/400_xowa/src/gplx/php/Php_srl_parser.java +++ b/400_xowa/src/gplx/php/Php_srl_parser.java @@ -190,7 +190,7 @@ public class Php_srl_parser { } Err err_(byte[] raw, int bgn, String fmt, Object... args) {return err_(raw, bgn, raw.length, fmt, args);} Err err_(byte[] raw, int bgn, int raw_len, String fmt, Object... args) { - String msg = String_.Format(fmt, args) + " " + Int_.XtoStr(bgn) + " " + String_.new_utf8_len_safe_(raw, bgn, 20); + String msg = String_.Format(fmt, args) + " " + Int_.Xto_str(bgn) + " " + String_.new_utf8_len_safe_(raw, bgn, 20); return Err_.new_(msg); } } diff --git a/400_xowa/src/gplx/php/Php_tkn.java b/400_xowa/src/gplx/php/Php_tkn.java index ca58fe7de..0babc6f26 100644 --- a/400_xowa/src/gplx/php/Php_tkn.java +++ b/400_xowa/src/gplx/php/Php_tkn.java @@ -23,7 +23,7 @@ public interface Php_tkn { } class Php_tkn_ { public static final byte Tid_txt = 1, Tid_declaration = 2, Tid_ws = 3, Tid_comment = 4, Tid_var = 5, Tid_eq = 6, Tid_eq_kv = 7, Tid_semic = 8, Tid_comma = 9, Tid_paren_bgn = 10, Tid_paren_end = 11, Tid_null = 12, Tid_false = 13, Tid_true = 14, Tid_ary = 15, Tid_num = 16, Tid_quote = 17, Tid_brack_bgn = 18, Tid_brack_end = 19; - public static String Xto_str(byte tid) {return Byte_.XtoStr(tid);} + public static String Xto_str(byte tid) {return Byte_.Xto_str(tid);} } abstract class Php_tkn_base implements Php_tkn { public abstract byte Tkn_tid(); diff --git a/400_xowa/src/gplx/srls/dsvs/Dsv_tbl_parser_int_tst.java b/400_xowa/src/gplx/srls/dsvs/Dsv_tbl_parser_int_tst.java index 0ab4a2a8a..984e761ca 100644 --- a/400_xowa/src/gplx/srls/dsvs/Dsv_tbl_parser_int_tst.java +++ b/400_xowa/src/gplx/srls/dsvs/Dsv_tbl_parser_int_tst.java @@ -34,7 +34,7 @@ class Mok_int_itm implements XtoStrAble { private String fld_0; private int fld_1, fld_2; public Mok_int_itm(String fld_0, int fld_1, int fld_2) {this.fld_0 = fld_0; this.fld_1 = fld_1; this.fld_2 = fld_2;} - public String XtoStr() {return String_.Concat_with_str("|", fld_0, Int_.XtoStr(fld_1), Int_.XtoStr(fld_2));} + public String XtoStr() {return String_.Concat_with_str("|", fld_0, Int_.Xto_str(fld_1), Int_.Xto_str(fld_2));} } class Mok_int_mgr extends Mok_mgr_base { public void Clear() {itms.Clear();} diff --git a/400_xowa/src/gplx/xowa/Xoa_app.java b/400_xowa/src/gplx/xowa/Xoa_app.java index d76562b6e..7bb980509 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app.java +++ b/400_xowa/src/gplx/xowa/Xoa_app.java @@ -83,15 +83,16 @@ public class Xoa_app implements GfoInvkAble { } 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(); - log_wtr.Term(); - log_mgr.Rls(); - if (Scrib_core.Core() != null) Scrib_core.Core().Term(); - wiki_mgr.Rls(); + 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; diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 7990544e3..3222a95cc 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -23,7 +23,7 @@ public class Xoa_app_ { boot_mgr.Run(args); } public static final String Name = "xowa"; - public static final String Version = "1.9.1.1"; + public static final String Version = "1.9.2.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys; public static String User_agent = ""; 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 e3421bedd..cabbb154e 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 @@ -36,9 +36,9 @@ public class Xoapi_font implements GfoInvkAble { app.Html_mgr().Page_mgr().Font_enabled_(enabled); app.Html_mgr().Page_mgr().Font_size_(html_font_size); app.Cfg_mgr().Set_by_app("app.html.page.font_enabled", "y"); - app.Cfg_mgr().Set_by_app("app.html.page.font_size", Float_.XtoStr(app.Html_mgr().Page_mgr().Font_size())); + app.Cfg_mgr().Set_by_app("app.html.page.font_size", Float_.Xto_str(app.Html_mgr().Page_mgr().Font_size())); app.Gui_mgr().Win_cfg().Font().Size_(gui_font_size); - app.Cfg_mgr().Set_by_app("app.gui.win_opts.font.size", Float_.XtoStr(gui_font_size)); + app.Cfg_mgr().Set_by_app("app.gui.win_opts.font.size", Float_.Xto_str(gui_font_size)); app.Cfg_mgr().Db_save_txt(); app.Gui_mgr().Browser_win().Page__reload(); // NOTE: force reload; needed if viewing Help:Options/HTML, else Font size won't update } diff --git a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__anchor_tst.java b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__anchor_tst.java index aea4e899b..69ca056d0 100644 --- a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__anchor_tst.java +++ b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__anchor_tst.java @@ -34,4 +34,9 @@ public class Xoa_ttl__anchor_tst { @Test public void Anchor_and_slash() { // PURPOSE: slash in anchor was being treated as a subpage; DATE:2014-01-14 fxt.Init_ttl("A#b/c").Expd_full_txt("A").Expd_anch_txt("b/c").Expd_leaf_txt("A").Test(); // NOTE: Leaf_txt should be Page_txt; used to fail } + @Test public void Decode_ncr() { // PURPOSE: convert # to #; PAGE:en.s:The_English_Constitution_(1894) DATE:2014-09-07 + fxt.Init_ttl("A#b").Expd_full_txt("A").Expd_page_txt("A").Expd_anch_txt("b").Test(); + fxt.Init_ttl("A#b").Expd_full_txt("A").Expd_page_txt("A").Expd_anch_txt("b").Test(); + fxt.Init_ttl("A$b").Expd_full_txt("A$b").Expd_page_txt("A$b").Expd_anch_txt("").Test(); + } } \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java index d256b54d7..5edfb0244 100644 --- a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java +++ b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java @@ -21,6 +21,7 @@ public class Xoa_ttl__html_entity_tst { @Before public void init() {fxt.Reset();} private Xoa_ttl_fxt fxt = new Xoa_ttl_fxt(); @Test public void Eacute() {fxt.Init_ttl("é").Expd_page_txt("é").Test();} //É @Test public void Amp_at_end() {fxt.Init_ttl("Bisc &").Expd_page_txt("Bisc &").Test();} - @Test public void Ltr_a() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();} + @Test public void Ncr_dec() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();} + @Test public void Ncr_hex() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();} @Test public void Nbsp() {fxt.Init_ttl("A b").Expd_page_txt("A b").Test();} // NOTE:   must convert to space; EX:w:United States [[Image:Dust Bowl - Dallas, South Dakota 1936.jpg|220px|alt=]] } \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java index 96686d03f..570409496 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java @@ -38,7 +38,7 @@ public class Xob_fxt { 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_.XtoStr_PadBgn(ns_id, 3), 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 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)); 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 63e220aad..c285eb782 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 @@ -138,7 +138,7 @@ public class Xob_wiki_cfg_bldr_tst { if (!String_.Eq(ns_nde.Name(), "ns")) continue; int id = Int_.parse_(ns_nde.Atrs().FetchValOr("id", "-1")); String name = String_.Replace(String_.Replace(ns_nde.Text_inner(), " ", "_"), "'", "''"); - sb.Add(Int_.XtoStr(id)).Add("|").Add(String_.Trim(name)).Add_char_nl(); + sb.Add(Int_.Xto_str(id)).Add("|").Add(String_.Trim(name)).Add_char_nl(); } sb.Add("\");');\n"); } 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 09f6e870c..c1bf60eb2 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 @@ -77,6 +77,6 @@ class Xob_diff_regy_sql_runner { throw Err_.unhandled(fsdb_db_tid); } public static String Build_url(String wiki_domain, int fsdb_db_id, String fsdb_db_type) { - return String_.Format("{0}-{1}-{2}.sql", wiki_domain, Int_.XtoStr_PadBgn(fsdb_db_id, 3), fsdb_db_type); + return String_.Format("{0}-{1}-{2}.sql", wiki_domain, Int_.Xto_str_pad_bgn(fsdb_db_id, 3), fsdb_db_type); } } 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 d923d0ab5..b5e223d45 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 @@ -67,12 +67,12 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm private void Make_delete_sql_file(Bry_bfr atr_bfr, Bry_bfr bin_bfr, Io_url sql_tmp_dir, int cur_db_id, int cur_count) { Make_delete_sql_file(atr_bfr, sql_tmp_dir, cur_db_id, cur_count, Fsdb_db_tid_.Tid_atr); Make_delete_sql_file(bin_bfr, sql_tmp_dir, cur_db_id, cur_count, Fsdb_db_tid_.Tid_bin); - app.Usr_dlg().Note_many("", "", "file.diff:sql generated: db_id=~{0} count=~{1}", Int_.XtoStr_PadBgn_space(cur_db_id, 3), Int_.XtoStr_PadBgn_space(cur_count, 7)); + app.Usr_dlg().Note_many("", "", "file.diff:sql generated: db_id=~{0} count=~{1}", Int_.Xto_str_pad_bgn_space(cur_db_id, 3), Int_.Xto_str_pad_bgn_space(cur_count, 7)); } private void Make_delete_sql_file(Bry_bfr bfr, Io_url sql_dir, int db_id, int cur_count, byte db_tid) { if (db_id != -1 && cur_count > 0) { // do not write 1st bfr bfr.Add_str("COMMIT;\n"); - String sql_url_name = String_.Format("{0}-{1}-{2}.sql", wiki.Domain_str(), Int_.XtoStr_PadBgn(db_id, 3), Fsdb_db_tid_.Xto_key(db_tid)); + String sql_url_name = String_.Format("{0}-{1}-{2}.sql", wiki.Domain_str(), Int_.Xto_str_pad_bgn(db_id, 3), Fsdb_db_tid_.Xto_key(db_tid)); Io_url sql_url = sql_dir.GenSubFil(sql_url_name); Io_mgr._.SaveFilBfr(sql_url, bfr); } @@ -81,12 +81,12 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm } private void Make_delete_sql_item(Bry_bfr atr_bfr, Bry_bfr bin_bfr, byte diff_is_orig, int diff_db_id, int diff_fil_id, int diff_thm_id) { if (diff_is_orig == Byte_.Zero) { - atr_bfr.Add_str("DELETE FROM fsdb_xtn_thm WHERE thm_id = " + Int_.XtoStr(diff_thm_id) + ";\n"); - bin_bfr.Add_str("DELETE FROM fsdb_bin WHERE bin_owner_id = " + Int_.XtoStr(diff_thm_id) + ";\n"); + atr_bfr.Add_str("DELETE FROM fsdb_xtn_thm WHERE thm_id = " + Int_.Xto_str(diff_thm_id) + ";\n"); + bin_bfr.Add_str("DELETE FROM fsdb_bin WHERE bin_owner_id = " + Int_.Xto_str(diff_thm_id) + ";\n"); } else { - atr_bfr.Add_str("UPDATE fsdb_fil SET fil_bin_db_id = -1 WHERE fil_id = " + Int_.XtoStr(diff_fil_id) + ";\n"); - bin_bfr.Add_str("DELETE FROM fsdb_bin WHERE bin_owner_id = " + Int_.XtoStr(diff_fil_id) + ";\n"); + atr_bfr.Add_str("UPDATE fsdb_fil SET fil_bin_db_id = -1 WHERE fil_id = " + Int_.Xto_str(diff_fil_id) + ";\n"); + bin_bfr.Add_str("DELETE FROM fsdb_bin WHERE bin_owner_id = " + Int_.Xto_str(diff_fil_id) + ";\n"); } } } 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 5c3bdec6a..a4a3ecca7 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 @@ -63,13 +63,13 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { page_id_bmk = Int_.MaxValue; lnki_id_bmk = Int_.MaxValue; } - usr_dlg.Note_many("", "", "done: ~{0} ~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).XtoStr("#,###.000")); + usr_dlg.Note_many("", "", "done: ~{0} ~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).Xto_str("#,###.000")); this.Txn_save(); tbl_cfg.Delete(Cfg_fsdb_make, Cfg_page_id_bmk); tbl_cfg.Delete(Cfg_fsdb_make, Cfg_lnki_id_bmk); // delete bmks if future reruns are needed; DATE:2014-08-20 trg_fsdb_mgr.Txn_save(); trg_fsdb_mgr.Rls(); // save changes and rls all connections db_select_stmt.Rls(); - provider.Rls(); + provider.Conn_term(); } public void Cmd_print() {} private int db_reset_tries_count = 0, db_reset_tries_max = 5; @@ -130,8 +130,8 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { private boolean Init_bmk(Xodb_xowa_cfg_tbl tbl_cfg) { String page_id_str = tbl_cfg.Select_val(Cfg_fsdb_make, Cfg_page_id_bmk); if (page_id_str == null) { // bmks not found; new db; insert; - tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_page_id_bmk , Int_.XtoStr(page_id_bmk)); - tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_lnki_id_bmk , Int_.XtoStr(lnki_id_bmk)); + tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_page_id_bmk , Int_.Xto_str(page_id_bmk)); + tbl_cfg.Insert_str(Cfg_fsdb_make, Cfg_lnki_id_bmk , Int_.Xto_str(lnki_id_bmk)); if (page_id_bmk == -1) page_id_bmk = 0; if (lnki_id_bmk == -1) 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 bfa0ffe5e..d1cf225ac 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 @@ -155,7 +155,7 @@ class Xob_lnki_temp_wkr_ { 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_.XtoStr_fmt(id, "0000"), alias); + wiki.App().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_orig_qry_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java index e732ecd3d..5149dc774 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 @@ -55,7 +55,7 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd { String sql = String_.Concat_lines_nl_skip_last ( "SELECT lnki_ttl" , "FROM orig_regy" - , "WHERE lnki_repo >= '" + Byte_.XtoStr(prv_repo_id) + "'" + , "WHERE lnki_repo >= '" + Byte_.Xto_str(prv_repo_id) + "'" , "AND lnki_ttl > '" + prv_ttl + "'" , "AND oimg_orig_page_id = -1;" ); 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 ec8f6b431..784ca3edd 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 @@ -22,11 +22,12 @@ class Xob_orig_regy_tbl { public static void Create_data(Gfo_usr_dlg usr_dlg, Db_provider 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) { usr_dlg.Prog_many("", "", "inserting lnki_regy"); p.Exec_sql(Sql_create_data); - Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_ttl); + Sqlite_engine_.Idx_create(usr_dlg, p, "orig_regy", Idx_ttl_local); Sqlite_engine_.Db_attach(p, "page_db", file_registry_db.Url().Raw()); 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; 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 && local_is_remote // repo_0 = repo_1 @@ -34,29 +35,34 @@ class Xob_orig_regy_tbl { ) { repo_0_tid = Xof_repo_itm.Repo_remote; repo_1_tid = Xof_repo_itm.Repo_local; + local_wiki = repo_1_wiki; } - Create_data_for_repo(usr_dlg, p, Byte_.int_(repo_0_tid), repo_0_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); + Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.int_(repo_0_tid), repo_0_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); if (!local_is_remote) { // only run for repo_1 if local != remote; only affects commons - Create_data_for_repo(usr_dlg, p, Byte_.int_(repo_1_tid), repo_1_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); + Create_data_for_repo(usr_dlg, p, local_wiki, Byte_.int_(repo_1_tid), repo_1_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); if (wiki_ns_for_file_is_case_match_all) { Io_url repo_remote_dir = repo_0_is_remote ? repo_0_dir : repo_1_dir; - Create_data_for_cs(usr_dlg, p, repo_remote_dir); + Create_data_for_cs(usr_dlg, p, local_wiki, repo_remote_dir); } } 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_provider cur, byte wiki_tid, Io_url join) { + private static void Create_data_for_repo(Gfo_usr_dlg usr_dlg, Db_provider cur, Xow_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 + if (wiki_has_cs_file) + Sqlite_engine_.Idx_create(usr_dlg, cur, "orig_regy", Idx_ttl_remote); Sqlite_engine_.Db_attach(cur, "image_db", join.Raw()); - cur.Exec_sql(String_.Format(Sql_update_repo_page, wiki_tid)); - cur.Exec_sql(String_.Format(Sql_update_repo_redirect, wiki_tid)); + cur.Exec_sql(String_.Format(Sql_update_repo_page, repo_tid, lnki_ttl_fld)); + 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_provider p, Io_url repo_remote_dir) { + private static void Create_data_for_cs(Gfo_usr_dlg usr_dlg, Db_provider p, Xow_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, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); + Create_data_for_repo(usr_dlg, p, local_wiki, Xof_repo_itm.Repo_remote, repo_remote_dir.GenSubFil(Xodb_db_file.Name__wiki_image)); p.Exec_sql(Xob_lnki_regy_tbl.Sql_cs_mark_changed); // lnki_regy: update lnki_commons_flag p.Exec_sql(Xob_lnki_regy_tbl.Sql_cs_update_ttls); // lnki_regy: update cs } @@ -68,8 +74,9 @@ class Xob_orig_regy_tbl { , Fld_orig_media_type = "orig_media_type", Fld_orig_minor_mime = "orig_minor_mime", Fld_orig_file_ext = "orig_file_ext", Fld_orig_timestamp = "orig_timestamp" ; private static final Db_idx_itm - Idx_ttl = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__ttl ON orig_regy (lnki_ttl);") - , Idx_xfer_temp = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__xfer_temp ON orig_regy (lnki_ttl, orig_file_ttl, orig_timestamp);") + Idx_ttl_local = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__ttl_local ON orig_regy (lnki_ttl);") + , Idx_ttl_remote = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__ttl_remote ON orig_regy (lnki_commons_ttl, lnki_ttl);") + , Idx_xfer_temp = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS orig_regy__xfer_temp ON orig_regy (lnki_ttl, orig_file_ttl, orig_timestamp);") ; private static final String Tbl_sql = String_.Concat_lines_nl @@ -134,9 +141,9 @@ class Xob_orig_regy_tbl { , ", i.img_minor_mime" , ", i.img_timestamp" , "FROM orig_regy o" - , " JOIN image_db.image i ON o.lnki_ttl = i.img_name" - , " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 0 AND o.lnki_ttl = m.src_ttl" - , "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20 + , " JOIN image_db.image i ON {1} = i.img_name" + , " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 0 AND {1} = m.src_ttl" + , "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20 // , "WHERE i.img_timestamp > o.orig_timestamp" // NOTE: this handles an image in local and remote by taking later version; DATE:2014-07-22 , "ORDER BY 1" // must order by lnki_id since it is PRIMARY KEY, else sqlite will spend hours shuffling rows in table , ";" @@ -164,9 +171,9 @@ class Xob_orig_regy_tbl { , ", i.img_minor_mime" , ", i.img_timestamp" , "FROM orig_regy o" - , " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 1 AND o.lnki_ttl = m.src_ttl" + , " JOIN page_db.page_regy m ON m.repo_id = {0} AND m.itm_tid = 1 AND {1} = m.src_ttl" , " JOIN image_db.image i ON m.trg_ttl = i.img_name" - , "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20 + , "WHERE o.orig_file_ttl IS NULL" // NOTE: only insert if file doesn't exist; changed from timestamp b/c old images may exist in both wikis; EX:ar.n:File:Facebook.png; DATE:2014-08-20 // , "WHERE i.img_timestamp > o.orig_timestamp" // NOTE: this handles an image in local and remote by taking later version; DATE:2014-07-22 , "ORDER BY 1" // must order by lnki_id since it is PRIMARY KEY, else sqlite will spend hours shuffling rows in table , ";" 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 aab64a5d1..227b1f2e9 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 @@ -41,7 +41,7 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { Db_provider search_provider = search_db.Provider(); usr_dlg.Log_many("", "", "search_title.cmd: droping tables"); Sqlite_engine_.Tbl_delete_many(search_provider, Xodb_tbl_search_title_temp.Tbl_name, Xodb_search_title_word_tbl.Tbl_name, Xodb_search_title_page_tbl.Tbl_name); - usr_dlg.Log_many("", "", "search_title.cmd: creating db connection; conn=~{0}", search_provider.ConnectInfo().Raw_of_db_connect()); + usr_dlg.Log_many("", "", "search_title.cmd: creating db connection; conn=~{0}", search_provider.Conn_info().Str_raw()); Xodb_tbl_search_title_temp search_temp_tbl = new Xodb_tbl_search_title_temp().Create_table(search_provider); try { usr_dlg.Log_many("", "", "search_title.cmd: starting select;"); 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 767d52488..e390980ff 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 @@ -45,7 +45,7 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd Xow_ns ns = wiki.Ns_mgr().Ords_ary()[i]; if (ns.Id() < 0) continue; bfr.Add_byte_nl(); - Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_articles_in_ns_, ns.Num_str(), Int_.XtoStr_PadBgn(ns.Count(), 10)); + Gen_call(Bool_.N, bfr, Xow_wiki_stats.Invk_number_of_articles_in_ns_, ns.Num_str(), Int_.Xto_str_pad_bgn(ns.Count(), 10)); } bfr.Add_byte_nl().Add_byte(Byte_ascii.Semic).Add_byte_nl(); Io_url wiki_gfs = Wiki_gfs_url(wiki); 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 521f9390e..266899f7d 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 @@ -34,7 +34,7 @@ public abstract class Xoctg_hiddencat_parser_base extends Xob_sql_dump_base impl case Fld_val: if (!cur_is_hiddencat) {data.Cancel_row_y_(); return;} Exec_hook(file_bfr, cur_id, cur_is_hiddencat); - if (++rows % 100000 == 0) usr_dlg.Prog_many("", "", "reading row ~{0}", Int_.XtoStr_fmt(rows, "#,##0")); + if (++rows % 100000 == 0) usr_dlg.Prog_many("", "", "reading row ~{0}", Int_.Xto_str_fmt(rows, "#,##0")); break; } } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java index 0e1edaaa4..559fd7797 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java @@ -56,7 +56,7 @@ public class Xoctg_hiddencat_parser_sql_tst { for (int i = 0; i < len; i++) { int ctg_id = ctgs[i]; Xodb_category_itm ctg_itm = tbl.Select(provider, ctg_id); - Tfds.Eq(expd_hidden, ctg_itm.Hidden(), Int_.XtoStr(ctg_id)); + Tfds.Eq(expd_hidden, ctg_itm.Hidden(), Int_.Xto_str(ctg_id)); } } } diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java index 032b12b11..e26a34e58 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_bmk_mgr.java @@ -71,11 +71,11 @@ public class Xob_bmk_mgr implements GfoInvkAble { } public void Save() { if (repo_enable && repo_dirty) { - Save(Cfg_repo_prv, Byte_.XtoStr(repo_prv)); + Save(Cfg_repo_prv, Byte_.Xto_str(repo_prv)); repo_dirty = false; } if (ns_enable && ns_dirty) { - Save(Cfg_ns_prv, Int_.XtoStr(ns_prv)); + Save(Cfg_ns_prv, Int_.Xto_str(ns_prv)); ns_dirty = false; } if (ttl_enable && ttl_dirty) { 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 e0ca750b5..911c4f282 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 @@ -39,7 +39,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo ctx = wiki.Ctx(); root = ctx.Tkn_mkr().Root(Bry_.Empty); wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql - wiki.Db_mgr_as_sql().Init_load(Db_connect_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable provider which is closed) + wiki.Db_mgr_as_sql().Init_load(Db_conn_info_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable provider which is closed) db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr(); db_ary = Xob_dump_src_ttl.Init_text_files_ary(db_fsys_mgr); poll_interval = poll_mgr.Poll_interval(); @@ -171,7 +171,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo Exec_commit(-1, -1, -1, Bry_.Empty); Exec_end_hook(); Free(); - usr_dlg.Note_many("", "", "done: ~{0} ~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).XtoStr("#,###.000")); + usr_dlg.Note_many("", "", "done: ~{0} ~{1}", exec_count, DecimalAdp_.divide_safe_(exec_count, Env_.TickCount_elapsed_in_sec(time_bgn)).Xto_str("#,###.000")); } private void Free() { ctx.App().Free_mem(true); @@ -278,13 +278,13 @@ class Xob_rate_mgr { int dif = (int)(end - bgn) / 1000; DecimalAdp rate = DecimalAdp_.divide_safe_(count, dif); save_bfr - .Add_str(rate.XtoStr("#,##0.000")).Add_byte_pipe() + .Add_str(rate.Xto_str("#,##0.000")).Add_byte_pipe() .Add_int_variable(count).Add_byte_pipe() .Add_int_variable(dif).Add_byte_nl() ; Io_mgr._.AppendFilByt(log_file, save_bfr.XtoAryAndClear()); } - public String Rate_as_str() {return Int_.XtoStr(Rate());} + public String Rate_as_str() {return Int_.Xto_str(Rate());} public int Rate() { int elapsed = Env_.TickCount_elapsed_in_sec(time_bgn); return Math_.Div_safe_as_int(item_len, elapsed); 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 89ca833c6..ab7532c34 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 @@ -66,9 +66,9 @@ public class Xob_xfer_update_cmd extends Xob_itm_basic_base implements Xob_cmd { , ", cur.lnki_count" , ", CASE" , " WHEN old.lnki_ttl IS NULL THEN" // not in old table; mark todo - , " " + Byte_.XtoStr(Xob_xfer_regy_tbl.Status_todo) + , " " + Byte_.Xto_str(Xob_xfer_regy_tbl.Status_todo) , " ELSE" // in old table; mark processed - , " " + Byte_.XtoStr(Xob_xfer_regy_tbl.Status_ignore_processed) + , " " + Byte_.Xto_str(Xob_xfer_regy_tbl.Status_ignore_processed) , " END" , ", cur.xfer_bin_tid" , ", cur.xfer_bin_msg" 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 58fb32702..0fe593acb 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 @@ -135,7 +135,7 @@ class Xob_subpage_tst_fxt { int ns_len = wiki.Ns_list().Count(); for (int i = 0; i < ns_len; i++) { Xob_subpage_ns ns = (Xob_subpage_ns)wiki.Ns_list().FetchAt(i); - sb.Add(ns.Id()).Add("=").Add(Bool_.XtoStr_lower(ns.Enabled())).Add_char_nl(); + sb.Add(ns.Id()).Add("=").Add(Bool_.Xto_str_lower(ns.Enabled())).Add_char_nl(); } sb.Add_char_nl(); } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_file.java b/400_xowa/src/gplx/xowa/dbs/Xodb_file.java index 7e12a28cd..8f787321e 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_connect Connect() {return connect;} public Xodb_file Connect_(Db_connect v) {connect = v; return this;} private Db_connect connect; + public Db_conn_info Connect() {return connect;} public Xodb_file Connect_(Db_conn_info v) {connect = v; return this;} private Db_conn_info connect; public Db_provider Provider() { - if (provider == null) provider = Db_provider_pool._.FetchOrNew(connect); + if (provider == null) provider = Db_provider_pool._.Get_or_new(connect); return provider; } private Db_provider provider; public void Provider_(Db_provider p) {provider = p;} @@ -36,7 +36,7 @@ public class Xodb_file { if (provider == null) return; try { provider.Txn_mgr().Txn_end_all(); // close any open transactions - provider.Rls(); + provider.Conn_term(); } finally {provider = 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);} 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 c91364609..718a6ef5a 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java @@ -33,7 +33,7 @@ public class Xodb_fsys_mgr { for (int i = 0; i < files_ary_len; i++) { Xodb_file file = files_ary[i]; Io_url url = trg_dir.GenSubFil(file.Url_rel()); // relative name only - file.Connect_(Db_connect_.sqlite_(url)).Url_(url); + file.Connect_(Db_conn_info_.sqlite_(url)).Url_(url); switch (file.Tid()) { case Xodb_file_tid.Tid_core : file.Provider_(p); Set_file_core(file); break; case Xodb_file_tid.Tid_category : if (category_provider_core_null) {Provider_ctg_(file); category_provider_core_null = false;} break; @@ -80,13 +80,13 @@ public class Xodb_fsys_mgr { for (int i = 0; i < files_ary_len; i++) { Xodb_file file = files_ary[i]; if (Byte_.In(file.Tid(), tids)) - Sqlite_engine_.Idx_create(usr_dlg, file.Provider(), Int_.XtoStr(file.Id()), idxs); + Sqlite_engine_.Idx_create(usr_dlg, file.Provider(), Int_.Xto_str(file.Id()), idxs); } } public Xodb_file Make(byte file_tid) { int file_idx = files_ary_len; Io_url url = Create_sqlite3(src_dir, trg_dir, wiki_name, file_idx); - Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_connect_.sqlite_(url)); + Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_conn_info_.sqlite_(url)); Xodb_xowa_cfg_tbl.Insert_str(rv.Provider(), "db.meta", "type_name", Xodb_file_tid.Xto_key(file_tid)); files_ary = (Xodb_file[])Array_.Resize(files_ary, files_ary_len + 1); files_ary[files_ary_len++] = rv; @@ -98,7 +98,7 @@ public class Xodb_fsys_mgr { } private static Io_url Create_sqlite3(Io_url src_dir, Io_url trg_dir, String wiki_name, int file_idx) { Io_url src_fil = src_dir.GenSubFil("xowa.sqlite3"); // /bin/any/sql/xowa/xowa.sqlite3 - Io_url trg_fil = trg_dir.GenSubFil_ary(wiki_name, ".", Int_.XtoStr_PadBgn(file_idx, 3), ".sqlite3"); // /wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 + Io_url trg_fil = trg_dir.GenSubFil_ary(wiki_name, ".", Int_.Xto_str_pad_bgn(file_idx, 3), ".sqlite3"); // /wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 Io_mgr._.CopyFil(src_fil, trg_fil, true); return trg_fil; } 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 d803ee09e..a06e76f3a 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 @@ -181,7 +181,7 @@ class Xoctg_mok_ctg { int ns_id = Xow_ns_.Id_main; byte ctg_tid = Xoa_ctg_mgr.Tid_page; for (int i = bgn; i < end; i++) { - byte[] ttl = Bry_.Add(ttl_prefix, Bry_.new_ascii_(Int_.XtoStr_PadBgn(i, 3))); + byte[] ttl = Bry_.Add(ttl_prefix, Bry_.new_ascii_(Int_.Xto_str_pad_bgn(i, 3))); Xoctg_page_xtn db_ctg = new Xoctg_page_xtn(ctg_tid, ttl); Xodb_page page = new Xodb_page(); int page_id = next_id.Val_add_post(); 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 89a69cc98..dbde349c4 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java @@ -73,8 +73,8 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { Core_provider_(fsys_mgr.Provider_core()); state = State_make; } - public void Init_load(Db_connect connect) { - Db_provider provider = Db_provider_pool._.FetchOrNew(connect); + public void Init_load(Db_conn_info connect) { + Db_provider provider = Db_provider_pool._.Get_or_new(connect); Xodb_file[] files = tbl_db.Select_all(provider); fsys_mgr.Init_by_files(provider, files); Core_provider_(provider); @@ -157,7 +157,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { // 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; - tbl_cfg.Insert_str(grp, key, Byte_.XtoStr(category_version)); + tbl_cfg.Insert_str(grp, key, Byte_.Xto_str(category_version)); } public void Delete_by_tid(byte tid) { Xodb_file[] ary = fsys_mgr.Files_ary(); @@ -166,12 +166,12 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { Xodb_file file = ary[i] ; if (file.Tid() != tid) continue; file.Rls(); - gplx.dbs.Db_connect_sqlite sqlite = (gplx.dbs.Db_connect_sqlite)file.Connect(); + gplx.dbs.Db_conn_info__sqlite sqlite = (gplx.dbs.Db_conn_info__sqlite)file.Connect(); Io_mgr._.DeleteFil_args(sqlite.Url()).MissingFails_off().Exec(); file.Cmd_mode_(Db_cmd_mode.Delete); } tbl_db.Commit_all(fsys_mgr.Provider_core(), ary); - this.Init_load(fsys_mgr.Provider_core().ConnectInfo()); + this.Init_load(fsys_mgr.Provider_core().Conn_info()); } public static final String Grp_wiki_init = "wiki.init"; @@ -194,7 +194,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { 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(); switch (state) { - case Xodb_mgr_sql.State_init: rv.Init_load(Db_connect_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); break; // load + case Xodb_mgr_sql.State_init: rv.Init_load(Db_conn_info_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); break; // load case Xodb_mgr_sql.State_make: break; // noop; being made; don't load from db; case Xodb_mgr_sql.State_load: break; // noop; already loaded; default: throw Err_.unhandled(state); 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 e95c92c10..5fd061e33 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 @@ -32,7 +32,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { if (page_id == null) { DataRdr rdr = db_mgr.Tbl_page().Provider().Exec_sql_as_rdr("SELECT (Max(page_id) + 1) AS max_page_id FROM page;"); if (rdr.MoveNextPeer()) { - page_id = Int_.XtoStr(rdr.ReadInt("max_page_id")); + page_id = Int_.Xto_str(rdr.ReadInt("max_page_id")); page_id_int = Int_.parse_(page_id); db_mgr.Tbl_xowa_cfg().Insert_int("db", "page.id_next", page_id_int); } 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 613499fca..69a215eb6 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 @@ -18,6 +18,64 @@ 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.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" + , 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"; + 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}; +// 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(provider, 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; +// } + public boolean Select_by_ttl(Xodb_page rv, 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(provider, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic)); + rdr = stmt.Val_int_(ns.Id()).Val_str_(String_.new_utf8_(ttl)).Exec_select_as_rdr(); + if (rdr.Move_next()) { + Read_page__all2(rv, rdr, html_db_enabled); + return true; + } + } finally {rdr.Close(); stmt.Rls();} + return false; + } + public static void Read_page__all2(Xodb_page page, Db_rdr rdr, boolean html_db_enabled) { + page.Id_ (rdr.Read_int(1)); + page.Ns_id_ (rdr.Read_int(2)); + page.Ttl_wo_ns_ (rdr.Read_bry_by_str(3)); + page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(4), Page_touched_fmt)); + page.Type_redirect_ (rdr.Read_byte(5) == 1); + page.Text_len_ (rdr.Read_int(6)); + page.Db_file_idx_ (rdr.Read_int(7)); + if (html_db_enabled) + page.Html_db_id_(rdr.Read_int(8)); + } + public boolean Select_by_id(Xodb_page rv, int page_id) { + DataRdr rdr = DataRdr_.Null; + Db_stmt stmt = Db_stmt_.Null; + try { + stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_id)); + rdr = stmt + .Val_int_(page_id) + .Exec_select(); + while (rdr.MoveNextPeer()) { + Read_page__all(rv, rdr, html_db_enabled); + return true; + } + } finally {rdr.Rls(); stmt.Rls();} + return false; + } private Xow_wiki wiki; public Xodb_page_tbl(Xow_wiki wiki) {this.wiki = wiki;} public void Html_db_enabled_(boolean v) {html_db_enabled = v;} private boolean html_db_enabled; @@ -59,21 +117,6 @@ public class Xodb_page_tbl { 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); } - public boolean Select_by_id(Xodb_page rv, int page_id) { - DataRdr rdr = DataRdr_.Null; - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_id)); - rdr = stmt - .Val_int_(page_id) - .Exec_select(); - while (rdr.MoveNextPeer()) { - Read_page__all(rv, rdr, html_db_enabled); - return true; - } - } finally {rdr.Rls(); stmt.Rls();} - return false; - } private DataRdr Load_ttls_starting_with_rdr(int ns_id, byte[] ttl_frag, boolean include_redirects, int max_results, int min_page_len, int browse_len, boolean fwd, boolean search_suggest) { Criteria crt_ttl = fwd ? Db_crt_.mte_(Fld_page_title, String_.new_utf8_(ttl_frag)) : Db_crt_.lt_(Fld_page_title, String_.new_utf8_(ttl_frag)); Criteria crt = Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, ns_id), crt_ttl, Db_crt_.mte_(Fld_page_len, min_page_len)); @@ -128,7 +171,7 @@ public class Xodb_page_tbl { public void Load_ttls_for_search_suggest(Cancelable cancelable, ListAdp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) { String search_bgn = String_.new_utf8_(key); String search_end = String_.new_utf8_(gplx.intl.Utf8_.Increment_char_at_last_pos(key)); - Db_qry qry = Db_qry_sql.rdr_("SELECT page_id, page_namespace, page_title, page_len FROM page INDEXED BY page__title WHERE page_namespace = " + Int_.XtoStr(ns.Id()) + " AND page_title BETWEEN '" + search_bgn + "' AND '" + search_end + "' ORDER BY page_len DESC LIMIT " + Int_.XtoStr(max_results) + ";"); + Db_qry qry = Db_qry_sql.rdr_("SELECT page_id, page_namespace, page_title, page_len FROM page INDEXED BY page__title WHERE page_namespace = " + Int_.Xto_str(ns.Id()) + " AND page_title BETWEEN '" + search_bgn + "' AND '" + search_end + "' ORDER BY page_len DESC LIMIT " + Int_.Xto_str(max_results) + ";"); DataRdr rdr = DataRdr_.Null; try { rdr = provider.Exec_qry_as_rdr(qry); @@ -159,22 +202,6 @@ public class Xodb_page_tbl { wkr.Select_in(provider, cancelable, wiki, bgn, end); return true; } - public boolean Select_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) { - DataRdr rdr = DataRdr_.Null; - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_select_(provider, Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title)); - rdr = stmt - .Val_int_(ns.Id()) - .Val_str_(String_.new_utf8_(ttl)) - .Exec_select(); - if (rdr.MoveNextPeer()) { - Read_page__all(rv, rdr, html_db_enabled); - return true; - } - } finally {rdr.Rls(); stmt.Rls();} - return false; - } public byte[] Select_random(Xow_ns ns) {// ns should be ns_main int random_int = RandomAdp_.new_().Next(ns.Count()); DataRdr rdr = DataRdr_.Null; @@ -261,9 +288,6 @@ public class Xodb_page_tbl { } private static final String Page_touched_fmt = "yyyyMMddHHmmss"; private static String Xto_touched_str(DateAdp v) {return v.XtoStr_fmt(Page_touched_fmt);} - 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"; public static final String[] Flds_insert__html_n = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_is_redirect, Fld_page_touched, Fld_page_len, Fld_page_random_int, Fld_page_file_idx) , Flds_insert__html_y = String_.Ary(Fld_page_id, Fld_page_ns, Fld_page_title, Fld_page_is_redirect, Fld_page_touched, Fld_page_len, Fld_page_random_int, Fld_page_file_idx, Fld_page_html_db_id) 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 130336da6..2caeb3ed3 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 @@ -60,8 +60,8 @@ public class Xodb_xowa_cfg_tbl { stmt.Val_str_(grp).Val_str_(key).Exec_delete(); } finally {stmt.Rls();} } - public void Insert_byte(String grp, String key, byte val) {Insert_str(grp, key, Byte_.XtoStr(val));} - public void Insert_int(String grp, String key, int val) {Insert_str(grp, key, Int_.XtoStr(val));} + public void Insert_byte(String grp, String key, byte val) {Insert_str(grp, key, Byte_.Xto_str(val));} + public void Insert_int(String grp, String key, int val) {Insert_str(grp, key, Int_.Xto_str(val));} public void Insert_str_by_bry(String grp, String key, byte[] val) {Insert_str(grp, key, String_.new_utf8_(val));} public void Insert_str(String grp, String key, String val) {Insert_str(provider, grp, key, val);} public static void Insert_str(Db_provider p, String grp, String key, String val) { @@ -73,8 +73,8 @@ public class Xodb_xowa_cfg_tbl { p.Exec_qry(qry); } public Db_stmt Update_stmt() {return Db_stmt_.new_update_(provider, Tbl_name, String_.Ary(Fld_cfg_grp, Fld_cfg_key), Fld_cfg_val);} - public void Update(Db_stmt stmt, String grp, String key, long val) {Update(stmt, grp, key, Long_.XtoStr(val));} - public void Update(Db_stmt stmt, String grp, String key, int val) {Update(stmt, grp, key, Int_.XtoStr(val));} + public void Update(Db_stmt stmt, String grp, String key, long val) {Update(stmt, grp, key, Long_.Xto_str(val));} + public void Update(Db_stmt stmt, String grp, String key, int val) {Update(stmt, grp, key, Int_.Xto_str(val));} public void Update(Db_stmt stmt, String grp, String key, String val) { stmt.Clear() .Val_str_(val) @@ -82,7 +82,7 @@ public class Xodb_xowa_cfg_tbl { .Val_str_(key) .Exec_update(); } - public void Update(String grp, String key, int val) {Update(grp, key, Int_.XtoStr(val));} + public void Update(String grp, String key, int val) {Update(grp, key, Int_.Xto_str(val));} public void Update(String grp, String key, String val) { Db_qry qry = Db_qry_.update_common_(Tbl_name, Where_grp_key(grp, key), KeyVal_.new_(Fld_cfg_val, val)); provider.Exec_qry(qry); 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 8d7a9d598..26e6e2b06 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java +++ b/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java @@ -22,7 +22,7 @@ public class Xof_doc_thumb { 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 int X_int(double v) {return (int)v;} - public static String X_str(double v) {return Double_.XtoStr(v);} + public static String X_str(double v) {return Double_.Xto_str(v);} public static final double Null = -1; public static boolean Null_y(double v) {return v == Null;} public static boolean Null_n(double v) {return v != Null;} 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 8aad66ab3..a580a9b54 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 @@ -106,7 +106,7 @@ public class Xof_lnki_file_mgr { } 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; EX:en.w:History_of_painting; DATE:2014-03-06 + 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()); // byte[] lnki_ttl = xfer_itm.Lnki_ttl(); 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 index c4e9e5215..5b16d7dd7 100644 --- 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 @@ -30,7 +30,7 @@ public class Xof_bin_wkr_fsdb_regy implements Xof_bin_wkr { provider = Sqlite_engine_.Provider_load_or_make_(regy_url); } public void Rls() { - provider.Rls(); + provider.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; 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 index 8d5def84e..c29fe3ead 100644 --- 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 @@ -124,7 +124,7 @@ public class Xof_fsdb_mgr_sql implements Xof_fsdb_mgr, GfoInvkAble { 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(); - img_regy_provider.Rls(); + img_regy_provider.Conn_term(); } public static Io_url Wiki_orig_url(Io_url root_dir) {return root_dir.GenSubFil("wiki.orig#00.sqlite3");} public static Db_provider Wiki_orig_provider(Io_url root_dir) { 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 index 8b529f96e..dc081d1b7 100644 --- 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 @@ -35,10 +35,10 @@ class Cache_cfg_mgr { } public void Db_when_new(Db_provider provider) { cfg_tbl.Provider_(provider); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__next_id, Int_.XtoStr(1)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_len, Long_.XtoStr(0)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_min, Long_.XtoStr(cache_min)); - cfg_tbl.Insert_str(Cfg_grp, Cfg_key__cache_max, Long_.XtoStr(cache_max)); + 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(); 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 0957df9a6..9297b10a6 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 @@ -55,7 +55,7 @@ class Fs_root_dir { if (Xof_ext_.Id_is_image(rv.Fil_ext_id())) img_size = img_size_wkr.Exec(rv.Fil_url()); rv.Init_by_size(++fil_id_next, img_size.Width(), img_size.Height()); - cfg_tbl.Update(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.XtoStr(fil_id_next)); + cfg_tbl.Update(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next)); fil_tbl.Insert(rv); return rv; } @@ -85,7 +85,7 @@ class Fs_root_dir { cfg_tbl.Ctor(provider, created); fil_tbl.Ctor(provider, created); if (created) - cfg_tbl.Insert(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.XtoStr(fil_id_next)); + cfg_tbl.Insert(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next)); else { fil_id_next = cfg_tbl.Select_as_int_or_fail(Cfg_grp_root_dir, Cfg_key_fil_id_next); } 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 65c5a7b31..024d14a7a 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 @@ -40,7 +40,7 @@ public class Fs_root_wkr_fsdb { int upright_patch = wiki.File_mgr().Fsdb_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_.XtoStr(html_w) + orig_url.Ext(); + 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)) 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 c414c2fe9..57b9caf7a 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 @@ -209,7 +209,7 @@ public class Xog_bnd_mgr { } private void Init_itm(String cmd, int idx, int box, String ipt) {Init_itm(cmd, idx, box, IptArg_.parse_or_none_(ipt));} private void Init_itm(String cmd, int idx, int box, IptArg ipt) { - String key = cmd + "-" + Int_.XtoStr(idx + ListAdp_.Base1); // EX: xowa.widgets.url.focus-1 xowa.widgets.url.focus-2 + String key = cmd + "-" + Int_.Xto_str(idx + ListAdp_.Base1); // EX: xowa.widgets.url.focus-1 xowa.widgets.url.focus-2 Xog_bnd_itm itm = new Xog_bnd_itm(key, Bool_.Y, cmd, box, ipt); boxs[box].Add(itm); regy.Add(itm.Key(), itm); 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 be10efd2f..1cac50ecc 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 @@ -69,7 +69,7 @@ public abstract class Xog_mnu_base implements GfoInvkAble { return itm; } public Xog_mnu_itm Add_spr() { - String key = "xowa.spr" + Int_.XtoStr(list.Count()); + String key = "xowa.spr" + Int_.Xto_str(list.Count()); Xog_mnu_itm rv = new Xog_mnu_itm(gui_mgr, key).Tid_(Xog_mnu_itm.Tid_spr); list.Add(rv); return rv; 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 5cbb3123a..2692b0099 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 @@ -87,7 +87,7 @@ public class Xog_html_js_cbk implements GfoInvkAble { Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_page, ttl.Ns(), ttl.Page_db()); } - return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.XtoStr(tmp_page.Id()), Int_.XtoStr(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_wo_ns()), Bool_.XtoStr_lower(tmp_page.Type_redirect()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.XtoStr(tmp_page.Text_len())); + 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(); 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 5e1ab2e39..9f3ffb7af 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 @@ -21,8 +21,8 @@ public class Xog_html_js_cbk_tst { @Before public void init() {fxt.Clear();} private Xog_html_js_cbk_fxt fxt = new Xog_html_js_cbk_fxt(); @Test public void Get_title() { fxt.Fxt().Init_page_create("exists"); - fxt.Test_get_title("exists", "1" , "0" , Int_.XtoStr(Int_.MinValue), "Exists", "false", "0001-01-01 00:00:00", "0"); - fxt.Test_get_title("absent", "0", "-1", Int_.XtoStr(Int_.MinValue), null , "false", "0001-01-01 00:00:00", "0"); + fxt.Test_get_title("exists", "1" , "0" , Int_.Xto_str(Int_.MinValue), "Exists", "false", "0001-01-01 00:00:00", "0"); + fxt.Test_get_title("absent", "0", "-1", Int_.Xto_str(Int_.MinValue), null , "false", "0001-01-01 00:00:00", "0"); } } class Xog_html_js_cbk_fxt { 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 e6b135fe8..da2f62c82 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 @@ -51,7 +51,13 @@ class Xog_launcher_tabs { } } private void Restore_tab_failover(Xoa_app app, Xow_wiki home_wiki, Xog_win_itm win) { - Launch_tab(win.Active_tab(), win, home_wiki, gplx.xowa.users.Xouc_pages_mgr.Page_xowa); + try { + Xog_tab_itm tab = win.Tab_mgr().Tabs_new_init(); // NOTE: was win.Active_tab which throws a nullRef; DATE:2014-09-01 + Launch_tab(tab, win, home_wiki, gplx.xowa.users.Xouc_pages_mgr.Page_xowa); + } + catch (Exception e) { + app.Usr_dlg().Warn_many("", "", "failed to launch failover tab: err=~{0}", Err_.Message_gplx(e)); + } } private void Launch_tab(Xog_tab_itm tab, Xog_win_itm win, Xow_wiki home_wiki, String launch_str) { Xoa_url launch_url = Xoa_url_parser.Parse_from_url_bar(win.App(), home_wiki, launch_str); 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 eeae6aa6f..a7d0dd766 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 @@ -30,7 +30,7 @@ public class Xog_tab_itm implements GfoInvkAble { 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(); - Gfui_html html_box = kit.New_html("html_box" + Int_.XtoStr(uid), owner); + 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); html_itm.Html_box_(html_box); 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 4c92509ad..6b4be1432 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 @@ -85,7 +85,7 @@ public class Xog_tab_mgr implements GfoEvObj { return rv; } private Xog_tab_itm Tabs_new(boolean focus, boolean active_tab_is_null) { - String tab_key = "tab_" + Int_.XtoStr(tab_uid++); int tab_idx = tab_regy.Count(); + 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); Gfui_tab_itm tab_box = tab_mgr.Tabs_add(tab_data); 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 af1d1104e..d57b7e9ed 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 @@ -74,8 +74,7 @@ class Xodb_hdump_mgr__save_fxt extends Xodb_hdump_mgr__base_fxt { } public Hdump_text_row Make_row_body(int imgs_count, String body) { page.Hdump_data().Body_(Bry_.new_utf8_(body)); - for (int i = 0; i < imgs_count; ++i) - page.Hdump_data().Imgs().Add(null); + page.Hdump_data().Data_count_imgs_(imgs_count); Hdump_page_body_srl.Save(tmp_bfr, page); return new Hdump_text_row(page_id, Hdump_text_row_tid.Tid_body, tmp_bfr.XtoAryAndClear()); } 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 cc9b2dc43..8af625008 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 @@ -135,14 +135,14 @@ class Xodb_hdump_mgr__write_fxt extends Xodb_hdump_mgr__base_fxt { Tfds.Eq_true(String_.Has(actl_html, expd_html), actl_html); else Tfds.Eq_str_lines(expd_html, actl_html); - if (expd_itms_xfers.Count() > 0) Tfds.Eq_ary_str(Xfer_to_str_ary(expd_itms_xfers), Xfer_to_str_ary(page.Hdump_data().Imgs())); + if (expd_itms_xfers.Count() > 0) Tfds.Eq_ary_str(Xfer_to_str_ary(expd_itms_xfers), Xfer_to_str_ary(page.Hdump_data().Data())); } private static String[] Xfer_to_str_ary(ListAdp list) { int len = list.Count(); String[] rv = new String[len]; for (int i = 0; i < len; ++i) { Hdump_data_img__base itm = (Hdump_data_img__base)list.FetchAt(i); - rv[i] = itm.XtoStr(); + rv[i] = itm.Data_print(); } return rv; } 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 e27d55fef..c6cf12917 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 @@ -38,7 +38,7 @@ public class Xodb_hdump_mgr_setup { try { Xodb_xowa_cfg_tbl.Insert_str(core_provider, "db.meta", "html_db.exists", "y"); core_provider.Exec_sql("ALTER TABLE page ADD COLUMN page_html_db_id integer NOT NULL DEFAULT '-1'"); - } catch (Exception e) {Gfo_usr_dlg_._.Warn_many("", "", "failed to update core: db=~{0} err=~{1}", core_provider.ConnectInfo().Raw_of_db_connect(), Err_.Message_gplx(e));} + } catch (Exception e) {Gfo_usr_dlg_._.Warn_many("", "", "failed to update core: db=~{0} err=~{1}", core_provider.Conn_info().Str_raw(), Err_.Message_gplx(e));} } 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); diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.java new file mode 100644 index 000000000..efda36754 --- /dev/null +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.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.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +public class Hdump_data_gallery implements Hdump_data_itm { + public Hdump_data_gallery(int uid, int box_max) { + this.uid = uid; + this.box_max = box_max; + } + public int Data_tid() {return Hdump_data_tid.Tid_gallery;} + public void Data_write(Bry_bfr bfr) { + bfr .Add_int_variable(Hdump_data_tid.Tid_gallery).Add_byte_pipe() + .Add_int_variable(box_max).Add_byte_pipe() + ; + bfr.Add_byte_nl(); + } + public String Data_print() {return Int_.Xto_str(box_max);} + public int Uid() {return uid;} private int uid; + public int Box_max() {return box_max;} private int box_max; +} 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 e6db07333..79f61a82f 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 @@ -17,7 +17,7 @@ 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.*; -public abstract class Hdump_data_img__base implements XtoStrAble { +public abstract class Hdump_data_img__base implements Hdump_data_itm { public Hdump_data_img__base Init_by_base(int uid, int view_w, int view_h, byte[] lnki_ttl, byte[] view_src) { this.uid = uid; this.view_w = view_w; @@ -26,28 +26,30 @@ public abstract class Hdump_data_img__base implements XtoStrAble { this.view_src = view_src; return this; } - public abstract int Tid(); + public int Data_tid() {return Hdump_data_tid.Tid_img;} + public abstract int Img_tid(); public int Uid() {return uid;} private int uid; public int View_w() {return view_w;} private int view_w; public int View_h() {return view_h;} private int view_h; public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; public byte[] View_src() {return view_src;} private byte[] view_src; - public String XtoStr() { - return String_.Concat_with_str("|", Int_.XtoStr(this.Tid()), Int_.XtoStr(uid), Int_.XtoStr(view_w), Int_.XtoStr(view_h), String_.new_utf8_(lnki_ttl), String_.new_utf8_(view_src)); + public String Data_print() { + return String_.Concat_with_str("|", Int_.Xto_str(this.Img_tid()), Int_.Xto_str(uid), Int_.Xto_str(view_w), Int_.Xto_str(view_h), String_.new_utf8_(lnki_ttl), String_.new_utf8_(view_src)); } - public void Write(Bry_bfr bfr) { + public void Data_write(Bry_bfr bfr) { bfr .Add_int_variable(Hdump_data_tid.Tid_img).Add_byte_pipe() - .Add_int_variable(this.Tid()).Add_byte_pipe() + .Add_int_variable(this.Img_tid()).Add_byte_pipe() .Add_int_variable(uid).Add_byte_pipe() .Add_int_variable(view_w).Add_byte_pipe() .Add_int_variable(view_h).Add_byte_pipe() .Add(lnki_ttl).Add_byte_pipe() .Add(view_src).Add_byte_pipe() ; - Write_hook(bfr); + Data_write_hook(bfr); bfr.Add_byte_nl(); } - @gplx.Virtual public void Write_hook(Bry_bfr bfr) {} + @gplx.Virtual public void Data_write_hook(Bry_bfr bfr) {} public static final Hdump_data_img__base[] Ary_empty = new Hdump_data_img__base[0]; public static final int Tid_basic = 0, Tid_gallery = 1; + @Override public String toString() {return this.Data_print();} // TEST } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java index 38253991e..e0cc8d681 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java @@ -17,5 +17,5 @@ along with this program. If not, see . */ package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; public class Hdump_data_img__basic extends Hdump_data_img__base { - @Override public int Tid() {return Hdump_data_img__base.Tid_basic;} + @Override public int Img_tid() {return Hdump_data_img__base.Tid_basic;} } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java index 7d52f80cd..9c21b84ce 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java @@ -17,21 +17,18 @@ along with this program. If not, see . */ package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; public class Hdump_data_img__gallery extends Hdump_data_img__base { - @Override public int Tid() {return Hdump_data_img__base.Tid_gallery;} - public Hdump_data_img__base Init_by_gallery(int box_max, int box_w, int img_w, int img_pad) { - this.box_max = box_max; + @Override public int Img_tid() {return Hdump_data_img__base.Tid_gallery;} + public Hdump_data_img__base Init_by_gallery(int box_w, int img_w, int img_pad) { this.box_w = box_w; this.img_w = img_w; this.img_pad = img_pad; return this; } - public int Box_max() {return box_max;} private int box_max; public int Box_w() {return box_w;} private int box_w; public int Img_w() {return img_w;} private int img_w; public int Img_pad() {return img_pad;} private int img_pad; - @Override public void Write_hook(Bry_bfr bfr) { - bfr .Add_int_variable(box_max).Add_byte_pipe() - .Add_int_variable(box_w).Add_byte_pipe() + @Override public void Data_write_hook(Bry_bfr bfr) { + bfr .Add_int_variable(box_w).Add_byte_pipe() .Add_int_variable(img_w).Add_byte_pipe() .Add_int_variable(img_pad).Add_byte_pipe() ; diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java new file mode 100644 index 000000000..9da2042cd --- /dev/null +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java @@ -0,0 +1,23 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +public interface Hdump_data_itm { + int Data_tid(); + void Data_write(Bry_bfr bfr); + String Data_print(); +} diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_data_tid.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java similarity index 89% rename from 400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_data_tid.java rename to 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java index 7ce219178..d24fb14ba 100644 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_data_tid.java +++ b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; public class Hdump_data_tid { // SERIALIZED public static final int Tid_img = 1, Tid_redlink = 2, Tid_gallery = 3, Tid_imap = 4; } diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_text_tbl.java b/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_text_tbl.java index 561db3667..ae6adf32c 100644 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_text_tbl.java +++ b/400_xowa/src/gplx/xowa/hdumps/dbs/Hdump_text_tbl.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; import gplx.dbs.*; public class Hdump_text_tbl { + public static final String Tbl_name = "html_text", Fld_page_id = "page_id", Fld_text_tid = "text_tid", Fld_text_data = "text_data"; private Db_stmt stmt_select, stmt_insert, stmt_delete; public Db_provider Provider() {return provider;} public Hdump_text_tbl Provider_(Db_provider v) {this.Rls_all(); provider = v; return this;} private Db_provider provider; @gplx.Virtual public void Delete_by_page(int page_id) { @@ -47,14 +48,30 @@ public class Hdump_text_tbl { catch (Exception exc) {stmt_select = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail finally {stmt_select.Rls();} } +// private static final String[] Select_by_page_flds = new String[] {Fld_page_id, Fld_text_tid, Fld_text_data}; +// public virtual void Select_by_page2(ListAdp rv, int page_id) { +// // if (stmt_select == null) stmt_select = provider.Stmt_select(Tbl_name, Select_by_page_flds, String_.Ary(Fld_page_id)); +// try { +// Db_rdr rdr = null; //stmt_select.Clear().Val_int_(page_id).Exec_select_as_rdr(); +// while(rdr.Move_next()) { +// Hdump_text_row row = new Hdump_text_row +// ( rdr.Read_int(0) +// , rdr.Read_int(1) +// , rdr.Read_bry_by_str(2) +// ); +// rv.Add(row); +// } +// rdr.Close(); +// } +// catch (Exception exc) {stmt_select = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail +// finally {stmt_select.Rls();} +// } public void Rls_all() { if (stmt_select != null) {stmt_select.Rls(); stmt_select = null;} if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} if (stmt_delete != null) {stmt_delete.Rls(); stmt_delete = null;} provider = null; } - public static final String Tbl_name = "html_text" - , Fld_page_id = "page_id", Fld_text_tid = "text_tid", Fld_text_data = "text_data"; private static final String[] Flds_all = new String[] {Fld_page_id, Fld_text_tid, Fld_text_data}; public static final String Tbl_sql = String_.Concat_lines_nl ( "CREATE TABLE IF NOT EXISTS html_text" diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_fmtr__body.java b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_fmtr__body.java index d80c9790d..459795d49 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_fmtr__body.java +++ b/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_fmtr__body.java @@ -84,8 +84,8 @@ public class Hdump_html_fmtr__body implements Bry_fmtr_arg { case Hdump_html_consts.Tid_file_mgnf: fmtr.Html_thumb_part_magnify(bfr, uid, a_href, a_title, html_mgr.Img_thumb_magnify()); return rv; case Hdump_html_consts.Tid_file_play: fmtr.Html_thumb_part_play (bfr, uid, img_view_w, Xoh_file_wtr__basic.Play_btn_max_width, a_href, a_title, html_mgr.Img_media_play_btn()); return rv; case Hdump_html_consts.Tid_gallery_box_max: { - Hdump_data_img__gallery gly = (Hdump_data_img__gallery)img; - if (gly.Box_max() > 0) { // -1 means no box_max + Hdump_data_gallery gly = (Hdump_data_gallery)hpg.Gly_itms().Fetch(uid); + if (gly != null) { // -1 means no box_max byte[] style = Gallery_mgr_base.box_style_max_width_fmtr.Bld_bry_many(tmp_bfr, gly.Box_max()); Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Style_bry, style); } 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 eb264d3a9..6b206deeb 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 @@ -20,7 +20,7 @@ import org.junit.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs. public class Hdump_html_mgr_tst { @Before public void init() { fxt.Clear(); - fxt.Init_img(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png"); + fxt.Init_data_img_basic(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png"); } private Hdump_html_mgr_fxt fxt = new Hdump_html_mgr_fxt(); @Test public void Img() { fxt .Init_body("") @@ -69,7 +69,8 @@ public class Hdump_html_mgr_tst { } @Test public void Gallery() { fxt.Clear_imgs(); - fxt .Init_gly(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png", 800, 155, 150, 15); + fxt .Init_data_gly(0, 800); + fxt .Init_data_img_gly(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png", 155, 150, 15); fxt .Init_body(String_.Concat_lines_nl_skip_last ( "
    " , "
  • " @@ -99,8 +100,9 @@ class Hdump_html_mgr_fxt { } public void Clear_imgs() {img_list.Clear();} public Hdump_html_mgr_fxt Init_body(String body) {hpg.Page_body_(Bry_.new_utf8_(body)); return this;} - public Hdump_html_mgr_fxt Init_img(int id, int w, int h, String ttl, String src) {img_list.Add(new Hdump_data_img__basic().Init_by_base(id, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;} - public Hdump_html_mgr_fxt Init_gly(int id, int w, int h, String ttl, String src, int box_max, int box_w, int img_w, int img_pad) {img_list.Add(new Hdump_data_img__gallery().Init_by_gallery(box_max, box_w, img_w, img_pad).Init_by_base(id, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;} + public Hdump_html_mgr_fxt Init_data_gly(int uid, int box_max) {hpg.Gly_itms().Add(uid, new Hdump_data_gallery(uid, box_max)); return this;} + public Hdump_html_mgr_fxt Init_data_img_basic(int uid, int w, int h, String ttl, String src) {img_list.Add(new Hdump_data_img__basic().Init_by_base(uid, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;} + public Hdump_html_mgr_fxt Init_data_img_gly(int uid, int w, int h, String ttl, String src, int box_w, int img_w, int img_pad) {img_list.Add(new Hdump_data_img__gallery().Init_by_gallery(box_w, img_w, img_pad).Init_by_base(uid, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;} public Hdump_html_mgr_fxt Test_html(String expd) { if (img_list.Count() > 0) hpg.Img_itms_((Hdump_data_img__base[])img_list.XtoAryAndClear(Hdump_data_img__base.class)); html_mgr.Write(bfr, wiki, hpg); diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java index 19adb1107..7154f34eb 100644 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java +++ b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java @@ -46,8 +46,8 @@ public class Hdump_load_mgr { while (!rdr.Pos_is_eos()) { int tid = rdr.Read_int_to_pipe(); switch (tid) { - case Hdump_data_tid.Tid_img : - case Hdump_data_tid.Tid_gallery : Load_data_img(); break; // 1|0|220|110|A.png|commons/7/0/orig/A.png + case Hdump_data_tid.Tid_img : Load_data_img(); break; // 1|0|220|110|A.png|commons/7/0/orig/A.png + case Hdump_data_tid.Tid_gallery : Load_data_gallery(hpg); break; // 3|0|800 case Hdump_data_tid.Tid_redlink : Load_data_redlink(hpg); break; // 2|2|0|1 } } @@ -63,7 +63,7 @@ public class Hdump_load_mgr { Hdump_data_img__base img_itm = null; switch (tid) { case Hdump_data_img__base.Tid_basic : img_itm = new Hdump_data_img__basic().Init_by_base(uid, w, h, ttl, src); break; - case Hdump_data_img__base.Tid_gallery : img_itm = new Hdump_data_img__gallery().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()).Init_by_base(uid, w, h, ttl, src); break; + case Hdump_data_img__base.Tid_gallery : img_itm = new Hdump_data_img__gallery().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()).Init_by_base(uid, w, h, ttl, src); break; } rdr.Pos_add_one(); img_itms.Add(img_itm); @@ -75,4 +75,9 @@ public class Hdump_load_mgr { redlink_uids[i] = rdr.Read_int_to_pipe(); hpg.Redlink_uids_(redlink_uids); } + public void Load_data_gallery(Hdump_page hpg) { + int uid = rdr.Read_int_to_pipe(); + int box_max = rdr.Read_int_to_pipe(); + hpg.Gly_itms().Add(uid, new Hdump_data_gallery(uid, box_max)); + } } 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 597ac5977..d78191d0c 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 @@ -23,7 +23,7 @@ public class Hdump_page_body_srl { public static void Save(Bry_bfr bfr, Xoa_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.Imgs().Count()); // imgs_count + bfr.Add_int_variable(hdump_data.Data_count_imgs()); // imgs_count Xopg_html_data html_data = page.Html_data(); Save_html_modules(bfr, html_data); Save_data(bfr, Tid_display_ttl , html_data.Display_ttl()); 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 f2f491b99..fd1248f32 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 @@ -20,16 +20,20 @@ import gplx.xowa.hdumps.core.*; import gplx.xowa.files.*; public class Xopg_hdump_data { private final int file_dir_bry_len; public Xopg_hdump_data(Xoa_app app) {file_dir_bry_len = app.Fsys_mgr().File_dir_bry_len();} - public ListAdp Imgs() {return imgs;} private final ListAdp imgs = ListAdp_.new_(); - public void Imgs_add(Hdump_data_img__base img, Xof_xfer_itm xfer_itm, int tid) { + 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);} + public void Data_add_img(Hdump_data_img__base img, Xof_xfer_itm xfer_itm, int tid) { byte[] img_src = xfer_itm.Html_view_src(); img_src = Bry_.Len_eq_0(img_src) ? Bry_.Empty : Bry_.Mid(img_src, file_dir_bry_len); img.Init_by_base(xfer_itm.Html_uid(), xfer_itm.Html_w(), xfer_itm.Html_h(), xfer_itm.Lnki_ttl(), img_src); - imgs.Add(img); + data.Add(img); + ++data_count_imgs; } public byte[] Body() {return body;} public void Body_(byte[] v) {body = v;} private byte[] body; public void Clear() { - imgs.Clear(); + data_count_imgs = 0; + data.Clear(); body = null; } } 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 faa41b9ad..a8ee42e5e 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 @@ -33,14 +33,14 @@ public class Hdump_save_mgr { text_tbl.Insert(page_id, Hdump_text_row_tid.Tid_body, tmp_bfr.XtoAryAndClear()); byte[] redlinks_bry = Write_redlinks(tmp_bfr, page.Html_data().Redlink_mgr()); if (redlinks_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_redlink, redlinks_bry); - byte[] imgs_bry = Write_imgs(tmp_bfr, page.Hdump_data().Imgs()); + 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 static byte[] Write_imgs(Bry_bfr bfr, ListAdp imgs) { int len = imgs.Count(); if (len == 0) return null; // no images; exit early, else will write blank String for (int i = 0; i < len; ++i) { - Hdump_data_img__base img = (Hdump_data_img__base)imgs.FetchAt(i); - img.Write(bfr); + Hdump_data_itm itm = (Hdump_data_itm)imgs.FetchAt(i); + itm.Data_write(bfr); } return bfr.XtoAryAndClear(); } diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_tst.java b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_tst.java index d15f8fee4..cf38e0e8d 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr_tst.java @@ -51,7 +51,8 @@ public class Xoh_html_wtr_tst { // @Test public void Img_alt() { // FUTURE: enable; WHEN: after fixing xnde to handle bad xnde; EX: France // fxt.Test_parse_page_wiki_str("[[File:A.png|none|9x8px|alt=ab\"c\"d]]", Xop_fxt.html_img_none("File:A.png", "ab"c"d")); // } - @Test public void Url_encode() {fxt.Test_parse_page_wiki_str("[[a;@$!*(),/ _^b|z]]" , "z");} + @Test public void Url_encode() {fxt.Test_parse_page_wiki_str("[[a;@$!*(),/ _^b|z]]" , "z");} // NOTE: was "a" instead of "A"; "__" instead of "_" DATE:2014-09-07 + @Test public void Url_encode_space() {fxt.Test_parse_page_wiki_str("[[a _b|z]]" , "z");} @Test public void Apos_i() {fxt.Test_parse_page_wiki_str("''a''" , "a");} @Test public void Apos_b() {fxt.Test_parse_page_wiki_str("'''a'''" , "a");} @Test public void Apos_ib() {fxt.Test_parse_page_wiki_str("'''''a'''''" , "a");} 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 98a87effa..de708f202 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 @@ -50,7 +50,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { 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; private Bry_fmtr page_read_fmtr = Bry_fmtr.new_("" - , "page_id", "page_name", "page_title", "page_content_sub", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" + , "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" , "html_css_common_path", "html_css_wiki_path", "html_content_editable" , "xowa_head" , "portal_div_personal", "portal_div_ns", "portal_div_view" @@ -59,7 +59,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , "app_version", "app_build_date", "app_root_dir", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" ); public Bry_fmtr Page_edit_fmtr() {return page_edit_fmtr;} private Bry_fmtr page_edit_fmtr = Bry_fmtr.new_("" - , "page_id", "page_name", "page_title", "page_content_sub", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" + , "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" , "html_css_common_path", "html_css_wiki_path", "html_content_editable" , "xowa_head" , "portal_div_personal", "portal_div_ns", "portal_div_view" @@ -68,7 +68,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , "app_version", "app_build_date", "app_root_dir", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" ); public Bry_fmtr Page_html_fmtr() {return page_html_fmtr;} private Bry_fmtr page_html_fmtr = Bry_fmtr.new_("" - , "page_id", "page_name", "page_title", "page_content_sub", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" + , "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" , "html_css_common_path", "html_css_wiki_path", "html_content_editable" , "xowa_head" , "portal_div_personal", "portal_div_ns", "portal_div_view" 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 fcc417919..f171f6176 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 @@ -66,7 +66,9 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { fmtr.Bld_bfr_many(html_bfr, page.Revision_data().Id() , Xoh_page_wtr_wkr_.Bld_page_name(tmp_bfr, page.Ttl(), null) // NOTE: page_name does not show display_title (). always pass in null , Xoh_page_wtr_wkr_.Bld_page_name(tmp_bfr, page.Ttl(), page.Html_data().Display_ttl()) - , page_content_sub, page_data, wtr_page_lang, page_modified_on_msg, page.Lang().Dir_bry() + , page_content_sub + , wiki.Html_mgr().Portal_mgr().Div_jump_to() + , page_data, wtr_page_lang, page_modified_on_msg, page.Lang().Dir_bry() , mgr.Css_common_bry(), mgr.Css_wiki_bry(), html_content_editable , page.Html_data().Module_mgr().Init(app, wiki, page).Init_dflts() , 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()) 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 a62fe8790..80cd03753 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,7 +19,7 @@ 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) { - byte[] subpages = app.Html_mgr().Page_mgr().Subpages_bldr().Bld(page.Ttl()); + 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); return Bry_.Add(subpages, page_content_sub, redirect_msg); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java index 68dabd1a1..11467a5fd 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java @@ -77,7 +77,7 @@ public class Xoh_file_wtr__basic { this.Write_file_image(bfr, ctx, hctx, src, lnki, xfer_itm, uid, div_width, lnki_halign, lnki_halign_bry, lnki_ttl, lnki_ext, lnki_href, img_view_src, img_orig_src, img_alt); } if (hctx.Mode_is_hdump() && Xof_html_elem.Tid_is_file(xfer_itm.Html_elem_tid())) { - page.Hdump_data().Imgs_add(new Hdump_data_img__basic(), xfer_itm, Hdump_data_img__gallery.Tid_basic); + page.Hdump_data().Data_add_img(new Hdump_data_img__basic(), xfer_itm, Hdump_data_img__gallery.Tid_basic); } } private void Write_file_ns_media(Bry_bfr bfr, Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte[] img_orig_src) { @@ -128,7 +128,7 @@ public class Xoh_file_wtr__basic { } Arg_nde_tkn lnki_link_tkn = lnki.Link_tkn(); if (lnki_link_tkn == Arg_nde_tkn.Null) // full - lnki_file_wkr.Html_full_img(bfr, hctx, page, xfer_itm, uid, lnki_href, Xow_html_mgr.Bry_anchor_class_image, Xow_html_mgr.Bry_anchor_rel_blank, anchor_title, lnki_ttl, xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, Arg_img_cls(lnki)); + lnki_file_wkr.Html_full_img(bfr, hctx, page, xfer_itm, uid, lnki_href, Xow_html_mgr.Bry_anchor_class_image, Xow_html_mgr.Bry_anchor_rel_blank, anchor_title, lnki_ttl, xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, Arg_img_cls(scratch_bfr, lnki)); else { // thumb Arg_itm_tkn link_tkn = lnki_link_tkn.Val_tkn(); byte[] link_ref = link_tkn.Dat_to_bry(src); @@ -136,7 +136,7 @@ public class Xoh_file_wtr__basic { link_ref = link_ref_new == null ? lnki_href: link_ref_new; // if parse fails, then assign to lnki_href; EX:link={{{1}}} link_ref = ctx.App().Encoder_mgr().Href_quotes().Encode(link_ref); // must encode quotes; PAGE:en.w:List_of_cultural_heritage_sites_in_Punjab,_Pakistan; DATE:2014-07-16 lnki_ttl = Bry_.Coalesce(lnki_ttl, tmp_link_parser.Html_xowa_ttl()); - lnki_file_wkr.Html_full_img(bfr, hctx, page, xfer_itm, uid, link_ref, tmp_link_parser.Html_anchor_cls(), tmp_link_parser.Html_anchor_rel(), anchor_title, lnki_ttl, xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, Arg_img_cls(lnki)); + lnki_file_wkr.Html_full_img(bfr, hctx, page, xfer_itm, uid, link_ref, tmp_link_parser.Html_anchor_cls(), tmp_link_parser.Html_anchor_rel(), anchor_title, lnki_ttl, xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, Arg_img_cls(scratch_bfr, lnki)); } if (div_align_exists) bfr.Add(Html_tag_.Div_rhs); // close div from above } @@ -220,14 +220,35 @@ public class Xoh_file_wtr__basic { tmp_bfr.Add_byte(Byte_ascii.Quote); return tmp_bfr.XtoAryAndClear(); } - private static byte[] Arg_img_cls(Xop_lnki_tkn lnki) {return lnki.Border() == Bool_.Y_byte ? Atr_cls_thumbborder : Bry_.Empty;} + private static byte[] Arg_img_cls(Bry_bfr tmp_bfr, Xop_lnki_tkn lnki) { + byte[] cls_border = lnki.Border() == Bool_.Y_byte ? Bry_cls_thumbborder : null; + byte[] cls_custom = lnki.Lnki_cls() == null ? null : lnki.Lnki_cls(); // PAGE:en.s:Page:Notes_on_Osteology_of_Baptanodon._With_a_Description_of_a_New_Species.pdf/3; DATE:2014-09-06 + return cls_border == null && cls_custom == null + ? Bry_.Empty + : Cls_coalesce(tmp_bfr, cls_border, cls_custom); + } + private static byte[] Cls_coalesce(Bry_bfr tmp_bfr, byte[]... cls_ary) { + tmp_bfr.Add(Bry_cls); + int written = 0; + int len = cls_ary.length; + for (int i = 0; i < len; ++i) { + byte[] cls_itm = cls_ary[i]; + if (cls_itm == null) continue; + if (written != 0) tmp_bfr.Add_byte(Byte_ascii.Semic); + tmp_bfr.Add(cls_itm); + ++written; + } + tmp_bfr.Add(Byte_ascii.Quote_bry); + return tmp_bfr.XtoAryAndClear(); + } public static final int Play_btn_max_width = 1024; private static final byte[] Div_center_bgn = Bry_.new_ascii_("
    ") , Div_float_none = Bry_.new_ascii_("
    ") , Div_float_left = Bry_.new_ascii_("
    ") , Div_float_right = Bry_.new_ascii_("
    ") - , Atr_cls_thumbborder = Bry_.new_ascii_(" class=\"thumbborder\"") , Atr_title = Bry_.new_ascii_(" title=\"") + , Bry_cls = Bry_.new_ascii_(" class=\"") + , Bry_cls_thumbborder = Bry_.new_ascii_("thumbborder") ; } diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_basic_tst.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_basic_tst.java index 6a5ebeec4..f502b44c6 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_basic_tst.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_basic_tst.java @@ -98,10 +98,20 @@ public class Xoh_file_wtr_basic_tst { , "" )); } - @Test public void Border() { + @Test public void Cls_border() { fxt.Test_parse_page_wiki_str - ( "[[File:A.png|border]]" - , "\"\""); + ( "[[File:A.png|border]]" + , "\"\""); + } + @Test public void Cls_custom() { + fxt.Test_parse_page_wiki_str + ( "[[File:A.png|class=abc]]" + , "\"\""); + } + @Test public void Cls_border_custom() { + fxt.Test_parse_page_wiki_str + ( "[[File:A.png|border|class=abc]]" + , "\"\""); } @Test public void Lnki_full_svg() { fxt.Test_parse_page_wiki_str diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_itm.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_itm.java index 7a8ede190..acbc187d7 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_itm.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_itm.java @@ -18,7 +18,7 @@ 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.*; public class Xow_popup_itm implements Cancelable { public Xow_popup_itm(int id, byte[] page_href, byte[] tooltip, int init_words_needed) { - this.popup_id = "popup_" + Int_.XtoStr(id); + this.popup_id = "popup_" + Int_.Xto_str(id); this.words_needed = init_words_needed; this.page_href = page_href; this.tooltip = tooltip; 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 02eb06dfc..59e9e09a9 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 @@ -43,7 +43,7 @@ public class Xoa_available_wikis_mgr implements GfoInvkAble { else if (ctx.Match(k, Invk_itms_refresh)) Itms_reset(); else if (ctx.Match(k, Invk_visible)) return Yn.Xto_str(visible); else if (ctx.Match(k, Invk_visible_)) visible = m.ReadYn("v"); - else if (ctx.Match(k, Invk_visible_toggle)) {visible = !visible; app.Gui_mgr().Browser_win().Active_html_box().Html_js_eval_proc("xowa-portal-wikis-visible-toggle", Bool_.XtoStr_lower(visible));} + else if (ctx.Match(k, Invk_visible_toggle)) {visible = !visible; app.Gui_mgr().Browser_win().Active_html_box().Html_js_eval_proc("xowa-portal-wikis-visible-toggle", Bool_.Xto_str_lower(visible));} else if (ctx.Match(k, Invk_itms_as_html_fmtr_)) itms_as_html_fmtr.Fmt_(m.ReadBry("v")); else return GfoInvkAble_.Rv_unhandled; return this; 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 50545408a..09f7bae62 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 @@ -21,8 +21,13 @@ public class Xoh_subpages_bldr implements Bry_fmtr_arg { 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 byte[] Bld(Xoa_ttl ttl) { - if (!(ttl.Ns().Subpages_enabled() && ttl.Leaf_bgn() != Bry_.NotFound)) return Bry_.Empty; // only continue if ns has subpages and ttl has leaf; EX:Help:A/B + public byte[] Bld(Xow_ns_mgr ns_mgr, Xoa_ttl ttl) { + Xow_ns ns = ttl.Ns(); + if (! ( ns.Subpages_enabled() // ns has subpages + && ttl.Leaf_bgn() != Bry_.NotFound // ttl has leaf text; EX: Help:A/B + && ns.Id() != ns_mgr.Ns_page_id() // ns is not [[Page:]]; PAGE:en.s:Notes_on_Osteology_of_Baptanodon._With_a_Description_of_a_New_Species DATE:2014-09-06 + ) + ) return Bry_.Empty; // doesn't match above; return empty; byte[] raw = ttl.Raw(); this.segs = Bry_.Split(raw, Byte_ascii.Slash); fmtr_grp.Bld_bfr(tmp_bfr, this); 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 6be8df5ee..80c518342 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 @@ -27,10 +27,16 @@ public class Xoh_subpages_bldr_tst { , "" )); } + @Test public void Skip_page() { + fxt.Wiki().Ns_mgr().Add_new(104, "Page"); + fxt.Wiki().Ns_mgr().Ns_page_id_(104); + fxt.Test_bld("Page:A/B/C", ""); + } } class Xoh_subpages_bldr_fxt { - private Xoa_app app; private Xow_wiki wiki; + private Xoa_app app; private Xoh_subpages_bldr subpages_bldr; + public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; public void Init() { this.app = Xoa_app_fxt.app_(); this.wiki = Xoa_app_fxt.wiki_tst_(app); @@ -38,7 +44,7 @@ class Xoh_subpages_bldr_fxt { this.subpages_bldr = new Xoh_subpages_bldr(app); } public void Test_bld(String ttl_str, String expd) { - byte[] actl = subpages_bldr.Bld(Xoa_ttl.parse_(wiki, Bry_.new_utf8_(ttl_str))); + byte[] actl = subpages_bldr.Bld(wiki.Ns_mgr(), Xoa_ttl.parse_(wiki, Bry_.new_utf8_(ttl_str))); Tfds.Eq_str_lines(expd, String_.new_utf8_(actl)); } } 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 33331a697..5b6e576be 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 @@ -34,8 +34,9 @@ public class Xow_portal_mgr implements GfoInvkAble { api_skin = app.Mode() == Xoa_app_.Mode_gui ? skins.Desktop() : skins.Server(); } public Xowh_sidebar_mgr Sidebar_mgr() {return sidebar_mgr;} private Xowh_sidebar_mgr sidebar_mgr; - public Bry_fmtr Div_home_fmtr() {return div_home_fmtr;} Bry_fmtr div_home_fmtr = Bry_fmtr.new_(""); + public Bry_fmtr Div_home_fmtr() {return div_home_fmtr;} private Bry_fmtr div_home_fmtr = Bry_fmtr.new_(""); public Xow_portal_mgr Init_assert() {if (init_needed) Init(); return this;} + public byte[] Div_jump_to() {return div_jump_to;} private byte[] div_jump_to = Bry_.Empty; public void Init() { init_needed = false; if (missing_ns_cls == null) // if missing_ns_cls not set for wiki, use the home wiki's @@ -50,6 +51,8 @@ public class Xow_portal_mgr implements GfoInvkAble { 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_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(); + div_jump_to = Div_jump_to_fmtr.Bld_bry_many(tmp_bfr, msg_mgr.Val_by_key_obj("jumpto"), msg_mgr.Val_by_key_obj("jumptonavigation"), msg_mgr.Val_by_key_obj("comma-separator"), msg_mgr.Val_by_key_obj("jumptosearch")); tmp_bfr.Mkr_rls(); sidebar_mgr.Init(); } private boolean init_needed = true; @@ -127,4 +130,7 @@ public class Xow_portal_mgr implements GfoInvkAble { public static final String Invk_div_logo_ = "div_logo_"; private static KeyVal[] Options_missing_ns_cls_list = KeyVal_.Ary(KeyVal_.new_("", "Show as blue link"), KeyVal_.new_("new", "Show as red link"), KeyVal_.new_("xowa_display_none", "Hide")); private static final byte[] Missing_ns_cls_hide = Bry_.new_ascii_("xowa_display_none"); + private static final Bry_fmtr Div_jump_to_fmtr = Bry_fmtr.new_ + ( "\n
    ~{jumpto}~{jumptonavigation}~{comma-separator}~{jumptosearch}
    " + , "jumpto", "jumptonavigation", "comma-separator", "jumptosearch"); } diff --git a/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_.java b/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_.java index dde13000f..f0098f276 100644 --- a/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_.java +++ b/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_.java @@ -1107,7 +1107,7 @@ public class Xol_case_mgr_ { , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(199,136), Bry_.ints_(199,137)) // Lj -> lj -- LATIN LETTER CAPITAL L SMALL J , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(199,139), Bry_.ints_(199,140)) // Nj -> nj -- LATIN LETTER CAPITAL N SMALL J , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(199,178), Bry_.ints_(199,179)) // Dz -> dz -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z -, Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(206,185), Bry_.ints_(206,153)) // ι -> Ι -- GREEK CAPITAL LETTER IOTA +, Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(206,153), Bry_.ints_(206,185)) // Ι -> ι -- GREEK CAPITAL LETTER IOTA; NOTE: reversed; PAGE:en.d:ἀρχιερεύς DATE:2014-09-02 , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(207,180), Bry_.ints_(206,184)) // ϴ -> θ -- GREEK CAPITAL THETA SYMBOL , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(225,186,158), Bry_.ints_(195,159)) // ẞ -> ß -- LATIN CAPITAL LETTER SHARP S , Xol_case_itm_.new_(Xol_case_itm_.Tid_lower, Bry_.ints_(226,132,166), Bry_.ints_(207,137)) // Ω -> ω -- OHM diff --git a/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_tst.java b/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_tst.java index d358a7419..e0ea70445 100644 --- a/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/langs/cases/Xol_case_mgr_tst.java @@ -37,6 +37,7 @@ public class Xol_case_mgr_tst { fxt.Test_reuse_1st_upper("Abc"); fxt.Test_reuse_1st_upper("é", "É"); fxt.Test_reuse_1st_upper("É"); + fxt.Lower("Ι", "ι"); // PURPOSE:test reversal; PAGE:en.d:ἀρχιερεύς DATE:2014-09-02 } // @Test public void Hack() { // Xol_case_itm[] ary = Xol_case_mgr_.Utf_8; @@ -92,7 +93,7 @@ class Xol_case_mgr_fxt { int ary_len = ary.length; for (int i = 0; i < ary_len; i++) { Xol_case_itm itm = ary[i]; - sb.Add(Byte_.XtoStr(itm.Tid())).Add_char_pipe().Add(String_.new_utf8_(itm.Src_ary())).Add_char_pipe().Add(String_.new_utf8_(itm.Trg_ary())).Add_char_nl(); + sb.Add(Byte_.Xto_str(itm.Tid())).Add_char_pipe().Add(String_.new_utf8_(itm.Src_ary())).Add_char_pipe().Add(String_.new_utf8_(itm.Trg_ary())).Add_char_nl(); } return sb.XtoStrAndClear(); } diff --git a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java index 19a9c249e..07bc987c6 100644 --- a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java +++ b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_fmtr_base.java @@ -54,7 +54,7 @@ public class Xol_num_fmtr_base implements GfoInvkAble { } return tmp.XtoAryAndClear(); } - public byte[] Fmt(int val) {return Fmt(Bry_.new_ascii_(Int_.XtoStr(val)));} + public byte[] Fmt(int val) {return Fmt(Bry_.new_ascii_(Int_.Xto_str(val)));} public byte[] Fmt(byte[] src) { // SEE: DOC_1:Fmt int src_len = src.length; int num_bgn = -1, dec_pos = -1; diff --git a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_mgr.java b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_mgr.java index f48e7bdbc..8fc65a341 100644 --- a/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_mgr.java +++ b/400_xowa/src/gplx/xowa/langs/numbers/Xol_num_mgr.java @@ -31,7 +31,7 @@ public class Xol_num_mgr implements GfoInvkAble { return num; } public byte[] Format_num_no_separators(byte[] num) {return Format_num(num, true);} - public byte[] Format_num(int val) {return Format_num(Bry_.new_ascii_(Int_.XtoStr(val)));} + public byte[] Format_num(int val) {return Format_num(Bry_.new_ascii_(Int_.Xto_str(val)));} public byte[] Format_num(byte[] num) {return Format_num(num, false);} public byte[] Format_num(byte[] num, boolean skip_commafy) { if (!skip_commafy) { diff --git a/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_wkr_tst.java b/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_wkr_tst.java index ab5f68543..161242f59 100644 --- a/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_wkr_tst.java @@ -125,7 +125,7 @@ public class Xop_apos_wkr_tst { @Test public void Apos_broken_by_tblw_th() { // DATE:2013-04-24 fxt.Test_parse_page_all_str("A ''[[b!!]]'' c", "A b!! c"); } - @Test public void Nowiki() { // EX:en.w:Wiki; DATE:2013-05-13 + @Test public void Nowiki() { // PAGE:en.w:Wiki; DATE:2013-05-13 fxt.Test_parse_page_all_str("''a''", "''a''"); } @Test public void Lnki_multi_line() { // PURPOSE: handle apos within multi-line lnki caption; DATE:2013-11-10 diff --git a/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr.java b/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr.java index 5f8b85e25..1fb475d46 100644 --- a/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr.java @@ -45,12 +45,6 @@ public class Xop_list_wkr implements Xop_ctx_wkr { cur_pos = SymAry_fill(src, cur_pos, src_len, symByt); symByt = src[cur_pos - 1]; // NOTE: get symByt again b/c cur_pos may have changed; EX: "#*"; # may have triggered list, but last symByt should be * if (SymAry_fill_overflow) return ctx.Lxr_make_txt_(cur_pos); - int trim_line_end = Trim_empty_item(src, src_len, cur_pos); - if (trim_line_end != Bry_.NotFound) { - curSymLen = prvSymLen; - ctx.Tkn_mkr().Ignore(bgn_pos, trim_line_end, Xop_ignore_tkn.Ignore_tid_empty_li); - return trim_line_end; - } PrvItm_compare(); ctx.Para().Process_block__bgn__nl_w_symbol(ctx, root, src, bgn_pos, cur_pos - 1, Xop_xnde_tag_.Tag_li); // -1 b/c cur_pos includes sym_byte; EX: \n*; pass li; should pass correct tag, but for purposes of para_wkr,
  • doesn't matter if (prvSymMatch) { @@ -108,21 +102,6 @@ public class Xop_list_wkr implements Xop_ctx_wkr { // if (empty_ignored) ctx.Empty_ignore(root, bgn.Tkn_sub_idx()); // commented; code was incorrectly deactivating "*a" when "
  • " encountered; PAGE:en.w:Bristol_Bullfinch DATE:2014-06-24 ctx.Para().Process_block__bgn_n__end_y(Xop_xnde_tag_.Tag_ul); } - private int Trim_empty_item(byte[] src, int src_len, int pos) { - while (pos < src_len) { - byte b = src[pos]; - switch (b) { - case Byte_ascii.Tab: case Byte_ascii.CarriageReturn: case Byte_ascii.Space: - ++pos; - break; - case Byte_ascii.NewLine: - return pos; - default: - return Bry_.NotFound; - } - } - return Bry_.NotFound; - } private Xop_list_tkn PopTil(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int bgn_pos, int cur_pos, byte subLast) { int acs_pos = ctx.Stack_idx_find_but_stop_at_tbl(Xop_tkn_itm_.Tid_list); if (acs_pos == -1) return null; diff --git a/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr_uncommon_tst.java b/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr_uncommon_tst.java index 26a043524..6fa62d555 100644 --- a/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr_uncommon_tst.java +++ b/400_xowa/src/gplx/xowa/parsers/lists/Xop_list_wkr_uncommon_tst.java @@ -22,144 +22,150 @@ public class Xop_list_wkr_uncommon_tst { @After public void term() {fxt.Init_para_n_();} @Test public void Bug_specified_div() { // FIX: was not clearing state for lnki; PAGE:en.w:Ananke (moon) fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "
    " - , "#a" - , "
    " - , "*b" - ) , String_.Concat_lines_nl_skip_last - ( "
    " - , "
      " - , "
    1. a" - , "" - , "
    2. " - , "
    " - , "
      " - , "
    • b" - , "
    • " - , "
    " - )); + ( "
    " + , "#a" + , "
    " + , "*b" + ), String_.Concat_lines_nl_skip_last + ( "
    " + , "
      " + , "
    1. a" + , "" + , "
    2. " + , "
    " + , "
      " + , "
    • b" + , "
    • " + , "
    " + )); } @Test public void Bug_mismatched() { // FIX: was not clearing state for lnki; PAGE:en.w:Ananke (moon) fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "::a" - , ":::1" - , "::::11" - , ":::::111" - , "::b" - ) , String_.Concat_lines_nl_skip_last - ( "
    " - , "
    " - , "
    " - , "
    a" - , "
    " - , "
    1" - , "
    " - , "
    11" - , "
    " - , "
    111" - , "
    " - , "
    " - , "
    " - , "
    " - , "
    " - , "
    " - , "
    " - , "
    b" - , "
    " - , "
    " - , "
    " - , "
    " - )); + ( "::a" + , ":::1" + , "::::11" + , ":::::111" + , "::b" + ), String_.Concat_lines_nl_skip_last + ( "
    " + , "
    " + , "
    " + , "
    a" + , "
    " + , "
    1" + , "
    " + , "
    11" + , "
    " + , "
    111" + , "
    " + , "
    " + , "
    " + , "
    " + , "
    " + , "
    " + , "
    " + , "
    b" + , "
    " + , "
    " + , "
    " + , "
    " + )); } - @Test public void Empty_li_ignored() { // PURPOSE: inner template can cause dupe li; PAGE:en.w:any Calendar day and NYT link; EX: 1/1 + @Test public void Empty_li_ignored() { // PURPOSE: inner template can cause dupe li; PAGE:en.w:any Calendar day and NYT link; NOTE:deactivated prune_empty_list logic; DATE:2014-09-05 fxt.Init_para_y_(); fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "*a" - , "* " - , "*b" - , "*c" - ) , String_.Concat_lines_nl_skip_last - ( "
      " - , "
    • a" - , "
    • " - , "
    • b" - , "
    • " - , "
    • c" - , "
    • " - , "
    " - , "" - )); + ( "*a" + , "* " + , "*b" + , "*c" + ), String_.Concat_lines_nl_skip_last + ( "
      " + , "
    • a" + , "
    • " + , "
    • " + , "
    • " + , "
    • b" + , "
    • " + , "
    • c" + , "
    • " + , "
    " + , "" + )); fxt.Init_para_n_(); } @Test public void List_in_tblw() { // PURPOSE: list inside table should not be close outer list; PAGE:en.w:Cato the Elder fxt.Init_para_y_(); fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "*a" - , "{|" - , "|b" - , "::c" - , "|}" - ) , String_.Concat_lines_nl_skip_last - ( "
      " - , "
    • a" - , "
    • " - , "
    " - , "" - , " " - , " " - , " " - , "
    b" - , "" - , "
    " - , "
    " - , "
    " - , "
    c" - , "
    " - , "
    " - , "
    " - , "
    " - , "
    " - , "" - )); + ( "*a" + , "{|" + , "|b" + , "::c" + , "|}" + ), String_.Concat_lines_nl_skip_last + ( "
      " + , "
    • a" + , "
    • " + , "
    " + , "" + , " " + , " " + , " " + , "
    b" + , "" + , "
    " + , "
    " + , "
    " + , "
    c" + , "
    " + , "
    " + , "
    " + , "
    " + , "
    " + , "" + )); fxt.Init_para_n_(); } - @Test public void Dt_dd_colon_at_eol() { // PURPOSE: dangling ":" should not put next line in
    ; PAGE:en.w:Stein; b was being wrapped in
    b
    + @Test public void Dt_dd_colon_at_eol() { // PURPOSE: dangling ":" should not put next line in
    ; PAGE:en.w:Stein; b was being wrapped in
    b
    ; NOTE:deactivated prune_empty_list logic; DATE:2014-09-05 fxt.Init_para_y_(); fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( ";a:" - , "*b" - , "" - , ";c" - , "*d" - ) , String_.Concat_lines_nl_skip_last - ( "
    " - , "
    a" - , "
    " - , "
    " - , "
      " - , "
    • b" - , "
    • " - , "
    " - , "" - , "
    " - , "
    c" - , "
    " - , "
    " - , "
      " - , "
    • d" - , "
    • " - , "
    " - , "" - )); + ( ";a:" + , "*b" + , "" + , ";c" + , "*d" + ), String_.Concat_lines_nl_skip_last + ( "
    " + , "
    a" + , "
    " + , "
    " + , "
    " + , "
    " + , "
      " + , "
    • b" + , "
    • " + , "
    " + , "" + , "
    " + , "
    c" + , "
    " + , "
    " + , "
      " + , "
    • d" + , "
    • " + , "
    " + , "" + )); fxt.Init_para_n_(); } - @Test public void Dd_should_not_print_colon() {// PURPOSE: ;a:\n should show as ";a" not ";a:". colon should still be considered as part of empty list; DATE:2013-11-07 + @Test public void Dd_should_not_print_colon() {// PURPOSE: ;a:\n should show as ";a" not ";a:". colon should still be considered as part of empty list; DATE:2013-11-07; NOTE:deactivated prune_empty_list logic; DATE:2014-09-05 fxt.Test_parse_page_all_str ( ";a:\nb" , String_.Concat_lines_nl_skip_last ( "
    " , "
    a" , "
    " + , "
    " + , "
    " , "
    " , "b" )); @@ -167,160 +173,170 @@ public class Xop_list_wkr_uncommon_tst { @Test public void Dt_dd_colon_in_lnki() { // PURPOSE: "; [[Portal:a]]" should not split lnki; PAGE:en.w:Wikipedia:WikiProject Military history/Operation Majestic Titan; "; [[Wikipedia:WikiProject Military history/Operation Majestic Titan/Phase I|Phase I]]: a b" fxt.Init_para_y_(); fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( ";[[Portal:a]]" - ) , String_.Concat_lines_nl_skip_last - ( "
    " - , "
    Portal:A" - , "
    " - , "
    " - , "" - )); + ( ";[[Portal:a]]" + ), String_.Concat_lines_nl_skip_last + ( "
    " + , "
    Portal:A" + , "
    " + , "
    " + , "" + )); fxt.Init_para_n_(); } @Test public void Max_list_depth() { // PURPOSE: 256+ * caused list parser to fail; ignore; PAGE:en.w:Bariatric surgery String multiple = String_.Repeat("*", 300); - fxt.Test_parse_page_all_str(multiple - , String_.Concat_lines_nl_skip_last - ( multiple - )); + fxt.Test_parse_page_all_str(multiple, multiple); } @Test public void Numbered_list_resets_incorrectly() { // PURPOSE: as description fxt.Init_para_y_(); fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "#A" - , "#*Aa" - , "#**Aaa" - , "#*Ab" - , "#B" - ) , String_.Concat_lines_nl_skip_last - ( "
      " - , "
    1. A" - , "" - , "
        " - , "
      • Aa" - , "" - , "
          " - , "
        • Aaa" - , "
        • " - , "
        " - , "
      • " - , "
      • Ab" - , "
      • " - , "
      " // was showing as
    - , "
  • " - , "
  • B" - , "
  • " - , "" - , "" - )); + ( "#A" + , "#*Aa" + , "#**Aaa" + , "#*Ab" + , "#B" + ), String_.Concat_lines_nl_skip_last + ( "
      " + , "
    1. A" + , "" + , "
        " + , "
      • Aa" + , "" + , "
          " + , "
        • Aaa" + , "
        • " + , "
        " + , "
      • " + , "
      • Ab" + , "
      • " + , "
      " // was showing as
    + , " " + , "
  • B" + , "
  • " + , "" + , "" + )); fxt.Init_para_n_(); } @Test public void List_should_not_end_indented_table() {// PURPOSE: :{| was being closed by \n*; EX:w:Maxwell's equations; DATE:20121231 fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( ":{|" - , "|-" - , "|" - , "*a" - , "|b" - , "|}" - ) , String_.Concat_lines_nl_skip_last - ( "
    " - , "
    " - , " " - , " " - , " " - , " " - , " " - , "
    " - , "
      " - , "
    • a" - , "
    • " - , "
    " - , "
    b" - , "
    " - , "
    " - , "
    " - )); + ( ":{|" + , "|-" + , "|" + , "*a" + , "|b" + , "|}" + ), String_.Concat_lines_nl_skip_last + ( "
    " + , "
    " + , " " + , " " + , " " + , " " + , " " + , "
    " + , "
      " + , "
    • a" + , "
    • " + , "
    " + , "
    b" + , "
    " + , "
    " + , "
    " + )); } @Test public void Dt_dd_broken_by_xnde() { // PURPOSE.fix: xnde was resetting dl incorrectly; EX:w:Virus; DATE:2013-01-31 fxt.Test_parse_page_all_str(";a:c" - , String_.Concat_lines_nl_skip_last - ( "
    " - , "
    a" - , "
    " - , "
    c" - , "
    " - , "
    " + , String_.Concat_lines_nl_skip_last + ( "
    " + , "
    a" + , "
    " + , "
    c" + , "
    " + , "
    " )); } - @Test public void Trim_empty_list_items() { // PURPOSE: empty list items should be ignored; DATE:2013-07-02 - fxt.Test_parse_page_all_str("*** \n" - , String_.Concat_lines_nl_skip_last - ( "" + @Test public void Trim_empty_list_items() { // PURPOSE: empty list items should be ignored; DATE:2013-07-02; NOTE:deactivated prune_empty_list logic; DATE:2014-09-05 + fxt.Test_parse_page_all_str + ("*** \n" + , String_.Concat_lines_nl_skip_last + ( "
      " + , "
    • " + , "
        " + , "
      • " + , "
          " + , "
        • " + , "
        • " + , "
        " + , "
      • " + , "
      " + , "
    • " + , "
    " + , "" )); } - @Test public void Trim_empty_list_items_error() { // PURPOSE.fix: do not add empty itm's nesting to current list; DATE:2013-07-07 + @Test public void Trim_empty_list_items_error() { // PURPOSE.fix: do not add empty itm's nesting to current list; DATE:2013-07-07; NOTE:deactivated prune_empty_list logic; DATE:2014-09-05 fxt.Test_parse_page_all_str(String_.Concat_lines_nl - ( "* a" - , "** " // do not add ** to nest - , "*** b" - , "* c" - ) , String_.Concat_lines_nl - ( "
      " - , "
    • a" - , "
        " - , "
      • " - , "
          " - , "
        • b" - , "
        • " - , "
        " - , "
      • " - , "
      " - , "
    • " - , "
    • c" - , "
    • " - , "
    " + ( "* a" + , "** " // was: do not add ** to nest; now: add ** and \s + , "*** b" + , "* c" + ), String_.Concat_lines_nl + ( "
      " + , "
    • a" + , "
        " + , "
      • " + , "
          " + , "
        • b" + , "
        • " + , "
        " + , "
      • " + , "
      " + , "
    • " + , "
    • c" + , "
    • " + , "
    " )); } @Test public void Tblw_should_autoclose() {// PURPOSE: tblw should auto-close open list fxt.Test_parse_page_all_str(String_.Concat_lines_nl_skip_last - ( "#a" - , "{|" - , "|b" - , "|}" - ) , String_.Concat_lines_nl_skip_last - ( "
      " - , "
    1. a" - , "
    2. " - , "
    " - , "" - , " " - , " " - , " " - , "
    b" - , "
    " - , "" + ( "#a" + , "{|" + , "|b" + , "|}" + ), String_.Concat_lines_nl_skip_last + ( "
      " + , "
    1. a" + , "
    2. " + , "
    " + , "" + , " " + , " " + , " " + , "
    b" + , "
    " + , "" )); } @Test public void Tblx_should_not_autoclose() { // PURPOSE: do not auto-close list if table is xnde; DATE:2014-02-05 fxt.Test_parse_page_all_str(String_.Concat_lines_nl - ( "#a" - , "#
    b
    " - , "c" - ) , String_.Concat_lines_nl - ( "
      " - , "
    1. a" - , "
    2. " - , "
    3. " - , " " - , " " - , " " - , " " - , "
      b" - , "
      " - , "
    4. " - , "
    " - , "c" + ( "#a" + , "#
    b
    " + , "c" + ), String_.Concat_lines_nl + ( "
      " + , "
    1. a" + , "
    2. " + , "
    3. " + , " " + , " " + , " " + , " " + , "
      b" + , "
      " + , "
    4. " + , "
    " + , "c" )); } @Test public void Li_disappears() { // PURPOSE: "\n*" disappears when followed by "
  • "; PAGE:en.w:Bristol_Bullfinch; DATE:2014-06-24 diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java index f950d868a..9abb2905d 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java @@ -38,71 +38,73 @@ public class Xop_lnki_logger_redlinks_wkr implements GfoInvkAble { return this; } public static final String Invk_run = "run"; public void Redlink() { - ListAdp work_list = ListAdp_.new_(); - OrderedHash page_hash = OrderedHash_.new_bry_(); - page_hash.Clear(); // NOTE: do not clear in Page_bgn, else will fail b/c of threading; EX: Open Page -> Preview -> Save; DATE:2013-11-17 - work_list.Clear(); - int len = lnki_list.Count(); - if (log_enabled) usr_dlg.Log_many("", "", "redlink.redlink_bgn: page=~{0} total_links=~{1}", String_.new_utf8_(page.Ttl().Raw()), len); - for (int i = 0; i < len; i++) { // make a copy of list else thread issues - if (win.Usr_dlg().Canceled()) return; - if (redlinks_mgr.Request_idx() != request_idx) return; - work_list.Add(lnki_list.FetchAt(i)); - } - for (int i = 0; i < len; i++) { - if (win.Usr_dlg().Canceled()) return; - if (redlinks_mgr.Request_idx() != request_idx) return; - Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.FetchAt(i); - Xoa_ttl ttl = lnki.Ttl(); - Xodb_page db_page = new Xodb_page().Ttl_(ttl); - byte[] full_txt = ttl.Full_db(); - if (!page_hash.Has(full_txt)) - page_hash.Add(full_txt, db_page); - } - int page_len = page_hash.Count(); - for (int i = 0; i < page_len; i += Batch_size) { - if (win.Usr_dlg().Canceled()) return; - if (redlinks_mgr.Request_idx() != request_idx) return; - int end = i + Batch_size; - if (end > page_len) end = page_len; - wiki.Db_mgr().Load_mgr().Load_by_ttls(win.Usr_dlg(), page_hash, Xodb_page_tbl.Load_idx_flds_only_y, i, end); - } - redlink_count = 0; - Bry_bfr bfr = null; - boolean variants_enabled = wiki.Lang().Vnt_mgr().Enabled(); - Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr(); - Int_list redlink_mgr = page.Html_data().Redlink_mgr(); - for (int j = 0; j < len; j++) { - Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.FetchAt(j); - byte[] full_db = lnki.Ttl().Full_db(); - Xodb_page db_page = (Xodb_page)page_hash.Fetch(full_db); - if (db_page == null) continue; // pages shouldn't be null, but just in case - if (!db_page.Exists()) { - String lnki_id = Xop_lnki_logger_redlinks_mgr.Lnki_id_prefix + Int_.XtoStr(lnki.Html_id()); - if (variants_enabled) { - Xodb_page vnt_page = vnt_mgr.Convert_ttl(wiki, lnki.Ttl()); - if (vnt_page != null) { - Xoa_ttl vnt_ttl = Xoa_ttl.parse_(wiki, lnki.Ttl().Ns().Id(), vnt_page.Ttl_wo_ns()); - html_itm.Html_atr_set(lnki_id, "href", "/wiki/" + String_.new_utf8_(vnt_ttl.Full_url())); - if (!String_.Eq(vnt_mgr.Html_style(), "")) - html_itm.Html_atr_set(lnki_id, "style", vnt_mgr.Html_style()); - continue; - } - } - if (log_enabled) { - if (bfr == null) bfr = Bry_bfr.new_(); - bfr.Add_int_variable(lnki.Html_id()).Add_byte_pipe().Add(Xop_tkn_.Lnki_bgn).Add(full_db).Add(Xop_tkn_.Lnki_end).Add_byte(Byte_ascii.Semic).Add_byte_space(); - } + synchronized (this) { // NOTE: attempt to eliminate random IndexBounds errors; DATE:2014-09-02 + ListAdp work_list = ListAdp_.new_(); + OrderedHash page_hash = OrderedHash_.new_bry_(); + page_hash.Clear(); // NOTE: do not clear in Page_bgn, else will fail b/c of threading; EX: Open Page -> Preview -> Save; DATE:2013-11-17 + work_list.Clear(); + int len = lnki_list.Count(); + if (log_enabled) usr_dlg.Log_many("", "", "redlink.redlink_bgn: page=~{0} total_links=~{1}", String_.new_utf8_(page.Ttl().Raw()), len); + for (int i = 0; i < len; i++) { // make a copy of list else thread issues if (win.Usr_dlg().Canceled()) return; if (redlinks_mgr.Request_idx() != request_idx) return; - int uid = lnki.Html_id(); - gplx.xowa.files.gui.Js_img_mgr.Update_link_missing(html_itm, Xop_lnki_logger_redlinks_mgr.Lnki_id_prefix + Int_.XtoStr(uid)); - redlink_mgr.Add(uid); - ++redlink_count; + work_list.Add(lnki_list.FetchAt(i)); } + for (int i = 0; i < len; i++) { + if (win.Usr_dlg().Canceled()) return; + if (redlinks_mgr.Request_idx() != request_idx) return; + Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.FetchAt(i); + Xoa_ttl ttl = lnki.Ttl(); + Xodb_page db_page = new Xodb_page().Ttl_(ttl); + byte[] full_txt = ttl.Full_db(); + if (!page_hash.Has(full_txt)) + page_hash.Add(full_txt, db_page); + } + int page_len = page_hash.Count(); + for (int i = 0; i < page_len; i += Batch_size) { + if (win.Usr_dlg().Canceled()) return; + if (redlinks_mgr.Request_idx() != request_idx) return; + int end = i + Batch_size; + if (end > page_len) end = page_len; + wiki.Db_mgr().Load_mgr().Load_by_ttls(win.Usr_dlg(), page_hash, Xodb_page_tbl.Load_idx_flds_only_y, i, end); + } + redlink_count = 0; + Bry_bfr bfr = null; + boolean variants_enabled = wiki.Lang().Vnt_mgr().Enabled(); + Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr(); + Int_list redlink_mgr = page.Html_data().Redlink_mgr(); + for (int j = 0; j < len; j++) { + Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.FetchAt(j); + byte[] full_db = lnki.Ttl().Full_db(); + Xodb_page db_page = (Xodb_page)page_hash.Fetch(full_db); + if (db_page == null) continue; // pages shouldn't be null, but just in case + if (!db_page.Exists()) { + String lnki_id = Xop_lnki_logger_redlinks_mgr.Lnki_id_prefix + Int_.Xto_str(lnki.Html_id()); + if (variants_enabled) { + Xodb_page vnt_page = vnt_mgr.Convert_ttl(wiki, lnki.Ttl()); + if (vnt_page != null) { + Xoa_ttl vnt_ttl = Xoa_ttl.parse_(wiki, lnki.Ttl().Ns().Id(), vnt_page.Ttl_wo_ns()); + html_itm.Html_atr_set(lnki_id, "href", "/wiki/" + String_.new_utf8_(vnt_ttl.Full_url())); + if (!String_.Eq(vnt_mgr.Html_style(), "")) + html_itm.Html_atr_set(lnki_id, "style", vnt_mgr.Html_style()); + continue; + } + } + if (log_enabled) { + if (bfr == null) bfr = Bry_bfr.new_(); + bfr.Add_int_variable(lnki.Html_id()).Add_byte_pipe().Add(Xop_tkn_.Lnki_bgn).Add(full_db).Add(Xop_tkn_.Lnki_end).Add_byte(Byte_ascii.Semic).Add_byte_space(); + } + if (win.Usr_dlg().Canceled()) return; + if (redlinks_mgr.Request_idx() != request_idx) return; + int uid = lnki.Html_id(); + gplx.xowa.files.gui.Js_img_mgr.Update_link_missing(html_itm, Xop_lnki_logger_redlinks_mgr.Lnki_id_prefix + Int_.Xto_str(uid)); + redlink_mgr.Add(uid); + ++redlink_count; + } + } + if (log_enabled) + usr_dlg.Log_many("", "", "redlink.redlink_end: redlinks_run=~{0} links=~{1}", redlink_count, bfr == null ? String_.Empty : bfr.XtoStrAndClear()); } - if (log_enabled) - usr_dlg.Log_many("", "", "redlink.redlink_end: redlinks_run=~{0} links=~{1}", redlink_count, bfr == null ? String_.Empty : bfr.XtoStrAndClear()); } public static final Xop_lnki_logger_redlinks_wkr Null = new Xop_lnki_logger_redlinks_wkr(); Xop_lnki_logger_redlinks_wkr() {} private static final int Batch_size = 32; diff --git a/400_xowa/src/gplx/xowa/parsers/logs/Xop_log_mgr.java b/400_xowa/src/gplx/xowa/parsers/logs/Xop_log_mgr.java index f3fecba7c..4995ba43f 100644 --- a/400_xowa/src/gplx/xowa/parsers/logs/Xop_log_mgr.java +++ b/400_xowa/src/gplx/xowa/parsers/logs/Xop_log_mgr.java @@ -59,7 +59,7 @@ public class Xop_log_mgr implements GfoInvkAble { public void Txn_end() {provider.Txn_mgr().Txn_end_all();} public void Rls() { if (log_tbl != null) log_tbl.Rls(); - if (provider != null) {provider.Rls(); provider = null;} + if (provider != null) {provider.Conn_term(); provider = null;} } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v"); diff --git a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java index 2e3ff46cd..318d4eb64 100644 --- a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java +++ b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java @@ -129,7 +129,7 @@ public class Http_server_mgr implements GfoInvkAble { if (wkr == null) wkr = new Http_server_wkr(this, port); new Thread(wkr, "thread:xowa.http_server").start(); - Note("HTTP Server started: Navigate to http://localhost:" + Int_.XtoStr(port)); + Note("HTTP Server started: Navigate to http://localhost:" + Int_.Xto_str(port)); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_port)) return port; diff --git a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr.java b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr.java index 0eb9fdb76..9ba3c9df7 100644 --- a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr.java +++ b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_msg_rdr.java @@ -26,7 +26,7 @@ public class Xosrv_msg_rdr { if (bytes_read == -1) return Xosrv_msg.Exit; // stream closed; should only occur when shutting down else return Xosrv_msg.fail_("header is invalid; hdr:{0}", String_.new_utf8_(header_bry, 0, bytes_read)); } - byte version = header_bry[0]; if (version != Byte_ascii.Num_0) return Xosrv_msg.fail_("version must be 0; version:{0}", Byte_.XtoStr(version)); + byte version = header_bry[0]; if (version != Byte_ascii.Num_0) return Xosrv_msg.fail_("version must be 0; version:{0}", Byte_.Xto_str(version)); int body_len = Bry_.Xto_int_or(header_bry, 2, 12, -1); if (body_len == -1) return Xosrv_msg.fail_("body_len is not number; body_len:{0}", String_.new_utf8_(header_bry, 2, 23)); int cksum = Bry_.Xto_int_or(header_bry, 13, 23, -1); if (cksum == -1) return Xosrv_msg.fail_("checksum is not number; cksum:{0}", String_.new_utf8_(header_bry, 13, 23)); if (!Chk_bytes(header_bry, Byte_ascii.Pipe, 1, 12, 23)) return Xosrv_msg.fail_("message should be delimited by pipes at 1, 12 and 23; message:{0}", String_.new_utf8_(header_bry, 0, 24)); diff --git a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_server.java b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_server.java index c74ac33bf..0996a7b32 100644 --- a/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_server.java +++ b/400_xowa/src/gplx/xowa/servers/tcp/Xosrv_server.java @@ -25,7 +25,7 @@ public class Xosrv_server implements GfoInvkAble { public int Wtr_port() {return wtr_port;} public Xosrv_server Wtr_port_(int v) {wtr_port = v; return this;} private int wtr_port = 55001; public int Shutdown_interval() {return shutdown_interval;} public Xosrv_server Shutdown_interval_(int v) {shutdown_interval = v; return this;} private int shutdown_interval = -1; public String Wtr_host() {return wtr_host;} private String wtr_host = "localhost"; - public boolean Running() {return running;} public Xosrv_server Running_(boolean v) {running = v; running_str = Bool_.XtoStr_lower(running); return this;} private boolean running = false; + public boolean Running() {return running;} public Xosrv_server Running_(boolean v) {running = v; running_str = Bool_.Xto_str_lower(running); return this;} private boolean running = false; public String Running_str() {return running_str;} String running_str = "false"; public void App_ctor(Xoa_app app) {this.app = app;} public Xoa_app App() {return app;} private Xoa_app app; diff --git a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java index 27949a8e3..ee50ca53f 100644 --- a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java +++ b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java @@ -106,7 +106,7 @@ class Wmf_dump_list_parser_fxt { private Wmf_dump_list_parser parser = new Wmf_dump_list_parser(); public String itm(String wiki_abrv, String dump_date, byte status_done, String status_msg, String status_time) { return String_.Concat_with_str("\n", wiki_abrv, dump_date - , Byte_.XtoStr(status_done) + , Byte_.Xto_str(status_done) , status_msg , status_time ); @@ -126,7 +126,7 @@ class Wmf_dump_list_parser_fxt { DateAdp status_time = itm.Status_time(); String status_time_str = status_time == null ? "" : status_time.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time); return String_.Concat_with_str("\n", String_.new_ascii_(itm.Wiki_abrv()), itm.Dump_date().XtoStr_fmt("yyyyMMdd") - , Byte_.XtoStr(itm.Status_tid()) + , Byte_.Xto_str(itm.Status_tid()) , String_.new_ascii_(itm.Status_msg()) , status_time_str ); diff --git a/400_xowa/src/gplx/xowa/setup/maints/Xow_maint_mgr.java b/400_xowa/src/gplx/xowa/setup/maints/Xow_maint_mgr.java index a284a7938..139f9d4c0 100644 --- a/400_xowa/src/gplx/xowa/setup/maints/Xow_maint_mgr.java +++ b/400_xowa/src/gplx/xowa/setup/maints/Xow_maint_mgr.java @@ -34,7 +34,7 @@ public class Xow_maint_mgr implements GfoInvkAble { } private DateAdp wiki_dump_date; public boolean Wiki_update_needed() { if (this.Wiki_dump_date() == null) return false; // will be null if a custom wiki (i.e.: not on http://dumps.wikimedia.org/backup-index.html) - return this.Wmf_dump_date().Diff(this.Wiki_dump_date()).Total_days().XtoDouble() > 1; + return this.Wmf_dump_date().Diff(this.Wiki_dump_date()).Total_days().Xto_double() > 1; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_wmf_dump_date)) return DateAdp_.Xto_str_fmt_or(Wmf_dump_date(), "yyyy-MM-dd", ""); diff --git a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java index 58e8b2e0a..e84884a05 100644 --- a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java +++ b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java @@ -108,7 +108,7 @@ class Xop_statistics_stats_ns_itm implements Bry_fmtr_arg { class Xop_statistics_stats_wiki_grp implements Bry_fmtr_arg { public void Wiki_(Xow_wiki v) {this.wiki = v;} private Xow_wiki wiki; public void XferAry(Bry_bfr bfr, int idx) { - fmtr_wiki.Bld_bfr_many(bfr, wiki.Db_mgr().Tid_name(), wiki.Fsys_mgr().Root_dir().Raw(), Byte_.XtoStr(wiki.Db_mgr().Category_version()), wiki.Maint_mgr().Wiki_dump_date().XtoStr_fmt_iso_8561()); + fmtr_wiki.Bld_bfr_many(bfr, wiki.Db_mgr().Tid_name(), wiki.Fsys_mgr().Root_dir().Raw(), Byte_.Xto_str(wiki.Db_mgr().Category_version()), wiki.Maint_mgr().Wiki_dump_date().XtoStr_fmt_iso_8561()); } private Bry_fmtr fmtr_wiki = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" diff --git a/400_xowa/src/gplx/xowa/urls/encoders/Url_encoder_mgr.java b/400_xowa/src/gplx/xowa/urls/encoders/Url_encoder_mgr.java index bd43529b3..a30833525 100644 --- a/400_xowa/src/gplx/xowa/urls/encoders/Url_encoder_mgr.java +++ b/400_xowa/src/gplx/xowa/urls/encoders/Url_encoder_mgr.java @@ -17,13 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.urls.encoders; import gplx.*; import gplx.xowa.*; import gplx.xowa.urls.*; public class Url_encoder_mgr { - public Url_encoder Id() {return id;} private Url_encoder id = Url_encoder.new_html_id_(); - public Url_encoder Url() {return url;} private Url_encoder url = Url_encoder.new_http_url_(); - public Url_encoder Url_ttl() {return url_ttl;} private Url_encoder url_ttl = Url_encoder.new_http_url_ttl_(); - public Url_encoder Href() {return href;} private Url_encoder href = Url_encoder.new_html_href_mw_(); - public Url_encoder Href_quotes() {return href_quotes;} private Url_encoder href_quotes = Url_encoder.new_html_href_quotes_(); - public Url_encoder Comma() {return comma;} private Url_encoder comma = Url_encoder.url_comma(); - public Url_encoder Gfs() {return gfs;} private Url_encoder gfs = Url_encoder.new_gfs_(); - public Url_encoder Fsys() {return fsys;} private Url_encoder fsys = Url_encoder.new_fsys_lnx_(); - public Url_encoder Fsys_safe() {return fsys_safe;} private Url_encoder fsys_safe = Url_encoder.new_fsys_wnt_(); + public Url_encoder Id() {return id;} private Url_encoder id = Url_encoder.new_html_id_(); + public Url_encoder Url() {return url;} private Url_encoder url = Url_encoder.new_http_url_(); + public Url_encoder Url_ttl() {return url_ttl;} private Url_encoder url_ttl = Url_encoder.new_http_url_ttl_(); + public Url_encoder Href() {return href;} private Url_encoder href = Url_encoder.new_html_href_mw_(); + public Url_encoder Href_quotes() {return href_quotes;} private Url_encoder href_quotes = Url_encoder.new_html_href_quotes_(); + public Url_encoder Comma() {return comma;} private Url_encoder comma = Url_encoder.url_comma(); + public Url_encoder Gfs() {return gfs;} private Url_encoder gfs = Url_encoder.new_gfs_(); + public Url_encoder Fsys() {return fsys;} private Url_encoder fsys = Url_encoder.new_fsys_lnx_(); + public Url_encoder Fsys_safe() {return fsys_safe;} private Url_encoder fsys_safe = Url_encoder.new_fsys_wnt_(); } diff --git a/400_xowa/src/gplx/xowa/users/dbs/Xou_db_mgr.java b/400_xowa/src/gplx/xowa/users/dbs/Xou_db_mgr.java index 29b485b8f..5d5a19feb 100644 --- a/400_xowa/src/gplx/xowa/users/dbs/Xou_db_mgr.java +++ b/400_xowa/src/gplx/xowa/users/dbs/Xou_db_mgr.java @@ -50,7 +50,7 @@ public class Xou_db_mgr { } public void App_term() { try { - app.Usr_dlg().Note_many("", "", "user_db.shut_down.bgn: ~{0}", provider.ConnectInfo().Raw_of_db_connect()); + app.Usr_dlg().Note_many("", "", "user_db.shut_down.bgn: ~{0}", provider.Conn_info().Str_raw()); this.App_save(); int wkr_len = wkr_list.Count(); for (int i = 0; i < wkr_len; i++) { @@ -58,7 +58,7 @@ public class Xou_db_mgr { wkr.Db_term(this); } provider.Txn_mgr().Txn_end_all(); - provider.Rls(); + provider.Conn_term(); app.Usr_dlg().Note_many("", "", "user_db.shut_down.end"); } catch (Exception e) { diff --git a/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java b/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java index 6b53aa2ce..0e2301232 100644 --- a/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java +++ b/400_xowa/src/gplx/xowa/users/prefs/Prefs_mgr.java @@ -75,7 +75,7 @@ public class Prefs_mgr implements GfoInvkAble { byte[] eval_code = hnde.Atrs_val_by_key_bry(Bry_prop); if (eval_code == null) eval_code = hnde.Atrs_val_by_key_bry(Bry_prop_set); String hnde_val = null; - String hnde_key = "xowa_prop_" + Int_.XtoStr(i); + String hnde_key = "xowa_prop_" + Int_.Xto_str(i); Gfui_html html_box = html_box_mok == null ? app.Gui_mgr().Browser_win().Active_tab().Html_itm().Html_box() : html_box_mok; // TEST: byte elem_tid = Prefs_mgr.Elem_tid_tid_of(hnde); switch (elem_tid) { diff --git a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java index da04fcd89..1a5d29b6d 100644 --- a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java @@ -38,6 +38,7 @@ public class Xow_xtn_mgr implements GfoInvkAble { Add(app, new gplx.xowa.xtns.listings.Listing_xtn_mgr()); Add(app, new gplx.xowa.xtns.titleBlacklists.Blacklist_xtn_mgr()); Add(app, new gplx.xowa.xtns.pfuncs.scribunto.Pfunc_xtn_mgr()); + Add(app, new gplx.xowa.xtns.proofreadPage.Pp_xtn_mgr()); return this; } public Xow_xtn_mgr Ctor_by_wiki(Xow_wiki wiki) { diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java index 2cd4cd55e..09a289720 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java @@ -105,7 +105,7 @@ public class Gallery_html_wtr { , lnki_alt ); if (hctx_is_hdump) - hdump_imgs.Imgs_add(new Hdump_data_img__gallery().Init_by_gallery(-1, itm_div_w, itm_box_w, itm_margin), xfer_itm, Hdump_data_img__gallery.Tid_gallery); + hdump_imgs.Data_add_img(new Hdump_data_img__gallery().Init_by_gallery(itm_div_w, itm_box_w, itm_margin), xfer_itm, Hdump_data_img__gallery.Tid_gallery); } else { Gallery_html_wtr_.Itm_txt_fmtr.Bld_bfr_many(itm_bfr diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java index 89cd067f7..d54211fd2 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java @@ -48,7 +48,7 @@ public class Gallery_itm implements Js_img_wkr { Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); try { xfer_itm.Init_for_gallery_update(html_w, html_h, html_src, orig_src); - gallery_mgr.Write_html_itm(bfr, tmp_bfr, wiki.App(), wiki, ctx.Cur_page(), ctx, wiki.Html_mgr().Html_wtr(), Xoh_wtr_ctx.Basic, src, xnde, Bry_.Empty, gallery_itm_idx, xfer_itm, false, -1); + gallery_mgr.Write_html_itm(bfr, tmp_bfr, wiki.App(), wiki, ctx.Cur_page(), ctx, wiki.Html_mgr().Html_wtr(), Xoh_wtr_ctx.Basic, src, xnde, Bry_.Empty, gallery_itm_idx, xfer_itm, false); String itm_html = bfr.XtoStrAndClear(); html_itm.Html_elem_replace_html(String_.new_utf8_(gallery_li_id_bry), itm_html); if (gallery_itm_idx == xnde.Itms_len() - 1 && Gallery_mgr_base_.Mode_is_packed(xnde.Mode())) diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser_tst.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser_tst.java index 89d8ef732..d3da853f6 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser_tst.java @@ -79,7 +79,7 @@ class Gallery_itm_parser_fxt { public String[] Expd(String ttl, String caption) {return new String[] {ttl, caption, null, null, null};} public String[] Expd(String ttl, String caption, String alt) {return new String[] {ttl, caption, alt, null, null};} public String[] Expd(String ttl, String caption, String alt, String link) {return new String[] {ttl, caption, alt, link, null};} - public String[] Expd(String ttl, String caption, String alt, String link, int page) {return new String[] {ttl, caption, alt, link, Int_.XtoStr(page)};} + public String[] Expd(String ttl, String caption, String alt, String link, int page) {return new String[] {ttl, caption, alt, link, Int_.Xto_str(page)};} public void Init_kwd_set(int kwd_id, String kwd_val) { wiki.Lang().Kwd_mgr().Get_or_new(kwd_id).Itms()[0].Val_(Bry_.new_ascii_(kwd_val)); parser.Init_by_wiki(wiki); diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java index e6e5dbbde..a1efd1078 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java @@ -55,13 +55,13 @@ public abstract class Gallery_mgr_base { boolean hctx_is_hdump = hctx.Mode_is_hdump(); Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); byte[] box_style = xnde.Atr_style(); - int max_width = -1; + int gallery_uid = page.Html_data().Xtn_gallery_next_id(); if (itms_per_row > 0) { - max_width = itms_per_row * (itm_default_w + this.Get_all_padding()); + int max_width = itms_per_row * (itm_default_w + this.Get_all_padding()); box_style = Fmt_and_add(tmp_bfr, box_style_max_width_fmtr, box_style, max_width); + page.Hdump_data().Data_add(new Hdump_data_gallery(gallery_uid, max_width)); } byte[] box_cls = Fmt_and_add(tmp_bfr, box_cls_fmtr, xnde.Atr_cls(), this.Tid_bry()); - int gallery_uid = page.Html_data().Xtn_gallery_next_id(); byte[] gallery_ul_id = tmp_bfr.Add(box_id_prefix_bry).Add_int_variable(gallery_uid).XtoAryAndClear(); Box_hdr_write(bfr, wiki.App().Html_mgr().Whitelist_mgr(), src, gallery_ul_id, box_cls, box_style, xnde.Atrs_other(), hctx_is_hdump, gallery_uid); byte[] box_caption = xnde.Atr_caption(); @@ -70,13 +70,13 @@ public abstract class Gallery_mgr_base { Xoa_app app = wiki.App(); Xoh_html_wtr html_wtr = wiki.Html_mgr().Html_wtr(); int itm_len = xnde.Itms_len(); for (int i = 0; i < itm_len; i++) { - Write_html_itm(bfr, tmp_bfr, app, wiki, page, ctx, html_wtr, hctx, src, xnde, gallery_ul_id, i, null, hctx_is_hdump, max_width); + Write_html_itm(bfr, tmp_bfr, app, wiki, page, ctx, html_wtr, hctx, src, xnde, gallery_ul_id, i, null, hctx_is_hdump); } bfr.Add(box_html_end_bry); tmp_bfr.Mkr_rls(); } private static final byte[] box_id_prefix_bry = Bry_.new_ascii_("xowa_gallery_ul_"), itm_id_prefix_bry = Bry_.new_ascii_("xowa_gallery_li_"); public static byte File_found_mode = Bool_.__byte; - public void Write_html_itm(Bry_bfr bfr, Bry_bfr tmp_bfr, Xoa_app app, Xow_wiki wiki, Xoa_page page, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, byte[] src, Gallery_xnde xnde, byte[] gallery_ul_id, int i, Xof_xfer_itm xfer_itm, boolean hctx_is_hdump, int max_width) { + public void Write_html_itm(Bry_bfr bfr, Bry_bfr tmp_bfr, Xoa_app app, Xow_wiki wiki, Xoa_page page, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, byte[] src, Gallery_xnde xnde, byte[] gallery_ul_id, int i, Xof_xfer_itm xfer_itm, boolean hctx_is_hdump) { Gallery_itm itm = (Gallery_itm)xnde.Itms_get_at(i); Xoa_ttl ttl = itm.Ttl(); byte[] itm_caption = itm.Caption_bry(); if (itm_caption == null) itm_caption = Bry_.Empty; @@ -149,7 +149,7 @@ public abstract class Gallery_mgr_base { Wrap_gallery_text(bfr, itm_caption, html_w_expand, html_h_expand); bfr.Add(itm_li_end_bry); if (hctx_is_hdump) - page.Hdump_data().Imgs_add(new Hdump_data_img__gallery().Init_by_gallery(max_width, itm_div_width, img_div_w, vpad), xfer_itm, Hdump_data_img__gallery.Tid_gallery); + page.Hdump_data().Data_add_img(new Hdump_data_img__gallery().Init_by_gallery(itm_div_width, img_div_w, vpad), xfer_itm, Hdump_data_img__gallery.Tid_gallery); } private static final byte[] Wrap_gallery_text_bgn = Bry_.new_ascii_("\n
    ") // NOTE: The newline after
    is needed to accommodate htmltidy diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java index 3d797e3a4..835f086ae 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java @@ -43,7 +43,7 @@ public class Imap_map implements Xoh_file_img_wkr, Js_img_wkr { Xow_wiki wiki = xtn_mgr.Wiki(); Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); Write_imap_div(tmp_bfr, page, Xoh_wtr_ctx.Basic, html_uid, html_w, html_h, Bry_.new_utf8_(html_src), orig_w, orig_h, lnki_ttl); - html_itm.Html_elem_replace_html("imap_div_" + Int_.XtoStr(html_uid), tmp_bfr.Mkr_rls().XtoStrAndClear()); + html_itm.Html_elem_replace_html("imap_div_" + Int_.Xto_str(html_uid), tmp_bfr.Mkr_rls().XtoStrAndClear()); } private void Write_imap_div(Bry_bfr bfr, Xoa_page page, Xoh_wtr_ctx hctx, int html_uid, int html_w, int html_h, byte[] html_src, int orig_w, int orig_h, byte[] lnki_ttl) { byte[] desc_style = Calc_desc_style(html_w, html_h); diff --git a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr.java b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr.java index e79d1242a..06be18a26 100644 --- a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr.java +++ b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr.java @@ -52,7 +52,7 @@ public class Insider_html_bldr implements Bry_fmtr_arg { hash.Add(user_ttl_bry, user_ttl_bry); href_parser.Encoder().Encode(tmp_ttl, user_ttl_bry); user_ttl_bry = tmp_ttl.XtoAryAndClear(); - fmtr_itm.Bld_bfr(bfr, user_ttl_bry, itm); + fmtr_itm.Bld_bfr(bfr, user_ttl_bry, user_ttl.Page_txt()); } } private static final Bry_fmtr diff --git a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java index f79eb32a5..e3cdde97b 100644 --- a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java @@ -20,13 +20,13 @@ import org.junit.*; public class Insider_html_bldr_tst { @Before public void init() {fxt.Clear();} private Insider_html_bldr_fxt fxt = new Insider_html_bldr_fxt(); @Test public void Basic() { - fxt.Init_insider("A"); + fxt.Init_insider("A_1"); fxt.Test_bld(String_.Concat_lines_nl_skip_last ( "