/ *
XOWA: the XOWA Offline Wiki Application
Copyright ( C ) 2012 gnosygnu @gmail.com
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation , either version 3 of the
License , or ( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
package gplx.core.stores ; import gplx.* ; import gplx.core.* ;
import gplx.core.strings.* ; import gplx.core.type_xtns.* ;
public abstract class DataRdr_base implements SrlMgr {
public boolean Parse ( ) { return parse ; } public void Parse_set ( boolean v ) { parse = v ; } private boolean parse ;
public Io_url Uri ( ) { return uri ; } public void Uri_set ( Io_url s ) { uri = s ; } Io_url uri = Io_url_ . Empty ;
public abstract String NameOfNode ( ) ;
public boolean Type_rdr ( ) { return true ; }
public Hash_adp EnvVars ( ) { return envVars ; } Hash_adp envVars = Hash_adp_ . new_ ( ) ;
public abstract Object Read ( String key ) ;
public abstract int FieldCount ( ) ;
public abstract String KeyAt ( int i ) ;
public abstract Object ReadAt ( int i ) ;
@gplx.Virtual public Keyval KeyValAt ( int idx ) { return Keyval_ . new_ ( this . KeyAt ( idx ) , ReadAt ( idx ) ) ; }
public String ReadStr ( String key ) {
Object val = Read ( key ) ;
try { return ( String ) val ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( String . class , key , val , exc ) ; }
}
public String ReadStrOr ( String key , String or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( String ) val ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , String . class , key , val , or ) ; return or ; }
}
public byte [ ] ReadBryByStr ( String key ) { return Bry_ . new_u8 ( ReadStr ( key ) ) ; }
public byte [ ] ReadBryByStrOr ( String key , byte [ ] or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return Bry_ . new_u8 ( ( String ) val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , byte [ ] . class , key , val , or ) ; return or ; }
}
@gplx.Virtual public void SrlList ( String key , List_adp list , SrlObj proto , String itmKey ) {
list . Clear ( ) ;
DataRdr subRdr = this . Subs_byName_moveFirst ( key ) ; // collection node
subRdr = subRdr . Subs ( ) ;
while ( subRdr . MoveNextPeer ( ) ) {
SrlObj itm = proto . SrlObj_New ( null ) ;
itm . SrlObj_Srl ( subRdr ) ;
list . Add ( itm ) ;
}
}
@gplx.Virtual public Object StoreRoot ( SrlObj root , String key ) {
SrlObj clone = root . SrlObj_New ( null ) ;
clone . SrlObj_Srl ( this ) ;
return clone ;
}
public abstract DataRdr Subs_byName_moveFirst ( String name ) ;
public int ReadInt ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Int_ . parse ( String_ . as_ ( val ) ) : Int_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( int . class , key , val , exc ) ; }
}
public int ReadIntOr ( String key , int or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Int_ . parse ( String_ . as_ ( val ) ) : Int_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , int . class , key , val , or ) ; return or ; }
}
public long ReadLongOr ( String key , long or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Long_ . parse ( String_ . as_ ( val ) ) : Long_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , long . class , key , val , or ) ; return or ; }
}
@gplx.Virtual public boolean ReadBool ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Bool_ . cast ( BoolClassXtn . Instance . ParseOrNull ( String_ . as_ ( val ) ) ) : Bool_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( boolean . class , key , val , exc ) ; }
}
@gplx.Virtual public boolean ReadBoolOr ( String key , boolean or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Bool_ . parse ( String_ . as_ ( val ) ) : Bool_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , boolean . class , key , val , or ) ; return or ; }
}
public long ReadLong ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Long_ . parse ( String_ . as_ ( val ) ) : Long_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( long . class , key , val , exc ) ; }
}
public float ReadFloat ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Float_ . parse ( String_ . as_ ( val ) ) : Float_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( float . class , key , val , exc ) ; }
}
public float ReadFloatOr ( String key , float or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Float_ . parse ( String_ . as_ ( val ) ) : Float_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , float . class , key , val , or ) ; return or ; }
}
public double ReadDouble ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Double_ . parse ( String_ . as_ ( val ) ) : Double_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( double . class , key , val , exc ) ; }
}
public double ReadDoubleOr ( String key , double or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Double_ . parse ( String_ . as_ ( val ) ) : Double_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , double . class , key , val , or ) ; return or ; }
}
@gplx.Virtual public byte ReadByte ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? Byte_ . parse ( String_ . as_ ( val ) ) : Byte_ . cast ( val ) ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( byte . class , key , val , exc ) ; }
}
@gplx.Virtual public byte ReadByteOr ( String key , byte or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? Byte_ . parse ( String_ . as_ ( val ) ) : Byte_ . cast ( val ) ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , byte . class , key , val , or ) ; return or ; }
}
@gplx.Virtual public DateAdp ReadDate ( String key ) {
Object val = Read ( key ) ;
try { return ( parse ) ? DateAdp_ . parse_gplx ( String_ . as_ ( val ) ) : ( DateAdp ) val ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( DateAdp . class , key , val , exc ) ; }
}
@gplx.Virtual public DateAdp ReadDateOr ( String key , DateAdp or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( parse ) ? DateAdp_ . parse_gplx ( String_ . as_ ( val ) ) : ( DateAdp ) val ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( DateAdp . class , key , val , exc ) ; }
}
@gplx.Virtual public Decimal_adp ReadDecimal ( String key ) {
Object val = Read ( key ) ;
try {
if ( parse ) return Decimal_adp_ . parse ( String_ . as_ ( val ) ) ;
Decimal_adp rv = Decimal_adp_ . as_ ( val ) ;
return ( rv = = null )
? Decimal_adp_ . db_ ( val ) // HACK: GfoNde_.rdr_ will call ReadAt(int i) on Db_data_rdr; since no Db_data_rdr knows about Decimal_adp, it will always return decimalType
: rv ;
}
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( Decimal_adp . class , key , val , exc ) ; }
}
@gplx.Virtual public Decimal_adp ReadDecimalOr ( String key , Decimal_adp or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try {
if ( parse ) return Decimal_adp_ . parse ( String_ . as_ ( val ) ) ;
Decimal_adp rv = Decimal_adp_ . as_ ( val ) ;
return ( rv = = null )
? Decimal_adp_ . db_ ( val ) // HACK: GfoNde_.rdr_ will call ReadAt(int i) on Db_data_rdr; since no Db_data_rdr knows about Decimal_adp, it will always return decimalType
: rv ;
}
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( Decimal_adp . class , key , val , exc ) ; }
}
public char ReadChar ( String key ) {
Object val = Read ( key ) ;
try {
if ( parse ) return Char_ . parse ( String_ . as_ ( val ) ) ;
return Char_ . cast ( val ) ;
}
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( char . class , key , val , exc ) ; }
}
public char ReadCharOr ( String key , char or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try {
if ( parse ) return Char_ . parse ( String_ . as_ ( val ) ) ;
return Char_ . cast ( val ) ;
}
catch ( Exception exc ) { Err_ . Noop ( exc ) ; return or ; }
}
public byte [ ] ReadBry ( String key ) {
Object val = Read ( key ) ;
try { return ( byte [ ] ) val ; }
catch ( Exception exc ) { throw Err_dataRdr_ReadFailed_err ( byte [ ] . class , key , val , exc ) ; }
}
public byte [ ] ReadBryOr ( String key , byte [ ] or ) {
Object val = Read ( key ) ; if ( val = = null ) return or ;
try { return ( byte [ ] ) val ; }
catch ( Exception exc ) { Err_dataRdr_ReadFailed_useOr ( exc , byte [ ] . class , key , val , or ) ; return or ; }
}
public gplx . core . ios . Io_stream_rdr ReadRdr ( String key ) { return gplx . core . ios . Io_stream_rdr_ . Noop ; }
public boolean SrlBoolOr ( String key , boolean or ) { return ReadBoolOr ( key , or ) ; }
public byte SrlByteOr ( String key , byte or ) { return ReadByteOr ( key , or ) ; }
public int SrlIntOr ( String key , int or ) { return ReadIntOr ( key , or ) ; }
public long SrlLongOr ( String key , long or ) { return ReadLongOr ( key , or ) ; }
public String SrlStrOr ( String key , String or ) { return ReadStrOr ( key , or ) ; }
public DateAdp SrlDateOr ( String key , DateAdp or ) { return ReadDateOr ( key , or ) ; }
public Decimal_adp SrlDecimalOr ( String key , Decimal_adp or ) { return ReadDecimalOr ( key , or ) ; }
public double SrlDoubleOr ( String key , double or ) { return ReadDoubleOr ( key , or ) ; }
public Object SrlObjOr ( String key , Object or ) { throw Err_ . new_unimplemented ( ) ; }
public void XtoStr_gfml ( String_bldr sb ) {
sb . Add ( this . NameOfNode ( ) ) . Add ( ":" ) ;
for ( int i = 0 ; i < this . FieldCount ( ) ; i + + ) {
Keyval kv = this . KeyValAt ( i ) ;
if ( i ! = 0 ) sb . Add ( " " ) ;
sb . Add_fmt ( "{0}='{1}'" , kv . Key ( ) , String_ . Replace ( kv . Val_to_str_or_empty ( ) , "'" , "\"" ) ) ;
}
sb . Add ( ";" ) ;
}
public abstract DataRdr Subs ( ) ;
public void TypeKey_ ( String v ) { }
public abstract SrlMgr SrlMgr_new ( Object o ) ;
static Err Err_dataRdr_ReadFailed_err ( Class < ? > type , String key , Object val , Exception inner ) {
String innerMsg = inner = = null ? "" : Err_ . Message_lang ( inner ) ;
return Err_ . new_ ( "DataRdr_ReadFailed" , "failed to read data" , "key" , key , "val" , val , "type" , type , "innerMsg" , innerMsg ) . Trace_ignore_add_1_ ( ) ;
}
static void Err_dataRdr_ReadFailed_useOr ( Class < ? > type , String key , Object val , Object or ) {
UsrDlg_ . Instance . Warn ( UsrMsg . new_ ( "failed to read data; substituting default" ) . Add ( "key" , key ) . Add ( "val" , val ) . Add ( "default" , or ) . Add ( "type" , type ) ) ;
}
static void Err_dataRdr_ReadFailed_useOr ( Exception exc , Class < ? > type , String key , Object val , Object or ) {
UsrDlg_ . Instance . Warn ( UsrMsg . new_ ( "failed to read data; substituting default" ) . Add ( "key" , key ) . Add ( "val" , val ) . Add ( "default" , or ) . Add ( "type" , type ) ) ;
}
}