/*
* Created on Feb 19, 2011
*/
package com.googlecode.flickr2twitter.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.googlecode.flickr2twitter.datastore.MyPersistenceManagerFactory;
import com.googlecode.flickr2twitter.datastore.model.User;
import com.googlecode.flickr2twitter.datastore.model.UserSourceServiceConfig;
import com.googlecode.flickr2twitter.impl.ebay.FindItemsDAO;
import com.googlecode.flickr2twitter.impl.ebay.SourceServiceProviderEbayKeywords;
import com.googlecode.flickr2twitter.impl.ebay.SourceServiceProviderEbayKeywordsSandbox;
import com.googlecode.flickr2twitter.org.apache.commons.lang3.StringUtils;
/**
* @author Emac Shen (shen.bin.1983@gmail.com)
*/
public class EbayConfigKeywordsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String PARA_KEYWORDS = "keywords";
public static final String PARA_SEARCH_KEYWORDS = "search_keywords";
public static final String PARA_SEARCH_PRICE_LOW = "search_price_low";
public static final String PARA_SEARCH_PRICE_HIGH = "search_price_high";
public static final String PARA_SEARCH_MAX_NOTIFICATION = "search_max_notification";
public static final String PARA_NOTIFICATION_ONCE_A_DAY = "notification_once_a_day";
private static final String PREFIX_PRODUCTION = "http://shop.ebay.com/";
private static final String PREFIX_SANDBOX = "http://shop.sandbox.ebay.com/";
//Sample: http://shop.ebay.com/i.html?_nkw=Nikon+D700&_in_kw=1&_ex_kw=&_sacat=See-All-Categories&_okw=Nikon+D700&_oexkw=&_adv=1&_mPrRngCbx=1&_udlo=200&_udhi=500&_ftrt=901&_ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=200&_fpos=Zip+code&_fsct=&LH_SALE_CURRENCY=0&_sop=10&_dmd=1&_ipg=50
private static final String PREFIX_URL = "i.html?_nkw=";
private static final String MIDDLE_URL = "&_in_kw=1&_ex_kw=&_sacat=See-All-Categories&_okw=";
private static final String SUFFIX_URL = "&_ftrt=901&_ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=200&_fpos=Zip+code&_fsct=&LH_SALE_CURRENCY=0&_sop=10&_dmd=1&_ipg=50";
/*
* (non-Javadoc)
*
* @see
* javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest
* , javax.servlet.http.HttpServletResponse)
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Boolean notificationOnceADay = Boolean.valueOf(req
.getParameter(PARA_NOTIFICATION_ONCE_A_DAY));
User user = (User) req.getSession().getAttribute(
UserAccountServlet.PARA_SESSION_USER);
if (user == null) {
req.getSession().setAttribute("message", "Please Login first!");
resp.sendRedirect("/index.jsp");
return;
}
String userEmail = user.getUserId().getEmail();
String keywords = req.getParameter(PARA_KEYWORDS);
String minPrice = req.getParameter(PARA_SEARCH_PRICE_LOW);
String maxPrice = req.getParameter(PARA_SEARCH_PRICE_HIGH);
String maxNotify = req.getParameter(PARA_SEARCH_MAX_NOTIFICATION);
boolean isSandbox = Boolean.valueOf(req
.getParameter(EbayConfigServlet.PARA_SANDBOX));
UserSourceServiceConfig serviceConfig = new UserSourceServiceConfig();
// TODO store the keywords in user id
serviceConfig.setServiceUserId(keywords);
serviceConfig.setServiceAccessToken(keywords);
String userDisplayName = keywords;
serviceConfig.setServiceUserName(userDisplayName);
serviceConfig
.setServiceProviderId(isSandbox ? SourceServiceProviderEbayKeywordsSandbox.ID
: SourceServiceProviderEbayKeywords.ID);
serviceConfig.setUserEmail(userEmail);
if (StringUtils.isNotBlank(minPrice)) {
serviceConfig.addAddtionalParameter(
SourceServiceProviderEbayKeywords.KEY_MIN_PRICE, minPrice);
}
if (StringUtils.isNotBlank(maxPrice)) {
serviceConfig.addAddtionalParameter(
SourceServiceProviderEbayKeywords.KEY_MAX_PRICE, maxPrice);
}
if (StringUtils.isNotBlank(maxNotify)) {
serviceConfig.addAddtionalParameter(
SourceServiceProviderEbayKeywords.KEY_MAX_NOTIFICATION,
Boolean.valueOf(maxNotify).toString());
}
String userSiteUrl = buildEbayUserSearchUrl(isSandbox, keywords,
minPrice, maxPrice);
serviceConfig.setUserSiteUrl(userSiteUrl);
MyPersistenceManagerFactory.addSourceServiceApp(userEmail,
serviceConfig);
resp.sendRedirect("/user_admin.jsp");
}
public String buildEbayUserSearchUrl(boolean isSandbox, String keywords,
String minPrice, String maxPrice) {
FindItemsDAO findItemsDao = new FindItemsDAO();
String encodedKeywords = findItemsDao.urlEncode(keywords);
String userSiteUrl = PREFIX_URL + encodedKeywords + "&_in_kw=1&_ex_kw=&_sacat=See-All-Categories&_okw=" + encodedKeywords + "&_oexkw=&_adv=1";
boolean hasMinPrice = StringUtils.isNotBlank(minPrice);
boolean hasMaxPrice = StringUtils.isNotBlank(maxPrice);
minPrice = hasMinPrice ? minPrice : "";
maxPrice = hasMaxPrice ? maxPrice : "";
if (hasMinPrice || hasMaxPrice) {
userSiteUrl += "&_mPrRngCbx=1";
}
userSiteUrl += "&_udlo=" + minPrice + "&_udhi=" + maxPrice + SUFFIX_URL;
if (isSandbox) {
userSiteUrl = PREFIX_SANDBOX + userSiteUrl;
} else {
userSiteUrl = PREFIX_PRODUCTION + userSiteUrl;
}
return userSiteUrl;
}
}