blob: afad5624b35203b97272f16a845b4a7c595a03ea [file] [log] [blame]
package io.prediction;
import com.ning.http.client.Request;
import com.ning.http.client.RequestBuilder;
import org.joda.time.DateTime;
/**
* UserActionItem request builder
*
* @author The PredictionIO Team (<a href="http://prediction.io">http://prediction.io</a>)
* @version 0.2
* @since 0.2
*/
public class UserActionItemRequestBuilder {
// Mandatory fields
private String apiUrl;
private String apiFormat;
private String appkey;
private String action;
private String uid;
private String iid;
private DateTime t;
// Optional fields
private Double latitude;
private Double longitude;
private int rate; // mandatory for u2i rate action
/**
* Action name for a user-rate-item action
*/
public static final String RATE = "rate";
/**
* Action name for a user-like-item action
*/
public static final String LIKE = "like";
/**
* Action name for a user-dislike-item action
*/
public static final String DISLIKE = "dislike";
/**
* Action name for a user-view-item action
*/
public static final String VIEW = "view";
/**
* Action name for a user-conversion-item action
*/
public static final String CONVERSION = "conversion";
/**
* Instantiate a request builder with mandatory arguments.
* <p>
* Do not use this directly. Please refer to "See Also".
*
* @param apiUrl the API URL
* @param apiFormat the return format of the API
* @param appkey the new app key to be used
* @param action the action code
* @param uid the user ID
* @param iid the item ID
*
* @see Client#getUserRateItemRequestBuilder
* @see Client#getUserLikeItemRequestBuilder
* @see Client#getUserDislikeItemRequestBuilder
* @see Client#getUserViewItemRequestBuilder
* @see Client#getUserConversionItemRequestBuilder
*/
public UserActionItemRequestBuilder(String apiUrl, String apiFormat, String appkey, String action, String uid, String iid) {
this.apiUrl = apiUrl;
this.apiFormat = apiFormat;
this.appkey = appkey;
this.action = action;
this.uid = uid;
this.iid = iid;
}
/**
* Add the "latitude" optional argument to the request.
* <p>
* Only certain data backend support geospatial indexing.
* Please refer to the main documentation for more information.
*
* @param latitude latitude
*/
public UserActionItemRequestBuilder latitude(double latitude) {
this.latitude = new Double(latitude);
return this;
}
/**
* Add the "longitude" optional argument to the request.
* <p>
* Only certain data backend support geospatial indexing.
* Please refer to the main documentation for more information.
*
* @param longitude longitude
*/
public UserActionItemRequestBuilder longitude(double longitude) {
this.longitude = new Double(longitude);
return this;
}
/**
* Add the "rate" argument (mandatory for user-rate-item actions) to the request.
*
* @param rate user's rating on item
*/
public UserActionItemRequestBuilder rate(int rate) {
this.rate = rate;
return this;
}
/**
* Add the "t" optional argument to the request.
*
* @param t time of action
*/
public UserActionItemRequestBuilder t(DateTime t) {
this.t = t;
return this;
}
/**
* Build a request.
* <p>
* Do not use this directly. Please refer to "See Also".
*
* @see Client#userConversionItem(UserActionItemRequestBuilder)
* @see Client#userLikeItem(UserActionItemRequestBuilder)
* @see Client#userDislikeItem(UserActionItemRequestBuilder)
* @see Client#userRateItem(UserActionItemRequestBuilder)
* @see Client#userViewItem(UserActionItemRequestBuilder)
*/
public Request build() {
RequestBuilder builder = new RequestBuilder("POST");
builder.addQueryParameter("pio_appkey", this.appkey);
builder.addQueryParameter("pio_uid", this.uid);
builder.addQueryParameter("pio_iid", this.iid);
if (this.latitude != null && this.longitude != null) {
builder.addQueryParameter("pio_latlng", this.latitude.toString() + "," + this.longitude.toString());
}
if (this.t != null) {
builder.addQueryParameter("pio_t", t.toString());
}
String actionUrl = "/actions/u2i.";
builder.addQueryParameter("pio_action", this.action);
if (this.action == RATE) {
builder.addQueryParameter("pio_rate", Integer.toString(this.rate));
}
builder.setUrl(this.apiUrl + actionUrl + this.apiFormat);
return builder.build();
}
}