com.nokia.example.lwuit.rlinks.model.LinkThing.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.example.lwuit.rlinks.model.LinkThing.java

Source

/*
 * Copyright  2012 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.lwuit.rlinks.model;

import com.nokia.example.lwuit.rlinks.util.HtmlEntityDecoder;
import java.util.Date;
import org.json.me.JSONException;
import org.json.me.JSONObject;

/**
 * Representation of a Reddit Link item.
 *
 * @see https://github.com/reddit/reddit/wiki/thing
 */
public class LinkThing implements Voteable {

    /**
     * Disallow creating custom instances.
     */
    private LinkThing() {
    }

    /**
     * Create a LinkThing from a JSON data String.
     *
     * @param obj JSONObject containing data for the Link
     * @return A LinkThing object
     * @throws JSONException If the given JSONObject can't be parsed
     */
    public static LinkThing fromJson(JSONObject obj) throws JSONException {
        LinkThing thing = new LinkThing();
        thing.setAuthor(obj.getString("author"));

        try {
            // "1329913184.0" -> "13299131840000"
            String dateStr = obj.getString("created_utc").substring(0, 9) + "0000";
            thing.setCreated(new Date(Long.parseLong(dateStr)));
        } catch (Exception e) {
            System.out.println("Couldn't set date: " + e.getMessage());
        }
        thing.setDomain(obj.getString("domain"));
        thing.setId(obj.getString("id"));
        thing.setName(obj.getString("name"));
        thing.setNumComments(obj.getInt("num_comments"));
        thing.setPermalink(obj.getString("permalink"));
        thing.setSubreddit(obj.getString("subreddit"));
        thing.setScore(obj.getInt("score"));
        thing.setThumbnail(obj.getString("thumbnail"));
        thing.setTitle(HtmlEntityDecoder.decode(obj.getString("title")));
        thing.setUrl(obj.getString("url"));

        // 'Likes' can be true, false or null; map that to 1, -1, and 0
        thing.setVote(obj.isNull("likes") ? 0 : obj.getBoolean("likes") ? 1 : -1);

        return thing;
    }

    public String toString() {
        return this.getId() + " (" + this.getNumComments() + ") - " + this.getTitle();
    }

    // Author of the Link
    private String author;
    // Creation date
    private Date created;
    // Domain of the Link, e.g. "en.wikipedia.org"
    private String domain;
    // Internal Reddit-assigned ID
    private String id;
    // The internal Reddit-assigned name (<thing type>_<ID>, e.g. "t1_c47xiv")
    private String name;
    // Number of comments for this Link
    private int numComments;
    // Permanent URL pointing to this Link
    private String permalink;
    // A combined sum of up and down votes
    private int score;
    // The subreddit (category) of this Link
    private String subreddit;
    // Link title. This is what gets displayed most of the time
    private String title;
    // A thumbnail image location for this Link, if available
    private String thumbnail;
    // The URL (source) of this Link.
    private String url;
    // A possible vote given to this comment by the current user, if available.
    // Possible values: -1 (voted down), 0 (not voted), 1 (voted up)
    private int vote;

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public String getDomain() {
        return domain;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNumComments() {
        return numComments;
    }

    public void setNumComments(int mNumComments) {
        this.numComments = mNumComments;
    }

    public String getPermalink() {
        return permalink;
    }

    public void setPermalink(String permalink) {
        this.permalink = permalink;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public String getSubreddit() {
        return subreddit;
    }

    public void setSubreddit(String subreddit) {
        this.subreddit = subreddit;
    }

    public String getThumbnail() {
        return thumbnail;
    }

    public void setThumbnail(String thumbnail) {
        // Thumbnail links are only useful if our HTTP client is able to
        // get them: only accept obvious URLs
        this.thumbnail = thumbnail == null || !thumbnail.startsWith("http") ? null : thumbnail;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public int getVote() {
        return vote;
    }

    public void setVote(int vote) {
        // Reset possible old vote, set new vote, add new vote
        score -= this.vote;
        this.vote = vote;
        score += vote;
    }

    public String getText() {
        return title;
    }
}