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