You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2015/08/10 18:15:38 UTC

svn commit: r1695126 [18/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...

Propchange: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreAutoPreferences.java
            ('svn:eol-style' removed)

Modified: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCategoryFacade.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCategoryFacade.java?rev=1695126&r1=1695125&r2=1695126&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCategoryFacade.java (original)
+++ ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCategoryFacade.java Mon Aug 10 16:15:37 2015
@@ -1,345 +1,345 @@
-/*
- * 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.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilGenerics;
-
-import com.ebay.sdk.ApiContext;
-import com.ebay.sdk.ApiException;
-import com.ebay.sdk.SdkException;
-import com.ebay.sdk.SdkSoapException;
-import com.ebay.sdk.attributes.model.AttributeSet;
-import com.ebay.sdk.attributes.model.IAttributesMaster;
-import com.ebay.sdk.call.GetCategorySpecificsCall;
-import com.ebay.sdk.call.GetDescriptionTemplatesCall;
-import com.ebay.soap.eBLBaseComponents.BestOfferEnabledDefinitionType;
-import com.ebay.soap.eBLBaseComponents.BuyerPaymentMethodCodeType;
-import com.ebay.soap.eBLBaseComponents.CategoryFeatureType;
-import com.ebay.soap.eBLBaseComponents.CategoryType;
-import com.ebay.soap.eBLBaseComponents.DescriptionTemplateType;
-import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
-import com.ebay.soap.eBLBaseComponents.FeatureDefinitionsType;
-import com.ebay.soap.eBLBaseComponents.GetDescriptionTemplatesRequestType;
-import com.ebay.soap.eBLBaseComponents.GetDescriptionTemplatesResponseType;
-import com.ebay.soap.eBLBaseComponents.ItemSpecificsEnabledCodeType;
-import com.ebay.soap.eBLBaseComponents.ListingDurationDefinitionType;
-import com.ebay.soap.eBLBaseComponents.ListingDurationDefinitionsType;
-import com.ebay.soap.eBLBaseComponents.ListingDurationReferenceType;
-import com.ebay.soap.eBLBaseComponents.NameRecommendationType;
-import com.ebay.soap.eBLBaseComponents.RecommendationsType;
-import com.ebay.soap.eBLBaseComponents.SiteDefaultsType;
-import com.ebay.soap.eBLBaseComponents.StoreOwnerExtendedListingDurationsType;
-import com.ebay.soap.eBLBaseComponents.ThemeGroupType;
-
-public class EbayStoreCategoryFacade {
-    public static final String module = EbayStoreCategoryFacade.class.getName();
-    private ApiContext apiContext = null;
-    private String catId = null;
-    private IAttributesMaster attrMaster = null;
-    private EbayStoreSiteFacade siteFacade = null;
-
-    private AttributeSet[] joinedAttrSets = null;
-    private ItemSpecificsEnabledCodeType itemSpecificEnabled = null;
-    private Boolean retPolicyEnabled = null;
-    private Map<Integer,String[]> listingDurationMap = null;
-    private Map<String,Integer> listingDurationReferenceMap = null;
-    private BuyerPaymentMethodCodeType[] paymentMethods = null;
-    private NameRecommendationType[] nameRecommendationTypes = null;
-    private StoreOwnerExtendedListingDurationsType storeOwnerExtendedListingDuration = null;
-    private BestOfferEnabledDefinitionType bestOfferEnabled = null;
-    private List<Map<String,Object>> adItemTemplates = null;
-
-    public EbayStoreCategoryFacade(String catId, ApiContext apiContext, IAttributesMaster attrMaster, EbayStoreSiteFacade siteFacade) throws SdkException, Exception {
-        this.catId = catId;
-        this.apiContext = apiContext;
-        this.attrMaster = attrMaster;
-        this.siteFacade = siteFacade;
-        this.syncCategoryMetaData();
-    }
-
-    private void syncCategoryMetaData() throws SdkException, Exception {
-        syncJoinedAttrSets();
-        syncCategoryFeatures();
-        syncNameRecommendationTypes();
-        syncAdItemTemplates();
-    }
-
-    private void syncJoinedAttrSets() throws SdkException, Exception {
-        int[] ids = new int[1];
-        ids[0] = Integer.parseInt(this.getCatId());
-        AttributeSet[] itemSpecAttrSets = attrMaster.getItemSpecificAttributeSetsForCategories(ids);
-        AttributeSet[] siteWideAttrSets = attrMaster.getSiteWideAttributeSetsForCategories(ids);
-        AttributeSet[] joinedAttrSets = attrMaster.joinItemSpecificAndSiteWideAttributeSets(itemSpecAttrSets, siteWideAttrSets);
-        this.joinedAttrSets = joinedAttrSets;
-    }
-
-    private void syncNameRecommendationTypes() throws ApiException, SdkException, Exception {
-        GetCategorySpecificsCall getCatSpe = new GetCategorySpecificsCall(apiContext);
-        getCatSpe.setCategoryID(new String[]{this.catId});
-        DetailLevelCodeType[] detailLevels = new DetailLevelCodeType[] {DetailLevelCodeType.RETURN_ALL};
-        getCatSpe.setDetailLevel(detailLevels);
-        RecommendationsType[] recommendationsArray = getCatSpe.getCategorySpecifics();
-        if (recommendationsArray == null || recommendationsArray.length == 0)
-            return;
-        RecommendationsType recommendations = recommendationsArray[0];
-        this.nameRecommendationTypes = recommendations.getNameRecommendation();
-    }
-
-    public void syncCategoryFeatures() throws Exception {
-        Map<String, CategoryType> categoriesCacheMap = this.siteFacade.getSiteCategoriesMap().get(apiContext.getSite());
-
-        Map<String, CategoryFeatureType> cfsMap = this.siteFacade.getSiteCategoriesFeaturesMap().get(apiContext.getSite());
-        SiteDefaultsType siteDefaults = this.siteFacade.getSiteFeatureDefaultMap().get(apiContext.getSite());
-        FeatureDefinitionsType featureDefinition = this.siteFacade.getSiteFeatureDefinitionsMap().get(apiContext.getSite());
-
-        //get itemSpecificsEnabled feature
-        itemSpecificEnabled = (ItemSpecificsEnabledCodeType)getInheritProperty(catId, "getItemSpecificsEnabled", categoriesCacheMap, cfsMap);
-        if (itemSpecificEnabled == null) {
-            itemSpecificEnabled = siteDefaults.getItemSpecificsEnabled();
-        }
-        //get returnPolicyEnabled feature
-        retPolicyEnabled = (Boolean)getInheritProperty(catId, "isReturnPolicyEnabled", categoriesCacheMap, cfsMap);
-        if (retPolicyEnabled == null) {
-            retPolicyEnabled = siteDefaults.isReturnPolicyEnabled();
-        }
-
-        //get listing durations
-        ListingDurationDefinitionsType listDuration = featureDefinition.getListingDurations();
-        ListingDurationDefinitionType[] durationArray = listDuration.getListingDuration();
-        listingDurationMap = new HashMap<Integer, String[]>();
-        for (int i = 0; i < durationArray.length; i++) {
-            listingDurationMap.put(durationArray[i].getDurationSetID(), durationArray[i].getDuration());
-        }
-
-        //get listing types
-        ListingDurationReferenceType[] listingDuration = (ListingDurationReferenceType[])getInheritProperty(catId, "getListingDuration", categoriesCacheMap, cfsMap);
-        if (listingDuration == null || listingDuration.length == 0) {
-            listingDuration = siteDefaults.getListingDuration();
-        }
-        listingDurationReferenceMap = new HashMap<String, Integer>();
-        for (int i = 0; i < listingDuration.length; i++) {
-            listingDurationReferenceMap.put(listingDuration[i].getType().value(),listingDuration[i].getValue());
-        }
-
-        //get payment methods
-        paymentMethods = (BuyerPaymentMethodCodeType[])getInheritProperty(catId, "getPaymentMethod", categoriesCacheMap, cfsMap);
-        if (paymentMethods == null || paymentMethods.length == 0) {
-            paymentMethods = siteDefaults.getPaymentMethod();
-        }
-
-        //fix 'invalid enum' issue
-        paymentMethods = fiterPaymentMethod(paymentMethods);
-
-        storeOwnerExtendedListingDuration = siteDefaults.getStoreOwnerExtendedListingDurations();
-
-        bestOfferEnabled = featureDefinition.getBestOfferEnabled();
-    }
-
-    //remove all 'null' code type
-    private static BuyerPaymentMethodCodeType[] fiterPaymentMethod(BuyerPaymentMethodCodeType[] paymentMethods) {
-        ArrayList<BuyerPaymentMethodCodeType> al = new ArrayList<BuyerPaymentMethodCodeType>();
-        for (BuyerPaymentMethodCodeType pm : paymentMethods) {
-            if (pm != null) {
-                al.add(pm);
-            }
-        }
-        return al.toArray(new BuyerPaymentMethodCodeType[0]);
-    }
-
-    /**
-     * recursively check the parent category to find out category feature 
-     * @param catId categoryID to be retrieved
-     * @param methodName method name to be invoked
-     * @param categoriesCacheMap cache of all the categories
-     * @param cfsMap category features map
-     * @return generic Object
-     * @throws Exception
-     */
-    private Object getInheritProperty(String catId,String methodName,
-            Map<String, CategoryType> categoriesCacheMap, Map<String, CategoryFeatureType> cfsMap) throws Exception {
-        if (cfsMap.containsKey(catId)) {
-            CategoryFeatureType cf = cfsMap.get(catId);
-            // invoke the method indicated by methodName
-            Object returnValue = invokeMethodByName(cf, methodName);
-            if (returnValue != null) {
-                return returnValue;
-            }
-        }
-
-        CategoryType cat = categoriesCacheMap.get(catId);
-        //if we reach top level, return null
-        if (cat.getCategoryLevel() == 1) {
-            return null;
-        }
-
-        //check parent category
-        return getInheritProperty(cat.getCategoryParentID(0), methodName, categoriesCacheMap, cfsMap);
-    }
-
-    /**
-     * invoke the method specified by methodName and return the corresponding return value
-     * @param cf CategoryFeatureType
-     * @param methodName String
-     * @return generic object
-     */
-    private Object invokeMethodByName(CategoryFeatureType cf, String methodName) {
-        java.lang.reflect.Method m = null;
-        try {
-            m = cf.getClass().getMethod(methodName);
-            if (m != null) {
-                return m.invoke(cf);
-            } 
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    public List<Map<String,Object>> syncAdItemTemplates() throws ApiException, SdkSoapException, SdkException {
-        GetDescriptionTemplatesRequestType req = null;
-        GetDescriptionTemplatesResponseType resp = null;
-        List<Map<String,Object>> temGroupList = new LinkedList<Map<String,Object>>();
-
-        GetDescriptionTemplatesCall call = new GetDescriptionTemplatesCall(this.apiContext);
-        req = new GetDescriptionTemplatesRequestType();
-        req.setCategoryID(this.catId);
-        resp = (GetDescriptionTemplatesResponseType) call.execute(req);
-        if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
-            DescriptionTemplateType[] descriptionTemplateTypeList = resp.getDescriptionTemplate();
-            Debug.logInfo("layout of category "+ this.catId +":"+ resp.getLayoutTotal(), module);
-            for (DescriptionTemplateType descTemplateType : descriptionTemplateTypeList) {
-                List<Map<String,Object>> templateList = null;
-                Map<String,Object> templateGroup = null;
-                if ("THEME".equals(String.valueOf(descTemplateType.getType()))) {
-                    Map<String,Object> template = new HashMap<String, Object>();
-                    template.put("TemplateId", String.valueOf(descTemplateType.getID()));
-                    template.put("TemplateImageURL", descTemplateType.getImageURL());
-                    template.put("TemplateName", descTemplateType.getName());
-                    template.put("TemplateType", descTemplateType.getType());
-
-                    // check group template by groupId
-                    for (Map<String,Object> temGroup : temGroupList) {
-                        if (temGroup.get("TemplateGroupId").equals(descTemplateType.getGroupID().toString())) {
-                            templateGroup = temGroup;
-                            break;
-                        }
-                    }
-                    if (templateGroup == null) {
-                        templateGroup = new HashMap<String, Object>();
-                        templateList = new LinkedList<Map<String,Object>>();
-                        templateGroup.put("TemplateGroupId", descTemplateType.getGroupID().toString());
-                        templateList.add(template);
-                        templateGroup.put("Templates", templateList);
-                        temGroupList.add(templateGroup);
-                    } else {
-                        if (templateGroup.get("Templates") != null) {
-                            templateList = UtilGenerics.checkList(templateGroup.get("Templates"));
-                            templateList.add(template);
-                        }
-                    }
-                } else if ("Layout".equals(String.valueOf(descTemplateType.getType()))) {
-                }
-            }
-            ThemeGroupType[] themes = resp.getThemeGroup();
-            if (themes != null && temGroupList != null) {
-                for (Map<String,Object> temGroup : temGroupList) {
-                    for (ThemeGroupType theme : themes) {
-                        if (theme.getGroupID() == Integer.parseInt(temGroup.get("TemplateGroupId").toString())) {
-                            if (theme != null) temGroup.put("TemplateGroupName", theme.getGroupName());
-                            break;
-                        } else {
-                            if (theme != null) temGroup.put("TemplateGroupName", "_NA_");
-                        }
-                    }
-                }
-            }
-        }
-        return adItemTemplates = temGroupList; 
-    }
-
-    public List<Map<String,Object>> getAdItemTemplates(String temGroupId) {
-        List<Map<String,Object>> themes = new LinkedList<Map<String,Object>>();
-        for (Map<String,Object> temp : this.adItemTemplates) {
-            if (temp.get("TemplateGroupId").equals(temGroupId)) {
-                themes = UtilGenerics.checkList(temp.get("Templates"));
-                break;
-            }
-        }
-        return themes;
-    }
-
-    public String getCatId() {
-        return catId;
-    }
-
-    public void setCatId(String catId) {
-        this.catId = catId;
-    }
-
-    public AttributeSet[] getJoinedAttrSets() {
-        return joinedAttrSets;
-    }
-
-    public ItemSpecificsEnabledCodeType getItemSpecificEnabled() {
-        return itemSpecificEnabled;
-    }
-
-    public Boolean getRetPolicyEnabled() {
-        return retPolicyEnabled;
-    }
-
-    public Map<Integer, String[]> getListingDurationMap() {
-        return listingDurationMap;
-    }
-
-    public Map<String, Integer> getListingDurationReferenceMap() {
-        return listingDurationReferenceMap;
-    }
-
-    public BuyerPaymentMethodCodeType[] getPaymentMethods() {
-        return paymentMethods;
-    }
-
-    public NameRecommendationType[] getNameRecommendationTypes() {
-        return nameRecommendationTypes;
-    }
-
-    public boolean AttributesEnabled() {
-        return this.joinedAttrSets != null && this.joinedAttrSets.length > 0;
-    }
-
-    public StoreOwnerExtendedListingDurationsType getStoreOwnerExtendedListingDuration() {
-        return this.storeOwnerExtendedListingDuration;
-    }
-
-    public BestOfferEnabledDefinitionType getbestOfferEnabled() {
-        return this.bestOfferEnabled;
-    }
-
-    public List<Map<String,Object>> getAdItemTemplates() {
-        return this.adItemTemplates;
-    }
-}
+/*
+ * 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.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilGenerics;
+
+import com.ebay.sdk.ApiContext;
+import com.ebay.sdk.ApiException;
+import com.ebay.sdk.SdkException;
+import com.ebay.sdk.SdkSoapException;
+import com.ebay.sdk.attributes.model.AttributeSet;
+import com.ebay.sdk.attributes.model.IAttributesMaster;
+import com.ebay.sdk.call.GetCategorySpecificsCall;
+import com.ebay.sdk.call.GetDescriptionTemplatesCall;
+import com.ebay.soap.eBLBaseComponents.BestOfferEnabledDefinitionType;
+import com.ebay.soap.eBLBaseComponents.BuyerPaymentMethodCodeType;
+import com.ebay.soap.eBLBaseComponents.CategoryFeatureType;
+import com.ebay.soap.eBLBaseComponents.CategoryType;
+import com.ebay.soap.eBLBaseComponents.DescriptionTemplateType;
+import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
+import com.ebay.soap.eBLBaseComponents.FeatureDefinitionsType;
+import com.ebay.soap.eBLBaseComponents.GetDescriptionTemplatesRequestType;
+import com.ebay.soap.eBLBaseComponents.GetDescriptionTemplatesResponseType;
+import com.ebay.soap.eBLBaseComponents.ItemSpecificsEnabledCodeType;
+import com.ebay.soap.eBLBaseComponents.ListingDurationDefinitionType;
+import com.ebay.soap.eBLBaseComponents.ListingDurationDefinitionsType;
+import com.ebay.soap.eBLBaseComponents.ListingDurationReferenceType;
+import com.ebay.soap.eBLBaseComponents.NameRecommendationType;
+import com.ebay.soap.eBLBaseComponents.RecommendationsType;
+import com.ebay.soap.eBLBaseComponents.SiteDefaultsType;
+import com.ebay.soap.eBLBaseComponents.StoreOwnerExtendedListingDurationsType;
+import com.ebay.soap.eBLBaseComponents.ThemeGroupType;
+
+public class EbayStoreCategoryFacade {
+    public static final String module = EbayStoreCategoryFacade.class.getName();
+    private ApiContext apiContext = null;
+    private String catId = null;
+    private IAttributesMaster attrMaster = null;
+    private EbayStoreSiteFacade siteFacade = null;
+
+    private AttributeSet[] joinedAttrSets = null;
+    private ItemSpecificsEnabledCodeType itemSpecificEnabled = null;
+    private Boolean retPolicyEnabled = null;
+    private Map<Integer,String[]> listingDurationMap = null;
+    private Map<String,Integer> listingDurationReferenceMap = null;
+    private BuyerPaymentMethodCodeType[] paymentMethods = null;
+    private NameRecommendationType[] nameRecommendationTypes = null;
+    private StoreOwnerExtendedListingDurationsType storeOwnerExtendedListingDuration = null;
+    private BestOfferEnabledDefinitionType bestOfferEnabled = null;
+    private List<Map<String,Object>> adItemTemplates = null;
+
+    public EbayStoreCategoryFacade(String catId, ApiContext apiContext, IAttributesMaster attrMaster, EbayStoreSiteFacade siteFacade) throws SdkException, Exception {
+        this.catId = catId;
+        this.apiContext = apiContext;
+        this.attrMaster = attrMaster;
+        this.siteFacade = siteFacade;
+        this.syncCategoryMetaData();
+    }
+
+    private void syncCategoryMetaData() throws SdkException, Exception {
+        syncJoinedAttrSets();
+        syncCategoryFeatures();
+        syncNameRecommendationTypes();
+        syncAdItemTemplates();
+    }
+
+    private void syncJoinedAttrSets() throws SdkException, Exception {
+        int[] ids = new int[1];
+        ids[0] = Integer.parseInt(this.getCatId());
+        AttributeSet[] itemSpecAttrSets = attrMaster.getItemSpecificAttributeSetsForCategories(ids);
+        AttributeSet[] siteWideAttrSets = attrMaster.getSiteWideAttributeSetsForCategories(ids);
+        AttributeSet[] joinedAttrSets = attrMaster.joinItemSpecificAndSiteWideAttributeSets(itemSpecAttrSets, siteWideAttrSets);
+        this.joinedAttrSets = joinedAttrSets;
+    }
+
+    private void syncNameRecommendationTypes() throws ApiException, SdkException, Exception {
+        GetCategorySpecificsCall getCatSpe = new GetCategorySpecificsCall(apiContext);
+        getCatSpe.setCategoryID(new String[]{this.catId});
+        DetailLevelCodeType[] detailLevels = new DetailLevelCodeType[] {DetailLevelCodeType.RETURN_ALL};
+        getCatSpe.setDetailLevel(detailLevels);
+        RecommendationsType[] recommendationsArray = getCatSpe.getCategorySpecifics();
+        if (recommendationsArray == null || recommendationsArray.length == 0)
+            return;
+        RecommendationsType recommendations = recommendationsArray[0];
+        this.nameRecommendationTypes = recommendations.getNameRecommendation();
+    }
+
+    public void syncCategoryFeatures() throws Exception {
+        Map<String, CategoryType> categoriesCacheMap = this.siteFacade.getSiteCategoriesMap().get(apiContext.getSite());
+
+        Map<String, CategoryFeatureType> cfsMap = this.siteFacade.getSiteCategoriesFeaturesMap().get(apiContext.getSite());
+        SiteDefaultsType siteDefaults = this.siteFacade.getSiteFeatureDefaultMap().get(apiContext.getSite());
+        FeatureDefinitionsType featureDefinition = this.siteFacade.getSiteFeatureDefinitionsMap().get(apiContext.getSite());
+
+        //get itemSpecificsEnabled feature
+        itemSpecificEnabled = (ItemSpecificsEnabledCodeType)getInheritProperty(catId, "getItemSpecificsEnabled", categoriesCacheMap, cfsMap);
+        if (itemSpecificEnabled == null) {
+            itemSpecificEnabled = siteDefaults.getItemSpecificsEnabled();
+        }
+        //get returnPolicyEnabled feature
+        retPolicyEnabled = (Boolean)getInheritProperty(catId, "isReturnPolicyEnabled", categoriesCacheMap, cfsMap);
+        if (retPolicyEnabled == null) {
+            retPolicyEnabled = siteDefaults.isReturnPolicyEnabled();
+        }
+
+        //get listing durations
+        ListingDurationDefinitionsType listDuration = featureDefinition.getListingDurations();
+        ListingDurationDefinitionType[] durationArray = listDuration.getListingDuration();
+        listingDurationMap = new HashMap<Integer, String[]>();
+        for (int i = 0; i < durationArray.length; i++) {
+            listingDurationMap.put(durationArray[i].getDurationSetID(), durationArray[i].getDuration());
+        }
+
+        //get listing types
+        ListingDurationReferenceType[] listingDuration = (ListingDurationReferenceType[])getInheritProperty(catId, "getListingDuration", categoriesCacheMap, cfsMap);
+        if (listingDuration == null || listingDuration.length == 0) {
+            listingDuration = siteDefaults.getListingDuration();
+        }
+        listingDurationReferenceMap = new HashMap<String, Integer>();
+        for (int i = 0; i < listingDuration.length; i++) {
+            listingDurationReferenceMap.put(listingDuration[i].getType().value(),listingDuration[i].getValue());
+        }
+
+        //get payment methods
+        paymentMethods = (BuyerPaymentMethodCodeType[])getInheritProperty(catId, "getPaymentMethod", categoriesCacheMap, cfsMap);
+        if (paymentMethods == null || paymentMethods.length == 0) {
+            paymentMethods = siteDefaults.getPaymentMethod();
+        }
+
+        //fix 'invalid enum' issue
+        paymentMethods = fiterPaymentMethod(paymentMethods);
+
+        storeOwnerExtendedListingDuration = siteDefaults.getStoreOwnerExtendedListingDurations();
+
+        bestOfferEnabled = featureDefinition.getBestOfferEnabled();
+    }
+
+    //remove all 'null' code type
+    private static BuyerPaymentMethodCodeType[] fiterPaymentMethod(BuyerPaymentMethodCodeType[] paymentMethods) {
+        ArrayList<BuyerPaymentMethodCodeType> al = new ArrayList<BuyerPaymentMethodCodeType>();
+        for (BuyerPaymentMethodCodeType pm : paymentMethods) {
+            if (pm != null) {
+                al.add(pm);
+            }
+        }
+        return al.toArray(new BuyerPaymentMethodCodeType[0]);
+    }
+
+    /**
+     * recursively check the parent category to find out category feature 
+     * @param catId categoryID to be retrieved
+     * @param methodName method name to be invoked
+     * @param categoriesCacheMap cache of all the categories
+     * @param cfsMap category features map
+     * @return generic Object
+     * @throws Exception
+     */
+    private Object getInheritProperty(String catId,String methodName,
+            Map<String, CategoryType> categoriesCacheMap, Map<String, CategoryFeatureType> cfsMap) throws Exception {
+        if (cfsMap.containsKey(catId)) {
+            CategoryFeatureType cf = cfsMap.get(catId);
+            // invoke the method indicated by methodName
+            Object returnValue = invokeMethodByName(cf, methodName);
+            if (returnValue != null) {
+                return returnValue;
+            }
+        }
+
+        CategoryType cat = categoriesCacheMap.get(catId);
+        //if we reach top level, return null
+        if (cat.getCategoryLevel() == 1) {
+            return null;
+        }
+
+        //check parent category
+        return getInheritProperty(cat.getCategoryParentID(0), methodName, categoriesCacheMap, cfsMap);
+    }
+
+    /**
+     * invoke the method specified by methodName and return the corresponding return value
+     * @param cf CategoryFeatureType
+     * @param methodName String
+     * @return generic object
+     */
+    private Object invokeMethodByName(CategoryFeatureType cf, String methodName) {
+        java.lang.reflect.Method m = null;
+        try {
+            m = cf.getClass().getMethod(methodName);
+            if (m != null) {
+                return m.invoke(cf);
+            } 
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public List<Map<String,Object>> syncAdItemTemplates() throws ApiException, SdkSoapException, SdkException {
+        GetDescriptionTemplatesRequestType req = null;
+        GetDescriptionTemplatesResponseType resp = null;
+        List<Map<String,Object>> temGroupList = new LinkedList<Map<String,Object>>();
+
+        GetDescriptionTemplatesCall call = new GetDescriptionTemplatesCall(this.apiContext);
+        req = new GetDescriptionTemplatesRequestType();
+        req.setCategoryID(this.catId);
+        resp = (GetDescriptionTemplatesResponseType) call.execute(req);
+        if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
+            DescriptionTemplateType[] descriptionTemplateTypeList = resp.getDescriptionTemplate();
+            Debug.logInfo("layout of category "+ this.catId +":"+ resp.getLayoutTotal(), module);
+            for (DescriptionTemplateType descTemplateType : descriptionTemplateTypeList) {
+                List<Map<String,Object>> templateList = null;
+                Map<String,Object> templateGroup = null;
+                if ("THEME".equals(String.valueOf(descTemplateType.getType()))) {
+                    Map<String,Object> template = new HashMap<String, Object>();
+                    template.put("TemplateId", String.valueOf(descTemplateType.getID()));
+                    template.put("TemplateImageURL", descTemplateType.getImageURL());
+                    template.put("TemplateName", descTemplateType.getName());
+                    template.put("TemplateType", descTemplateType.getType());
+
+                    // check group template by groupId
+                    for (Map<String,Object> temGroup : temGroupList) {
+                        if (temGroup.get("TemplateGroupId").equals(descTemplateType.getGroupID().toString())) {
+                            templateGroup = temGroup;
+                            break;
+                        }
+                    }
+                    if (templateGroup == null) {
+                        templateGroup = new HashMap<String, Object>();
+                        templateList = new LinkedList<Map<String,Object>>();
+                        templateGroup.put("TemplateGroupId", descTemplateType.getGroupID().toString());
+                        templateList.add(template);
+                        templateGroup.put("Templates", templateList);
+                        temGroupList.add(templateGroup);
+                    } else {
+                        if (templateGroup.get("Templates") != null) {
+                            templateList = UtilGenerics.checkList(templateGroup.get("Templates"));
+                            templateList.add(template);
+                        }
+                    }
+                } else if ("Layout".equals(String.valueOf(descTemplateType.getType()))) {
+                }
+            }
+            ThemeGroupType[] themes = resp.getThemeGroup();
+            if (themes != null && temGroupList != null) {
+                for (Map<String,Object> temGroup : temGroupList) {
+                    for (ThemeGroupType theme : themes) {
+                        if (theme.getGroupID() == Integer.parseInt(temGroup.get("TemplateGroupId").toString())) {
+                            if (theme != null) temGroup.put("TemplateGroupName", theme.getGroupName());
+                            break;
+                        } else {
+                            if (theme != null) temGroup.put("TemplateGroupName", "_NA_");
+                        }
+                    }
+                }
+            }
+        }
+        return adItemTemplates = temGroupList; 
+    }
+
+    public List<Map<String,Object>> getAdItemTemplates(String temGroupId) {
+        List<Map<String,Object>> themes = new LinkedList<Map<String,Object>>();
+        for (Map<String,Object> temp : this.adItemTemplates) {
+            if (temp.get("TemplateGroupId").equals(temGroupId)) {
+                themes = UtilGenerics.checkList(temp.get("Templates"));
+                break;
+            }
+        }
+        return themes;
+    }
+
+    public String getCatId() {
+        return catId;
+    }
+
+    public void setCatId(String catId) {
+        this.catId = catId;
+    }
+
+    public AttributeSet[] getJoinedAttrSets() {
+        return joinedAttrSets;
+    }
+
+    public ItemSpecificsEnabledCodeType getItemSpecificEnabled() {
+        return itemSpecificEnabled;
+    }
+
+    public Boolean getRetPolicyEnabled() {
+        return retPolicyEnabled;
+    }
+
+    public Map<Integer, String[]> getListingDurationMap() {
+        return listingDurationMap;
+    }
+
+    public Map<String, Integer> getListingDurationReferenceMap() {
+        return listingDurationReferenceMap;
+    }
+
+    public BuyerPaymentMethodCodeType[] getPaymentMethods() {
+        return paymentMethods;
+    }
+
+    public NameRecommendationType[] getNameRecommendationTypes() {
+        return nameRecommendationTypes;
+    }
+
+    public boolean AttributesEnabled() {
+        return this.joinedAttrSets != null && this.joinedAttrSets.length > 0;
+    }
+
+    public StoreOwnerExtendedListingDurationsType getStoreOwnerExtendedListingDuration() {
+        return this.storeOwnerExtendedListingDuration;
+    }
+
+    public BestOfferEnabledDefinitionType getbestOfferEnabled() {
+        return this.bestOfferEnabled;
+    }
+
+    public List<Map<String,Object>> getAdItemTemplates() {
+        return this.adItemTemplates;
+    }
+}

Propchange: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCategoryFacade.java
            ('svn:eol-style' removed)

Modified: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCustomerService.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCustomerService.java?rev=1695126&r1=1695125&r2=1695126&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCustomerService.java (original)
+++ ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCustomerService.java Mon Aug 10 16:15:37 2015
@@ -1,170 +1,170 @@
-/*
- * 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.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.ofbiz.base.util.UtilProperties;
-import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.entity.Delegator;
-import org.ofbiz.entity.GenericValue;
-import org.ofbiz.entity.util.EntityQuery;
-import org.ofbiz.service.DispatchContext;
-import org.ofbiz.service.ServiceUtil;
-
-import com.ebay.sdk.ApiContext;
-import com.ebay.sdk.call.GetBestOffersCall;
-import com.ebay.sdk.call.GetItemCall;
-import com.ebay.sdk.call.RespondToBestOfferCall;
-import com.ebay.soap.eBLBaseComponents.BestOfferActionCodeType;
-import com.ebay.soap.eBLBaseComponents.BestOfferStatusCodeType;
-import com.ebay.soap.eBLBaseComponents.BestOfferType;
-import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
-import com.ebay.soap.eBLBaseComponents.ItemType;
-import com.ebay.soap.eBLBaseComponents.UserType;
-
-public class EbayStoreCustomerService {
-
-    public static String module = EbayStoreCustomerService.class.getName();
-    private static final String resource = "EbayStoreUiLabels";
-
-    public static Map<String, Object> listBestOfferIncludeMessage(DispatchContext dctx, Map<String, ? extends Object> context) {
-        Delegator delegator = dctx.getDelegator();
-        Locale locale = (Locale) context.get("locale");
-        if (UtilValidate.isEmpty(context.get("userId")) || UtilValidate.isEmpty(context.get("itemId"))) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemId", locale));
-        }
-        Map <String, Object> result = new HashMap<String, Object>();
-        try {
-            String itemId = (String) context.get("itemId");
-            String bestOfferId = (String) context.get("bestOfferId");
-            String productStoreId = (String) context.get("productStoreId");
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            DetailLevelCodeType[] detailLevel = new DetailLevelCodeType[] {
-                    DetailLevelCodeType.RETURN_ALL,
-                    DetailLevelCodeType.ITEM_RETURN_ATTRIBUTES,
-                    DetailLevelCodeType.ITEM_RETURN_DESCRIPTION
-                    };
-            GetItemCall getItemCall = new GetItemCall(apiContext);
-            getItemCall.setDetailLevel(detailLevel);
-            getItemCall.setItemID(itemId);
-            getItemCall.getItem();
-            ItemType item = getItemCall.getReturnedItem();
-            String itemName = item.getTitle();
-            GetBestOffersCall getBestOffersCall = new GetBestOffersCall(apiContext);
-            getBestOffersCall.setDetailLevel(detailLevel);
-            getBestOffersCall.setItemID(itemId);
-            getBestOffersCall.setBestOfferID(bestOfferId);
-            getBestOffersCall.getBestOffers();
-            BestOfferType[] bestOffers = getBestOffersCall.getReturnedBestOffers();
-            BestOfferType bestOffer = bestOffers[0];
-            BestOfferStatusCodeType bestOfferStatus = bestOffer.getStatus();
-            String offerStatus = bestOfferStatus.toString();
-            String buyerMessage = bestOffer.getBuyerMessage();
-            Double price = bestOffer.getPrice().getValue();
-            String currentPrice = price.toString();
-            Integer quantity = bestOffer.getQuantity();
-            String orderQuantity = quantity.toString();
-            UserType buyer = bestOffer.getBuyer();
-            String buyerEmail = buyer.getEmail();
-            result.put("email", buyerEmail);
-            result.put("message", buyerMessage);
-            result.put("price", currentPrice);
-            result.put("quantity", orderQuantity);
-            result.put("offerStatus", offerStatus);
-            result.put("itemName", itemName);
-        } catch (Exception e) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromListBestOfferIncludeMessage", locale) + e);
-        }
-        return result;
-    }
-    public static Map<String, Object> updateContactStatus(DispatchContext dctx, Map<String, ? extends Object> context) {
-        Delegator delegator = dctx.getDelegator();
-        Locale locale = (Locale) context.get("locale");
-        if (UtilValidate.isEmpty(context.get("productStoreId")) || UtilValidate.isEmpty(context.get("userId")) || UtilValidate.isEmpty(context.get("itemId")) || UtilValidate.isEmpty(context.get("offerId")) || UtilValidate.isEmpty(context.get("contactSetting"))) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemIdAndProductStoreIdAndOfferIdAndContactStatus", locale));
-        }
-        String userId = (String) context.get("userId");
-        String itemId = (String) context.get("itemId");
-        String itemName = (String) context.get("itemName");
-        String productStoreId = (String) context.get("productStoreId");
-        String offerId = (String) context.get("offerId");
-        String contactStatus = (String) context.get("contactSetting");
-        String price = (String) context.get("price");
-        String email = (String) context.get("email");
-        String quantity = (String) context.get("quantity");
-        Map <String, Object> result = new HashMap<String, Object>();
-        try {
-            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
-            String[] bestOfferIDs = {offerId};
-            RespondToBestOfferCall respondToBestOfferCall = new RespondToBestOfferCall(apiContext);
-            respondToBestOfferCall.setItemID(itemId);
-            respondToBestOfferCall.setBestOfferIDs(bestOfferIDs);
-            if (contactStatus.equals("ACCEPT")) {
-                respondToBestOfferCall.setBestOfferAction(BestOfferActionCodeType.ACCEPT);
-                respondToBestOfferCall.respondToBestOffer();
-                contactStatus = "FINISHED";
-            } else if (contactStatus.equals("DECLINE")) {
-                respondToBestOfferCall.setBestOfferAction(BestOfferActionCodeType.DECLINE);
-                respondToBestOfferCall.respondToBestOffer();
-                contactStatus = "FINISHED";
-            } else {
-                return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredContactStatusSetting", locale));
-            }
-            GenericValue  ebayUserBestOffer = EntityQuery.use(delegator).from("EbayUserBestOffer").where("userId", userId, "itemId", itemId).queryOne();
-            ebayUserBestOffer.set("contactStatus", contactStatus);
-            ebayUserBestOffer.store();
-            
-            result.put("userId", userId);
-            result.put("itemId", itemId);
-            result.put("productStoreId", productStoreId);
-            result.put("offerId", offerId);
-            result.put("contactStatus", contactStatus);
-            result.put("price", price);
-            result.put("email", email);
-            result.put("itemName", itemName);
-            result.put("quantity", quantity);
-        } catch (Exception e) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromUpdateContactStatus", locale) + e);
-        }
-        return result;
-    }
-
-    public static Map<String, Object> deleteContactAlert(DispatchContext dctx, Map<String, ? extends Object> context) {
-        Delegator delegator = dctx.getDelegator();
-        String productStoreId = (String) context.get("productStoreId");
-        Locale locale = (Locale) context.get("locale");
-        Map <String, Object> result = new HashMap<String, Object>();
-        if (UtilValidate.isEmpty(context.get("itemId")) || UtilValidate.isEmpty(context.get("userId"))) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemId", locale));
-        }
-        String itemId = (String) context.get("itemId");
-        String userId = (String) context.get("userId");
-        try {
-            GenericValue ebayUserBestOffer = EntityQuery.use(delegator).from("EbayUserBestOffer").where("itemId", itemId, "userId", userId).queryOne();
-            ebayUserBestOffer.remove();
-            result.put("productStoreId", productStoreId);
-        } catch (Exception e) {
-            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromDeleteContactStatus", locale) + e);
-        }
-        return result;
-    }
-}
+/*
+ * 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.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.util.EntityQuery;
+import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.ServiceUtil;
+
+import com.ebay.sdk.ApiContext;
+import com.ebay.sdk.call.GetBestOffersCall;
+import com.ebay.sdk.call.GetItemCall;
+import com.ebay.sdk.call.RespondToBestOfferCall;
+import com.ebay.soap.eBLBaseComponents.BestOfferActionCodeType;
+import com.ebay.soap.eBLBaseComponents.BestOfferStatusCodeType;
+import com.ebay.soap.eBLBaseComponents.BestOfferType;
+import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
+import com.ebay.soap.eBLBaseComponents.ItemType;
+import com.ebay.soap.eBLBaseComponents.UserType;
+
+public class EbayStoreCustomerService {
+
+    public static String module = EbayStoreCustomerService.class.getName();
+    private static final String resource = "EbayStoreUiLabels";
+
+    public static Map<String, Object> listBestOfferIncludeMessage(DispatchContext dctx, Map<String, ? extends Object> context) {
+        Delegator delegator = dctx.getDelegator();
+        Locale locale = (Locale) context.get("locale");
+        if (UtilValidate.isEmpty(context.get("userId")) || UtilValidate.isEmpty(context.get("itemId"))) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemId", locale));
+        }
+        Map <String, Object> result = new HashMap<String, Object>();
+        try {
+            String itemId = (String) context.get("itemId");
+            String bestOfferId = (String) context.get("bestOfferId");
+            String productStoreId = (String) context.get("productStoreId");
+            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
+            DetailLevelCodeType[] detailLevel = new DetailLevelCodeType[] {
+                    DetailLevelCodeType.RETURN_ALL,
+                    DetailLevelCodeType.ITEM_RETURN_ATTRIBUTES,
+                    DetailLevelCodeType.ITEM_RETURN_DESCRIPTION
+                    };
+            GetItemCall getItemCall = new GetItemCall(apiContext);
+            getItemCall.setDetailLevel(detailLevel);
+            getItemCall.setItemID(itemId);
+            getItemCall.getItem();
+            ItemType item = getItemCall.getReturnedItem();
+            String itemName = item.getTitle();
+            GetBestOffersCall getBestOffersCall = new GetBestOffersCall(apiContext);
+            getBestOffersCall.setDetailLevel(detailLevel);
+            getBestOffersCall.setItemID(itemId);
+            getBestOffersCall.setBestOfferID(bestOfferId);
+            getBestOffersCall.getBestOffers();
+            BestOfferType[] bestOffers = getBestOffersCall.getReturnedBestOffers();
+            BestOfferType bestOffer = bestOffers[0];
+            BestOfferStatusCodeType bestOfferStatus = bestOffer.getStatus();
+            String offerStatus = bestOfferStatus.toString();
+            String buyerMessage = bestOffer.getBuyerMessage();
+            Double price = bestOffer.getPrice().getValue();
+            String currentPrice = price.toString();
+            Integer quantity = bestOffer.getQuantity();
+            String orderQuantity = quantity.toString();
+            UserType buyer = bestOffer.getBuyer();
+            String buyerEmail = buyer.getEmail();
+            result.put("email", buyerEmail);
+            result.put("message", buyerMessage);
+            result.put("price", currentPrice);
+            result.put("quantity", orderQuantity);
+            result.put("offerStatus", offerStatus);
+            result.put("itemName", itemName);
+        } catch (Exception e) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromListBestOfferIncludeMessage", locale) + e);
+        }
+        return result;
+    }
+    public static Map<String, Object> updateContactStatus(DispatchContext dctx, Map<String, ? extends Object> context) {
+        Delegator delegator = dctx.getDelegator();
+        Locale locale = (Locale) context.get("locale");
+        if (UtilValidate.isEmpty(context.get("productStoreId")) || UtilValidate.isEmpty(context.get("userId")) || UtilValidate.isEmpty(context.get("itemId")) || UtilValidate.isEmpty(context.get("offerId")) || UtilValidate.isEmpty(context.get("contactSetting"))) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemIdAndProductStoreIdAndOfferIdAndContactStatus", locale));
+        }
+        String userId = (String) context.get("userId");
+        String itemId = (String) context.get("itemId");
+        String itemName = (String) context.get("itemName");
+        String productStoreId = (String) context.get("productStoreId");
+        String offerId = (String) context.get("offerId");
+        String contactStatus = (String) context.get("contactSetting");
+        String price = (String) context.get("price");
+        String email = (String) context.get("email");
+        String quantity = (String) context.get("quantity");
+        Map <String, Object> result = new HashMap<String, Object>();
+        try {
+            ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
+            String[] bestOfferIDs = {offerId};
+            RespondToBestOfferCall respondToBestOfferCall = new RespondToBestOfferCall(apiContext);
+            respondToBestOfferCall.setItemID(itemId);
+            respondToBestOfferCall.setBestOfferIDs(bestOfferIDs);
+            if (contactStatus.equals("ACCEPT")) {
+                respondToBestOfferCall.setBestOfferAction(BestOfferActionCodeType.ACCEPT);
+                respondToBestOfferCall.respondToBestOffer();
+                contactStatus = "FINISHED";
+            } else if (contactStatus.equals("DECLINE")) {
+                respondToBestOfferCall.setBestOfferAction(BestOfferActionCodeType.DECLINE);
+                respondToBestOfferCall.respondToBestOffer();
+                contactStatus = "FINISHED";
+            } else {
+                return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredContactStatusSetting", locale));
+            }
+            GenericValue  ebayUserBestOffer = EntityQuery.use(delegator).from("EbayUserBestOffer").where("userId", userId, "itemId", itemId).queryOne();
+            ebayUserBestOffer.set("contactStatus", contactStatus);
+            ebayUserBestOffer.store();
+            
+            result.put("userId", userId);
+            result.put("itemId", itemId);
+            result.put("productStoreId", productStoreId);
+            result.put("offerId", offerId);
+            result.put("contactStatus", contactStatus);
+            result.put("price", price);
+            result.put("email", email);
+            result.put("itemName", itemName);
+            result.put("quantity", quantity);
+        } catch (Exception e) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromUpdateContactStatus", locale) + e);
+        }
+        return result;
+    }
+
+    public static Map<String, Object> deleteContactAlert(DispatchContext dctx, Map<String, ? extends Object> context) {
+        Delegator delegator = dctx.getDelegator();
+        String productStoreId = (String) context.get("productStoreId");
+        Locale locale = (Locale) context.get("locale");
+        Map <String, Object> result = new HashMap<String, Object>();
+        if (UtilValidate.isEmpty(context.get("itemId")) || UtilValidate.isEmpty(context.get("userId"))) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreRequiredUserIdAndItemId", locale));
+        }
+        String itemId = (String) context.get("itemId");
+        String userId = (String) context.get("userId");
+        try {
+            GenericValue ebayUserBestOffer = EntityQuery.use(delegator).from("EbayUserBestOffer").where("itemId", itemId, "userId", userId).queryOne();
+            ebayUserBestOffer.remove();
+            result.put("productStoreId", productStoreId);
+        } catch (Exception e) {
+            return ServiceUtil.returnFailure(UtilProperties.getMessage(resource, "EbayStoreErrorFromDeleteContactStatus", locale) + e);
+        }
+        return result;
+    }
+}

Propchange: ofbiz/trunk/specialpurpose/ebaystore/src/org/ofbiz/ebaystore/EbayStoreCustomerService.java
            ('svn:eol-style' removed)