1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.shopping.action;
16  
17  import com.liferay.portal.kernel.servlet.SessionErrors;
18  import com.liferay.portal.kernel.util.Constants;
19  import com.liferay.portal.kernel.util.ParamUtil;
20  import com.liferay.portal.kernel.util.Validator;
21  import com.liferay.portal.security.auth.PrincipalException;
22  import com.liferay.portal.struts.PortletAction;
23  import com.liferay.portlet.shopping.CartMinQuantityException;
24  import com.liferay.portlet.shopping.CouponActiveException;
25  import com.liferay.portlet.shopping.CouponEndDateException;
26  import com.liferay.portlet.shopping.CouponStartDateException;
27  import com.liferay.portlet.shopping.NoSuchCouponException;
28  import com.liferay.portlet.shopping.NoSuchItemException;
29  import com.liferay.portlet.shopping.model.ShoppingCart;
30  import com.liferay.portlet.shopping.model.ShoppingItem;
31  import com.liferay.portlet.shopping.service.ShoppingCartLocalServiceUtil;
32  import com.liferay.portlet.shopping.service.ShoppingItemLocalServiceUtil;
33  import com.liferay.portlet.shopping.util.ShoppingUtil;
34  
35  import javax.portlet.ActionRequest;
36  import javax.portlet.ActionResponse;
37  import javax.portlet.PortletConfig;
38  import javax.portlet.RenderRequest;
39  import javax.portlet.RenderResponse;
40  
41  import org.apache.struts.action.ActionForm;
42  import org.apache.struts.action.ActionForward;
43  import org.apache.struts.action.ActionMapping;
44  
45  /**
46   * <a href="CartAction.java.html"><b><i>View Source</i></b></a>
47   *
48   * @author Brian Wing Shun Chan
49   */
50  public class CartAction extends PortletAction {
51  
52  public void processAction(
53              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
54              ActionRequest actionRequest, ActionResponse actionResponse)
55          throws Exception {
56  
57          try {
58              updateCart(actionRequest, actionResponse);
59  
60              String redirect = ParamUtil.getString(actionRequest, "redirect");
61  
62              if (Validator.isNotNull(redirect)) {
63                  actionResponse.sendRedirect(redirect);
64              }
65          }
66          catch (Exception e) {
67              if (e instanceof NoSuchItemException ||
68                  e instanceof PrincipalException) {
69  
70                  SessionErrors.add(actionRequest, e.getClass().getName());
71  
72                  setForward(actionRequest, "portlet.shopping.error");
73              }
74              else if (e instanceof CartMinQuantityException ||
75                       e instanceof CouponActiveException ||
76                       e instanceof CouponEndDateException ||
77                       e instanceof CouponStartDateException ||
78                       e instanceof NoSuchCouponException) {
79  
80                  SessionErrors.add(actionRequest, e.getClass().getName(), e);
81              }
82              else {
83                  throw e;
84              }
85          }
86      }
87  
88      public ActionForward render(
89              ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
90              RenderRequest renderRequest, RenderResponse renderResponse)
91          throws Exception {
92  
93          return mapping.findForward(
94              getForward(renderRequest, "portlet.shopping.cart"));
95      }
96  
97      protected void updateCart(
98              ActionRequest actionRequest, ActionResponse actionResponse)
99          throws Exception {
100 
101         String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
102 
103         ShoppingCart cart = ShoppingUtil.getCart(actionRequest);
104 
105         if (cmd.equals(Constants.ADD)) {
106             long itemId = ParamUtil.getLong(actionRequest, "itemId");
107 
108             String fields = ParamUtil.getString(actionRequest, "fields");
109 
110             if (Validator.isNotNull(fields)) {
111                 fields = "|" + fields;
112             }
113 
114             ShoppingItem item = ShoppingItemLocalServiceUtil.getItem(itemId);
115 
116             if (item.getMinQuantity() > 0) {
117                 for (int i = 0; i < item.getMinQuantity(); i++) {
118                     cart.addItemId(itemId, fields);
119                 }
120             }
121             else {
122                 cart.addItemId(itemId, fields);
123             }
124         }
125         else {
126             String itemIds = ParamUtil.getString(actionRequest, "itemIds");
127             String couponCodes = ParamUtil.getString(
128                 actionRequest, "couponCodes");
129             int altShipping = ParamUtil.getInteger(
130                 actionRequest, "altShipping");
131             boolean insure = ParamUtil.getBoolean(actionRequest, "insure");
132 
133             cart.setItemIds(itemIds);
134             cart.setCouponCodes(couponCodes);
135             cart.setAltShipping(altShipping);
136             cart.setInsure(insure);
137         }
138 
139         ShoppingCartLocalServiceUtil.updateCart(
140             cart.getUserId(), cart.getGroupId(), cart.getItemIds(),
141             cart.getCouponCodes(), cart.getAltShipping(), cart.isInsure());
142 
143         if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
144             addSuccessMessage(actionRequest, actionResponse);
145         }
146     }
147 
148 }