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