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