package org.wikipedia.dataclient.mwapi;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.google.gson.annotations.SerializedName;
import org.wikipedia.gallery.ImageInfo;
import org.wikipedia.json.annotations.Required;
import org.wikipedia.model.BaseModel;
import java.util.Collections;
import java.util.List;
/**
* A class representing a standard page object as returned by the MediaWiki API.
*/
public class MwQueryPage extends BaseModel {
@SuppressWarnings("unused") private int pageid;
@SuppressWarnings("unused") private int ns;
@SuppressWarnings("unused,NullableProblems") @NonNull private String title;
@SuppressWarnings("unused") @Nullable private List<LangLink> langlinks;
@SuppressWarnings("unused") @Nullable private List<Revision> revisions;
@SuppressWarnings("unused") @Nullable private List<Coordinates> coordinates;
@SuppressWarnings("unused") @Nullable private Thumbnail thumbnail;
@SuppressWarnings("unused") @Nullable private Terms terms;
@SuppressWarnings("unused") @SerializedName("imageinfo") @Nullable private List<ImageInfo> imageInfo;
@NonNull public String title() {
return title;
}
@Nullable public List<LangLink> langLinks() {
return langlinks;
}
@Nullable public List<Revision> revisions() {
return revisions;
}
@Nullable public List<Coordinates> coordinates() {
// TODO: Handle null values in lists during deserialization, perhaps with a new
// @RequiredElements annotation and corresponding TypeAdapter
if (coordinates != null) {
coordinates.removeAll(Collections.singleton(null));
}
return coordinates;
}
@Nullable public String thumbUrl() {
return thumbnail != null ? thumbnail.source() : null;
}
@Nullable public String description() {
return terms != null && terms.description() != null ? terms.description().get(0) : null;
}
@Nullable public ImageInfo imageInfo() {
return imageInfo != null ? imageInfo.get(0) : null;
}
public static class Revision {
@SuppressWarnings("unused,NullableProblems") @SerializedName("contentformat") @NonNull private String contentFormat;
@SuppressWarnings("unused,NullableProblems") @SerializedName("contentmodel") @NonNull private String contentModel;
@SuppressWarnings("unused,NullableProblems") @NonNull private String content;
@NonNull public String content() {
return content;
}
}
public static class LangLink {
@SuppressWarnings("unused,NullableProblems") @NonNull private String lang;
@NonNull public String lang() {
return lang;
}
@SuppressWarnings("unused,NullableProblems") @NonNull private String title;
@NonNull public String title() {
return title;
}
}
public static class Coordinates {
// Use Double object type rather than primitive type so that the presence of the fields can
// be checked correctly by the RequiredFieldsCheckOnReadTypeAdapter.
@SuppressWarnings("unused") @Required @NonNull private Double lat;
@SuppressWarnings("unused") @Required @NonNull private Double lon;
public Coordinates(double lat, double lon) {
this.lat = lat;
this.lon = lon;
}
public double lat() {
return lat;
}
public double lon() {
return lon;
}
}
static class Terms {
@SuppressWarnings("unused") private List<String> description;
List<String> description() {
return description;
}
}
static class Thumbnail {
@SuppressWarnings("unused") private String source;
@SuppressWarnings("unused") private int width;
@SuppressWarnings("unused") private int height;
String source() {
return source;
}
}
}