1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   * 
13   */
14  
15  package com.liferay.portlet.shopping.action;
16  
17  import com.liferay.portal.kernel.servlet.SessionErrors;
18  import com.liferay.portal.kernel.upload.UploadPortletRequest;
19  import com.liferay.portal.kernel.util.Constants;
20  import com.liferay.portal.kernel.util.ParamUtil;
21  import com.liferay.portal.kernel.util.Validator;
22  import com.liferay.portal.security.auth.PrincipalException;
23  import com.liferay.portal.struts.PortletAction;
24  import com.liferay.portal.util.PortalUtil;
25  import com.liferay.portlet.shopping.DuplicateItemSKUException;
26  import com.liferay.portlet.shopping.ItemLargeImageNameException;
27  import com.liferay.portlet.shopping.ItemLargeImageSizeException;
28  import com.liferay.portlet.shopping.ItemMediumImageNameException;
29  import com.liferay.portlet.shopping.ItemMediumImageSizeException;
30  import com.liferay.portlet.shopping.ItemNameException;
31  import com.liferay.portlet.shopping.ItemSKUException;
32  import com.liferay.portlet.shopping.ItemSmallImageNameException;
33  import com.liferay.portlet.shopping.ItemSmallImageSizeException;
34  import com.liferay.portlet.shopping.NoSuchCategoryException;
35  import com.liferay.portlet.shopping.NoSuchItemException;
36  import com.liferay.portlet.shopping.model.ShoppingItemField;
37  import com.liferay.portlet.shopping.model.ShoppingItemPrice;
38  import com.liferay.portlet.shopping.model.impl.ShoppingItemPriceImpl;
39  import com.liferay.portlet.shopping.service.ShoppingItemServiceUtil;
40  import com.liferay.portlet.shopping.service.persistence.ShoppingItemFieldUtil;
41  import com.liferay.portlet.shopping.service.persistence.ShoppingItemPriceUtil;
42  
43  import java.io.File;
44  
45  import java.util.ArrayList;
46  import java.util.List;
47  
48  import javax.portlet.ActionRequest;
49  import javax.portlet.ActionResponse;
50  import javax.portlet.PortletConfig;
51  import javax.portlet.RenderRequest;
52  import javax.portlet.RenderResponse;
53  
54  import org.apache.struts.action.ActionForm;
55  import org.apache.struts.action.ActionForward;
56  import org.apache.struts.action.ActionMapping;
57  
58  /**
59   * <a href="EditItemAction.java.html"><b><i>View Source</i></b></a>
60   *
61   * @author Brian Wing Shun Chan
62   */
63  public class EditItemAction extends PortletAction {
64  
65      public void processAction(
66              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
67              ActionRequest actionRequest, ActionResponse actionResponse)
68          throws Exception {
69  
70          String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
71  
72          try {
73              if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
74                  updateItem(actionRequest);
75              }
76              else if (cmd.equals(Constants.DELETE)) {
77                  deleteItem(actionRequest);
78              }
79  
80              if (Validator.isNotNull(cmd)) {
81                  sendRedirect(actionRequest, actionResponse);
82              }
83          }
84          catch (Exception e) {
85              if (e instanceof NoSuchCategoryException ||
86                  e instanceof NoSuchItemException ||
87                  e instanceof PrincipalException) {
88  
89                  SessionErrors.add(actionRequest, e.getClass().getName());
90  
91                  setForward(actionRequest, "portlet.shopping.error");
92              }
93              else if (e instanceof DuplicateItemSKUException ||
94                       e instanceof ItemLargeImageNameException ||
95                       e instanceof ItemLargeImageSizeException ||
96                       e instanceof ItemMediumImageNameException ||
97                       e instanceof ItemMediumImageSizeException ||
98                       e instanceof ItemNameException ||
99                       e instanceof ItemSKUException ||
100                      e instanceof ItemSmallImageNameException ||
101                      e instanceof ItemSmallImageSizeException) {
102 
103                 SessionErrors.add(actionRequest, e.getClass().getName());
104             }
105             else {
106                 throw e;
107             }
108         }
109     }
110 
111     public ActionForward render(
112             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
113             RenderRequest renderRequest, RenderResponse renderResponse)
114         throws Exception {
115 
116         try {
117             ActionUtil.getItem(renderRequest);
118         }
119         catch (Exception e) {
120             if (e instanceof NoSuchItemException ||
121                 e instanceof PrincipalException) {
122 
123                 SessionErrors.add(renderRequest, e.getClass().getName());
124 
125                 return mapping.findForward("portlet.shopping.error");
126             }
127             else {
128                 throw e;
129             }
130         }
131 
132         return mapping.findForward(
133             getForward(renderRequest, "portlet.shopping.edit_item"));
134     }
135 
136     protected void deleteItem(ActionRequest actionRequest) throws Exception {
137         long itemId = ParamUtil.getLong(actionRequest, "itemId");
138 
139         ShoppingItemServiceUtil.deleteItem(itemId);
140     }
141 
142     protected void updateItem(ActionRequest actionRequest) throws Exception {
143         UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
144             actionRequest);
145 
146         long itemId = ParamUtil.getLong(uploadRequest, "itemId");
147 
148         long categoryId = ParamUtil.getLong(uploadRequest, "categoryId");
149         String sku = ParamUtil.getString(uploadRequest, "sku");
150         String name = ParamUtil.getString(uploadRequest, "name");
151         String description = ParamUtil.getString(uploadRequest, "description");
152         String properties = ParamUtil.getString(uploadRequest, "properties");
153 
154         int fieldsCount = ParamUtil.getInteger(uploadRequest, "fieldsCount", 1);
155 
156         List<ShoppingItemField> itemFields = new ArrayList<ShoppingItemField>();
157 
158         for (int i = 0; i < fieldsCount; i ++) {
159             String fieldName = ParamUtil.getString(
160                 uploadRequest, "fieldName" + i);
161             String fieldValues = ParamUtil.getString(
162                 uploadRequest, "fieldValues" + i);
163             String fieldDescription = ParamUtil.getString(
164                 uploadRequest, "fieldDescription" + i);
165 
166             ShoppingItemField itemField = ShoppingItemFieldUtil.create(0);
167 
168             itemField.setName(fieldName);
169             itemField.setValues(fieldValues);
170             itemField.setDescription(fieldDescription);
171 
172             itemFields.add(itemField);
173         }
174 
175         String fieldsQuantities = ParamUtil.getString(
176             uploadRequest, "fieldsQuantities");
177 
178         int pricesCount = ParamUtil.getInteger(uploadRequest, "pricesCount", 1);
179 
180         List<ShoppingItemPrice> itemPrices = new ArrayList<ShoppingItemPrice>();
181 
182         for (int i = 0; i < pricesCount; i ++) {
183             int minQuantity = ParamUtil.getInteger(
184                 uploadRequest, "minQuantity" + i);
185             int maxQuantity = ParamUtil.getInteger(
186                 uploadRequest, "maxQuantity" + i);
187             double price = ParamUtil.getDouble(uploadRequest, "price" + i);
188             double discount = ParamUtil.getDouble(
189                 uploadRequest, "discount" + i) / 100;
190             boolean taxable = ParamUtil.getBoolean(
191                 uploadRequest, "taxable" + i);
192             double shipping = ParamUtil.getDouble(
193                 uploadRequest, "shipping" + i);
194             boolean useShippingFormula = ParamUtil.getBoolean(
195                 uploadRequest, "useShippingFormula" + i);
196             boolean active = ParamUtil.getBoolean(uploadRequest, "active" + i);
197             int defaultPrice = ParamUtil.getInteger(
198                 uploadRequest, "defaultPrice");
199 
200             int status = ShoppingItemPriceImpl.STATUS_ACTIVE_DEFAULT;
201 
202             if ((defaultPrice != i) && active) {
203                 status = ShoppingItemPriceImpl.STATUS_ACTIVE;
204             }
205             else if ((defaultPrice != i) && !active) {
206                 status = ShoppingItemPriceImpl.STATUS_INACTIVE;
207             }
208 
209             ShoppingItemPrice itemPrice = ShoppingItemPriceUtil.create(0);
210 
211             itemPrice.setMinQuantity(minQuantity);
212             itemPrice.setMaxQuantity(maxQuantity);
213             itemPrice.setPrice(price);
214             itemPrice.setDiscount(discount);
215             itemPrice.setTaxable(taxable);
216             itemPrice.setShipping(shipping);
217             itemPrice.setUseShippingFormula(useShippingFormula);
218             itemPrice.setStatus(status);
219 
220             itemPrices.add(itemPrice);
221         }
222 
223         boolean requiresShipping = ParamUtil.getBoolean(
224             uploadRequest, "requiresShipping");
225         int stockQuantity = ParamUtil.getInteger(
226             uploadRequest, "stockQuantity");
227 
228         boolean featured = ParamUtil.getBoolean(uploadRequest, "featured");
229         Boolean sale = null;
230 
231         boolean smallImage = ParamUtil.getBoolean(uploadRequest, "smallImage");
232         String smallImageURL = ParamUtil.getString(
233             uploadRequest, "smallImageURL");
234         File smallFile = uploadRequest.getFile("smallFile");
235 
236         boolean mediumImage = ParamUtil.getBoolean(
237             uploadRequest, "mediumImage");
238         String mediumImageURL = ParamUtil.getString(
239             uploadRequest, "mediumImageURL");
240         File mediumFile = uploadRequest.getFile("mediumFile");
241 
242         boolean largeImage = ParamUtil.getBoolean(uploadRequest, "largeImage");
243         String largeImageURL = ParamUtil.getString(
244             uploadRequest, "largeImageURL");
245         File largeFile = uploadRequest.getFile("largeFile");
246 
247         String[] communityPermissions = PortalUtil.getCommunityPermissions(
248             actionRequest);
249         String[] guestPermissions = PortalUtil.getGuestPermissions(
250             actionRequest);
251 
252         if (itemId <= 0) {
253 
254             // Add item
255 
256             ShoppingItemServiceUtil.addItem(
257                 categoryId, sku, name, description, properties,
258                 fieldsQuantities, requiresShipping, stockQuantity, featured,
259                 sale, smallImage, smallImageURL, smallFile, mediumImage,
260                 mediumImageURL, mediumFile, largeImage, largeImageURL,
261                 largeFile, itemFields, itemPrices, communityPermissions,
262                 guestPermissions);
263         }
264         else {
265 
266             // Update item
267 
268             ShoppingItemServiceUtil.updateItem(
269                 itemId, categoryId, sku, name, description, properties,
270                 fieldsQuantities, requiresShipping, stockQuantity, featured,
271                 sale, smallImage, smallImageURL, smallFile, mediumImage,
272                 mediumImageURL, mediumFile, largeImage, largeImageURL,
273                 largeFile, itemFields, itemPrices);
274         }
275     }
276 
277 }