/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.frontend.taglib.servlet.taglib;
import com.liferay.frontend.taglib.internal.servlet.ServletContextUtil;
import com.liferay.frontend.taglib.servlet.taglib.util.AddMenuKeys;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.taglib.util.IncludeTag;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
/**
* @author Ambrin Chaudhary
*/
public class AddMenuTag extends IncludeTag {
@Override
public int doEndTag() throws JspException {
List<AddMenuItem> addMenuItems =
(List<AddMenuItem>)request.getAttribute(
"liferay-frontend:add-menu:addMenuItems");
if (ListUtil.isEmpty(addMenuItems)) {
return SKIP_BODY;
}
_menuItemsCount = addMenuItems.size();
List<MenuItemGroup> menuItemGroups = new ArrayList<>();
if (_menuItemsCount == 1) {
List<MenuItem> menuItems = new ArrayList<>();
menuItems.addAll(getAddMenuItems());
MenuItemGroup menuItem = new MenuItemGroup(
AddMenuKeys.getAddMenuTypeLabel(
AddMenuKeys.AddMenuType.DEFAULT),
menuItems);
menuItemGroups.add(menuItem);
_menuItemGroups = menuItemGroups;
}
else {
List<MenuItem> primaryMenuItems = new ArrayList<>();
List<MenuItem> favoriteMenuItems = new ArrayList<>();
List<MenuItem> recentMenuItems = new ArrayList<>();
List<MenuItem> defaultMenuItems = new ArrayList<>();
for (AddMenuItem addMenuItem : getAddMenuItems()) {
if (Objects.equals(
AddMenuKeys.AddMenuType.DEFAULT,
addMenuItem.getType())) {
defaultMenuItems.add(addMenuItem);
}
else if (Objects.equals(
AddMenuKeys.AddMenuType.FAVORITE,
addMenuItem.getType())) {
favoriteMenuItems.add(addMenuItem);
}
else if (Objects.equals(
AddMenuKeys.AddMenuType.PRIMARY,
addMenuItem.getType())) {
primaryMenuItems.add(addMenuItem);
}
else if (Objects.equals(
AddMenuKeys.AddMenuType.RECENT,
addMenuItem.getType())) {
recentMenuItems.add(addMenuItem);
}
}
boolean showDivider = false;
if (!primaryMenuItems.isEmpty() &&
(!defaultMenuItems.isEmpty() || !favoriteMenuItems.isEmpty() ||
!recentMenuItems.isEmpty())) {
showDivider = true;
}
menuItemGroups.add(
new MenuItemGroup(primaryMenuItems, showDivider));
showDivider = false;
if (!primaryMenuItems.isEmpty() && !favoriteMenuItems.isEmpty() &&
(!recentMenuItems.isEmpty() || !defaultMenuItems.isEmpty())) {
showDivider = true;
}
MenuItemGroup favoriteMenuItem = new MenuItemGroup(
AddMenuKeys.getAddMenuTypeLabel(
AddMenuKeys.AddMenuType.FAVORITE),
favoriteMenuItems, showDivider);
menuItemGroups.add(favoriteMenuItem);
menuItemGroups.add(new MenuItemGroup(recentMenuItems));
menuItemGroups.add(new MenuItemGroup(defaultMenuItems));
_menuItemGroups = menuItemGroups;
_numMenuItems = _maxItems;
if (!primaryMenuItems.isEmpty()) {
_numMenuItems += primaryMenuItems.size();
_menuItemsCount -= primaryMenuItems.size();
}
}
return super.doEndTag();
}
@Override
public int doStartTag() {
request.setAttribute(
"liferay-frontend:add-menu:addMenuItems", _addMenuItems);
return EVAL_BODY_INCLUDE;
}
public void setAddMenuItems(List<AddMenuItem> addMenuItems) {
_addMenuItems = addMenuItems;
}
public void setMaxItems(int maxItems) {
_maxItems = maxItems;
}
@Override
public void setPageContext(PageContext pageContext) {
super.setPageContext(pageContext);
servletContext = ServletContextUtil.getServletContext();
}
public void setViewMoreURL(String viewMoreURL) {
_viewMoreURL = viewMoreURL;
}
@Override
protected void cleanUp() {
_addMenuItems = new ArrayList<>();
_maxItems = AddMenuKeys.MAX_ITEMS;
_menuItemGroups = new ArrayList<>();
_menuItemsCount = 0;
_numMenuItems = 0;
_total = 0;
_viewMoreURL = null;
}
protected List<AddMenuItem> getAddMenuItems() {
List<AddMenuItem> addMenuItems =
(List<AddMenuItem>)request.getAttribute(
"liferay-frontend:add-menu:addMenuItems");
return addMenuItems;
}
@Override
protected String getPage() {
return "/add_menu/page.jsp";
}
protected int getTotal() {
List<AddMenuItem> addMenuItems = getAddMenuItems();
return addMenuItems.size();
}
@Override
protected void setAttributes(HttpServletRequest request) {
request.setAttribute("liferay-frontend:add-menu:maxItems", _maxItems);
request.setAttribute(
"liferay-frontend:add-menu:menuItemGroups", _menuItemGroups);
request.setAttribute(
"liferay-frontend:add-menu:menuItemsCount", _menuItemsCount);
request.setAttribute(
"liferay-frontend:add-menu:numMenuItems", _numMenuItems);
request.setAttribute("liferay-frontend:add-menu:total", getTotal());
request.setAttribute(
"liferay-frontend:add-menu:viewMoreURL", _viewMoreURL);
}
private List<AddMenuItem> _addMenuItems = new ArrayList<>();
private int _maxItems = AddMenuKeys.MAX_ITEMS;
private List<MenuItemGroup> _menuItemGroups = new ArrayList<>();
private int _menuItemsCount;
private int _numMenuItems;
private int _total;
private String _viewMoreURL;
}