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