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