svn commit: r1695126 [13/22] - in /ofbiz/trunk: applications/accounting/src/org/ofbiz/accounting/thirdparty/authorizedotnet/ applications/accounting/src/org/ofbiz/accounting/thirdparty/securepay/ applications/content/src/org/ofbiz/content/webapp/ftl/ a...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1695126 [13/22] - in /ofbiz/trunk: applications/accounting/src/org/ofbiz/accounting/thirdparty/authorizedotnet/ applications/accounting/src/org/ofbiz/accounting/thirdparty/securepay/ applications/content/src/org/ofbiz/content/webapp/ftl/ a...

jleroux@apache.org
Modified: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayEvents.java?rev=1695126&r1=1695125&r2=1695126&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayEvents.java (original)
+++ ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayEvents.java Mon Aug 10 16:15:37 2015
@@ -1,1184 +1,1184 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.ofbiz.ebaystore;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilGenerics;
-import org.ofbiz.base.util.UtilHttp;
-import org.ofbiz.base.util.UtilMisc;
-import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.entity.Delegator;
-import org.ofbiz.entity.GenericEntityException;
-import org.ofbiz.entity.GenericValue;
-import org.ofbiz.entity.util.EntityQuery;
-import org.ofbiz.service.GenericServiceException;
-import org.ofbiz.service.LocalDispatcher;
-
-import com.ebay.sdk.ApiContext;
-import com.ebay.sdk.ApiException;
-import com.ebay.sdk.SdkException;
-import com.ebay.sdk.call.AddItemCall;
-import com.ebay.sdk.call.GetCategorySpecificsCall;
-import com.ebay.sdk.call.GetSellingManagerInventoryCall;
-import com.ebay.sdk.call.ReviseSellingManagerProductCall;
-import com.ebay.sdk.call.VerifyAddItemCall;
-import com.ebay.soap.eBLBaseComponents.AmountType;
-import com.ebay.soap.eBLBaseComponents.CategoryType;
-import com.ebay.soap.eBLBaseComponents.CountryCodeType;
-import com.ebay.soap.eBLBaseComponents.CurrencyCodeType;
-import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
-import com.ebay.soap.eBLBaseComponents.FeeType;
-import com.ebay.soap.eBLBaseComponents.FeesType;
-import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryRequestType;
-import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryResponseType;
-import com.ebay.soap.eBLBaseComponents.ItemType;
-import com.ebay.soap.eBLBaseComponents.ListingDesignerType;
-import com.ebay.soap.eBLBaseComponents.ListingTypeCodeType;
-import com.ebay.soap.eBLBaseComponents.NameRecommendationType;
-import com.ebay.soap.eBLBaseComponents.NameValueListArrayType;
-import com.ebay.soap.eBLBaseComponents.NameValueListType;
-import com.ebay.soap.eBLBaseComponents.PictureDetailsType;
-import com.ebay.soap.eBLBaseComponents.RecommendationsType;
-import com.ebay.soap.eBLBaseComponents.ReturnPolicyType;
-import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductRequestType;
-import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductResponseType;
-import com.ebay.soap.eBLBaseComponents.SellingManagerProductDetailsType;
-import com.ebay.soap.eBLBaseComponents.SellingManagerProductType;
-import com.ebay.soap.eBLBaseComponents.ShippingDetailsType;
-import com.ebay.soap.eBLBaseComponents.ShippingServiceDetailsType;
-import com.ebay.soap.eBLBaseComponents.ShippingServiceOptionsType;
-import com.ebay.soap.eBLBaseComponents.ShippingTypeCodeType;
-import com.ebay.soap.eBLBaseComponents.SiteCodeType;
-import com.ebay.soap.eBLBaseComponents.StoreCustomCategoryType;
-import com.ebay.soap.eBLBaseComponents.StorefrontType;
-import com.ebay.soap.eBLBaseComponents.VATDetailsType;
-import com.ebay.soap.eBLBaseComponents.ValueRecommendationType;
-import com.ebay.soap.eBLBaseComponents.VerifyAddItemRequestType;
-import com.ebay.soap.eBLBaseComponents.VerifyAddItemResponseType;
-import com.ebay.soap.eBLBaseComponents.WarningLevelCodeType;
-import com.ebay.soap.eBLBaseComponents.AddItemRequestType;
-import com.ebay.soap.eBLBaseComponents.AddItemResponseType;
-
-public class EbayEvents {
-
-    private static final int SHIPPING_SERVICE_ID_LIMIT = 50000;
-    public static final String module = EbayEvents.class.getName();
-
-    public static String sendLeaveFeedback(HttpServletRequest request, HttpServletResponse response) {
-        HttpSession session = request.getSession(true);
-        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
-        Map<String, Object> requestParams = UtilHttp.getParameterMap(request);
-        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
-        int feedbackSize = Integer.parseInt((String)requestParams.get("feedbackSize"));
-        String productStoreId = (String)requestParams.get("productStoreId");
-        for (int i = 1; i <= feedbackSize; i++) {
-            String commentType = (String)requestParams.get("commentType"+i);
-            String commentText = (String)requestParams.get("commentText"+i);
-            if (!commentType.equals("none") && commentText != null) {
-                String itemId = (String)requestParams.get("itemId"+i);
-                String transactionId = (String)requestParams.get("transactionId"+i);
-                String targetUser = (String)requestParams.get("targetUser"+i);
-                String commentingUser = (String)requestParams.get("commentingUser"+i);
-                String role = (String)requestParams.get("role"+i);
-                String ratingItem = (String)requestParams.get("ratingItem"+i);
-                String ratingComm = (String)requestParams.get("ratingComm"+i);
-                String ratingShip = (String)requestParams.get("ratingShip"+i);
-                String ratingShipHand = (String)requestParams.get("ratingShipHand"+i);
-                String AqItemAsDescribedId = (String)requestParams.get("AqItemAsDescribedId"+i);
-
-                Map<String, Object> leavefeedback =  new HashMap<String, Object>();
-                leavefeedback.put("productStoreId", productStoreId);
-                leavefeedback.put("userLogin", userLogin);
-                leavefeedback.put("itemId", itemId);
-                leavefeedback.put("transactionId", transactionId);
-                leavefeedback.put("targetUser", targetUser);
-                leavefeedback.put("commentingUser", commentingUser);
-                leavefeedback.put("role", role);
-                leavefeedback.put("commentText", commentText);
-                leavefeedback.put("commentType", commentType);
-                leavefeedback.put("ratingItem", ratingItem);
-                leavefeedback.put("ratingComm", ratingComm);
-                leavefeedback.put("ratingShip", ratingShip);
-                leavefeedback.put("ratingShipHand", ratingShipHand);
-                leavefeedback.put("AqItemAsDescribedId", AqItemAsDescribedId);
-                // Call service
-                try {
-                    dispatcher.runSync("leaveFeedback", leavefeedback);
-                } catch (GenericServiceException e) {
-                    Debug.logError(e, module);
-                    request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-                    return "error";
-                }
-            }
-        }
-        return "success";
-    }
-    /* event to add products to prepare create & export listing */
-    public static String addProductListing(HttpServletRequest request, HttpServletResponse response) {
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-
-        if (UtilValidate.isEmpty(requestParams.get("productStoreId"))) {
-            request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
-            return "error";
-        }
-        List<String> productIds = UtilGenerics.checkList(requestParams.get("productIds"));
-        if (UtilValidate.isNotEmpty(requestParams.get("productIds"))) {
-            productIds = UtilGenerics.checkList(requestParams.get("productIds"));
-        } else if (UtilValidate.isNotEmpty(requestParams.get("selectResult"))) {
-            try {
-                productIds = UtilGenerics.checkList(requestParams.get("selectResult"));
-            } catch (ClassCastException e) {
-                if (UtilValidate.isEmpty(productIds)) productIds = new LinkedList<String>();
-                productIds.add((String) requestParams.get("selectResult"));
-            }
-        } else {
-            request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
-            return "error";
-        }
-        String productStoreId = (String) requestParams.get("productStoreId");
-
-        ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-        //String webSiteUrl = (String) requestParams.get("webSiteUrl");
-        String webSiteUrl = "http://demo-trunk.ofbiz.apache.org";
-        Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-        List<Map<String,Object>> itemObjs = null;
-        if (UtilValidate.isNotEmpty(addItemObject.get("itemListings"))) {
-            itemObjs = UtilGenerics.checkList(addItemObject.get("itemListings"));
-        } else {
-            itemObjs = new LinkedList<Map<String,Object>>();
-        }
-
-        if (UtilValidate.isNotEmpty(productIds)) {
-            try {
-                // check  add new product obj ? to export
-                for (String productId : productIds) {
-                    for (Map<String,Object> itObj : itemObjs) {
-                        if (UtilValidate.isNotEmpty(itObj.get(productId.concat("_Obj")))) {
-                            productIds.remove(productId);
-                        }
-                    }
-                }
-                Debug.logInfo("run in with productIds "+productIds, module);
-                for (String productId : productIds) {
-                    AddItemCall addItemCall = new AddItemCall(apiContext);
-                    ItemType item = new ItemType();
-                    GenericValue product = EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne();
-                    item.setTitle(product.getString("internalName"));
-                    item.setCurrency(CurrencyCodeType.USD);
-                    String productDescription = "";
-                    String description = product.getString("description");
-                    String longDescription = product.getString("longDescription");
-                    if (UtilValidate.isNotEmpty(description)) {
-                        productDescription = description;
-                    } else if (UtilValidate.isNotEmpty(longDescription)) {
-                        productDescription = longDescription;
-                    } else if (UtilValidate.isNotEmpty(product.getString("productName"))) {
-                        productDescription = product.getString("productName");
-                    }
-                    item.setDescription(productDescription);
-                    item.setSKU(product.getString("productId"));
-                    item.setApplicationData(product.getString("productId"));
-                    item.setCountry(CountryCodeType.US);
-                    item.setQuantity(1);
-                    String smallImage = product.getString("smallImageUrl");
-                    String mediumImage = product.getString("mediumImageUrl");
-                    String largeImage = product.getString("largeImageUrl");
-                    String ebayImage = null;
-                    if (UtilValidate.isNotEmpty(largeImage)) {
-                        ebayImage = largeImage;
-                    } else if (UtilValidate.isNotEmpty(mediumImage)) {
-                        ebayImage = mediumImage;
-                    } else if (UtilValidate.isNotEmpty(smallImage)) {
-                        ebayImage = smallImage;
-                    }
-                    if (UtilValidate.isNotEmpty(ebayImage)) {
-                        PictureDetailsType pic = new PictureDetailsType();
-                        String pictureUrl = webSiteUrl + ebayImage;
-                        String[] picURL = new String[1];
-                        picURL[0] = pictureUrl;
-                        //String[] picURL = {webSiteUrl + ebayImage};
-                        //pic.setPictureURL(picURL);
-                        pic.setPictureURL(picURL);
-                        item.setPictureDetails(pic);
-                    }
-                    item.setCategoryMappingAllowed(true);
-                    item.setSite(apiContext.getSite());
-                    addItemCall.setSite(apiContext.getSite());
-                    addItemCall.setItem(item);
-                    addItemCall.setWarningLevel(WarningLevelCodeType.HIGH);
-
-                    Map<String,Object> itemListing = null;
-                    for (Map<String,Object> itemObj : itemObjs) {
-                        if (UtilValidate.isNotEmpty(itemObj.get(productId.concat("_Obj")))) {
-                            itemListing = UtilGenerics.checkMap(itemObj.get(productId.concat("_Obj")));
-                            itemListing.put("addItemCall", addItemCall);
-                            itemListing.put("productId", productId);
-                            break;
-                        }
-                    }
-                    if (UtilValidate.isEmpty(itemListing)) {
-                        itemListing = new HashMap<String, Object>();
-                        itemListing.put("addItemCall", addItemCall);
-                        itemListing.put("productId", productId);
-                    }
-                    itemObjs.add(itemListing);
-                }
-                addItemObject.put("itemListing", itemObjs);
-            } catch (Exception e) {
-                Debug.logError(e.getMessage(), module);
-                request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-                return "error";
-            }
-        }
-        return "success";
-    }
-
-    public static String prepareEbaySiteFacadeObject(HttpServletRequest request, HttpServletResponse response) {
-        HttpSession session = request.getSession(true);
-        if (request.getParameter("productStoreId") == null) {
-            return "error";
-        }
-        ApiContext apiContext = getApiContext(request);
-        try {
-            if (UtilValidate.isNotEmpty(apiContext)) {
-                String siteCode = apiContext.getSite().name();
-                if (UtilValidate.isNotEmpty(session.getAttribute("itemListings_".concat(siteCode)))) {
-                    request.setAttribute("productStoreId", request.getParameter("productStoreId"));
-                    return "prepare";
-                }
-                getSiteFacade(apiContext,request);
-            } else {
-                request.setAttribute("_ERROR_MESSAGE_","No apiContext for this account or this site please register on ebay or check you user account.");
-                return "error";
-            }
-        } catch (ApiException e) {
-            request.setAttribute("_ERROR_MESSAGE_","ApiException ".concat(e.getMessage()));
-            return "error";
-        } catch (SdkException e) {
-            request.setAttribute("_ERROR_MESSAGE_","SdkException ".concat(e.getMessage()));
-            return "error";
-        } catch (Exception e) {
-            request.setAttribute("_ERROR_MESSAGE_","Exception ".concat(e.getMessage()));
-            return "error";
-        }
-        return "success";
-    }
-
-    public static EbayStoreSiteFacade getSiteFacade(ApiContext apiContext, HttpServletRequest request) throws ApiException, SdkException, Exception{
-        String siteFacadeName = null;
-        EbayStoreSiteFacade siteFacade = null;
-
-        if (request.getParameter("productStoreId") == null) {
-            Debug.logError("Required productStoreId for get ebay information.", module);
-            return siteFacade;
-        }
-
-        HttpSession session = request.getSession(true);
-        if (UtilValidate.isNotEmpty(apiContext)) {
-            siteFacadeName = "siteFacade".concat("_".concat(apiContext.getSite().name()));
-        }
-
-        if (UtilValidate.isEmpty(session.getAttribute(siteFacadeName))) {
-            session.setAttribute(siteFacadeName,new EbayStoreSiteFacade(apiContext));
-            if (UtilValidate.isNotEmpty(session.getAttribute(siteFacadeName))) {
-                siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
-            }
-        } else {
-            siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
-        }
-        Debug.logInfo("loaded session for ebay site Facade is ".concat(siteFacadeName).concat(session.getAttribute(siteFacadeName).toString()),module);
-        return siteFacade;
-    }
-
-    public static ApiContext getApiContext(HttpServletRequest request) {
-        Locale locale = UtilHttp.getLocale(request);
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-
-        if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
-            Debug.logError("Required productStoreId for get ebay API config data.", module);
-            return null;
-        }
-        ApiContext apiContext = EbayStoreHelper.getApiContext(request.getParameter("productStoreId") != null ? request.getParameter("productStoreId"):(String)request.getAttribute("productStoreId"), locale, delegator);
-        return apiContext;
-    }
-
-    public static String clearProductListing(HttpServletRequest request, HttpServletResponse response) {
-        removeItemListingObject(request, getApiContext(request));
-        return "success";
-    }
-
-    public static void removeItemListingObject(HttpServletRequest request, ApiContext apiContext) {
-        HttpSession session = request.getSession(true);
-        String siteCode = apiContext.getSite().name();
-        Map<String,Object> addItemObject = UtilGenerics.checkMap(session.getAttribute("itemListings_".concat(siteCode)));
-        if (UtilValidate.isNotEmpty(addItemObject)) {
-            session.removeAttribute("itemListings_".concat(siteCode));
-        }
-    }
-
-    public static Map<String,Object> getAddItemListingObject(HttpServletRequest request, ApiContext apiContext) {
-        String siteCode = apiContext.getSite().name();
-        Map<String,Object> addItemObject = UtilGenerics.checkMap(request.getAttribute("itemListings_".concat(siteCode)));
-        HttpSession session = request.getSession(true);
-        if (addItemObject == null) {
-            addItemObject = UtilGenerics.checkMap(session.getAttribute("itemListings_".concat(siteCode)));
-        } else {
-            session.setAttribute("itemListings_".concat(siteCode), addItemObject);
-        }
-        if (addItemObject == null) {
-            addItemObject = new HashMap<String, Object>();
-            session.setAttribute("itemListings_".concat(siteCode), addItemObject);
-        }
-        return addItemObject;
-    }
-
-    // make ebay category list
-    public static List<CategoryType> getChildCategories(HttpServletRequest request) throws ApiException, SdkException, Exception{
-        List<CategoryType> categories = new LinkedList<CategoryType>();
-        EbayStoreSiteFacade sf = null;
-        String categoryId = null;
-
-        if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
-            Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
-            return categories;
-        }
-        if (request.getParameter("categoryId") != null || request.getAttribute("categoryId") != null) {
-            categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String) request.getAttribute("categoryId");
-            Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
-        } else {
-            Debug.logWarning("No categoryId to get child categories.", module);
-        }
-
-        ApiContext apiContext = getApiContext(request);
-        sf = getSiteFacade(apiContext,request);
-        if (UtilValidate.isNotEmpty(sf)) {
-            Map<SiteCodeType, List<CategoryType>> csCateMaps = sf.getSiteCategoriesCSMap();
-            List<CategoryType> csCateList = csCateMaps.get(apiContext.getSite());
-            if (UtilValidate.isNotEmpty(csCateList)) {
-                if (UtilValidate.isNotEmpty(categoryId)) {
-                    // find child of selected ebay categories
-                    for (CategoryType csCate : csCateList) {
-                        String[] categoryParentIds = csCate.getCategoryParentID();
-                        for (String categoryParentId : categoryParentIds) {
-                            if (categoryId.equals(categoryParentId)) {
-                                categories.add(csCate);
-                            }
-                        }
-                    }
-                } else {
-                    // find first level of ebay categories
-                    for (CategoryType csCate : csCateList) {
-                        String[] categoryParentIds = csCate.getCategoryParentID();
-                        for (String categoryParentId : categoryParentIds) {
-                            if (csCate.getCategoryID().equals(categoryParentId)) {
-                                categories.add(csCate);
-                            }
-                        }
-                    }
-                }
-                //sort the cats list
-                Collections.sort(categories, new Comparator<Object>() {
-                    public int compare(Object a, Object b) {
-                        CategoryType cat1 = (CategoryType)a;
-                        CategoryType cat2 = (CategoryType)b;
-                        int catId1 = Integer.parseInt(cat1.getCategoryID());
-                        int catId2 = Integer.parseInt(cat2.getCategoryID());
-                        return catId1 - catId2;
-                    }
-                });
-            }
-        }
-        return categories;
-    }
-
-    public static List<StoreCustomCategoryType> getStoreChildCategories(HttpServletRequest request) throws ApiException, SdkException, Exception {
-        List<StoreCustomCategoryType> categories = new LinkedList<StoreCustomCategoryType>();
-        List<StoreCustomCategoryType> csCateList = new LinkedList<StoreCustomCategoryType>();
-        EbayStoreSiteFacade sf = null;
-        String categoryId = null;
-
-        if (UtilValidate.isEmpty(request.getParameter("productStoreId")) && UtilValidate.isEmpty(request.getAttribute("productStoreId"))) {
-            Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
-            return categories;
-        }
-        if (UtilValidate.isNotEmpty(request.getParameter("categoryId")) || UtilValidate.isNotEmpty(request.getAttribute("categoryId"))) {
-            categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String) request.getAttribute("categoryId");
-            Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
-        } else {
-            Debug.logWarning("No categoryId to get child categories.", module);
-        }
-
-        ApiContext apiContext = getApiContext(request);
-        sf = getSiteFacade(apiContext,request);
-        if (UtilValidate.isNotEmpty(sf)) {
-            Map<SiteCodeType, List<StoreCustomCategoryType>> csCateMaps = sf.getSiteStoreCategoriesMap();
-            csCateList = csCateMaps.get(apiContext.getSite());
-            if (UtilValidate.isNotEmpty(csCateList)) {
-                if (UtilValidate.isNotEmpty(categoryId)) {
-                    // find child of selected ebay categories
-                    for (StoreCustomCategoryType csCate : csCateList) {
-                        if (categoryId.equals(String.valueOf(csCate.getCategoryID()))) {
-                            StoreCustomCategoryType [] childCategories = csCate.getChildCategory();
-                            for (StoreCustomCategoryType childCategoryId : childCategories) {
-                                categories.add(childCategoryId);
-                            }
-                        }
-                    }
-                } else {
-                    // find first level of ebay categories
-                    for (StoreCustomCategoryType csCate : csCateList) {
-                        categories.add(csCate);
-                    }
-                }
-                //sort the cats list
-                Collections.sort(categories, new Comparator<Object>() {
-                    public int compare(Object a, Object b) {
-                        StoreCustomCategoryType cat1 = (StoreCustomCategoryType) a;
-                        StoreCustomCategoryType cat2 = (StoreCustomCategoryType) b;
-                        int catId1 = Integer.parseInt(Long.toString(cat1.getCategoryID()));
-                        int catId2 = Integer.parseInt(Long.toString(cat2.getCategoryID()));
-                        return catId1 - catId2;
-                    }
-                });
-            }
-        }
-        return categories;
-    }
-
-    public static CategoryType getCsCategoriesMapped(HttpServletRequest request) throws ApiException, SdkException, Exception{
-        EbayStoreSiteFacade sf = null;
-        String categoryId = null;
-        CategoryType cate = null;
-
-        if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
-            Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
-            return null;
-        }
-        if (request.getParameter("categoryId") != null || request.getAttribute("categoryId") != null) {
-            categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String)request.getAttribute("categoryId");
-            Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
-        } else {
-            Debug.logWarning("No categoryId to get child categories.", module);
-            return null;
-        }
-
-        ApiContext apiContext = getApiContext(request);
-        sf = getSiteFacade(apiContext,request);
-        if (UtilValidate.isNotEmpty(sf)) {
-            Map<SiteCodeType, List<CategoryType>> csCateMaps = sf.getSiteCategoriesCSMap();
-            List<CategoryType> csCateList = csCateMaps.get(apiContext.getSite());
-            if (UtilValidate.isNotEmpty(csCateList)) {
-                if (UtilValidate.isNotEmpty(categoryId)) {
-                    // find child of selected ebay categories
-                    for (CategoryType csCate : csCateList) {
-                        if (csCate.getCategoryID().equals(categoryId)) {
-                            cate = csCate;
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        return cate;
-    }
-
-    public static String setSelectedEbayCategory(HttpServletRequest request, HttpServletResponse response) {
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        if (UtilValidate.isEmpty(requestParams.get("productStoreId"))) {
-            request.setAttribute("_ERROR_MESSAGE_","Required productStoreId.");
-            return "error";
-        }
-        if (UtilValidate.isEmpty(requestParams.get("isProductId"))) {
-            request.setAttribute("_ERROR_MESSAGE_","Required can not find form Id.");
-            return "error";
-        }
-        String isProductId = (String) requestParams.get("isProductId");
-        if (UtilValidate.isEmpty(requestParams.get("productId")) || UtilValidate.isEmpty(requestParams.get("ebayCategory"))) {
-            request.setAttribute("_ERROR_MESSAGE_","No ebay category or productId selected with form id ".concat(isProductId));
-            return "error";
-        }
-        String categoryId = (String)requestParams.get("ebayCategory");
-        if (categoryId.contains("false")) {
-            request.setAttribute("_ERROR_MESSAGE_","Please select ebay category with low level of categories.");
-            return "error";
-        } else {
-            if (categoryId.contains("true")) categoryId = categoryId.substring(0,categoryId.indexOf(":"));
-        }
-        String productId = (String) requestParams.get("isProductId");
-        EbayStoreCategoryFacade cf = null;
-        EbayStoreSiteFacade sf = null;
-        // find is exiting product and set category into item in additem call
-        try {
-            if (UtilValidate.isNotEmpty(EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne())) {
-                ApiContext apiContext = getApiContext(request);
-                Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-                List<Map<String,Object>> addItemlist = UtilGenerics.checkList(addItemObject.get("itemListing"));
-
-                if (UtilValidate.isNotEmpty(addItemlist)) {
-                    for (Map<String,Object> addItemCall : addItemlist) {
-                        AddItemCall itemCall = (AddItemCall) addItemCall.get("addItemCall");
-                        ItemType item = itemCall.getItem();
-                        if (productId.equals(item.getSKU())) {
-                            request.setAttribute("categoryId", categoryId);
-                            CategoryType csCate = getCsCategoriesMapped(request);
-                            if (UtilValidate.isNotEmpty(csCate)) {
-                                Debug.logInfo("Set selected ebay category ".concat(csCate.getCategoryID().toString().concat(csCate.getCategoryName()).concat(String.valueOf((csCate.isLeafCategory())))), module);
-                                item.setPrimaryCategory(csCate);
-                                // get category feature and attributes
-                                sf = getSiteFacade(apiContext, request);
-                                String refName = "itemCateFacade_".concat(csCate.getCategoryID());
-                                if (UtilValidate.isEmpty(addItemObject.get(refName))) {
-                                    cf = new EbayStoreCategoryFacade(csCate.getCategoryID(), apiContext, sf.getAttrMaster(), sf);
-                                    addItemObject.put(refName, cf);
-                                }
-                                request.setAttribute("_EVENT_MESSAGE_","Set selected ebay category ".concat(csCate.getCategoryID().toString()).concat(" with product ".concat(productId).concat(" successed.")));
-                            } else {
-                                Debug.logWarning(categoryId.concat(" This category is not leaf category or ?"), module);
-                            }
-                            break;
-                        }
-                    }
-                }
-            }
-        } catch (GenericEntityException e) {
-            Debug.logError(e.getMessage(), module);
-        } catch (ApiException e) {
-            Debug.logError(e.getMessage(), module);
-        } catch (SdkException e) {
-            Debug.logError(e.getMessage(), module);
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-        }
-        request.setAttribute("productStoreId", requestParams.get("productStoreId"));
-        request.setAttribute("isProductId", productId);
-        request.removeAttribute("categoryId");
-        return "success";
-    }
-
-    /* for shipping service detail filter */
-    private static boolean isFlat(ShippingTypeCodeType[] st) {
-        for (int i = 0; i < st.length; i++) {
-            if (st[i].compareTo(ShippingTypeCodeType.FLAT) == 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static ShippingServiceDetailsType[] filterShippingService(ShippingServiceDetailsType[] array) {
-        ArrayList<ShippingServiceDetailsType> list = new ArrayList<ShippingServiceDetailsType>();
-        for (int i = 0; i < array.length; i++) {
-            if (isFlat(array[i].getServiceType()) && array[i].getShippingServiceID() < SHIPPING_SERVICE_ID_LIMIT) {
-                list.add(array[i]);
-            }
-        }
-        return list.toArray(new ShippingServiceDetailsType[0]);
-    }
-
-    public static String updateProductExportDetail(HttpServletRequest request, HttpServletResponse response) {
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        HttpSession session = request.getSession(true);
-        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
-        HashMap<String, Object> attributeMapList = new HashMap<String, Object>();
-        String id = "";
-        if (UtilValidate.isNotEmpty(requestParams.get("listype"))) {
-            if ("auction".equals(requestParams.get("listype"))) {
-                id = "_1";
-            } else {
-                id = "_2";
-            }
-        }
-        String startPrice = "";
-        if (UtilValidate.isNotEmpty(requestParams.get("startPrice".concat(id)))) {
-            startPrice = (String) requestParams.get("startPrice".concat(id));
-        }
-        String buyItNowPrice = "";
-        if (UtilValidate.isNotEmpty(requestParams.get("buyItNowPrice".concat(id)))) {
-            buyItNowPrice = (String) requestParams.get("buyItNowPrice".concat(id));
-        }
-        String productId = null;
-        if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
-            productId = requestParams.get("productId").toString();
-        }
-
-        String itemPkCateId = (String) requestParams.get("primaryCateId");
-        String shippingService = (String) requestParams.get("ShippingService");
-        String productStoreId = (String) requestParams.get("productStoreId");
-        
-        // initialize request parameter.
-        Map<String, Object> paramMap = UtilHttp.getParameterMap(request);
-        List<String> nameSpecificList = new LinkedList<String>();
-        List<String> valueSpecificList = new LinkedList<String>();
-        String nameValueListType = null;
-        String valueListType = null;
-        int rowCount = UtilHttp.getMultiFormRowCount(paramMap);
-        if (rowCount > 1) {
-            for (int i = 0; i < rowCount; i++) {
-                String thisSuffix = UtilHttp.MULTI_ROW_DELIMITER + i;        // current suffix after each field id
-                // get the NameSpecifics
-                if (paramMap.containsKey("nameValueListType" + thisSuffix)) {
-                    nameValueListType = (String) paramMap.remove("nameValueListType" + thisSuffix);
-                }
-                // get the ValueSpecifics
-                if (paramMap.containsKey("categorySpecifics" + thisSuffix)) {
-                    valueListType = (String) paramMap.remove("categorySpecifics" + thisSuffix);
-                }
-                
-                if ((UtilValidate.isNotEmpty(nameValueListType)) && (UtilValidate.isNotEmpty(valueListType))){
-                   nameSpecificList.add(nameValueListType);
-                   valueSpecificList.add(valueListType);
-                }
-            }
-        }
-            
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-            List<Map<String,Object>> listAddItem = null;
-            if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
-                listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
-            } else {
-                listAddItem = new LinkedList<Map<String,Object>>();
-            }
-
-            for (Map<String,Object> itemObj : listAddItem) {
-                AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
-                ItemType item = addItemCall.getItem();
-                String SKU = item.getSKU();
-                if (UtilValidate.isNotEmpty(productId)) {
-                    if (productId.equals(SKU)) {
-
-                        attributeMapList.put("Title", item.getTitle());
-                        attributeMapList.put("SKU", SKU);
-                        attributeMapList.put("Currency", item.getCurrency().value());
-                        attributeMapList.put("Description", item.getDescription());
-                        attributeMapList.put("ApplicationData", item.getApplicationData());
-                        attributeMapList.put("Country", item.getCountry().value());
-                        attributeMapList.put("PictureURL", item.getPictureDetails().getPictureURL(0));
-                        attributeMapList.put("Site", item.getSite().value());
-                        attributeMapList.put("UseTaxTable", "false");
-                        attributeMapList.put("BestOfferEnabled", "true");
-                        attributeMapList.put("AutoPayEnabled", "true");
-                        attributeMapList.put("CategoryID", item.getPrimaryCategory().getCategoryID());
-                        attributeMapList.put("CategoryLevel", item.getPrimaryCategory().getCategoryLevel());
-                        attributeMapList.put("CategoryName", item.getPrimaryCategory().getCategoryName());
-                        attributeMapList.put("CategoryParentID", item.getPrimaryCategory().getCategoryParentID(0).toString());
-                        attributeMapList.put("LeafCategory", "true");
-                        attributeMapList.put("LSD", "true");
-
-                        // set Item Specifics.
-                        int itemSpecificsSize = nameSpecificList.size();
-                        int valueSpecificsSize = valueSpecificList.size();
-                        if ((itemSpecificsSize > 0) && (valueSpecificsSize > 0)) {
-                            NameValueListArrayType nameValueListArray = new NameValueListArrayType();
-                            NameValueListType[] nameValueListTypes = new NameValueListType[nameSpecificList.size()];
-                            for (int i = 0; i < itemSpecificsSize; i++) {
-                                String name = nameSpecificList.get(i);
-                                String value = valueSpecificList.get(i);
-                                String[] valueArray = new String[] { value };
-                                
-                                // set Name value list type.
-                                NameValueListType listType = new NameValueListType();
-                                listType.setName(name);
-                                listType.setValue(valueArray);
-                                nameValueListTypes[i] = listType;
-                            }
-                            nameValueListArray.setNameValueList(nameValueListTypes);
-                            item.setItemSpecifics(nameValueListArray);
-                        }
-
-                        item.setUseTaxTable(false);
-                        item.setDispatchTimeMax(3);
-                        ReturnPolicyType policy = new ReturnPolicyType();
-                        policy.setReturnsAcceptedOption("ReturnsNotAccepted");
-                        item.setReturnPolicy(policy);
-                        attributeMapList.put("ReturnsAcceptedOption", "ReturnsNotAccepted");
-
-                        String currencyId = "";
-                        if (UtilValidate.isNotEmpty(requestParams.get("currencyId".concat(id)))) {
-                            currencyId = (String) requestParams.get("currencyId".concat(id));
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("enabledTheme")) && "Y".equals(requestParams.get("enabledTheme"))) {
-                            ListingDesignerType designer = new ListingDesignerType();
-                            String layoutId = (String) requestParams.get("themeGroup");
-                            String themeIdImage = (String) requestParams.get("theme");
-                            String themeId = themeIdImage.substring(0, themeIdImage.indexOf(":"));
-                            designer.setLayoutID(Integer.parseInt(layoutId));
-                            designer.setThemeID(Integer.parseInt(themeId));
-                            item.setListingDesigner(designer);
-                            attributeMapList.put("LayoutID", item.getListingDesigner().getLayoutID());
-                            attributeMapList.put("ThemeID", item.getListingDesigner().getThemeID());
-                        }
-                        if ("_1".equals(id)) {
-                            item.setListingType(ListingTypeCodeType.CHINESE);
-                            AmountType amtStart = new AmountType();
-                            amtStart.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
-                            amtStart.setValue(Double.parseDouble(startPrice));
-                            item.setStartPrice(amtStart);
-
-                            AmountType amtBIN = new AmountType();
-                            amtBIN.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
-                            amtBIN.setValue(Double.parseDouble(buyItNowPrice));
-                            item.setBuyItNowPrice(amtBIN);
-                            attributeMapList.put("BuyItNowPrice", item.getBuyItNowPrice().getValue());
-
-                            if (UtilValidate.isNotEmpty(requestParams.get("reservePrice".concat(id)))) {
-                                AmountType amtResv = new AmountType();
-                                amtResv.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
-                                amtResv.setValue(Double.parseDouble(requestParams.get("reservePrice".concat(id)).toString()));
-                                item.setReservePrice(amtResv);
-                                attributeMapList.put("ReservePrice", item.getReservePrice().getValue());
-                            }
-                        } else if ("_2".equals(id)) {
-                            item.setListingType(ListingTypeCodeType.FIXED_PRICE_ITEM);
-                            AmountType amtBIN = new AmountType();
-                            amtBIN.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
-                            amtBIN.setValue(Double.parseDouble(startPrice));
-                            item.setStartPrice(amtBIN);
-                            if (UtilValidate.isNotEmpty(requestParams.get("enableBestOffer".concat(id)))) {
-                                item.setBestOfferEnabled(Boolean.valueOf(requestParams.get("enableBestOffer".concat(id)).toString()));
-                            }
-                        }
-                        attributeMapList.put("ListingType", item.getListingType().value());
-                        attributeMapList.put("StartPrice", item.getStartPrice().getValue());
-
-                        EbayStoreHelper.mappedPaymentMethods(requestParams, itemPkCateId, addItemObject, item, attributeMapList);
-
-                        ShippingDetailsType shippingDetail = new ShippingDetailsType();
-                        ShippingServiceOptionsType[] shippingOptions = new ShippingServiceOptionsType[1];
-                        ShippingServiceOptionsType shippingOption = new ShippingServiceOptionsType();
-                        shippingOption.setShippingServicePriority(1);
-                        shippingOption.setShippingService(shippingService);
-                        AmountType amtServiceCost = new AmountType();
-                        amtServiceCost.setValue(5.0);
-                        amtServiceCost.setCurrencyID(CurrencyCodeType.USD);
-                        shippingOption.setShippingServiceCost(amtServiceCost);
-                        shippingOptions[0] = shippingOption;
-                        shippingDetail.setShippingType(ShippingTypeCodeType.FLAT);
-                        shippingDetail.setShippingServiceOptions(shippingOptions);
-                        item.setShippingDetails(shippingDetail);
-                        attributeMapList.put("ShippingService", shippingService);
-                        attributeMapList.put("ShippingServiceCost", ""+5.0);
-                        attributeMapList.put("ShippingServiceCostCurrency", "USD");
-                        attributeMapList.put("ShippingServicePriority", "1");
-                        attributeMapList.put("ShippingType", "Flat");
-                        attributeMapList.put("ShippingServiceAdditionalCost", amtServiceCost.getValue());
-
-                        EbayStoreHelper.mappedShippingLocations(requestParams, item, apiContext, request, attributeMapList);
-
-                        if (UtilValidate.isNotEmpty(requestParams.get("vatPercent".concat(id)))) {
-                            VATDetailsType vat = new VATDetailsType();
-                            vat.setVATPercent(new Float(requestParams.get("vatPercent".concat(id)).toString()));
-                            item.setVATDetails(vat);
-                            attributeMapList.put("VATPercent", vat);
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("location"))) {
-                            item.setLocation(requestParams.get("location").toString());
-                            attributeMapList.put("Location", requestParams.get("location").toString());
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("quantity".concat(id)))) {
-                            item.setQuantity(Integer.parseInt(requestParams.get("quantity".concat(id)).toString()));
-                            attributeMapList.put("Quantity", requestParams.get("quantity".concat(id)).toString());
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("duration".concat(id)))) {
-                             item.setListingDuration(requestParams.get("duration".concat(id)).toString());
-                             attributeMapList.put("ListingDuration", requestParams.get("duration".concat(id)).toString());
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("lotsize".concat(id)))) {
-                            item.setLotSize(Integer.parseInt(requestParams.get("lotsize".concat(id)).toString()));
-                            attributeMapList.put("LotSize", requestParams.get("lotsize".concat(id)).toString());
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("postalCode".concat(id)))) {
-                            item.setPostalCode(requestParams.get("postalCode".concat(id)).toString());
-                            attributeMapList.put("PostalCode", requestParams.get("postalCode".concat(id)).toString());
-                        }
-                        StorefrontType storeFront = new StorefrontType();
-                        if (UtilValidate.isNotEmpty(requestParams.get("ebayStore1Category"))) {
-                            String ebayStore1Category = (String)requestParams.get("ebayStore1Category");
-                            if (ebayStore1Category.contains("false")) {
-                                request.setAttribute("_ERROR_MESSAGE_","Please select ebay store category with low level of categories.");
-                                return "error";
-                            } else {
-                                if (ebayStore1Category.contains("true")) ebayStore1Category = ebayStore1Category.substring(0,ebayStore1Category.indexOf(":"));
-                            }
-                            storeFront.setStoreCategoryID(new Long(ebayStore1Category));
-                            attributeMapList.put("StoreCategoryID", ebayStore1Category);
-
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("ebayStore2Category"))) {
-                            String ebayStore2Category = (String)requestParams.get("ebayStore2Category");
-                            if (ebayStore2Category.contains("false")) {
-                                request.setAttribute("_ERROR_MESSAGE_","Please select ebay store category with low level of categories.");
-                                return "error";
-                            } else {
-                                if (ebayStore2Category.contains("true")) ebayStore2Category = ebayStore2Category.substring(0,ebayStore2Category.indexOf(":"));
-                            }
-                            storeFront.setStoreCategory2ID(new Long(ebayStore2Category));
-                            attributeMapList.put("StoreCategory2ID", ebayStore2Category);
-                        }
-                        if (UtilValidate.isNotEmpty(requestParams.get("ebayStore1Category")) || UtilValidate.isNotEmpty(requestParams.get("ebayStore2Category"))) {
-                            item.setStorefront(storeFront);
-                        }
-                        //TODO: set value of country and currency on the basis of request param values
-                        item.setCountry(CountryCodeType.US);
-                        attributeMapList.put("Country", "US");
-                        item.setCurrency(CurrencyCodeType.USD);
-                        attributeMapList.put("Currency", "USD");
-
-                        if (UtilValidate.isNotEmpty(requestParams.get("requireEbayInventory")) && "Y".equals(requestParams.get("requireEbayInventory").toString())) {
-                            GenericValue ebayProductStore = EntityQuery.use(delegator).from("EbayProductStoreInventory").where("productStoreId", productStoreId, "productId", productId).filterByDate().queryFirst();
-                            if (UtilValidate.isNotEmpty(ebayProductStore)) {
-                                String facilityId = ebayProductStore.getString("facilityId");
-                                BigDecimal atp = ebayProductStore.getBigDecimal("availableToPromiseListing");
-                                int intAtp = atp.intValue();
-                                if ((facilityId != "")  && (intAtp != 0)) {
-                                    int newAtp = intAtp - 1;
-                                    Map<String,Object> inMap = new HashMap<String, Object>();
-                                    inMap.put("productStoreId", productStoreId);
-                                    inMap.put("facilityId", facilityId);
-                                    inMap.put("productId", productId);
-                                    inMap.put("availableToPromiseListing", new BigDecimal(newAtp));
-                                    inMap.put("userLogin", userLogin);
-                                    try {
-                                        dispatcher.runSync("updateEbayProductStoreInventory", inMap);
-                                    } catch (GenericServiceException ex) {
-                                        Debug.logError(ex.getMessage(), module);
-                                        request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
-                                        return "error";
-                                    }
-                                    itemObj.put("requireEbayInventory", "Y");
-                                }
-                            }
-                        }
-                        addItemCall.setItem(item);
-
-                        // create/update EbayProductListing entity
-                        Map<String, Object> prodMap = new HashMap<String, Object>();
-                        prodMap.put("productStoreId", productStoreId);
-                        prodMap.put("productId", productId);
-                        prodMap.put("userLogin", userLogin);
-                        if (UtilValidate.isNotEmpty(requestParams.get("isAutoRelist"))) {
-                            prodMap.put("autoRelisting", "Y");
-                            itemObj.put("isAutoRelist", "Y");
-                        }
-                        try {
-                            GenericValue storeRole = EntityQuery.use(delegator).from("ProductStoreRole").where("productStoreId", productStoreId, "roleTypeId", "EBAY_ACCOUNT").queryFirst();
-                            if (UtilValidate.isNotEmpty(storeRole)) {
-                                GenericValue eBayUserLogin = EntityQuery.use(delegator).from("UserLogin")
-                                                                           .where("partyId", storeRole.get("partyId"))
-                                                                           .queryFirst();
-                                if (UtilValidate.isNotEmpty(eBayUserLogin)) {
-                                    prodMap.put("userLoginId", eBayUserLogin.get("userLoginId").toString());
-                                }
-                            }
-                        } catch (GenericEntityException ex) {
-                            Debug.logError(ex.getMessage(), module);
-                            request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
-                            return "error";
-                        }
-                        String productListingId = null;
-                        if (UtilValidate.isEmpty(itemObj.get("productListingId"))) {
-                            try {
-                                prodMap.put("statusId", "ITEM_CREATED");
-                                Map<String, Object> result = dispatcher.runSync("createEbayProductListing", prodMap);
-                                productListingId = result.get("productListingId").toString();
-                                itemObj.put("productListingId", productListingId);
-                                itemObj.put("isSaved", "Y");
-                            } catch (GenericServiceException ex) {
-                                Debug.logError(ex.getMessage(), module);
-                                request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
-                                return "error";
-                            }
-                        } else {
-                            productListingId = itemObj.get("productListingId").toString();
-                            prodMap.put("productListingId", productListingId);
-                            try {
-                                dispatcher.runSync("updateEbayProductListing", prodMap);
-                            } catch (GenericServiceException ex) {
-                                Debug.logError(ex.getMessage(), module);
-                                request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
-                                return "error";
-                            }
-                        }
-
-                        // create/update EbayProductListingAttribute
-                        if (UtilValidate.isNotEmpty(productListingId)) {
-                            attributeMapList.put("productListingId", productListingId);
-                            Map<String, Object> ebayProdAttrMap = new HashMap<String, Object>();
-                            ebayProdAttrMap.put("productListingId", productListingId);
-                            ebayProdAttrMap.put("userLogin", userLogin);
-                            ebayProdAttrMap.put("attributeMapList", attributeMapList);
-                            try {
-                                dispatcher.runSync("setEbayProductListingAttribute", ebayProdAttrMap);
-                            } catch (GenericServiceException ex) {
-                                Debug.logError(ex.getMessage(), module);
-                                request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
-                                return "error";
-                            }
-                        }
-                    }
-                }
-            }
-            request.setAttribute("productStoreId", requestParams.get("productStoreId"));
-        } catch(Exception e) {
-            Debug.logError(e.getMessage(), module);
-            request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-            return "error";
-        }
-        return "success";
-    }
-
-    public static String verifyItemBeforeAddAndExportToEbay(HttpServletRequest request, HttpServletResponse response) {
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-        String productStoreId = (String) requestParams.get("productStoreId");
-        HttpSession session = request.getSession(true);
-        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
-
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            VerifyAddItemRequestType req = new VerifyAddItemRequestType();
-            VerifyAddItemResponseType resp = null;
-            AddItemResponseType addItemResp = null;
-
-
-            VerifyAddItemCall verifyCall = new VerifyAddItemCall(apiContext);
-            Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-            List<Map<String,Object>> listAddItem = null;
-            if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
-                listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
-            } else {
-                listAddItem = new LinkedList<Map<String,Object>>();
-            }
-            double feesummary = 0.0;
-            for (Map<String,Object> itemObj : listAddItem) {
-                AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
-                ItemType item = addItemCall.getItem();
-                String SKU = item.getSKU();
-                if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
-                    String productId = requestParams.get("productId").toString();
-                    if (productId.equals(SKU)) {
-                        req.setItem(item);
-                        resp = (VerifyAddItemResponseType) verifyCall.execute(req);
-                        if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
-                            itemObj.put("isVerify", "Y");
-                            FeesType feest = resp.getFees();
-                            FeeType[] fees = feest.getFee();
-                            for (FeeType fee : fees) {
-                                double dfee = fee.getFee().getValue();
-                                feesummary = feesummary + dfee;
-                            }
-                            //if item is verified then export it to ebay
-                            AddItemRequestType addItemReq = new AddItemRequestType();
-                            addItemReq.setItem(item);
-                            addItemResp = (AddItemResponseType) addItemCall.execute(addItemReq);
-                            if (addItemResp != null && "SUCCESS".equals(addItemResp.getAck().toString())) {
-                                removeProductFromListing(request, response);
-                            }
-                        } else {
-                            EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, resp.getAck().toString(), "Verify Item : verifyItemBeforeAdd", resp.getErrors(0).getLongMessage());
-                        }
-                    }
-                }
-            }
-            //request.setAttribute("itemFee", feesummary);
-            request.setAttribute("productStoreId", requestParams.get("productStoreId"));
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-            request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-            return "error";
-        }
-        return "success";
-    }
-
-    public static String removeProductFromListing(HttpServletRequest request, HttpServletResponse response) {
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-        String productStoreId = (String) requestParams.get("productStoreId");
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-            List<Map<String,Object>> listAddItem = null;
-            if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
-                listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
-            } else {
-                listAddItem = new LinkedList<Map<String,Object>>();
-            }
-            int i = 0;
-            for (Map<String,Object> itemObj : listAddItem) {
-                AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
-                ItemType item = addItemCall.getItem();
-                String SKU = item.getSKU();
-                if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
-                    String productId = requestParams.get("productId").toString();
-                    if (productId.equals(SKU)) {
-                        listAddItem.remove(i);
-                    }
-                }
-                i++;
-            }
-            if (listAddItem.size() <=0) {
-                removeItemListingObject(request, apiContext);
-            }
-            request.setAttribute("productStoreId", requestParams.get("productStoreId"));
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-            request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-            return "error";
-        }
-        return "success";
-    }
-
-    public static String exportListingToEbay(HttpServletRequest request, HttpServletResponse response) {
-        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-        String productStoreId = (String) requestParams.get("productStoreId");
-        HttpSession session = request.getSession(true);
-        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
-            List<Map<String,Object>> listAddItem = null;
-            if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
-                listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
-            } else {
-                listAddItem = new LinkedList<Map<String,Object>>();
-            }
-            for (Map<String,Object> itemObj : listAddItem) {
-                updateQuantityInventoryProduct(itemObj, productStoreId, locale, delegator, dispatcher, userLogin);
-                dispatcher.runSync("exportProductEachItem", UtilMisc.toMap("itemObject", itemObj));
-            }
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-            request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
-            return "error";
-        }
-        return "success";
-    }
-
-    private static void updateQuantityInventoryProduct(Map<String, Object> itemObj, String productStoreId, Locale locale, Delegator delegator, LocalDispatcher dispatcher, GenericValue userLogin) {
-        try {
-            AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
-            ItemType item = addItemCall.getItem();
-            String productId = item.getSKU();
-            if (UtilValidate.isNotEmpty(itemObj.get("requireEbayInventory")) && (itemObj.get("requireEbayInventory").equals("Y"))) {
-                GetSellingManagerInventoryRequestType req = new GetSellingManagerInventoryRequestType();
-                GetSellingManagerInventoryResponseType resp =  null;
-                SellingManagerProductType[] returnedSellingManagerProductType = null;
-                GetSellingManagerInventoryCall call = new GetSellingManagerInventoryCall(EbayStoreHelper.getApiContext(productStoreId, locale, delegator));
-                resp = (GetSellingManagerInventoryResponseType)call.execute(req);
-                if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
-                    returnedSellingManagerProductType  = resp.getSellingManagerProduct();
-                    for (int i = 0; i < returnedSellingManagerProductType.length; i++) {
-                        SellingManagerProductDetailsType prodDetailType = returnedSellingManagerProductType[i].getSellingManagerProductDetails();
-                        String productIdInv = Long.toString(prodDetailType.getProductID());
-                        if (productId.equals(productIdInv)) {
-                            int qty = prodDetailType.getQuantityAvailable();
-                            if (qty > 0) {
-                                int newQty = qty - 1;
-                                prodDetailType.setQuantityAvailable(newQty);
-                                ReviseSellingManagerProductCall revProdCall = new ReviseSellingManagerProductCall(EbayStoreHelper.getApiContext(productStoreId, locale, delegator));
-                                ReviseSellingManagerProductRequestType revReq = new ReviseSellingManagerProductRequestType();
-                                ReviseSellingManagerProductResponseType revResp = null;
-                                revReq.setSellingManagerProductDetails(prodDetailType);
-                                revResp = (ReviseSellingManagerProductResponseType) revProdCall.execute(revReq);
-                                if (revResp != null && "SUCCESS".equals(revResp.getAck().toString())) {
-                                    Debug.logInfo("  Already update quantity on eBay inventory with product id ::"+revResp.getSellingManagerProductDetails().getProductID(), module);
-                                } else {
-                                    EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, revResp.getAck().toString(), "ReviseSellingManagerProductCall : updateQuantityInventoryProduct", revResp.getErrors(0).getLongMessage());
-                                }
-                            }
-                        }
-                    }
-                } else {
-                    EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, resp.getAck().toString(), "GetSellingManagerInventoryCall : updateQuantityInventoryProduct", resp.getErrors(0).getLongMessage());
-                }
-            }
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-        }
-    }
-    
-    public static Map<String, Map<String, List<String>>> categorySpecifics(String categoryId, HttpServletRequest request) {
-        Map<String, Map<String, List<String>>> recommendationMap = new HashMap<String, Map<String,List<String>>>();
-        Delegator delegator = (Delegator) request.getAttribute("delegator");
-        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
-        Locale locale = UtilHttp.getLocale(request);
-        String productStoreId = (String) requestParams.get("productStoreId");
-        
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            GetCategorySpecificsCall categorySpecifics = new GetCategorySpecificsCall(apiContext);
-            String[] categoryIds = {categoryId};
-            categorySpecifics.setCategoryID(categoryIds);
-            DetailLevelCodeType[] detailLevel = new DetailLevelCodeType[] {
-                    DetailLevelCodeType.RETURN_ALL,
-                    DetailLevelCodeType.ITEM_RETURN_ATTRIBUTES,
-                    DetailLevelCodeType.ITEM_RETURN_DESCRIPTION
-            };
-            categorySpecifics.setDetailLevel(detailLevel);
-            RecommendationsType[] recommend =  categorySpecifics.getCategorySpecifics();
-            
-            for (int i = 0; i < recommend.length; i++) {
-                NameRecommendationType[] nameRecommend = recommend[i].getNameRecommendation();
-                Map<String, List<String>> nameRecommendationMap = new HashMap<String, List<String>>();
-                for (int j = 0; j < nameRecommend.length; j++) {
-                    String name = nameRecommend[j].getName();
-                    List<String> valueList = new LinkedList<String>();
-                    ValueRecommendationType[] valueRecommend = nameRecommend[j].getValueRecommendation();
-                    for (int k = 0; k < valueRecommend.length; k++) {
-                        String value = valueRecommend[k].getValue();
-                        valueList.add(value);
-                    }
-                    nameRecommendationMap.put(name, valueList);
-                }
-                recommendationMap.put("categorySpecifics", nameRecommendationMap);
-            }
-        } catch (Exception e) {
-            Debug.logError(e.getMessage(), module);
-            return null;
-        }
-        return recommendationMap;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.ofbiz.ebaystore;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilGenerics;
+import org.ofbiz.base.util.UtilHttp;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.util.EntityQuery;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.LocalDispatcher;
+
+import com.ebay.sdk.ApiContext;
+import com.ebay.sdk.ApiException;
+import com.ebay.sdk.SdkException;
+import com.ebay.sdk.call.AddItemCall;
+import com.ebay.sdk.call.GetCategorySpecificsCall;
+import com.ebay.sdk.call.GetSellingManagerInventoryCall;
+import com.ebay.sdk.call.ReviseSellingManagerProductCall;
+import com.ebay.sdk.call.VerifyAddItemCall;
+import com.ebay.soap.eBLBaseComponents.AmountType;
+import com.ebay.soap.eBLBaseComponents.CategoryType;
+import com.ebay.soap.eBLBaseComponents.CountryCodeType;
+import com.ebay.soap.eBLBaseComponents.CurrencyCodeType;
+import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
+import com.ebay.soap.eBLBaseComponents.FeeType;
+import com.ebay.soap.eBLBaseComponents.FeesType;
+import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryRequestType;
+import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryResponseType;
+import com.ebay.soap.eBLBaseComponents.ItemType;
+import com.ebay.soap.eBLBaseComponents.ListingDesignerType;
+import com.ebay.soap.eBLBaseComponents.ListingTypeCodeType;
+import com.ebay.soap.eBLBaseComponents.NameRecommendationType;
+import com.ebay.soap.eBLBaseComponents.NameValueListArrayType;
+import com.ebay.soap.eBLBaseComponents.NameValueListType;
+import com.ebay.soap.eBLBaseComponents.PictureDetailsType;
+import com.ebay.soap.eBLBaseComponents.RecommendationsType;
+import com.ebay.soap.eBLBaseComponents.ReturnPolicyType;
+import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductRequestType;
+import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductResponseType;
+import com.ebay.soap.eBLBaseComponents.SellingManagerProductDetailsType;
+import com.ebay.soap.eBLBaseComponents.SellingManagerProductType;
+import com.ebay.soap.eBLBaseComponents.ShippingDetailsType;
+import com.ebay.soap.eBLBaseComponents.ShippingServiceDetailsType;
+import com.ebay.soap.eBLBaseComponents.ShippingServiceOptionsType;
+import com.ebay.soap.eBLBaseComponents.ShippingTypeCodeType;
+import com.ebay.soap.eBLBaseComponents.SiteCodeType;
+import com.ebay.soap.eBLBaseComponents.StoreCustomCategoryType;
+import com.ebay.soap.eBLBaseComponents.StorefrontType;
+import com.ebay.soap.eBLBaseComponents.VATDetailsType;
+import com.ebay.soap.eBLBaseComponents.ValueRecommendationType;
+import com.ebay.soap.eBLBaseComponents.VerifyAddItemRequestType;
+import com.ebay.soap.eBLBaseComponents.VerifyAddItemResponseType;
+import com.ebay.soap.eBLBaseComponents.WarningLevelCodeType;
+import com.ebay.soap.eBLBaseComponents.AddItemRequestType;
+import com.ebay.soap.eBLBaseComponents.AddItemResponseType;
+
+public class EbayEvents {
+
+    private static final int SHIPPING_SERVICE_ID_LIMIT = 50000;
+    public static final String module = EbayEvents.class.getName();
+
+    public static String sendLeaveFeedback(HttpServletRequest request, HttpServletResponse response) {
+        HttpSession session = request.getSession(true);
+        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
+        Map<String, Object> requestParams = UtilHttp.getParameterMap(request);
+        GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
+        int feedbackSize = Integer.parseInt((String)requestParams.get("feedbackSize"));
+        String productStoreId = (String)requestParams.get("productStoreId");
+        for (int i = 1; i <= feedbackSize; i++) {
+            String commentType = (String)requestParams.get("commentType"+i);
+            String commentText = (String)requestParams.get("commentText"+i);
+            if (!commentType.equals("none") && commentText != null) {
+                String itemId = (String)requestParams.get("itemId"+i);
+                String transactionId = (String)requestParams.get("transactionId"+i);
+                String targetUser = (String)requestParams.get("targetUser"+i);
+                String commentingUser = (String)requestParams.get("commentingUser"+i);
+                String role = (String)requestParams.get("role"+i);
+                String ratingItem = (String)requestParams.get("ratingItem"+i);
+                String ratingComm = (String)requestParams.get("ratingComm"+i);
+                String ratingShip = (String)requestParams.get("ratingShip"+i);
+                String ratingShipHand = (String)requestParams.get("ratingShipHand"+i);
+                String AqItemAsDescribedId = (String)requestParams.get("AqItemAsDescribedId"+i);
+
+                Map<String, Object> leavefeedback =  new HashMap<String, Object>();
+                leavefeedback.put("productStoreId", productStoreId);
+                leavefeedback.put("userLogin", userLogin);
+                leavefeedback.put("itemId", itemId);
+                leavefeedback.put("transactionId", transactionId);
+                leavefeedback.put("targetUser", targetUser);
+                leavefeedback.put("commentingUser", commentingUser);
+                leavefeedback.put("role", role);
+                leavefeedback.put("commentText", commentText);
+                leavefeedback.put("commentType", commentType);
+                leavefeedback.put("ratingItem", ratingItem);
+                leavefeedback.put("ratingComm", ratingComm);
+                leavefeedback.put("ratingShip", ratingShip);
+                leavefeedback.put("ratingShipHand", ratingShipHand);
+                leavefeedback.put("AqItemAsDescribedId", AqItemAsDescribedId);
+                // Call service
+                try {
+                    dispatcher.runSync("leaveFeedback", leavefeedback);
+                } catch (GenericServiceException e) {
+                    Debug.logError(e, module);
+                    request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
+                    return "error";
+                }
+            }
+        }
+        return "success";
+    }
+    /* event to add products to prepare create & export listing */
+    public static String addProductListing(HttpServletRequest request, HttpServletResponse response) {
+        Delegator delegator = (Delegator) request.getAttribute("delegator");
+        Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
+        Locale locale = UtilHttp.getLocale(request);
+
+        if (UtilValidate.isEmpty(requestParams.get("productStoreId"))) {
+            request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
+            return "error";
+        }
+        List<String> productIds = UtilGenerics.checkList(requestParams.get("productIds"));
+        if (UtilValidate.isNotEmpty(requestParams.get("productIds"))) {
+            productIds = UtilGenerics.checkList(requestParams.get("productIds"));
+        } else if (UtilValidate.isNotEmpty(requestParams.get("selectResult"))) {
+            try {
+                productIds = UtilGenerics.checkList(requestParams.get("selectResult"));
+            } catch (ClassCastException e) {
+                if (UtilValidate.isEmpty(productIds)) productIds = new LinkedList<String>();
+                productIds.add((String) requestParams.get("selectResult"));
+            }
+        } else {
+            request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
+            return "error";
+        }
+        String productStoreId = (String) requestParams.get("productStoreId");
+
+        ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
+        //String webSiteUrl = (String) requestParams.get("webSiteUrl");
+        String webSiteUrl = "http://demo-trunk.ofbiz.apache.org";
+        Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
+        List<Map<String,Object>> itemObjs = null;
+        if (UtilValidate.isNotEmpty(addItemObject.get("itemListings"))) {
+            itemObjs = UtilGenerics.checkList(addItemObject.get("itemListings"));
+        } else {
+            itemObjs = new LinkedList<Map<String,Object>>();
+        }
+
+        if (UtilValidate.isNotEmpty(productIds)) {
+            try {
+                // check  add new product obj ? to export
+                for (String productId : productIds) {
+                    for (Map<String,Object> itObj : itemObjs) {
+                        if (UtilValidate.isNotEmpty(itObj.get(productId.concat("_Obj")))) {
+                            productIds.remove(productId);
+                        }
+                    }
+                }
+                Debug.logInfo("run in with productIds "+productIds, module);
+                for (String productId : productIds) {
+                    AddItemCall addItemCall = new AddItemCall(apiContext);
+                    ItemType item = new ItemType();
+                    GenericValue product = EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne();
+                    item.setTitle(product.getString("internalName"));
+                    item.setCurrency(CurrencyCodeType.USD);
+                    String productDescription = "";
+                    String description = product.getString("description");
+                    String longDescription = product.getString("longDescription");
+                    if (UtilValidate.isNotEmpty(description)) {
+                        productDescription = description;
+                    } else if (UtilValidate.isNotEmpty(longDescription)) {
+                        productDescription = longDescription;
+                    } else if (UtilValidate.isNotEmpty(product.getString("productName"))) {
+                        productDescription = product.getString("productName");
+                    }
+                    item.setDescription(productDescription);
+                    item.setSKU(product.getString("productId"));
+                    item.setApplicationData(product.getString("productId"));
+                    item.setCountry(CountryCodeType.US);
+                    item.setQuantity(1);
+                    String smallImage = product.getString("smallImageUrl");
+                    String mediumImage = product.getString("mediumImageUrl");
+                    String largeImage = product.getString("largeImageUrl");
+                    String ebayImage = null;
+                    if (UtilValidate.isNotEmpty(largeImage)) {
+                        ebayImage = largeImage;
+                    } else if (UtilValidate.isNotEmpty(mediumImage)) {
+                        ebayImage = mediumImage;
+                    } else if (UtilValidate.isNotEmpty(smallImage)) {
+                        ebayImage = smallImage;
+                    }
+                    if (UtilValidate.isNotEmpty(ebayImage)) {
+                        PictureDetailsType pic = new PictureDetailsType();
+                        String pictureUrl = webSiteUrl + ebayImage;
+                        String[] picURL = new String[1];
+                        picURL[0] = pictureUrl;
+                        //String[] picURL = {webSiteUrl + ebayImage};
+                        //pic.setPictureURL(picURL);
+                        pic.setPictureURL(picURL);
+                        item.setPictureDetails(pic);
+                    }
+                    item.setCategoryMappingAllowed(true);
+                    item.setSite(apiContext.getSite());
+                    addItemCall.setSite(apiContext.getSite());
+                    addItemCall.setItem(item);
+                    addItemCall.setWarningLevel(WarningLevelCodeType.HIGH);
+
+                    Map<String,Object> itemListing = null;
+                    for (Map<String,Object> itemObj : itemObjs) {
+                        if (UtilValidate.isNotEmpty(itemObj.get(productId.concat("_Obj")))) {
+                            itemListing = UtilGenerics.checkMap(itemObj.get(productId.concat("_Obj")));
+                            itemListing.put("addItemCall", addItemCall);
+                            itemListing.put("productId", productId);
+                            break;
+                        }
+                    }
+                    if (UtilValidate.isEmpty(itemListing)) {
+                        itemListing = new HashMap<String, Object>();
+                        itemListing.put("addItemCall", addItemCall);
+                        itemListing.put("productId", productId);
+                    }
+                    itemObjs.add(itemListing);
+                }
+                addItemObject.put("itemListing", itemObjs);
+            } catch (Exception e) {
+                Debug.logError(e.getMessage(), module);
+                request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
+                return "error";
+            }
+        }
+        return "success";
+    }
+
+    public static String prepareEbaySiteFacadeObject(HttpServletRequest request, HttpServletResponse response) {
+        HttpSession session = request.getSession(true);
+        if (request.getParameter("productStoreId") == null) {
+            return "error";
+        }
+        ApiContext apiContext = getApiContext(request);
+        try {
+            if (UtilValidate.isNotEmpty(apiContext)) {
+                String siteCode = apiContext.getSite().name();
+                if (UtilValidate.isNotEmpty(session.getAttribute("itemListings_".concat(siteCode)))) {
+                    request.setAttribute("productStoreId", request.getParameter("productStoreId"));
+                    return "prepare";
+                }
+                getSiteFacade(apiContext,request);
+            } else {
+                request.setAttribute("_ERROR_MESSAGE_","No apiContext for this account or this site please register on ebay or check you user account.");
+                return "error";
+            }
+        } catch (ApiException e) {
+            request.setAttribute("_ERROR_MESSAGE_","ApiException ".concat(e.getMessage()));
+            return "error";
+        } catch (SdkException e) {
+            request.setAttribute("_ERROR_MESSAGE_","SdkException ".concat(e.getMessage()));
+            return "error";
+        } catch (Exception e) {
+            request.setAttribute("_ERROR_MESSAGE_","Exception ".concat(e.getMessage()));
+            return "error";
+        }
+        return "success";
+    }
+
+    public static EbayStoreSiteFacade getSiteFacade(ApiContext apiContext, HttpServletRequest request) throws ApiException, SdkException, Exception{
+        String siteFacadeName = null;
+        EbayStoreSiteFacade siteFacade = null;
+
+        if (request.getParameter("productStoreId") == null) {
+            Debug.logError("Required productStoreId for get ebay information.", module);
+            return siteFacade;
+        }
+
+        HttpSession session = request.getSession(true);
+        if (UtilValidate.isNotEmpty(apiContext)) {
+            siteFacadeName = "siteFacade".concat("_".concat(apiContext.getSite().name()));
+        }
+
+        if (UtilValidate.isEmpty(session.getAttribute(siteFacadeName))) {
+            session.setAttribute(siteFacadeName,new EbayStoreSiteFacade(apiContext));
+            if (UtilValidate.isNotEmpty(session.getAttribute(siteFacadeName))) {
+                siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
+            }
+        } else {
+            siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
+        }
+        Debug.logInfo("loaded session for ebay site Facade is ".concat(siteFacadeName).concat(session.getAttribute(siteFacadeName).toString()),module);
+        return siteFacade;
+    }
+
+    public static ApiContext getApiContext(HttpServletRequest request) {
+        Locale locale = UtilHttp.getLocale(request);
+        Delegator delegator = (Delegator) request.getAttribute("delegator");
+
+        if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
+            Debug.logError("Required productStoreId for get ebay API config data.", module);
+            return null;
+        }

[... 853 lines stripped ...]
Propchange: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayEvents.java
            ('svn:eol-style' removed)