Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / model / HighlightImpl.java
diff --git a/Android/folioreader/src/main/java/com/folioreader/model/HighlightImpl.java b/Android/folioreader/src/main/java/com/folioreader/model/HighlightImpl.java
new file mode 100755 (executable)
index 0000000..4792a79
--- /dev/null
@@ -0,0 +1,295 @@
+package com.folioreader.model;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Date;
+
+/**
+ * This data structure holds information about an individual highlight.
+ *
+ * @author mahavir on 5/12/16.
+ */
+
+public class HighlightImpl implements Parcelable, HighLight {
+
+    public static final String INTENT = HighlightImpl.class.getName();
+    public static final String BROADCAST_EVENT = "highlight_broadcast_event";
+
+    /**
+     * Database id
+     */
+    private int id;
+    /**
+     * <p> Book id, which can be provided to intent to folio reader, if not provided id is
+     * used from epub's dc:identifier field in metadata.
+     * <p>for reference, look here:
+     * <a href="http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-package-metadata-identifiers">IDPF</a>.</p>
+     * in case identifier is not found in the epub,
+     * <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#hashCode()">hash code</a>
+     * of book title is used also if book title is not found then
+     * hash code of the book file name is used.
+     * </p>
+     */
+    private String bookId;
+    /**
+     * Highlighted text content text content.
+     */
+    private String content;
+    /**
+     * Date time when highlight is created (format:- MMM dd, yyyy | HH:mm).
+     */
+    private Date date;
+    /**
+     * Field defines the color of the highlight. {@link HighlightStyle}
+     */
+    private String type;
+    /**
+     * Page index in the book taken from Epub spine reference.
+     */
+    private int pageNumber;
+    /**
+     * href of the page from the Epub spine list.
+     */
+    private String pageId;
+    /**
+     * <p> Contains highlight meta data in terms of rangy format.</p>
+     * <strong>format </strong>:- start$end$id$class$containerId.
+     * <p>for reference, look here: <a href="https://github.com/timdown/rangy">rangy</a>.</p>
+     */
+    private String rangy;
+
+    /**
+     * Unique identifier for a highlight for sync across devices.
+     * <p>for reference, look here:
+     * <a href = "https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html#toString()">UUID</a>.</p>
+     */
+    private String uuid;
+
+    /**
+     * Note linked to the highlight (optional)
+     */
+    private String note;
+
+    public enum HighlightStyle {
+        Yellow,
+        Green,
+        Blue,
+        Pink,
+        Underline,
+        TextColor,
+        DottetUnderline,
+        Normal;
+
+        /**
+         * Return CSS class for HighlightStyle.
+         */
+        public static String classForStyle(HighlightStyle style) {
+            switch (style) {
+                case Yellow:
+                    return "yellow";
+                case Green:
+                    return "green";
+                case Blue:
+                    return "blue";
+                case Pink:
+                    return "pink";
+                case Underline:
+                    return "underline";
+                case DottetUnderline:
+                    return "mediaOverlayStyle1";
+                case TextColor:
+                    return "mediaOverlayStyle2";
+                default:
+                    return "mediaOverlayStyle0";
+
+            }
+        }
+    }
+
+    public HighlightImpl(int id, String bookId, String content, Date date, String type,
+                         int pageNumber, String pageId,
+                         String rangy, String note, String uuid) {
+        this.id = id;
+        this.bookId = bookId;
+        this.content = content;
+        this.date = date;
+        this.type = type;
+        this.pageNumber = pageNumber;
+        this.pageId = pageId;
+        this.rangy = rangy;
+        this.note = note;
+        this.uuid = uuid;
+    }
+
+    public HighlightImpl() {
+    }
+
+    protected HighlightImpl(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getBookId() {
+        return bookId;
+    }
+
+    public void setBookId(String bookId) {
+        this.bookId = bookId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getPageId() {
+        return pageId;
+    }
+
+    public void setPageId(String pageId) {
+        this.pageId = pageId;
+    }
+
+    public String getRangy() {
+        return rangy;
+    }
+
+    public void setRangy(String rangy) {
+        this.rangy = rangy;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public int getPageNumber() {
+        return pageNumber;
+    }
+
+    public void setPageNumber(int pageNumber) {
+        this.pageNumber = pageNumber;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public String getUUID() {
+        return uuid;
+    }
+
+    public void setUUID(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        HighlightImpl highlightImpl = (HighlightImpl) o;
+
+        return id == highlightImpl.id
+                && (bookId != null ? bookId.equals(highlightImpl.bookId) : highlightImpl.bookId == null
+                && (content != null ? content.equals(highlightImpl.content) : highlightImpl.content == null
+                && (date != null ? date.equals(highlightImpl.date) : highlightImpl.date == null
+                && (type != null ? type.equals(highlightImpl.type) : highlightImpl.type == null))));
+    }
+
+    @Override
+    public int hashCode() {
+        int result = id;
+        result = 31 * result + (bookId != null ? bookId.hashCode() : 0);
+        result = 31 * result + (content != null ? content.hashCode() : 0);
+        result = 31 * result + (date != null ? date.hashCode() : 0);
+        result = 31 * result + (type != null ? type.hashCode() : 0);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "HighlightImpl{" +
+                "id=" + id +
+                ", bookId='" + bookId + '\'' +
+                ", content='" + content + '\'' +
+                ", date=" + date +
+                ", type='" + type + '\'' +
+                ", pageNumber=" + pageNumber +
+                ", pageId='" + pageId + '\'' +
+                ", rangy='" + rangy + '\'' +
+                ", note='" + note + '\'' +
+                ", uuid='" + uuid + '\'' +
+                '}';
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(id);
+        dest.writeString(bookId);
+        dest.writeString(pageId);
+        dest.writeString(rangy);
+        dest.writeString(content);
+        dest.writeSerializable(date);
+        dest.writeString(type);
+        dest.writeInt(pageNumber);
+        dest.writeString(note);
+        dest.writeString(uuid);
+    }
+
+    private void readFromParcel(Parcel in) {
+        id = in.readInt();
+        bookId = in.readString();
+        pageId = in.readString();
+        rangy = in.readString();
+        content = in.readString();
+        date = (Date) in.readSerializable();
+        type = in.readString();
+        pageNumber = in.readInt();
+        note = in.readString();
+        uuid = in.readString();
+    }
+
+    public static final Creator<HighlightImpl> CREATOR = new Creator<HighlightImpl>() {
+        @Override
+        public HighlightImpl createFromParcel(Parcel in) {
+            return new HighlightImpl(in);
+        }
+
+        @Override
+        public HighlightImpl[] newArray(int size) {
+            return new HighlightImpl[size];
+        }
+    };
+}