/**
* 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.taglib.portletext;
import com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIcon;
import com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconTracker;
import com.liferay.portal.kernel.theme.PortletDisplay;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.ReflectionUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.util.comparator.PortletConfigurationIconComparator;
import com.liferay.taglib.servlet.PipingServletResponse;
import com.liferay.taglib.ui.IconMenuTag;
import com.liferay.taglib.ui.IconTag;
import java.util.List;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
/**
* @author Brian Wing Shun Chan
*/
public class IconOptionsTag extends IconTag {
public List<PortletConfigurationIcon> getPortletConfigurationIcons() {
if (_portletConfigurationIcons != null) {
return _portletConfigurationIcons;
}
_portletConfigurationIcons =
PortletConfigurationIconTracker.getPortletConfigurationIcons(
getPortletId(), getPortletRequest(),
PortletConfigurationIconComparator.INSTANCE);
return _portletConfigurationIcons;
}
public void setDirection(String direction) {
_direction = direction;
}
public void setPortletConfigurationIcons(
List<PortletConfigurationIcon> portletConfigurationIcons) {
_portletConfigurationIcons = portletConfigurationIcons;
}
public void setShowArrow(boolean showArrow) {
_showArrow = showArrow;
}
@Override
protected void cleanUp() {
super.cleanUp();
_direction = "right";
_portletConfigurationIcons = null;
_showArrow = true;
}
@Override
protected String getPage() {
return "/html/taglib/portlet/icon_options/page.jsp";
}
protected String getPortletId() {
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
return portletDisplay.getRootPortletId();
}
protected PortletRequest getPortletRequest() {
return (PortletRequest)request.getAttribute(
JavaConstants.JAVAX_PORTLET_REQUEST);
}
protected PortletResponse getPortletResponse() {
return (PortletResponse)request.getAttribute(
JavaConstants.JAVAX_PORTLET_RESPONSE);
}
@Override
protected int processEndTag() throws Exception {
IconMenuTag iconMenuTag = new IconMenuTag();
iconMenuTag.setCssClass("portlet-options");
iconMenuTag.setDirection(_direction);
iconMenuTag.setExtended(false);
iconMenuTag.setIcon("ellipsis-v");
iconMenuTag.setMarkupView("lexicon");
iconMenuTag.setMessage("options");
iconMenuTag.setShowArrow(false);
iconMenuTag.setShowWhenSingleIcon(true);
iconMenuTag.setTriggerCssClass("icon-monospaced");
iconMenuTag.doBodyTag(
pageContext, this::_processPortletConfigurationIcons);
return EVAL_PAGE;
}
@Override
protected void setAttributes(HttpServletRequest request) {
super.setAttributes(request);
request.setAttribute(
"liferay-ui:icon-options:portletConfigurationIcons",
getPortletConfigurationIcons());
request.setAttribute("liferay-ui:icon:direction", _direction);
request.setAttribute(
"liferay-ui:icon:showArrow", String.valueOf(_showArrow));
}
private void _processPortletConfigurationIcons(PageContext pageContext) {
try {
HttpServletRequest request =
(HttpServletRequest)pageContext.getRequest();
PortletRequest portletRequest =
(PortletRequest)request.getAttribute(
JavaConstants.JAVAX_PORTLET_REQUEST);
PortletResponse portletResponse =
(PortletResponse)request.getAttribute(
JavaConstants.JAVAX_PORTLET_RESPONSE);
for (PortletConfigurationIcon portletConfigurationIcon :
_portletConfigurationIcons) {
boolean include = portletConfigurationIcon.include(
request,
PipingServletResponse.createPipingServletResponse(
pageContext));
if (!include) {
IconTag iconTag = new IconTag();
iconTag.setAlt(portletConfigurationIcon.getAlt());
iconTag.setAriaRole(portletConfigurationIcon.getAriaRole());
iconTag.setCssClass(portletConfigurationIcon.getCssClass());
iconTag.setData(portletConfigurationIcon.getData());
iconTag.setIconCssClass(
portletConfigurationIcon.getIconCssClass());
iconTag.setId(portletConfigurationIcon.getId());
iconTag.setImage(portletConfigurationIcon.getImage());
iconTag.setImageHover(
portletConfigurationIcon.getImageHover());
iconTag.setLabel(portletConfigurationIcon.isLabel());
iconTag.setLang(portletConfigurationIcon.getLang());
iconTag.setLinkCssClass(
portletConfigurationIcon.getLinkCssClass());
iconTag.setLocalizeMessage(false);
iconTag.setMessage(
portletConfigurationIcon.getMessage(portletRequest));
iconTag.setMethod(portletConfigurationIcon.getMethod());
iconTag.setOnClick(
portletConfigurationIcon.getOnClick(
portletRequest, portletResponse));
iconTag.setSrc(portletConfigurationIcon.getSrc());
iconTag.setSrcHover(portletConfigurationIcon.getSrcHover());
iconTag.setTarget(portletConfigurationIcon.getTarget());
iconTag.setToolTip(portletConfigurationIcon.isToolTip());
iconTag.setUrl(
portletConfigurationIcon.getURL(
portletRequest, portletResponse));
iconTag.setUseDialog(
portletConfigurationIcon.isUseDialog());
iconTag.doTag(pageContext);
}
}
}
catch (Exception e) {
ReflectionUtil.throwException(e);
}
}
private String _direction = "right";
private List<PortletConfigurationIcon> _portletConfigurationIcons;
private boolean _showArrow = true;
}