| 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(); |
| } |
| } |