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;
}
}