/* XOWA: the XOWA Offline Wiki Application Copyright (C) 2012-2017 gnosygnu@gmail.com XOWA is licensed under the terms of the General Public License (GPL) Version 3, or alternatively under the terms of the Apache License Version 2.0. You may use XOWA according to either of these licenses as is most appropriate for your project on a case-by-case basis. The terms of each license can be found in the source code repository: GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ package gplx.xowa.xtns.wbases; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.langs.jsons.*; import gplx.xowa.xtns.wbases.core.*; import gplx.xowa.xtns.wbases.claims.*; import gplx.xowa.xtns.wbases.claims.enums.*; import gplx.xowa.xtns.wbases.claims.itms.*; import gplx.xowa.xtns.wbases.parsers.*; public class Wdata_doc_wtr { private Json_doc_wtr wtr = new Json_doc_wtr(); public byte[] Xto_bry(Wdata_doc wdoc) { wtr.Nde_bgn(); wtr.Kv(Bool_.N, Wdata_doc_parser_v1.Bry_entity, wdoc.Qid()); Xto_bry__list(Wdata_doc_parser_v1.Bry_label, wdoc.Label_list()); Xto_bry__list(Wdata_doc_parser_v1.Bry_description, wdoc.Descr_list()); Xto_bry__sitelinks(Wdata_doc_parser_v1.Bry_links, wdoc.Slink_list()); Xto_bry__aliases(wdoc.Alias_list()); Xto_bry__claims(wdoc.Qid(), wdoc.Claim_list()); wtr.Nde_end(); return wtr.Bld(); } private void Xto_bry__list(byte[] key, Ordered_hash list) { int len = list.Count(); if (len == 0) return; wtr.Key(true, key); wtr.Nde_bgn(); for (int i = 0; i < len; i++) { Keyval kv = (Keyval)list.Get_at(i); wtr.Kv(i != 0, Bry_.new_u8(kv.Key()), Bry_.new_u8(kv.Val_to_str_or_empty())); } wtr.Nde_end(); list.Clear(); } private void Xto_bry__sitelinks(byte[] key, Ordered_hash list) { // NOTE: changed to reflect new sitelinks structure; DATE:2014-02-04 int len = list.Count(); if (len == 0) return; wtr.Key(true, key); wtr.Nde_bgn(); for (int i = 0; i < len; i++) { if (i != 0) wtr.Comma(); Keyval kv = (Keyval)list.Get_at(i); wtr.Key(false, Bry_.new_u8(kv.Key())); // write key; EX: enwiki: wtr.Nde_bgn(); // bgn nde; EX: { wtr.Kv(false, Wdata_doc_parser_v1.Bry_name, Bry_.new_u8(kv.Val_to_str_or_empty())); // write name; EX: name=Earth wtr.Nde_end(); // end nde; EX: } } wtr.Nde_end(); list.Clear(); } private void Xto_bry__aliases(Ordered_hash aliases) { int len = aliases.Count(); if (len == 0) return; wtr.Key(true, Wdata_doc_parser_v1.Bry_aliases); wtr.Nde_bgn(); for (int i = 0; i < len; i++) { Wdata_alias_itm alias = (Wdata_alias_itm)aliases.Get_at(i); wtr.Key(i != 0, alias.Lang()); wtr.Ary_bgn(); byte[][] aliases_ary = alias.Vals(); int aliases_len = aliases_ary.length; for (int j = 0; j < aliases_len; j++) { byte[] aliases_itm = aliases_ary[j]; wtr.Val(j != 0, aliases_itm); } wtr.Ary_end(); } wtr.Nde_end(); aliases.Clear(); } private void Xto_bry__claims(byte[] qid, Ordered_hash props) { int len = props.Count(); if (len == 0) return; wtr.Key(true, Wdata_doc_parser_v1.Bry_claims); wtr.Ary_bgn(); for (int i = 0; i < len; i++) { if (i != 0) wtr.Comma(); Wbase_claim_base prop = (Wbase_claim_base)props.Get_at(i); wtr.Nde_bgn(); wtr.Key(false, Wdata_dict_claim_v1.Bry_m); wtr.Ary_bgn(); wtr.Val(Bool_.N, Wbase_claim_value_type_.Reg.Get_bry_or_fail(prop.Snak_tid())); wtr.Val(Bool_.Y, prop.Pid()); if (prop.Snak_tid() == Wbase_claim_value_type_.Tid__value) { switch (prop.Val_tid()) { case Wbase_claim_type_.Tid__string: Wbase_claim_string claim_str = (Wbase_claim_string)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__string.Key_bry()); wtr.Val(Bool_.Y, claim_str.Val_bry()); break; case Wbase_claim_type_.Tid__entity: Wbase_claim_entity claim_entity = (Wbase_claim_entity)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__entity.Key_bry()); wtr.Comma(); wtr.Nde_bgn(); wtr.Kv(Bool_.N, Wbase_claim_entity_.Itm__entity_type.Key_bry() , claim_entity.Entity_tid_bry()); wtr.Kv(Bool_.Y, Wbase_claim_entity_.Itm__numeric_id.Key_bry() , claim_entity.Entity_id()); wtr.Nde_end(); break; case Wbase_claim_type_.Tid__time: Wbase_claim_time claim_time = (Wbase_claim_time)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__time.Key_bry()); wtr.Comma(); wtr.Nde_bgn(); wtr.Kv(Bool_.N, Wbase_claim_time_.Itm__time.Key_bry() , claim_time.Time()); wtr.Kv(Bool_.Y, Wbase_claim_time_.Itm__precision.Key_bry() , Wbase_claim_time_.Dflt__timezone.Val_bry()); wtr.Kv(Bool_.Y, Wbase_claim_time_.Itm__before.Key_bry() , Wbase_claim_time_.Dflt__before.Val_bry()); wtr.Kv(Bool_.Y, Wbase_claim_time_.Itm__after.Key_bry() , Wbase_claim_time_.Dflt__after.Val_bry()); wtr.Kv(Bool_.Y, Wbase_claim_time_.Itm__timezone.Key_bry() , Wbase_claim_time_.Dflt__timezone.Val_bry()); wtr.Kv(Bool_.Y, Wbase_claim_time_.Itm__calendarmodel.Key_bry() , Wbase_claim_time_.Dflt__calendarmodel.Val_bry()); wtr.Nde_end(); break; case Wbase_claim_type_.Tid__globecoordinate: { Wbase_claim_globecoordinate claim_globecoordinate = (Wbase_claim_globecoordinate)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__globecoordinate.Key_bry()); wtr.Comma(); wtr.Nde_bgn(); wtr.Kv_double (Bool_.N, Wbase_claim_globecoordinate_.Itm__latitude.Key_bry() , Double_.parse(String_.new_a7(claim_globecoordinate.Lat()))); wtr.Kv_double (Bool_.Y, Wbase_claim_globecoordinate_.Itm__longitude.Key_bry() , Double_.parse(String_.new_a7(claim_globecoordinate.Lng()))); wtr.Kv (Bool_.Y, Wbase_claim_globecoordinate_.Itm__altitude.Key_bry() , null); wtr.Kv (Bool_.Y, Wbase_claim_globecoordinate_.Itm__globe.Key_bry() , Wbase_claim_globecoordinate_.Val_globe_dflt_bry); wtr.Kv_double (Bool_.Y, Wbase_claim_globecoordinate_.Itm__precision.Key_bry() , .00001d); wtr.Nde_end(); break; } case Wbase_claim_type_.Tid__quantity: { Wbase_claim_quantity claim_quantity = (Wbase_claim_quantity)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__quantity.Key_bry()); wtr.Comma(); wtr.Nde_bgn(); wtr.Kv (Bool_.N, Wbase_claim_quantity_.Itm__amount.Key_bry() , claim_quantity.Amount()); // +1,234 wtr.Kv (Bool_.Y, Wbase_claim_quantity_.Itm__unit.Key_bry() , claim_quantity.Unit()); // 1 wtr.Kv (Bool_.Y, Wbase_claim_quantity_.Itm__upperbound.Key_bry() , claim_quantity.Ubound()); // +1,235 wtr.Kv (Bool_.Y, Wbase_claim_quantity_.Itm__lowerbound.Key_bry() , claim_quantity.Lbound()); // +1,233 wtr.Nde_end(); break; } case Wbase_claim_type_.Tid__monolingualtext: { Wbase_claim_monolingualtext claim_monolingualtext = (Wbase_claim_monolingualtext)prop; wtr.Val(Bool_.Y, Wbase_claim_type_.Itm__monolingualtext.Key_bry()); wtr.Comma(); wtr.Nde_bgn(); wtr.Kv (Bool_.N, Wbase_claim_monolingualtext_.Itm__text.Key_bry() , claim_monolingualtext.Text()); // text wtr.Kv (Bool_.Y, Wbase_claim_monolingualtext_.Itm__language.Key_bry() , claim_monolingualtext.Lang()); // en wtr.Nde_end(); break; } default: throw Err_.new_unhandled(prop.Val_tid()); } } wtr.Ary_end(); wtr.Kv_ary_empty(Bool_.Y, Wdata_dict_claim_v1.Bry_q); wtr.Kv(Bool_.Y, Wdata_dict_claim_v1.Bry_g, qid); wtr.Kv(Bool_.Y, Wdata_dict_claim_v1.Bry_rank, Wbase_claim_rank_.Tid__normal); wtr.Kv_ary_empty(Bool_.Y, Wdata_dict_claim_v1.Bry_refs); wtr.Nde_end(); } wtr.Ary_end(); props.Clear(); } }