Author: ashish
Date: Tue Sep 22 12:11:50 2009
New Revision: 817628

URL: http://svn.apache.org/viewvc?rev=817628&view=rev
Log:
Here comes another update on eBay for the newly created screen before few days.
That screen was showing the deleted Transactions & Orders that were associated 
with Seller.

So we have implemented new call "GetMyeBaySelling" (and for sure without this 
call you can't exclude the deleted orders / transactions). It was more and more 
of reading and exploring things in eBay area and finally we got good results - 
so feeling little better now :-).

Thanks Jacopo for your comment to include this feature in OFBiz trunk.

Modified:
    ofbiz/trunk/specialpurpose/ebay/src/org/ofbiz/ebay/EbayOrderServices.java

Modified: 
ofbiz/trunk/specialpurpose/ebay/src/org/ofbiz/ebay/EbayOrderServices.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ebay/src/org/ofbiz/ebay/EbayOrderServices.java?rev=817628&r1=817627&r2=817628&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ebay/src/org/ofbiz/ebay/EbayOrderServices.java 
(original)
+++ ofbiz/trunk/specialpurpose/ebay/src/org/ofbiz/ebay/EbayOrderServices.java 
Tue Sep 22 12:11:50 2009
@@ -62,7 +62,8 @@
     private static final String module = EbayOrderServices.class.getName();
     private static boolean isGetSellerTransactionsCall = false;
     private static boolean isGetOrdersCall = false;
-    private static List orderList = new ArrayList();
+    private static boolean isGetMyeBaySellingCall = false;
+    private static List orderList = FastList.newInstance();
     private static List getSellerTransactionsContainingOrderList = new 
ArrayList(); 
     private static List<String> orderImportSuccessMessageList = 
FastList.newInstance();
     private static List<String> orderImportFailureMessageList = 
FastList.newInstance();
@@ -97,8 +98,18 @@
                     result = checkOrders(delegator, dispatcher, locale, 
context, getOrdersSuccessMsg);
                 }
             }
+            
+            StringBuffer getMyeBaySellingXml = new StringBuffer();
+            if (!ServiceUtil.isFailure(buildGetMyeBaySellingRequest(context, 
getMyeBaySellingXml, eBayConfigResult.get("token").toString()))) {
+                result = 
EbayHelper.postItem(eBayConfigResult.get("xmlGatewayUri").toString(), 
getMyeBaySellingXml, eBayConfigResult.get("devID").toString(), 
eBayConfigResult.get("appID").toString(), 
eBayConfigResult.get("certID").toString(), "GetMyeBaySelling", 
eBayConfigResult.get("compatibilityLevel").toString(), 
eBayConfigResult.get("siteID").toString());
+                String getMyeBaySellingSuccessMsg = (String) 
result.get(ModelService.SUCCESS_MESSAGE);
+                if (getMyeBaySellingSuccessMsg != null) {
+                    isGetMyeBaySellingCall = true;
+                    result = checkOrders(delegator, dispatcher, locale, 
context, getMyeBaySellingSuccessMsg);
+                }
+            }
         } catch (Exception e) {
-            String errMsg = UtilProperties.getMessage(resource, 
"buildEbayConfig.exceptionInGetOrdersFromEbay" + e.getMessage(), locale);
+            String errMsg = UtilProperties.getMessage(resource, 
"buildEbayConfig.exceptionInGetOrdersFromEbay========" + e.getMessage(), 
locale);
             return ServiceUtil.returnError(errMsg);
         }
         return result;
@@ -224,11 +235,31 @@
          return ServiceUtil.returnSuccess();
     }
 
+    private static Map<String, Object> 
buildGetMyeBaySellingRequest(Map<String, Object> context, StringBuffer 
getMyeBaySellingXml, String token) {
+        Locale locale = (Locale) context.get("locale");
+        try {
+             Document transDoc = 
UtilXml.makeEmptyXmlDocument("GetMyeBaySellingRequest");
+             Element transElem = transDoc.getDocumentElement();
+             transElem.setAttribute("xmlns", 
"urn:ebay:apis:eBLBaseComponents");
+
+             EbayHelper.appendRequesterCredentials(transElem, transDoc, token);
+             
+             Element deletedFromSoldListElem = 
UtilXml.addChildElement(transElem, "DeletedFromSoldList", transDoc);
+             UtilXml.addChildElementValue(deletedFromSoldListElem, "Sort", 
"ItemID", transDoc);
+             //Debug.logInfo("The value of generated string is ======= " + 
UtilXml.writeXmlDocument(transDoc), module);
+             getMyeBaySellingXml.append(UtilXml.writeXmlDocument(transDoc));
+         } catch (Exception e) {
+             Debug.logError("Exception during building MyeBaySelling request", 
module);
+             return 
ServiceUtil.returnFailure(UtilProperties.getMessage(resource, 
"ordersImportFromEbay.exceptionDuringBuildingMyeBaySellingRequest", locale));
+         }
+         return ServiceUtil.returnSuccess();
+    }
+    
     private static Map<String, Object> checkOrders(GenericDelegator delegator, 
LocalDispatcher dispatcher, Locale locale, Map<String, Object> context, String 
responseMsg) {
         StringBuffer errorMessage = new StringBuffer();
         Map<String, Object> result = FastMap.newInstance();
         GenericValue userLogin = (GenericValue) context.get("userLogin");
-        if (isGetSellerTransactionsCall && !isGetOrdersCall) {
+        if (isGetSellerTransactionsCall) {
             List getSellerTransactionList = 
readGetSellerTransactionResponse(responseMsg, locale, (String) 
context.get("productStoreId"), delegator, dispatcher, errorMessage, userLogin);
             if (UtilValidate.isNotEmpty(getSellerTransactionList)) {
                 orderList.addAll(getSellerTransactionList);
@@ -237,8 +268,25 @@
             return ServiceUtil.returnSuccess();
         } else if (isGetOrdersCall) {
             List getOrdersList = readGetOrdersResponse(responseMsg, locale, 
(String) context.get("productStoreId"), delegator, dispatcher, errorMessage, 
userLogin);
-            orderList.addAll(getOrdersList);
+            if (UtilValidate.isNotEmpty(getOrdersList)) {
+                orderList.addAll(getOrdersList);                
+            }
             isGetOrdersCall = false;
+            return ServiceUtil.returnSuccess();
+        } else if (isGetMyeBaySellingCall) {
+            // for now fetching only deleted transaction & orders value from 
the sold list.
+            List eBayDeletedOrdersAndTransactionList = 
readGetMyeBaySellingResponse(responseMsg, locale, (String) 
context.get("productStoreId"), delegator, dispatcher, errorMessage, userLogin);
+            if (UtilValidate.isNotEmpty(eBayDeletedOrdersAndTransactionList)) {
+                Debug.logInfo("The value of getMyeBaySellingList" + 
eBayDeletedOrdersAndTransactionList, module);
+                Iterator orderListIter = orderList.iterator();
+                while (orderListIter.hasNext()) {
+                    Map orderCtx = (Map) orderListIter.next();
+                    if 
(eBayDeletedOrdersAndTransactionList.contains(orderCtx.get("externalId"))) {
+                         // Now finally exclude orders & transaction that has 
been deleted from sold list.
+                        orderList.remove(orderCtx);
+                    }
+                }
+            }
         }
         if (orderList == null || orderList.size() == 0) {
             Debug.logError("No orders found", module);
@@ -579,7 +627,6 @@
         return fetchedOrders;
     }
     
-    
     private static List readGetSellerTransactionResponse(String responseMsg, 
Locale locale, String productStoreId, GenericDelegator delegator, 
LocalDispatcher dispatcher, StringBuffer errorMessage, GenericValue userLogin) {
         List fetchedOrders = new ArrayList();
         try {
@@ -857,6 +904,72 @@
         return fetchedOrders;
     }
     
+    private static List readGetMyeBaySellingResponse(String responseMsg, 
Locale locale, String productStoreId, GenericDelegator delegator, 
LocalDispatcher dispatcher, StringBuffer errorMessage, GenericValue userLogin) {
+        List fetchDeletedOrdersAndTransactions = new ArrayList();
+        try {
+            Document docResponse = UtilXml.readXmlDocument(responseMsg, true);
+            //Debug.logInfo("The generated string is ======= " + 
UtilXml.writeXmlDocument(docResponse), module);
+            Element elemResponse = docResponse.getDocumentElement();
+            String ack = UtilXml.childElementValue(elemResponse, "Ack", 
"Failure");
+            List paginationList = UtilXml.childElementList(elemResponse, 
"PaginationResult");
+
+            if (ack != null && "Success".equals(ack)) {
+                // retrieve transaction array
+                List deletedFromSoldList = 
UtilXml.childElementList(elemResponse, "DeletedFromSoldList");
+                Iterator deletedFromSoldElemIter = 
deletedFromSoldList.iterator();
+                while (deletedFromSoldElemIter.hasNext()) {
+                    Element deletedFromSoldElement = (Element) 
deletedFromSoldElemIter.next();
+                    // retrieve transaction
+                    List orderTransactionArrayList = 
UtilXml.childElementList(deletedFromSoldElement, "OrderTransactionArray");
+                    Iterator orderTransactionArrayElemIter = 
orderTransactionArrayList.iterator();
+                    while (orderTransactionArrayElemIter.hasNext()) {
+                        Element orderTransactionArrayElement = (Element) 
orderTransactionArrayElemIter.next();
+                        List orderTransactionList = 
UtilXml.childElementList(orderTransactionArrayElement, "OrderTransaction");
+                        Iterator orderTransactionElemIter = 
orderTransactionList.iterator();
+                        while (orderTransactionElemIter.hasNext()) {
+                            Element orderTransactionElement = (Element) 
orderTransactionElemIter.next();
+
+                            List sellerOrderList = 
UtilXml.childElementList(orderTransactionElement, "Order");
+                            Iterator sellerOrderElemIter = 
sellerOrderList.iterator();
+                            while (sellerOrderElemIter.hasNext()) {
+                                Element sellerOrderElement = (Element) 
sellerOrderElemIter.next();
+                                String orderId = 
UtilXml.childElementValue(sellerOrderElement, "OrderID");
+                                if (UtilValidate.isNotEmpty(orderId)) {
+                                    
fetchDeletedOrdersAndTransactions.add(orderId);
+                                }
+                            }    
+                            List transactionList = 
UtilXml.childElementList(orderTransactionElement, "Transaction");
+                            Iterator transactionElemIter = 
transactionList.iterator();
+                            while (transactionElemIter.hasNext()) {
+                                Element transactionElement = (Element) 
transactionElemIter.next();
+                                
+                                List itemList = 
UtilXml.childElementList(transactionElement, "Item");
+                                Iterator itemElemIter = itemList.iterator();
+                                while (itemElemIter.hasNext()) {
+                                    Element itemElement = (Element) 
itemElemIter.next();
+                                    String itemId = 
UtilXml.childElementValue(itemElement, "ItemID");
+                                    if (UtilValidate.isNotEmpty(itemId)) {
+                                        
fetchDeletedOrdersAndTransactions.add(itemId);
+                                    }
+                                }
+                            }
+                        }
+                    }    
+                }
+            } else {
+                List errorList = UtilXml.childElementList(elemResponse, 
"Errors");
+                Iterator errorElemIter = errorList.iterator();
+                while (errorElemIter.hasNext()) {
+                    Element errorElement = (Element) errorElemIter.next();
+                    
errorMessage.append(UtilXml.childElementValue(errorElement, "ShortMessage", 
""));
+                }
+            }
+        } catch (Exception e) {
+            Debug.logError("Exception during read response from Ebay", module);
+        }
+        return fetchDeletedOrdersAndTransactions;
+    }
+    
     private static Map createShoppingCart(GenericDelegator delegator, 
LocalDispatcher dispatcher, Locale locale, Map context, boolean create) {
         Map<String, Object> result = FastMap.newInstance();
         try {


Reply via email to