package mediawiki.request.wikibase; import java.text.ParseException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import javat.xml.Document; import javat.xml.Element; import org.json.JSONException; import org.json.JSONObject; import mediawiki.MediaWikiConnection; import mediawiki.MediaWikiPostRequest; import mediawiki.MediaWikiRequest; import mediawiki.info.wikibase.ValueSnak; public class ParseValueRequest extends MediaWikiRequest<ValueSnak<?>> { public ParseValueRequest(String value, String datatype) { setProperty("values", value); setProperty("datatype", datatype); } public ParseValueRequest(String value, String datatype, Map<String, Object> options) throws JSONException { this(value, datatype); JSONObject o = new JSONObject(); for(Entry<String, Object> e : options.entrySet()) o.put(e.getKey(), e.getValue()); setProperty("options", o); } @Override public ValueSnak<?> request(MediaWikiConnection c) throws Exception { MediaWikiPostRequest p = new MediaWikiPostRequest(c); p.putData(getProperties()); p.putData("action", "wbparsevalue"); Document d = p.requestDocument(); Element result = d.getRootElement().getChildren("results").get(0).getChildren("result").get(0); if(result.getAttribute("error") != null) throw new ParseException(result.getAttribute("raw").getValue(),0); ValueSnak<?> v = ValueSnak.createByDatatype(result.getAttribute("type").getValue()); v.convert(result); return v; } }