@@ -24,27 +24,28 @@ public class Wdata_prop_val_visitor_ {
public static String Render_snaks ( Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] snaks ) {
public static String Render_snaks ( Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] snaks ) {
String rv = null ;
String rv = null ;
int len = snaks . length ;
int len = snaks . length ;
Wdata_wiki_mgr wdata_mgr = wiki . Appe ( ) . Wiki_mgr ( ) . Wdata_mgr ( ) ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
try {
try {
for ( int i = 0 ; i < len ; + + i ) {
for ( int i = 0 ; i < len ; + + i ) {
Keyval [ ] itm = ( Keyval [ ] ) snaks [ i ] . Val ( ) ;
Keyval [ ] itm = ( Keyval [ ] ) snaks [ i ] . Val ( ) ;
Render_snak ( bfr , wiki , wiki . Lang ( ) , page_url , itm , i , len ) ;
Render_snak ( bfr , wdata_mgr , wiki , wiki . Lang ( ) , page_url , itm , i , len ) ;
}
}
wiki . Lang ( ) . Comma_wkr ( ) . Comma__end ( bfr ) ;
wiki . Lang ( ) . Comma_wkr ( ) . Comma__end ( bfr ) ;
rv = bfr . To_str_and_clear ( ) ;
rv = bfr . To_str_and_clear ( ) ;
} finally { bfr . Mkr_rls ( ) ; }
} finally { bfr . Mkr_rls ( ) ; }
return rv ;
return rv ;
}
}
public static String Render_snak ( Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] props ) {
public static String Render_snak ( Wdata_wiki_mgr wdata_mgr , Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] props ) {
String rv = null ;
String rv = null ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
try {
try {
Render_snak ( bfr , wiki , wiki . Lang ( ) , page_url , props , 0 , 1 ) ;
Render_snak ( bfr , wdata_mgr , wiki , wiki . Lang ( ) , page_url , props , 0 , 1 ) ;
rv = bfr . To_str_and_clear ( ) ;
rv = bfr . To_str_and_clear ( ) ;
} finally { bfr . Mkr_rls ( ) ; }
} finally { bfr . Mkr_rls ( ) ; }
return rv ;
return rv ;
}
}
private static void Render_snak ( Bry_bfr bfr , Xowe_wiki wiki , Xol_lang_itm lang , byte [ ] page_url , Keyval [ ] props , int sub_idx , int sub_len ) {
private static void Render_snak ( Bry_bfr bfr , Wdata_wiki_mgr wdata_mgr , Xowe_wiki wiki , Xol_lang_itm lang , byte [ ] page_url , Keyval [ ] props , int sub_idx , int sub_len ) {
// loop props to get (a) snaktype; (b) property; (c) datavalue
// loop props to get (a) snaktype; (b) property; (c) datavalue
byte snak_tid = Byte_ . Max_value_127 ;
byte snak_tid = Byte_ . Max_value_127 ;
int pid = - 1 ;
int pid = - 1 ;
@@ -75,18 +76,22 @@ public class Wdata_prop_val_visitor_ {
val_obj = datavalue_itm . Val ( ) ;
val_obj = datavalue_itm . Val ( ) ;
}
}
// render val_obj based on tid
// get claim and render
// NOTE: converting to claim before writing; used to write directly; less efficient, but more consistent; DATE:2016-10-20
Wbase_claim_base claim = null ;
switch ( tid ) {
switch ( tid ) {
case Wbase_claim_type_ . Tid__entity : Render __entity ( bfr , wiki , lang , page_url , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__entity : claim = Make __entity ( page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__string : bfr . Add_str_u8 ( ( String ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__string : claim = new Wbase_claim_string ( pid , snak_tid , To_bry_by_str ( val_obj ) ) ; break ;
case Wbase_claim_type_ . Tid__time : Render __time ( bfr , wiki , page_url , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__time : claim = Make __time ( page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__globecoordinate : Render __geo ( bfr , lang , page_url , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__globecoordinate : claim = Make __geo ( page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__quantity : Render__quantity ( bfr , wiki , lang , page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__quantity : claim = Make__quantity ( page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__monolingualtext : Render__langtext ( bfr , lang , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__monolingualtext : claim = Make__langtext ( page_url , pid , snak_tid , ( Keyval [ ] ) val_obj ) ; break ;
default : throw Err_ . new_unhandled_default ( tid ) ;
}
}
wdata_mgr . Resolve_claim ( bfr , wiki . Domain_itm ( ) , claim ) ;
lang . Comma_wkr ( ) . Comma__itm ( bfr , sub_idx , sub_len ) ;
lang . Comma_wkr ( ) . Comma__itm ( bfr , sub_idx , sub_len ) ;
}
}
private static void Render__entity ( Bry_bfr bfr , Xowe_wiki wiki , Xol_lang_itm lang , byte [ ] page_url , Keyval [ ] kvs ) {
private static Wbase_claim_entity Make__entity ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte entity_tid = Byte_ . Max_value_127 ;
byte entity_tid = Byte_ . Max_value_127 ;
byte [ ] entity_id_bry = null ;
byte [ ] entity_id_bry = null ;
@@ -101,99 +106,87 @@ public class Wdata_prop_val_visitor_ {
case Wbase_claim_entity_ . Tid__id : break ; // ignore
case Wbase_claim_entity_ . Tid__id : break ; // ignore
}
}
}
}
return new Wbase_claim_entity ( pid , snak_tid , entity_tid , entity_id_bry ) ;
// convert p/q, number to xid; "p123", "q123"
if ( entity_id_bry = = null ) throw Err_ . new_wo_type ( " xid is invalid entity " , " xid " , page_url ) ;
byte xid_pre = entity_tid = = Wbase_claim_entity_type_ . Tid__item ? Byte_ascii . Ltr_Q : Byte_ascii . Ltr_P ;
entity_id_bry = Bry_ . Add ( xid_pre , entity_id_bry ) ;
// get doc
Wdata_doc wdoc = wiki . Appe ( ) . Wiki_mgr ( ) . Wdata_mgr ( ) . Doc_mgr . Get_by_xid_or_null ( entity_id_bry ) ; // NOTE: by_xid b/c Module passes just "p1" not "Property:P1"
if ( wdoc = = null ) {
Gfo_usr_dlg_ . Instance . Log_many ( " " , " " , " qid not found in wikidata for renderSnak; page=~{0} qid=~{1} " , page_url , entity_id_bry ) ;
return ;
}
// add label
bfr . Add ( wdoc . Label_list__get ( lang . Key_bry ( ) ) ) ;
}
}
private static void Render__time ( Bry_bfr bfr , Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] kvs ) {
private static Wbase_claim_time Make__time ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
Wbase_date dat e = null ;
byte [ ] time = null , timezon e = null ;
byte [ ] time = null ;
byte [ ] precision = null , before = null , after = null ;
int precision_int = 0 , before_int = 0 , after_int = 0 ;
byte [ ] calendar = null ;
boolean calendar_is_julian = true ;
int len = kvs . length ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + i ) {
for ( int i = 0 ; i < len ; + + i ) {
Keyval kv = kvs [ i ] ;
Keyval kv = kvs [ i ] ;
byte val_tid = Wbase_claim_time_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
byte val_tid = Wbase_claim_time_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
switch ( val_tid ) {
switch ( val_tid ) {
case Wbase_claim_time_ . Tid__time : time = Bry_ . new_u8 ( ( String ) kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__time : time = To_bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__before : before_int = Int_ . cas t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__before : before = To_bry_by_in t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__after : after_int = Int_ . cas t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__after : after = To_bry_by_in t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__precision : precision_int = Int_ . cas t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__precision : precision = To_bry_by_in t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__calendarmodel : calendar_is_julian = Bry_ . Eq ( Bry_ . new_u8 ( ( String ) kv . Val ( ) ) , Wbase_claim_time. Calendar_julian) ; break ;
case Wbase_claim_time_ . Tid__calendarmodel : calendar = To_bry_by_str ( kv . Val ( ) ) ; break ; // Bry_.Eq(Bry_.new_u8((String)kv.Val()), Wbase_claim_time. Calendar_julian);
case Wbase_claim_time_ . Tid__timezone : if ( ! String_ . Eq ( ( String ) kv . Val ( ) , " 0 " ) ) throw Err_ . new_unimplemented ( ) ; break ;
case Wbase_claim_time_ . Tid__timezone : timezone = To_bry_by_str ( kv . Val ( ) ) ; break ; // if (!String_.Eq((String)kv.Val(), "0")) throw Err_.new_unimplemented();
}
}
}
}
Xow_parser_mgr parser_mgr = wiki . Parser_mgr( ) ;
// Xow_parser_mgr parser_mgr = wiki. Parser_mgr() ;
date = Wbase_date . Parse ( time , precision_int, before_int, after_int, calendar_is_julian) ;
// date = Wbase_date.Parse(time, precision_int, before_int, after_int, calendar_is_julian) ;
Wbase_claim_time. Write_to_bfr( bfr , parser_mgr. Wbase__time__bfr( ) , parser_mgr. Wbase__time__fmtr( )
// Wbase_claim_time. Write_to_bfr(bfr, parser_mgr. Wbase__time__bfr(), parser_mgr. Wbase__time__fmtr( )
, parser_mgr. Wbase__time__msgs( ) , page_url , Bry_ . Empty , date , calendar_is_julian
// , parser_mgr. Wbase__time__msgs(), page_url, Bry_.Empty, date, calendar_is_julian
) ;
// ) ;
return new Wbase_claim_time ( pid , snak_tid , time , timezone , before , after , precision , calendar ) ;
}
}
private static void Render__quantity ( Bry_bfr bfr , Xowe_wiki wiki , Xol_lang_ itm lang , byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
private static Wbase_claim_quantity Make__quant ity ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte [ ] amount_bry = null , lbound_bry = null , ubound_bry = null , unit_bry = null ;
byte [ ] amount = null , lbound = null , ubound = null , unit = null ;
int len = kvs . length ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + i ) {
for ( int i = 0 ; i < len ; + + i ) {
Keyval kv = kvs [ i ] ;
Keyval kv = kvs [ i ] ;
byte val_tid = Wbase_claim_quantity_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
byte val_tid = Wbase_claim_quantity_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
byte [ ] val_bry = Bry_ . new_u8 ( ( String ) kv . Val ( ) ) ;
switch ( val_tid ) {
switch ( val_tid ) {
case Wbase_claim_quantity_ . Tid__amount : amount_bry = val _bry; break ;
case Wbase_claim_quantity_ . Tid__amount : amount = To _bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_quantity_ . Tid__unit : unit_bry = val _bry; break ;
case Wbase_claim_quantity_ . Tid__unit : unit = To _bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_quantity_ . Tid__lowerbound : lbound_bry = val _bry; break ;
case Wbase_claim_quantity_ . Tid__lowerbound : lbound = To _bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_quantity_ . Tid__upperbound : ubound_bry = val _bry; break ;
case Wbase_claim_quantity_ . Tid__upperbound : ubound = To _bry_by_str ( kv . Val ( ) ) ; break ;
}
}
}
}
Wbase_claim_quantity quantity = new Wbase_claim_quantity ( pid , snak_tid , amount_bry , unit_bry , ubound_bry , lbound_bry ) ;
return new Wbase_claim_quantity ( pid , snak_tid , amount , unit , ubound , lbound ) ;
wiki . Appe ( ) . Wiki_mgr ( ) . Wdata_mgr ( ) . Resolve_claim ( bfr , wiki . Domain_itm ( ) , quantity ) ;
}
}
// private static void Render__quantity(Bry_bfr bfr, Xol_lang_itm lang, byte[] amount_bry, byte[] lbound_bry, byte[] ubound_bry, byte[] unit_bry) {
private static Wbase_claim_globecoordinate Make__geo ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
// long val = Bry_.To_long_or(amount_bry, Byte_ascii.Comma_bry, 0, amount_bry.length, 0); // NOTE: must cast to long for large numbers; EX:{{#property:P1082}} PAGE:en.w:Earth; DATE:2015-08-02
byte [ ] lat = null , lng = null , prc = null , alt = null , glb = null ;
// bfr.Add(lang.Num_mgr().Format_num_by_long(val));// amount; EX: 1,234
// long lbound = Bry_.To_long_or(lbound_bry, val);
// long ubound = Bry_.To_long_or(lbound_bry, val);
// if (lbound != val && ubound != val) { // NOTE: do not output <20> if lbound == val == ubound; PAGE:en.w:Tintinan DATE:2015-08-02
// bfr.Add(Wdata_prop_val_visitor.Bry__quantity_margin_of_error); // symbol: EX: <20>
// bfr.Add(unit_bry); // unit; EX: 1
// }
// }
private static void Render__geo ( Bry_bfr bfr , Xol_lang_itm lang , byte [ ] page_url , Keyval [ ] kvs ) {
double lat = 0 , lng = 0 ;
int len = kvs . length ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + i ) {
for ( int i = 0 ; i < len ; + + i ) {
Keyval kv = kvs [ i ] ;
Keyval kv = kvs [ i ] ;
byte val_tid = Wbase_claim_globecoordinate_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
byte val_tid = Wbase_claim_globecoordinate_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
switch ( val_tid ) {
switch ( val_tid ) {
case Wbase_claim_globecoordinate_ . Tid__latitude : lat = Double_ . cast ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__latitude : lat = To_bry_by_double ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__longitude : lng = Double_ . cast ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__longitude : lng = To_bry_by_double ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__altitude : alt = To_bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__precision : prc = To_bry_by_double ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__globe : glb = To_bry_by_str ( kv . Val ( ) ) ; break ;
}
}
}
}
Render__geo ( bfr , lat , lng ) ;
return new Wbase_claim_globecoordinate ( pid , snak_tid , lat , lng , alt , prc , glb ) ;
}
}
public static void Render__geo ( Bry_bfr bfr , byte [ ] lat , byte [ ] lng ) {
private static Wbase_claim_monolingualtext Make__langtext ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
bfr . Add ( lat ) ;
byte [ ] lang = null , text = null ;
bfr . Add ( Bry__geo_dlm ) ;
int len = kvs . length ;
bfr . Add ( lng ) ;
for ( int i = 0 ; i < len ; + + i ) {
}
Keyval kv = kvs [ i ] ;
public sta tic void Render__geo ( Bry_bfr bfr , double lat , double lng ) {
byte val_ tid = Wbase_claim_monolingualtext_ . Reg . Get_tid_or_max_and_log ( page_url , kv . Key ( ) ) ; if ( val_tid = = Byte_ . Max_value_127 ) continue ;
bfr . Add_double ( lat ) ;
switch ( val_tid ) {
bfr . Add ( Bry__geo_dlm ) ;
case Wbase_claim_monolingualtext_ . Tid__language : lang = To_bry_by_str ( kv . Val ( ) ) ; break ;
bfr . Add_double ( lng ) ;
case Wbase_claim_monolingualtext_ . Tid__text : text = To_bry_by_str ( kv . Val ( ) ) ; break ;
}
}
private static void Render__langtext ( Bry_bfr bfr , Xol_lang_itm lang , Keyval [ ] kvs ) {
}
bfr . Add_str_u8 ( ( String ) Scrib_kv_utl_ . Get_sub_by_key_or_null ( kvs , Wbase_claim_monolingualtext_ . Itm__text . Key_str ( ) ) ) ;
return new Wbase_claim_monolingualtext ( pid , snak_tid , lang , text ) ;
}
}
private static int To_pid_int ( byte [ ] pid ) { return Bry_ . To_int_or ( pid , 1 , pid . length , - 1 ) ; } // skip "P" at bgn; EX: "p123" -> 123
private static int To_pid_int ( byte [ ] pid ) { return Bry_ . To_int_or ( pid , 1 , pid . length , - 1 ) ; } // skip "P" at bgn; EX: "p123" -> 123
private static final byte [ ] Bry__geo_dlm = Bry_ . new_a7 ( " , " ) ;
private static byte [ ] To_bry_by_str ( Object o ) {
String rv = String_ . cast ( o ) ;
return rv = = null ? null : Bry_ . new_u8 ( rv ) ;
}
private static byte [ ] To_bry_by_double ( Object o ) {
double rv = Double_ . cast ( o ) ;
return Bry_ . new_a7 ( Double_ . To_str ( rv ) ) ;
}
private static byte [ ] To_bry_by_int ( Object o ) {
int rv = Int_ . cast ( o ) ;
return Int_ . To_bry ( rv ) ;
}
}
}