1
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
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
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
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 }