package mediawiki.info.wikibase; import org.json.JSONException; import org.json.JSONObject; import mediawiki.JSONizable; import mediawiki.MediaWikiException; import mediawiki.XMLRepresented; import mediawiki.info.HasProperty; import mediawiki.info.wikibase.snaks.ItemSnak; import javat.xml.Element; public class Claim implements XMLRepresented, JSONizable, HasProperty { private Property property; private Snak snak; public Claim(Property p, Snak e){ setProperty(p); setSnak(e); } public Claim(int p, Snak e){ this(new Property(p), e); } @Deprecated public Claim(int p, int e){ this(new Property(p), new ItemSnak(e)); } public Claim(Element e) throws Exception { convert(e); } public Property getProperty() { return property; } public void setProperty(Property property) { this.property = property; } public Snak getSnak() { return snak; } public SnakType getSnakType() { return snak.getSnakType(); } public String getSnakTypeAsString() { return snak.getSnakTypeAsString(); } public void setSnak(Snak entity) { this.snak = entity; } /** * @param element Element snak / mainsnak * @throws Exception */ @Override public void convert(Element element) throws Exception { // ab snak / mainsnak setProperty(new Property(Integer.parseInt(element.getAttribute("property").getValue().substring(1)))); Snak e = null; switch(element.getAttribute("snaktype").getValue()){ case "value" : e = ValueSnak.createByDatatype(element.getAttribute("datatype").getValue()); ((ValueSnak)e).convert(element.getChildren("datavalue").get(0)); break; case "novalue" : e = new NoValueSnak(); break; case "somevalue" : e = new SomeValueSnak(); break; default: throw new MediaWikiException("unsupported snaktype "+element.getAttribute("snaktype").getValue()); } setSnak(e); } @Override public boolean equals(Object obj) { if(obj == null) return false; if(!(obj instanceof Claim)) return false; Claim c = (Claim) obj; return property.equals(c.property) && snak.equals(c.snak); } @Override public String toString() { return property.toString()+"="+snak.toString(); } @Override public JSONObject toJSONObject() throws JSONException { JSONObject o = new JSONObject(); o.put("snaktype", getSnakTypeAsString()); if(getSnak() instanceof ValueSnak){ o.put("datavalue", ((ValueSnak)getSnak()).toReferenceRepresentation()); o.put("datatype", ((ValueSnak)getSnak()).getDatatype()); } o.put("property", "P"+getProperty().getID()); return o; } }