/***
** @(#) TradeCard.com 1.0
**
** Copyright (c) 2010 TradeCard, Inc. All Rights Reserved.
**
**
** THIS COMPUTER SOFTWARE IS THE PROPERTY OF TradeCard, Inc.
**
** Permission is granted to use this software as specified by the TradeCard
** COMMERCIAL LICENSE AGREEMENT. You may use this software only for
** commercial purposes, as specified in the details of the license.
** TRADECARD SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
** THE LICENSEE AS A RESULT OF USING OR MODIFYING THIS SOFTWARE IN ANY WAY.
**
** YOU MAY NOT DISTRIBUTE ANY SOURCE CODE OR OBJECT CODE FROM THE TradeCard.com
** TOOLKIT AT ANY TIME. VIOLATORS WILL BE PROSECUTED TO THE FULLEST EXTENT
** OF UNITED STATES LAW.
**
** @version 1.0
** @author Copyright (c) 2010 TradeCard, Inc. All Rights Reserved.
**
**/
package com.partydj.server;
import java.util.*;
import com.google.common.base.*;
import com.partydj.player.*;
import com.partydj.util.json.*;
/**
*
**/
public class MediaRequest implements Comparable<MediaRequest>, JSONSerializable {
public static final String VOTERS = "voters";
public static final Function<MediaRequest, MediaFile> TO_MEDIA_FILE = new Function<MediaRequest, MediaFile>() {
@Override public MediaFile apply(MediaRequest input) {
return input.getMediaFile();
}
};
private MediaFile file;
private Set<String> voters = new LinkedHashSet();
public static MediaRequest create(MediaFile file, String from) {
return new MediaRequest(file, from);
}
private MediaRequest(MediaFile file, String from) {
this.file = file;
this.voters.add(from);
}
public MediaFile getMediaFile() {
return file;
}
public Set<String> getVoters() {
return voters;
}
public int getVotes() {
return voters.size();
}
public void vote(String from) {
voters.add(from);
}
//This will favor request with a greater count
@Override public int compareTo(MediaRequest o) {
int otherCount = o != null ? o.voters.size() : 0;
return otherCount - voters.size();
}
@Override public JSONObject toJSON() {
JSONObject json = file.toJSON();
JSONArray voterJSON = new JSONArray();
voterJSON.addAll(voters);
json.put(VOTERS, voterJSON);
return json;
}
}