package mediawiki.info.wikibase; import javat.xml.Element; import mediawiki.JSONizable; import mediawiki.XMLRepresented; import mediawiki.info.wikibase.snaks.CommonsSnak; import mediawiki.info.wikibase.snaks.CoordinateSnak; import mediawiki.info.wikibase.snaks.DateSnak; import mediawiki.info.wikibase.snaks.ItemSnak; import mediawiki.info.wikibase.snaks.MonolingualTextSnak; import mediawiki.info.wikibase.snaks.PropertySnak; import mediawiki.info.wikibase.snaks.QuantitySnak; import mediawiki.info.wikibase.snaks.StringSnak; import mediawiki.info.wikibase.snaks.URLSnak; import org.json.JSONException; public abstract class ValueSnak<T> extends Snak implements XMLRepresented, JSONizable { private T value; public ValueSnak(T value){ setValue(value); } abstract public Object toReferenceRepresentation() throws JSONException; abstract public Object toClaimRepresentation() throws JSONException; /** * @param element Element auf datavalue-Ebene * @throws Exception */ @Override abstract public void convert(Element element) throws Exception; /** * * @param datatype Datentyp aus datatyp auf snak/mainsnak-Ebene * @return */ public static ValueSnak<?> createByDatatype(String datatype){ switch(datatype){ case "wikibase-item" : return new ItemSnak(0); case "wikibase-property": return new PropertySnak(0); case "string" : return new StringSnak(null); case "url" : return new URLSnak(null); case "time" : return new DateSnak(null); case "commonsMedia" : return new CommonsSnak(null); case "globe-coordinate" : return new CoordinateSnak(null); case "quantity" : return new QuantitySnak(null); case "monolingualtext" : return new MonolingualTextSnak(null); } throw new UnsupportedSnakTypeException(datatype); } public abstract String getDatatype(); public void setValue(T value) { this.value = value; } public T getValue() { return value; } @Override public String toString() { return getClass().getSimpleName()+"["+getValue()+"]"; } @Override public boolean equals(Object obj) { if(obj == null) return false; if(! (obj instanceof ValueSnak<?>)) return false; return ((ValueSnak<?>) obj).getValue().equals(getValue()); } @Override public SnakType getSnakType() { return SnakType.VALUE; } }