org.loklak.data.Campaign.java Source code

Java tutorial

Introduction

Here is the source code for org.loklak.data.Campaign.java

Source

/**
 *  Campaign
 *  Copyright 09.04.2015 by Michael Peter Christen, @0rb1t3r
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *  
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *  
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program in the file lgpl21.txt
 *  If not, see <http://www.gnu.org/licenses/>.
 */

package org.loklak.data;

import java.text.ParseException;
import java.util.Comparator;
import java.util.Date;
import org.json.JSONObject;
import org.loklak.tools.DateParser;

public class Campaign implements Comparator<Campaign>, Comparable<Campaign> {

    private JSONObject map;
    private long start_time, end_time;
    private String id;

    public Campaign() {
        this.map = new JSONObject(true);
    }

    /**
     * create an campaign with a dumped map
     * @param campaignMap
     */
    public Campaign(JSONObject campaignMap) {
        this();
        this.map.putAll(campaignMap);
        this.start_time = ((Date) this.map.get("start_date")).getTime();
        this.end_time = ((Date) this.map.get("end_date")).getTime();
        this.id = DateParser.minuteDateFormat.format((Date) this.map.get("start_date")).replace(' ', '_') + "-"
                + DateParser.minuteDateFormat.format((Date) this.map.get("end_date")).replace(' ', '_') + "-"
                + Math.abs(((String) this.map.get("query")).hashCode()) + "-"
                + Math.abs(((String) this.map.get("name")).hashCode());
    }

    /**
     * create an campaign
     * @param query the query which can be used to harvest the campaign
     * @param name the name of the campaign
     * @param creation_date the creation time of the campaign
     * @param start_date the start of the campaign
     * @param end_date   the end of the campaign
     * @param timezoneOffset the offset of the time zone of the creating client
     */
    public Campaign(final String query, final String name, final Date creation_date, final Date start_date,
            final Date end_date, final int timezoneOffset) {
        this();
        this.map.put("start_date", start_date); // this must be first to make lists sortable in dump lists
        this.map.put("end_date", end_date);
        this.map.put("timezoneOffset", timezoneOffset);
        this.map.put("creation_date", creation_date);
        this.map.put("query", query);
        this.map.put("name", name);
        this.start_time = start_date.getTime();
        this.end_time = end_date.getTime();
        this.id = DateParser.minuteDateFormat.format(start_date).replace(' ', '_') + "-"
                + DateParser.minuteDateFormat.format(end_date).replace(' ', '_') + "-" + Math.abs(query.hashCode())
                + "-" + Math.abs(name.hashCode());
    }

    /**
     * create an campaign
     * @param query the query which can be used to harvest the campaign
     * @param name the name of the campaign
     * @param start_date "YYYY-MM-dd HH:mm" the start of the campaign
     * @param end_date   "YYYY-MM-dd HH:mm" the end of the campaign
     * @param timezoneOffset the offset of the time zone of the creating client, used to parse the date
     */
    public Campaign(final String query, final String name, final String start_date, final String end_date,
            final int timezoneOffset) throws ParseException {
        this(name, query, new Date(), DateParser.parse(start_date, timezoneOffset).getTime(),
                DateParser.parse(end_date, timezoneOffset).getTime(), timezoneOffset);
    }

    public String getName() {
        return (String) this.map.get("name");
    }

    public String getQuery() {
        return (String) this.map.get("query");
    }

    public Date getCreationDate() {
        return (Date) this.map.get("creation_date");
    }

    public long getStartTime() {
        return this.start_time;
    }

    public long getEndTime() {
        return this.end_time;
    }

    public int getTimezoneOffset() {
        return (Integer) this.map.get("timezoneOffset");
    }

    public String getID() {
        return this.id;
    }

    public int hashCode() {
        return this.id.hashCode();
    }

    @Override
    public int compareTo(Campaign o) {
        return compare(this, o);
    }

    @Override
    public int compare(Campaign o1, Campaign o2) {
        int c = o1.getStartTime() < o2.getStartTime() ? -1 : o1.getStartTime() > o2.getStartTime() ? 1 : 0;
        if (c == 0)
            c = o1.getEndTime() < o2.getEndTime() ? -1 : o1.getEndTime() > o2.getEndTime() ? 1 : 0;
        if (c == 0)
            c = o1.hashCode() < o2.hashCode() ? -1 : o1.hashCode() > o2.hashCode() ? 1 : 0;
        return c;
    }

    public JSONObject toJSON() {
        return this.map;
    }

    public String toString() {
        return toJSON().toString();
    }

    public static void main(String args[]) {
        try {
            Campaign campaign = new Campaign("FOSSASIA", "#fossasia", "2015-03-13 09:00", "2015-03-15 18:00", -420);
            System.out.println(campaign.toString());
        } catch (ParseException e1) {
        }
    }
}