blob: 8f8e37994b032f729a4730ee9e5fd94665125af8 [file] [log] [blame]
/*
* 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.apache.ofbiz.ebay;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.UtilCodec;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.base.util.UtilXml;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityCondition;
import org.apache.ofbiz.entity.condition.EntityOperator;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtil;
import org.apache.ofbiz.entity.util.EntityUtilProperties;
import org.apache.ofbiz.product.product.ProductContentWrapper;
import org.apache.ofbiz.service.DispatchContext;
import org.apache.ofbiz.service.ModelService;
import org.apache.ofbiz.service.ServiceUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class ProductsExportToEbay {
private static final String resource = "EbayUiLabels";
private static final String configFileName = "ebayExport.properties";
private static final String module = ProductsExportToEbay.class.getName();
private static List<String> productExportSuccessMessageList = new LinkedList<String>();
private static List<String> productExportFailureMessageList = new LinkedList<String>();
public static Map<String, Object> exportToEbay(DispatchContext dctx, Map<String, Object> context) {
Locale locale = (Locale) context.get("locale");
Delegator delegator = dctx.getDelegator();
productExportSuccessMessageList.clear();
productExportFailureMessageList.clear();
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> response = null;
try {
List<String> selectResult = UtilGenerics.checkList(context.get("selectResult"), String.class);
List<GenericValue> productsList = EntityQuery.use(delegator).from("Product").where(EntityCondition.makeCondition("productId", EntityOperator.IN, selectResult)).queryList();
if (UtilValidate.isNotEmpty(productsList)) {
for (GenericValue product : productsList) {
GenericValue startPriceValue = EntityUtil.getFirst(EntityUtil.filterByDate(product.getRelated("ProductPrice", UtilMisc.toMap("productPricePurposeId", "EBAY", "productPriceTypeId", "MINIMUM_PRICE"), null, false)));
if (UtilValidate.isEmpty(startPriceValue)) {
String startPriceMissingMsg = "Unable to find a starting price for auction of product with id (" + product.getString("productId") + "), So Ignoring the export of this product to eBay.";
productExportFailureMessageList.add(startPriceMissingMsg);
// Ignore the processing of product having no start price value
continue;
}
Map<String, Object> eBayConfigResult = EbayHelper.buildEbayConfig(context, delegator);
StringBuffer dataItemsXml = new StringBuffer();
Map<String, Object> resultMap = buildDataItemsXml(dctx, context, dataItemsXml, eBayConfigResult.get("token").toString(), product);
if (!ServiceUtil.isFailure(resultMap)) {
response = postItem(eBayConfigResult.get("xmlGatewayUri").toString(), dataItemsXml, eBayConfigResult.get("devID").toString(), eBayConfigResult.get("appID").toString(), eBayConfigResult.get("certID").toString(), "AddItem", eBayConfigResult.get("compatibilityLevel").toString(), eBayConfigResult.get("siteID").toString());
if (ServiceUtil.isFailure(response)) {
return ServiceUtil.returnFailure(ServiceUtil.getErrorMessage(response));
}
if (UtilValidate.isNotEmpty(response)) {
exportToEbayResponse((String) response.get("successMessage"), product);
}
} else {
return ServiceUtil.returnFailure(ServiceUtil.getErrorMessage(resultMap));
}
}
}
} catch (Exception e) {
Debug.logError("Exception in exportToEbay " + e, module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionInExportToEbay", locale));
}
if (UtilValidate.isNotEmpty(productExportSuccessMessageList)) {
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
result.put(ModelService.SUCCESS_MESSAGE_LIST, productExportSuccessMessageList);
}
if (UtilValidate.isNotEmpty(productExportFailureMessageList)) {
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_FAIL);
result.put(ModelService.ERROR_MESSAGE_LIST, productExportFailureMessageList);
}
return result;
}
private static void appendRequesterCredentials(Element elem, Document doc, String token) {
Element requesterCredentialsElem = UtilXml.addChildElement(elem, "RequesterCredentials", doc);
UtilXml.addChildElementValue(requesterCredentialsElem, "eBayAuthToken", token, doc);
}
private static String toString(InputStream inputStream) throws IOException {
String string;
StringBuilder outputBuilder = new StringBuilder();
if (inputStream != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
while (null != (string = reader.readLine())) {
outputBuilder.append(string).append('\n');
}
}
return outputBuilder.toString();
}
private static Map<String, Object> postItem(String postItemsUrl, StringBuffer dataItems, String devID, String appID, String certID,
String callName, String compatibilityLevel, String siteID) throws IOException {
if (Debug.verboseOn()) {
Debug.logVerbose("Request of " + callName + " To eBay:\n" + dataItems.toString(), module);
}
HttpURLConnection connection = (HttpURLConnection)(new URL(postItemsUrl)).openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("X-EBAY-API-COMPATIBILITY-LEVEL", compatibilityLevel);
connection.setRequestProperty("X-EBAY-API-DEV-NAME", devID);
connection.setRequestProperty("X-EBAY-API-APP-NAME", appID);
connection.setRequestProperty("X-EBAY-API-CERT-NAME", certID);
connection.setRequestProperty("X-EBAY-API-CALL-NAME", callName);
connection.setRequestProperty("X-EBAY-API-SITEID", siteID);
connection.setRequestProperty("Content-Type", "text/xml");
OutputStream outputStream = connection.getOutputStream();
outputStream.write(dataItems.toString().getBytes());
outputStream.close();
int responseCode = connection.getResponseCode();
InputStream inputStream;
Map<String, Object> result = new HashMap<String, Object>();
String response = null;
if (responseCode == HttpURLConnection.HTTP_CREATED ||
responseCode == HttpURLConnection.HTTP_OK) {
inputStream = connection.getInputStream();
response = toString(inputStream);
result = ServiceUtil.returnSuccess(response);
} else {
inputStream = connection.getErrorStream();
response = toString(inputStream);
result = ServiceUtil.returnFailure(response);
}
if (Debug.verboseOn()) {
Debug.logVerbose("Response of " + callName + " From eBay:\n" + response, module);
}
return result;
}
public static Map<String, Object> buildDataItemsXml(DispatchContext dctx, Map<String, Object> context, StringBuffer dataItemsXml, String token, GenericValue prod) {
Locale locale = (Locale)context.get("locale");
try {
Delegator delegator = dctx.getDelegator();
String webSiteUrl = (String)context.get("webSiteUrl");
UtilCodec.SimpleEncoder encoder = UtilCodec.getEncoder("xml");
// Get the list of products to be exported to eBay
try {
Document itemDocument = UtilXml.makeEmptyXmlDocument("AddItemRequest");
Element itemRequestElem = itemDocument.getDocumentElement();
itemRequestElem.setAttribute("xmlns", "urn:ebay:apis:eBLBaseComponents");
appendRequesterCredentials(itemRequestElem, itemDocument, token);
String title = prod.getString("internalName");
String qnt = (String)context.get("quantity");
if (UtilValidate.isEmpty(qnt)) {
qnt = "1";
}
String productDescription = "";
String description = prod.getString("description");
String longDescription = prod.getString("longDescription");
if (UtilValidate.isNotEmpty(description)) {
productDescription = description;
} else if (UtilValidate.isNotEmpty(longDescription)) {
productDescription = longDescription;
} else if (UtilValidate.isNotEmpty(prod.getString("productName"))) {
productDescription = prod.getString("productName");
}
String startPrice = (String)context.get("startPrice");
String startPriceCurrencyUomId = null;
if (UtilValidate.isEmpty(startPrice)) {
GenericValue startPriceValue = EntityUtil.getFirst(EntityUtil.filterByDate(prod.getRelated("ProductPrice", UtilMisc.toMap("productPricePurposeId", "EBAY", "productPriceTypeId", "MINIMUM_PRICE"), null, false)));
if (UtilValidate.isNotEmpty(startPriceValue)) {
startPrice = startPriceValue.getString("price");
startPriceCurrencyUomId = startPriceValue.getString("currencyUomId");
}
}
// Buy it now is the optional value for a product that you send to eBay. Once this value is entered by user - this option allow user to win auction immediately.
String buyItNowPrice = (String)context.get("buyItNowPrice");
String buyItNowCurrencyUomId = null;
if (UtilValidate.isEmpty(buyItNowPrice)) {
GenericValue buyItNowPriceValue = EntityUtil.getFirst(EntityUtil.filterByDate(prod.getRelated("ProductPrice", UtilMisc.toMap("productPricePurposeId", "EBAY", "productPriceTypeId", "MAXIMUM_PRICE"), null, false)));
if (UtilValidate.isNotEmpty(buyItNowPriceValue)) {
buyItNowPrice = buyItNowPriceValue.getString("price");
buyItNowCurrencyUomId = buyItNowPriceValue.getString("currencyUomId");
}
}
Element itemElem = UtilXml.addChildElement(itemRequestElem, "Item", itemDocument);
UtilXml.addChildElementValue(itemElem, "Country", (String)context.get("country"), itemDocument);
String location = (String)context.get("location");
if (UtilValidate.isNotEmpty(location)) {
UtilXml.addChildElementValue(itemElem, "Location", location, itemDocument);
}
UtilXml.addChildElementValue(itemElem, "ApplicationData", prod.getString("productId"), itemDocument);
UtilXml.addChildElementValue(itemElem, "SKU", prod.getString("productId"), itemDocument);
UtilXml.addChildElementValue(itemElem, "Title", title, itemDocument);
UtilXml.addChildElementValue(itemElem, "ListingDuration", (String)context.get("listingDuration"), itemDocument);
UtilXml.addChildElementValue(itemElem, "Quantity", qnt, itemDocument);
String listingFormat = "";
if (UtilValidate.isNotEmpty(context.get("listingFormat"))) {
listingFormat = (String) context.get("listingFormat");
UtilXml.addChildElementValue(itemElem, "ListingType", listingFormat, itemDocument);
}
if (listingFormat.equals("FixedPriceItem")) {
Element startPriceElem = UtilXml.addChildElementValue(itemElem, "StartPrice", startPrice, itemDocument);
if (UtilValidate.isEmpty(startPriceCurrencyUomId)) {
startPriceCurrencyUomId = EntityUtilProperties.getPropertyValue("general", "currency.uom.id.default", "USD", delegator);
}
startPriceElem.setAttribute("currencyID", startPriceCurrencyUomId);
} else {
Element startPriceElem = UtilXml.addChildElementValue(itemElem, "StartPrice", startPrice, itemDocument);
if (UtilValidate.isEmpty(startPriceCurrencyUomId)) {
startPriceCurrencyUomId = EntityUtilProperties.getPropertyValue("general", "currency.uom.id.default", "USD", delegator);
}
startPriceElem.setAttribute("currencyID", startPriceCurrencyUomId);
if (UtilValidate.isNotEmpty(buyItNowPrice)) {
Element buyNowPriceElem = UtilXml.addChildElementValue(itemElem, "BuyItNowPrice", buyItNowPrice, itemDocument);
if (UtilValidate.isEmpty(buyItNowCurrencyUomId)) {
buyItNowCurrencyUomId = EntityUtilProperties.getPropertyValue("general", "currency.uom.id.default", "USD", delegator);
}
buyNowPriceElem.setAttribute("currencyID", buyItNowCurrencyUomId);
}
}
ProductContentWrapper pcw = new ProductContentWrapper(dctx.getDispatcher(), prod, locale, EntityUtilProperties.getPropertyValue("content", "defaultMimeType", "text/html; charset=utf-8", delegator));
StringUtil.StringWrapper ebayDescription = pcw.get("EBAY_DESCRIPTION", "html");
if (UtilValidate.isNotEmpty(ebayDescription.toString())) {
UtilXml.addChildElementCDATAValue(itemElem, "Description", ebayDescription.toString(), itemDocument);
} else {
UtilXml.addChildElementValue(itemElem, "Description", encoder.encode(productDescription), itemDocument);
}
String smallImage = prod.getString("smallImageUrl");
String mediumImage = prod.getString("mediumImageUrl");
String largeImage = prod.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)) {
Element pictureDetails = UtilXml.addChildElement(itemElem, "PictureDetails", itemDocument);
UtilXml.addChildElementValue(pictureDetails, "PictureURL", webSiteUrl + ebayImage, itemDocument);
}
setPaymentMethodAccepted(itemDocument, itemElem, context);
setMiscDetails(itemDocument, itemElem, context, delegator);
String categoryCode = (String)context.get("ebayCategory");
String primaryCategoryId = "";
if (categoryCode != null) {
if (categoryCode.indexOf("_") != -1) {
String[] params = categoryCode.split("_");
if (UtilValidate.isEmpty(params) || params[1].length() == 0) {
ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.parametersNotCorrectInGetEbayCategories", locale));
} else {
primaryCategoryId = params[1];
}
}else{
primaryCategoryId = categoryCode;
}
} else {
GenericValue productCategoryValue = EntityQuery.use(delegator).from("ProductCategoryAndMember")
.where("productCategoryTypeId", "EBAY_CATEGORY", "productId", prod.getString("productId"))
.filterByDate()
.queryFirst();
if (UtilValidate.isNotEmpty(productCategoryValue)) {
primaryCategoryId = productCategoryValue.getString("categoryName");
}
}
Element primaryCatElem = UtilXml.addChildElement(itemElem, "PrimaryCategory", itemDocument);
UtilXml.addChildElementValue(primaryCatElem, "CategoryID", primaryCategoryId, itemDocument);
UtilXml.addChildElementValue(itemElem, "ConditionID", "1000", itemDocument);
Element itemSpecificsElem = UtilXml.addChildElement(itemElem, "ItemSpecifics", itemDocument);
Element nameValueListElem = UtilXml.addChildElement(itemSpecificsElem, "NameValueList", itemDocument);
UtilXml.addChildElementValue(nameValueListElem, "Name", "Condition", itemDocument);
UtilXml.addChildElementValue(nameValueListElem, "Value", "New: With Tags", itemDocument);
//Debug.logInfo("The generated string is ======= " + UtilXml.writeXmlDocument(itemDocument), module);
dataItemsXml.append(UtilXml.writeXmlDocument(itemDocument));
} catch (Exception e) {
Debug.logError("Exception during building data items to eBay: " + e.getMessage(), module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionDuringBuildingDataItemsToEbay", locale));
}
} catch (Exception e) {
Debug.logError("Exception during building data items to eBay: " + e.getMessage(), module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionDuringBuildingDataItemsToEbay", locale));
}
return ServiceUtil.returnSuccess();
}
private static Map<String, Object> buildCategoriesXml(Map<String, Object> context, StringBuffer dataItemsXml, String token, String siteID, String categoryParent, String levelLimit) {
Locale locale = (Locale)context.get("locale");
try {
Document itemRequest = UtilXml.makeEmptyXmlDocument("GetCategoriesRequest");
Element itemRequestElem = itemRequest.getDocumentElement();
itemRequestElem.setAttribute("xmlns", "urn:ebay:apis:eBLBaseComponents");
appendRequesterCredentials(itemRequestElem, itemRequest, token);
UtilXml.addChildElementValue(itemRequestElem, "DetailLevel", "ReturnAll", itemRequest);
UtilXml.addChildElementValue(itemRequestElem, "CategorySiteID", siteID, itemRequest);
if (UtilValidate.isNotEmpty(categoryParent)) {
UtilXml.addChildElementValue(itemRequestElem, "CategoryParent", categoryParent, itemRequest);
}
if (UtilValidate.isEmpty(levelLimit)) {
levelLimit = "1";
}
UtilXml.addChildElementValue(itemRequestElem, "LevelLimit", levelLimit, itemRequest);
UtilXml.addChildElementValue(itemRequestElem, "ViewAllNodes", "true", itemRequest);
dataItemsXml.append(UtilXml.writeXmlDocument(itemRequest));
} catch (Exception e) {
Debug.logError("Exception during building data items to eBay", module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionDuringBuildingGetCategoriesRequest", locale));
}
return ServiceUtil.returnSuccess();
}
/*
private static Map<String, Object> buildSetTaxTableRequestXml(DispatchContext dctx, Map<String, Object> context, StringBuffer setTaxTableRequestXml, String token) {
Locale locale = (Locale)context.get("locale");
try {
Document taxRequestDocument = UtilXml.makeEmptyXmlDocument("SetTaxTableRequest");
Element taxRequestElem = taxRequestDocument.getDocumentElement();
taxRequestElem.setAttribute("xmlns", "urn:ebay:apis:eBLBaseComponents");
appendRequesterCredentials(taxRequestElem, taxRequestDocument, token);
Element taxTableElem = UtilXml.addChildElement(taxRequestElem, "TaxTable", taxRequestDocument);
Element taxJurisdictionElem = UtilXml.addChildElement(taxTableElem, "TaxJurisdiction", taxRequestDocument);
UtilXml.addChildElementValue(taxJurisdictionElem, "JurisdictionID", "NY", taxRequestDocument);
UtilXml.addChildElementValue(taxJurisdictionElem, "SalesTaxPercent", "4.25", taxRequestDocument);
UtilXml.addChildElementValue(taxJurisdictionElem, "ShippingIncludedInTax", "false", taxRequestDocument);
setTaxTableRequestXml.append(UtilXml.writeXmlDocument(taxRequestDocument));
} catch (Exception e) {
Debug.logError("Exception during building request set tax table to eBay", module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionDuringBuildingRequestSetTaxTableToEbay", locale));
}
return ServiceUtil.returnSuccess();
}
*/
/*
private static Map<String, Object> buildAddTransactionConfirmationItemRequest(Map<String, Object> context, StringBuffer dataItemsXml, String token, String itemId) {
Locale locale = (Locale)context.get("locale");
try {
Document transDoc = UtilXml.makeEmptyXmlDocument("AddTransactionConfirmationItemRequest");
Element transElem = transDoc.getDocumentElement();
transElem.setAttribute("xmlns", "urn:ebay:apis:eBLBaseComponents");
appendRequesterCredentials(transElem, transDoc, token);
UtilXml.addChildElementValue(transElem, "ItemID", itemId, transDoc);
UtilXml.addChildElementValue(transElem, "ListingDuration", "Days_1", transDoc);
Element negotiatePriceElem = UtilXml.addChildElementValue(transElem, "NegotiatedPrice", "50.00", transDoc);
negotiatePriceElem.setAttribute("currencyID", "USD");
UtilXml.addChildElementValue(transElem, "RecipientRelationType", "1", transDoc);
UtilXml.addChildElementValue(transElem, "RecipientUserID", "buyer_anytime", transDoc);
dataItemsXml.append(UtilXml.writeXmlDocument(transDoc));
Debug.logInfo(dataItemsXml.toString(), module);
} catch (Exception e) {
Debug.logError("Exception during building AddTransactionConfirmationItemRequest eBay", module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionDuringBuildingAddTransactionConfirmationItemRequestToEbay", locale));
}
return ServiceUtil.returnSuccess();
}
*/
private static void setPaymentMethodAccepted(Document itemDocument, Element itemElem, Map<String, Object> context) {
String payPal = (String)context.get("paymentPayPal");
String payPalEmail = (String)context.get("payPalEmail");
String visaMC = (String)context.get("paymentVisaMC");
String amEx = (String)context.get("paymentAmEx");
String discover = (String)context.get("paymentDiscover");
String ccAccepted = (String)context.get("paymentCCAccepted");
String cashInPerson = (String)context.get("paymentCashInPerson");
String cashOnPickup = (String)context.get("paymentCashOnPickup");
String cod = (String)context.get("paymentCOD");
String codPrePayDelivery = (String)context.get("paymentCODPrePayDelivery");
String mocc = (String)context.get("paymentMOCC");
String moneyXferAccepted = (String)context.get("paymentMoneyXferAccepted");
String personalCheck = (String)context.get("paymentPersonalCheck");
// PayPal
if (UtilValidate.isNotEmpty(payPal) && "on".equals(payPal)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "PayPal", itemDocument);
// PayPal email
if (UtilValidate.isNotEmpty(payPalEmail)) {
UtilXml.addChildElementValue(itemElem, "PayPalEmailAddress", payPalEmail, itemDocument);
}
}
// Visa/Master Card
if (UtilValidate.isNotEmpty(visaMC) && "on".equals(visaMC)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "VisaMC", itemDocument);
}
// American Express
if (UtilValidate.isNotEmpty(amEx) && "on".equals(amEx)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "AmEx", itemDocument);
}
// Discover
if (UtilValidate.isNotEmpty(discover) && "on".equals(discover)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "Discover", itemDocument);
}
// Credit Card Accepted
if (UtilValidate.isNotEmpty(ccAccepted) && "on".equals(ccAccepted)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "CCAccepted", itemDocument);
}
// Cash In Person
if (UtilValidate.isNotEmpty(cashInPerson) && "on".equals(cashInPerson)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "CashInPerson", itemDocument);
}
// Cash on Pickup
if (UtilValidate.isNotEmpty(cashOnPickup) && "on".equals(cashOnPickup)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "CashOnPickup", itemDocument);
}
// Cash on Delivery
if (UtilValidate.isNotEmpty(cod) && "on".equals(cod)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "COD", itemDocument);
}
// Cash On Delivery After Paid
if (UtilValidate.isNotEmpty(codPrePayDelivery) && "on".equals(codPrePayDelivery)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "CODPrePayDelivery", itemDocument);
}
// Money order/cashiers check
if (UtilValidate.isNotEmpty(mocc) && "on".equals(mocc)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "MOCC", itemDocument);
}
// Direct transfer of money
if (UtilValidate.isNotEmpty(moneyXferAccepted) && "on".equals(moneyXferAccepted)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "MoneyXferAccepted", itemDocument);
}
// Personal Check
if (UtilValidate.isNotEmpty(personalCheck) && "on".equals(personalCheck)) {
UtilXml.addChildElementValue(itemElem, "PaymentMethods", "PersonalCheck", itemDocument);
}
}
private static void setMiscDetails(Document itemDocument, Element itemElem, Map<String, Object> context, Delegator delegator) throws Exception {
String customXmlFromUI = (String) context.get("customXml");
String customXml = "";
if (UtilValidate.isNotEmpty(customXmlFromUI)) {
customXml = customXmlFromUI;
} else {
customXml = EntityUtilProperties.getPropertyValue(configFileName, "eBayExport.customXml", delegator);
}
if (UtilValidate.isNotEmpty(customXml)) {
Document customXmlDoc = UtilXml.readXmlDocument(customXml);
if (UtilValidate.isNotEmpty(customXmlDoc)) {
Element customXmlElement = customXmlDoc.getDocumentElement();
for (Element eBayElement: UtilXml.childElementList(customXmlElement)) {
Node importedElement = itemElem.getOwnerDocument().importNode(eBayElement, true);
itemElem.appendChild(importedElement);
}
}
}
}
public static Map<String, Object> getEbayCategories(DispatchContext dctx, Map<String, Object> context) {
Delegator delegator = dctx.getDelegator();
Locale locale = (Locale) context.get("locale");
String categoryCode = (String)context.get("categoryCode");
Map<String, Object> result = null;
try {
Map<String, Object> eBayConfigResult = EbayHelper.buildEbayConfig(context, delegator);
String categoryParent = "";
String levelLimit = "";
if (categoryCode != null) {
String[] params = categoryCode.split("_");
if (params == null || params.length != 3) {
ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.parametersNotCorrectInGetEbayCategories", locale));
} else {
categoryParent = params[1];
levelLimit = params[2];
Integer level = Integer.valueOf(levelLimit);
levelLimit = (level.intValue() + 1) + "";
}
}
StringBuffer dataItemsXml = new StringBuffer();
if (!ServiceUtil.isFailure(buildCategoriesXml(context, dataItemsXml, eBayConfigResult.get("token").toString(), eBayConfigResult.get("siteID").toString(), categoryParent, levelLimit))) {
Map<String, Object> resultCat = postItem(eBayConfigResult.get("xmlGatewayUri").toString(), dataItemsXml, eBayConfigResult.get("devID").toString(), eBayConfigResult.get("appID").toString(), eBayConfigResult.get("certID").toString(), "GetCategories", eBayConfigResult.get("compatibilityLevel").toString(), eBayConfigResult.get("siteID").toString());
String successMessage = (String)resultCat.get("successMessage");
if (successMessage != null) {
result = readEbayCategoriesResponse(successMessage, locale);
} else {
ServiceUtil.returnFailure(ServiceUtil.getErrorMessage(resultCat));
}
}
} catch (Exception e) {
Debug.logError("Exception in GetEbayCategories " + e, module);
return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "productsExportToEbay.exceptionInGetEbayCategories", locale));
}
return result;
}
private static Map<String, Object> readEbayCategoriesResponse(String msg, Locale locale) {
Map<String, Object> results = null;
List<Map<String, Object>> categories = new LinkedList<Map<String,Object>>();
try {
Document docResponse = UtilXml.readXmlDocument(msg, true);
Element elemResponse = docResponse.getDocumentElement();
String ack = UtilXml.childElementValue(elemResponse, "Ack", "Failure");
if (ack != null && "Failure".equals(ack)) {
String errorMessage = "";
for (Element errorElement : UtilXml.childElementList(elemResponse, "Errors")) {
errorMessage = UtilXml.childElementValue(errorElement, "ShortMessage", "");
}
return ServiceUtil.returnFailure(errorMessage);
} else {
// retrieve Category Array
for (Element categoryArrayElement : UtilXml.childElementList(elemResponse, "CategoryArray")) {
// retrieve Category
for (Element categoryElement : UtilXml.childElementList(categoryArrayElement, "Category")) {
Map<String, Object> categ = new HashMap<String, Object>();
String categoryCode = ("true".equalsIgnoreCase((UtilXml.childElementValue(categoryElement, "LeafCategory", "").trim())) ? "Y" : "N") + "_" +
UtilXml.childElementValue(categoryElement, "CategoryID", "").trim() + "_" +
UtilXml.childElementValue(categoryElement, "CategoryLevel", "").trim();
categ.put("CategoryCode", categoryCode);
categ.put("CategoryName", UtilXml.childElementValue(categoryElement, "CategoryName"));
categories.add(categ);
}
}
categories = UtilGenerics.cast(UtilMisc.sortMaps(UtilGenerics.<List<Map<Object, Object>>>cast(categories), UtilMisc.toList("CategoryName")));
results = UtilMisc.toMap("categories", (Object) categories);
}
} catch (Exception e) {
return ServiceUtil.returnFailure();
}
return results;
}
public static Map<String, Object> exportToEbayResponse(String msg, GenericValue product) {
Map<String, Object> result = ServiceUtil.returnSuccess();
try {
Document docResponse = UtilXml.readXmlDocument(msg, true);
Element elemResponse = docResponse.getDocumentElement();
String ack = UtilXml.childElementValue(elemResponse, "Ack", "Failure");
if (ack != null && "Failure".equals(ack)) {
String errorMessage = "";
for (Element errorElement : UtilXml.childElementList(elemResponse, "Errors")) {
errorMessage = UtilXml.childElementValue(errorElement, "LongMessage");
}
productExportFailureMessageList.add(errorMessage);
} else {
String productSuccessfullyExportedMsg = "Product successfully exported with ID (" + product.getString("productId") + ").";
productExportSuccessMessageList.add(productSuccessfullyExportedMsg);
}
} catch (Exception e) {
Debug.logError("Error in processing xml string" + e.getMessage(), module);
return ServiceUtil.returnFailure();
}
return result;
}
public static List<String> getProductExportSuccessMessageList(){
return productExportSuccessMessageList;
}
public static List<String> getproductExportFailureMessageList(){
return productExportFailureMessageList;
}
}