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