001
014
015 package com.liferay.portlet.shopping.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.upload.UploadPortletRequest;
019 import com.liferay.portal.kernel.util.Constants;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.service.ServiceContext;
024 import com.liferay.portal.service.ServiceContextFactory;
025 import com.liferay.portal.struts.PortletAction;
026 import com.liferay.portal.theme.ThemeDisplay;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portal.util.WebKeys;
029 import com.liferay.portlet.shopping.DuplicateItemSKUException;
030 import com.liferay.portlet.shopping.ItemLargeImageNameException;
031 import com.liferay.portlet.shopping.ItemLargeImageSizeException;
032 import com.liferay.portlet.shopping.ItemMediumImageNameException;
033 import com.liferay.portlet.shopping.ItemMediumImageSizeException;
034 import com.liferay.portlet.shopping.ItemNameException;
035 import com.liferay.portlet.shopping.ItemSKUException;
036 import com.liferay.portlet.shopping.ItemSmallImageNameException;
037 import com.liferay.portlet.shopping.ItemSmallImageSizeException;
038 import com.liferay.portlet.shopping.NoSuchCategoryException;
039 import com.liferay.portlet.shopping.NoSuchItemException;
040 import com.liferay.portlet.shopping.model.ShoppingItem;
041 import com.liferay.portlet.shopping.model.ShoppingItemField;
042 import com.liferay.portlet.shopping.model.ShoppingItemPrice;
043 import com.liferay.portlet.shopping.model.ShoppingItemPriceConstants;
044 import com.liferay.portlet.shopping.model.impl.ShoppingItemImpl;
045 import com.liferay.portlet.shopping.service.ShoppingItemServiceUtil;
046 import com.liferay.portlet.shopping.service.persistence.ShoppingItemFieldUtil;
047 import com.liferay.portlet.shopping.service.persistence.ShoppingItemPriceUtil;
048
049 import java.io.File;
050
051 import java.util.ArrayList;
052 import java.util.List;
053
054 import javax.portlet.ActionRequest;
055 import javax.portlet.ActionResponse;
056 import javax.portlet.PortletConfig;
057 import javax.portlet.RenderRequest;
058 import javax.portlet.RenderResponse;
059
060 import org.apache.struts.action.ActionForm;
061 import org.apache.struts.action.ActionForward;
062 import org.apache.struts.action.ActionMapping;
063
064
067 public class EditItemAction extends PortletAction {
068
069 @Override
070 public void processAction(
071 ActionMapping actionMapping, ActionForm actionForm,
072 PortletConfig portletConfig, ActionRequest actionRequest,
073 ActionResponse actionResponse)
074 throws Exception {
075
076 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
077
078 try {
079 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
080 updateItem(actionRequest);
081 }
082 else if (cmd.equals(Constants.DELETE)) {
083 deleteItem(actionRequest);
084 }
085
086 if (Validator.isNotNull(cmd)) {
087 sendRedirect(actionRequest, actionResponse);
088 }
089 }
090 catch (Exception e) {
091 if (e instanceof NoSuchCategoryException ||
092 e instanceof NoSuchItemException ||
093 e instanceof PrincipalException) {
094
095 SessionErrors.add(actionRequest, e.getClass());
096
097 setForward(actionRequest, "portlet.shopping.error");
098 }
099 else if (e instanceof DuplicateItemSKUException ||
100 e instanceof ItemLargeImageNameException ||
101 e instanceof ItemLargeImageSizeException ||
102 e instanceof ItemMediumImageNameException ||
103 e instanceof ItemMediumImageSizeException ||
104 e instanceof ItemNameException ||
105 e instanceof ItemSKUException ||
106 e instanceof ItemSmallImageNameException ||
107 e instanceof ItemSmallImageSizeException) {
108
109 SessionErrors.add(actionRequest, e.getClass());
110 }
111 else {
112 throw e;
113 }
114 }
115 }
116
117 @Override
118 public ActionForward render(
119 ActionMapping actionMapping, ActionForm actionForm,
120 PortletConfig portletConfig, RenderRequest renderRequest,
121 RenderResponse renderResponse)
122 throws Exception {
123
124 try {
125 ActionUtil.getItem(renderRequest);
126 }
127 catch (Exception e) {
128 if (e instanceof NoSuchItemException ||
129 e instanceof PrincipalException) {
130
131 SessionErrors.add(renderRequest, e.getClass());
132
133 return actionMapping.findForward("portlet.shopping.error");
134 }
135 else {
136 throw e;
137 }
138 }
139
140 return actionMapping.findForward(
141 getForward(renderRequest, "portlet.shopping.edit_item"));
142 }
143
144 protected void deleteItem(ActionRequest actionRequest) throws Exception {
145 long itemId = ParamUtil.getLong(actionRequest, "itemId");
146
147 ShoppingItemServiceUtil.deleteItem(itemId);
148 }
149
150 protected void updateItem(ActionRequest actionRequest) throws Exception {
151 UploadPortletRequest uploadPortletRequest =
152 PortalUtil.getUploadPortletRequest(actionRequest);
153
154 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
155 WebKeys.THEME_DISPLAY);
156
157 long itemId = ParamUtil.getLong(uploadPortletRequest, "itemId");
158
159 long groupId = themeDisplay.getScopeGroupId();
160 long categoryId = ParamUtil.getLong(uploadPortletRequest, "categoryId");
161 String sku = ParamUtil.getString(uploadPortletRequest, "sku");
162 String name = ParamUtil.getString(uploadPortletRequest, "name");
163 String description = ParamUtil.getString(
164 uploadPortletRequest, "description");
165 String properties = ParamUtil.getString(
166 uploadPortletRequest, "properties");
167
168 int fieldsCount = ParamUtil.getInteger(
169 uploadPortletRequest, "fieldsCount", 1);
170
171 List<ShoppingItemField> itemFields = new ArrayList<ShoppingItemField>();
172
173 for (int i = 0; i < fieldsCount; i ++) {
174 String fieldName = ParamUtil.getString(
175 uploadPortletRequest, "fieldName" + i);
176 String fieldValues = ParamUtil.getString(
177 uploadPortletRequest, "fieldValues" + i);
178 String fieldDescription = ParamUtil.getString(
179 uploadPortletRequest, "fieldDescription" + i);
180
181 ShoppingItemField itemField = ShoppingItemFieldUtil.create(0);
182
183 itemField.setName(fieldName);
184 itemField.setValues(fieldValues);
185 itemField.setDescription(fieldDescription);
186
187 itemFields.add(itemField);
188 }
189
190 String fieldsQuantities = ParamUtil.getString(
191 uploadPortletRequest, "fieldsQuantities");
192
193 int pricesCount = ParamUtil.getInteger(
194 uploadPortletRequest, "pricesCount", 1);
195
196 List<ShoppingItemPrice> itemPrices = new ArrayList<ShoppingItemPrice>();
197
198 for (int i = 0; i < pricesCount; i ++) {
199 int minQuantity = ParamUtil.getInteger(
200 uploadPortletRequest, "minQuantity" + i);
201 int maxQuantity = ParamUtil.getInteger(
202 uploadPortletRequest, "maxQuantity" + i);
203 double price = ParamUtil.getDouble(
204 uploadPortletRequest, "price" + i);
205 double discount = ParamUtil.getDouble(
206 uploadPortletRequest, "discount" + i) / 100;
207 boolean taxable = ParamUtil.getBoolean(
208 uploadPortletRequest, "taxable" + i);
209 double shipping = ParamUtil.getDouble(
210 uploadPortletRequest, "shipping" + i);
211 boolean useShippingFormula = ParamUtil.getBoolean(
212 uploadPortletRequest, "useShippingFormula" + i);
213 boolean active = ParamUtil.getBoolean(
214 uploadPortletRequest, "active" + i);
215 int defaultPrice = ParamUtil.getInteger(
216 uploadPortletRequest, "defaultPrice");
217
218 int status = ShoppingItemPriceConstants.STATUS_ACTIVE_DEFAULT;
219
220 if ((defaultPrice != i) && active) {
221 status = ShoppingItemPriceConstants.STATUS_ACTIVE;
222 }
223 else if ((defaultPrice != i) && !active) {
224 status = ShoppingItemPriceConstants.STATUS_INACTIVE;
225 }
226
227 ShoppingItemPrice itemPrice = ShoppingItemPriceUtil.create(0);
228
229 itemPrice.setMinQuantity(minQuantity);
230 itemPrice.setMaxQuantity(maxQuantity);
231 itemPrice.setPrice(price);
232 itemPrice.setDiscount(discount);
233 itemPrice.setTaxable(taxable);
234 itemPrice.setShipping(shipping);
235 itemPrice.setUseShippingFormula(useShippingFormula);
236 itemPrice.setStatus(status);
237
238 itemPrices.add(itemPrice);
239 }
240
241 boolean requiresShipping = ParamUtil.getBoolean(
242 uploadPortletRequest, "requiresShipping");
243
244 int stockQuantity = ParamUtil.getInteger(
245 uploadPortletRequest, "stockQuantity");
246
247 if (ParamUtil.getBoolean(uploadPortletRequest, "infiniteStock")) {
248 stockQuantity = ShoppingItemImpl.STOCK_QUANTITY_INFINITE_STOCK;
249 }
250
251 boolean featured = ParamUtil.getBoolean(
252 uploadPortletRequest, "featured");
253 Boolean sale = null;
254
255 boolean smallImage = ParamUtil.getBoolean(
256 uploadPortletRequest, "smallImage");
257 String smallImageURL = ParamUtil.getString(
258 uploadPortletRequest, "smallImageURL");
259 File smallFile = uploadPortletRequest.getFile("smallFile");
260
261 boolean mediumImage = ParamUtil.getBoolean(
262 uploadPortletRequest, "mediumImage");
263 String mediumImageURL = ParamUtil.getString(
264 uploadPortletRequest, "mediumImageURL");
265 File mediumFile = uploadPortletRequest.getFile("mediumFile");
266
267 boolean largeImage = ParamUtil.getBoolean(
268 uploadPortletRequest, "largeImage");
269 String largeImageURL = ParamUtil.getString(
270 uploadPortletRequest, "largeImageURL");
271 File largeFile = uploadPortletRequest.getFile("largeFile");
272
273 ServiceContext serviceContext = ServiceContextFactory.getInstance(
274 ShoppingItem.class.getName(), actionRequest);
275
276 if (itemId <= 0) {
277
278
279
280 ShoppingItemServiceUtil.addItem(
281 groupId, categoryId, sku, name, description, properties,
282 fieldsQuantities, requiresShipping, stockQuantity, featured,
283 sale, smallImage, smallImageURL, smallFile, mediumImage,
284 mediumImageURL, mediumFile, largeImage, largeImageURL,
285 largeFile, itemFields, itemPrices, serviceContext);
286 }
287 else {
288
289
290
291 ShoppingItemServiceUtil.updateItem(
292 itemId, groupId, categoryId, sku, name, description, properties,
293 fieldsQuantities, requiresShipping, stockQuantity, featured,
294 sale, smallImage, smallImageURL, smallFile, mediumImage,
295 mediumImageURL, mediumFile, largeImage, largeImageURL,
296 largeFile, itemFields, itemPrices, serviceContext);
297 }
298 }
299
300 }