I was planning to persist the order-id in cookie, so that when the user closes the browser and re-opens, the cart should display previously added items.
For a new user, i managed to create a cookie by overriding createNewCartForCustomer(Customer customer) method of class OrderServiceImpl.
Code: Select all
@Override
public Order createNewCartForCustomer(Customer customer) {
//Broadleaf flow
Order order = super.createNewCartForCustomer(customer);
// #### Customization - Create Cookie ###
Cookie cookie = getCookieTools().create(CookieTools.ORDER_COOKIE, String.valueOf(order.getId()), CookieTools.COOKIE_MAX_AGE);
getCookieTools().add(cookie);
return order;
}
The cookie is creating fine on every new user.
Now, the challenge is loading the order on browser re-open, when cookie is present.
What i tried was to override public Order reloadOrder(Order order) method of OrderServiceImpl class.
Code: Select all
@Override
public Order reloadOrder(Order order) {
//Customization for reading cookie
Long orderId = getOrderIdFromOrderCookie();
if(orderId != null) {
return orderDao.readOrderById(orderId, true);
}
//IF ORDER ID is not found in cookie, Broadleaf flow follows
return super.reloadOrder(order);
}
Now, the challenge is the current order is fetched from the static method getCart() of class CartState.
I wanted to override this method and customize it to use reloadOrder method if cookie is found.
Since, static methods are a property of class, and the whole broadleaf code refers it from expression Cart.getState, extending it wont help me.
Any pointers to the problem?