@ -24,27 +24,28 @@ public class Wdata_prop_val_visitor_ {
public static String Render_snaks ( Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] snaks ) {
String rv = null ;
int len = snaks . length ;
Wdata_wiki_mgr wdata_mgr = wiki . Appe ( ) . Wiki_mgr ( ) . Wdata_mgr ( ) ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
try {
for ( int i = 0 ; i < len ; + + i ) {
Keyval [ ] itm = ( Keyval [ ] ) snaks [ i ] . Val ( ) ;
Render_snak ( bfr , w iki, wiki . Lang ( ) , page_url , itm , i , len ) ;
Render_snak ( bfr , w data_mgr, w iki, wiki . Lang ( ) , page_url , itm , i , len ) ;
}
wiki . Lang ( ) . Comma_wkr ( ) . Comma__end ( bfr ) ;
rv = bfr . To_str_and_clear ( ) ;
} finally { bfr . Mkr_rls ( ) ; }
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 ;
Bry_bfr bfr = wiki . Utl__bfr_mkr ( ) . Get_b512 ( ) ;
try {
Render_snak ( bfr , w iki, wiki . Lang ( ) , page_url , props , 0 , 1 ) ;
Render_snak ( bfr , w data_mgr, w iki, wiki . Lang ( ) , page_url , props , 0 , 1 ) ;
rv = bfr . To_str_and_clear ( ) ;
} finally { bfr . Mkr_rls ( ) ; }
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
byte snak_tid = Byte_ . Max_value_127 ;
int pid = - 1 ;
@ -75,18 +76,22 @@ public class Wdata_prop_val_visitor_ {
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 ) {
case Wbase_claim_type_ . Tid__entity : Render__entity ( bfr , wiki , lang , page_url , ( Keyval [ ] ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__string : bfr . Add_str_u8 ( ( String ) val_obj ) ; break ;
case Wbase_claim_type_ . Tid__time : Render__time ( bfr , wiki , page_url , ( 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__quantity : Render__quantity ( bfr , wiki , lang , 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__entity : claim = Make__entity ( page_url , pid , snak_tid , ( Keyval [ ] ) 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 : claim = Make__time ( page_url , pid , snak_tid , ( 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 : claim = Make__quantity ( page_url , pid , snak_tid , ( 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 ) ;
}
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_id_bry = null ;
@ -101,99 +106,87 @@ public class Wdata_prop_val_visitor_ {
case Wbase_claim_entity_ . Tid__id : break ; // ignore
}
}
// 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 ( ) ) ) ;
return new Wbase_claim_entity ( pid , snak_tid , entity_tid , entity_id_bry ) ;
}
private static void Render__time ( Bry_bfr bfr , Xowe_wiki wiki , byte [ ] page_url , Keyval [ ] kvs ) {
Wbase_date date = null ;
byte [ ] time = null ;
int precision_int = 0 , before_int = 0 , after_int = 0 ;
boolean calendar_is_julian = true ;
private static Wbase_claim_time Make__time ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte [ ] time = null , timezone = null ;
byte [ ] precision = null , before = null , after = null ;
byte [ ] calendar = null ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + 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 ;
switch ( val_tid ) {
case Wbase_claim_time_ . Tid__time : time = Bry_. new_u8 ( ( String ) kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__before : before _int = Int_ . cas t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__after : after _int = Int_ . cas t( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__precision : precision _int = Int_ . cas 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__timezone : if ( ! String_ . Eq ( ( String ) kv . Val ( ) , "0" ) ) throw Err_ . new_unimplemented ( ) ; break ;
case Wbase_claim_time_ . Tid__time : time = To_bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__before : before = To_bry_by_int ( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__after : after = To_bry_by_int ( kv . Val ( ) ) ; break ;
case Wbase_claim_time_ . Tid__precision : precision = To_bry_by_int ( kv . Val ( ) ) ; 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 : 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 ( ) ;
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 ( )
, parser_mgr . Wbase__time__msgs ( ) , page_url , Bry_ . Empty , date , calendar_is_julian
) ;
// Xow_parser_mgr parser_mgr = wiki.Parser_mgr();
// 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()
// , 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 ) {
byte [ ] amount _bry = null , lbound _bry = null , ubound _bry = null , unit _bry = null ;
private static Wbase_claim_quantity Make__quantity ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte [ ] amount = null , lbound = null , ubound = null , unit = null ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + 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_bry = Bry_ . new_u8 ( ( String ) kv . Val ( ) ) ;
switch ( val_tid ) {
case Wbase_claim_quantity_ . Tid__amount : amount _bry = val_bry ; break ;
case Wbase_claim_quantity_ . Tid__unit : unit _bry = val_bry ; break ;
case Wbase_claim_quantity_ . Tid__lowerbound : lbound _bry = val_bry ; break ;
case Wbase_claim_quantity_ . Tid__upperbound : ubound _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 = To_bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_quantity_ . Tid__lowerbound : lbound = To_bry_by_str ( kv . Val ( ) ) ; 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 ) ;
wiki . Appe ( ) . Wiki_mgr ( ) . Wdata_mgr ( ) . Resolve_claim ( bfr , wiki . Domain_itm ( ) , quantity ) ;
return new Wbase_claim_quantity ( pid , snak_tid , amount , unit , ubound , lbound ) ;
}
// private static void Render__quantity(Bry_bfr bfr, Xol_lang_itm lang, byte[] amount_bry, byte[] lbound_bry, byte[] ubound_bry, byte[] unit_bry) {
// 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
// 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 ;
private static Wbase_claim_globecoordinate Make__geo ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte [ ] lat = null , lng = null , prc = null , alt = null , glb = null ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + 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 ;
switch ( val_tid ) {
case Wbase_claim_globecoordinate_ . Tid__latitude : lat = Double_ . cast ( kv . Val ( ) ) ; break ;
case Wbase_claim_globecoordinate_ . Tid__longitude : lng = 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 = 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 ) {
bfr . Add ( lat ) ;
bfr . Add ( Bry__geo_dlm ) ;
bfr . Add ( lng ) ;
private static Wbase_claim_monolingualtext Make__langtext ( byte [ ] page_url , int pid , byte snak_tid , Keyval [ ] kvs ) {
byte [ ] lang = null , text = null ;
int len = kvs . length ;
for ( int i = 0 ; i < len ; + + i ) {
Keyval kv = kvs [ i ] ;
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 ;
switch ( val_tid ) {
case Wbase_claim_monolingualtext_ . Tid__language : lang = To_bry_by_str ( kv . Val ( ) ) ; break ;
case Wbase_claim_monolingualtext_ . Tid__text : text = To_bry_by_str ( kv . Val ( ) ) ; break ;
}
}
return new Wbase_claim_monolingualtext ( pid , snak_tid , lang , text ) ;
}
public static void Render__geo ( Bry_bfr bfr , double lat , double lng ) {
bfr . Add_double ( lat ) ;
bfr . Add ( Bry__geo_dlm ) ;
bfr . Add_double ( lng ) ;
p rivate 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 byte [ ] To_bry_by_str ( Object o ) {
String rv = String_ . cast ( o ) ;
return rv = = null ? null : Bry_ . new_u8 ( rv ) ;
}
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 ( ) ) ) ;
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 ) ;
}
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 ( ", " ) ;
}