package org.wikipedia.page; import android.support.annotation.NonNull; import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; import org.wikipedia.json.GsonUtil; import static org.apache.commons.lang3.StringUtils.defaultString; /** * Gson POJO for one section of a page. */ public class Section { private int id; private int toclevel = 1; private String line; private String anchor; private String text; // TODO: can we get rid of this? It's not efficient to public static Section fromJson(JSONObject json) { return GsonUtil.getDefaultGson().fromJson(json.toString(), Section.class); } // TODO: get rid of this; problem is how to interop Gson and org.json.JSONObject // We're using this to send the section over the JS bridge public JSONObject toJSON() { try { JSONObject data = new JSONObject(); data.put("id", id); data.put("toclevel", toclevel); data.put("line", line); data.put("anchor", anchor); data.put("text", text); return data; } catch (JSONException e) { throw new RuntimeException(e); } } /** Default constructor used by Gson deserialization. Good for setting default values. */ public Section() { toclevel = 1; } public Section(int id, int level, String heading, String anchor, String content) { this.id = id; this.toclevel = level; this.line = heading; this.anchor = anchor; this.text = content; } @Override public boolean equals(Object o) { if (!(o instanceof Section)) { return false; } Section other = (Section) o; return getId() == other.getId() && getLevel() == other.getLevel() && StringUtils.equals(getHeading(), other.getHeading()) && StringUtils.equals(getAnchor(), other.getAnchor()) && StringUtils.equals(getContent(), other.getContent()); } @Override public int hashCode() { int result = getId(); result = 31 * result + getHeading().hashCode(); result = 31 * result + getAnchor().hashCode(); result = 31 * result + getContent().hashCode(); return result; } @Override public String toString() { return "Section{" + "id=" + id + ", toclevel=" + toclevel + ", line='" + line + '\'' + ", anchor='" + anchor + '\'' + ", text='" + text + '\'' + '}'; } public boolean isLead() { return id == 0; } public int getId() { return id; } public int getLevel() { return toclevel; } @NonNull public String getHeading() { return defaultString(line); } @NonNull public String getAnchor() { return defaultString(anchor); } @NonNull public String getContent() { return defaultString(text); } }