/**
* 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.asset.taglib.servlet.taglib;
import com.liferay.asset.kernel.model.AssetTag;
import com.liferay.asset.kernel.service.AssetTagServiceUtil;
import com.liferay.asset.taglib.internal.servlet.ServletContextUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.portlet.LiferayWindowState;
import com.liferay.portal.kernel.portlet.PortletProvider;
import com.liferay.portal.kernel.portlet.PortletProviderUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.taglib.util.IncludeTag;
import java.util.List;
import javax.portlet.PortletURL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
/**
* @author Antonio Pol
*/
public class AssetTagsSelectorTag extends IncludeTag {
public void setAddCallback(String addCallback) {
_addCallback = addCallback;
}
public void setAllowAddEntry(boolean allowAddEntry) {
_allowAddEntry = allowAddEntry;
}
public void setAutoFocus(boolean autoFocus) {
_autoFocus = autoFocus;
}
public void setClassName(String className) {
_className = className;
}
public void setClassPK(long classPK) {
_classPK = classPK;
}
public void setGroupIds(long[] groupIds) {
_groupIds = groupIds;
}
public void setHiddenInput(String hiddenInput) {
_hiddenInput = hiddenInput;
}
public void setId(String id) {
_id = id;
}
public void setIgnoreRequestValue(boolean ignoreRequestValue) {
_ignoreRequestValue = ignoreRequestValue;
}
@Override
public void setPageContext(PageContext pageContext) {
super.setPageContext(pageContext);
servletContext = ServletContextUtil.getServletContext();
}
public void setRemoveCallback(String removeCallback) {
_removeCallback = removeCallback;
}
public void setTagNames(String tagNames) {
_tagNames = tagNames;
}
@Override
protected void cleanUp() {
_addCallback = null;
_allowAddEntry = true;
_autoFocus = false;
_className = null;
_classPK = 0;
_groupIds = null;
_hiddenInput = "assetTagNames";
_id = null;
_ignoreRequestValue = false;
_removeCallback = null;
_tagNames = null;
}
protected String getEventName() {
String portletId = PortletProviderUtil.getPortletId(
AssetTag.class.getName(), PortletProvider.Action.BROWSE);
return PortalUtil.getPortletNamespace(portletId) + "selectTag";
}
protected long[] getGroupIds() {
if (_groupIds != null) {
return _groupIds;
}
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
long[] groupIds = null;
Group group = themeDisplay.getScopeGroup();
if (group.isLayout()) {
groupIds = new long[] {group.getParentGroupId()};
}
else {
groupIds = new long[] {group.getGroupId()};
}
if (group.getParentGroupId() != themeDisplay.getCompanyGroupId()) {
groupIds = ArrayUtil.append(
groupIds, themeDisplay.getCompanyGroupId());
}
return groupIds;
}
protected String getId() {
if (Validator.isNotNull(_id)) {
return _id;
}
String randomKey = PortalUtil.generateRandomKey(
request, "taglib_ui_asset_tags_selector_page");
return randomKey + StringPool.UNDERLINE;
}
@Override
protected String getPage() {
return _PAGE;
}
protected PortletURL getPortletURL() {
try {
PortletURL portletURL = PortletProviderUtil.getPortletURL(
request, AssetTag.class.getName(),
PortletProvider.Action.BROWSE);
if (portletURL == null) {
return null;
}
portletURL.setParameter("eventName", getEventName());
portletURL.setParameter("selectedTags", "{selectedTags}");
portletURL.setWindowState(LiferayWindowState.POP_UP);
return portletURL;
}
catch (Exception e) {
}
return null;
}
protected String getTagNames() {
String tagNames = _tagNames;
if (Validator.isNotNull(_className) && (_classPK > 0)) {
List<AssetTag> tags = AssetTagServiceUtil.getTags(
_className, _classPK);
tagNames = ListUtil.toString(tags, AssetTag.NAME_ACCESSOR);
}
if (!_ignoreRequestValue) {
String curTagsParam = request.getParameter(_hiddenInput);
if (Validator.isNotNull(curTagsParam)) {
tagNames = curTagsParam;
}
}
return tagNames;
}
@Override
protected void setAttributes(HttpServletRequest request) {
request.setAttribute(
"liferay-asset:asset-tags-selector:addCallback",
String.valueOf(_addCallback));
request.setAttribute(
"liferay-asset:asset-tags-selector:allowAddEntry",
String.valueOf(_allowAddEntry));
request.setAttribute(
"liferay-asset:asset-tags-selector:autoFocus",
String.valueOf(_autoFocus));
request.setAttribute(
"liferay-asset:asset-tags-selector:eventName", getEventName());
request.setAttribute(
"liferay-asset:asset-tags-selector:groupIds", getGroupIds());
request.setAttribute(
"liferay-asset:asset-tags-selector:hiddenInput", _hiddenInput);
request.setAttribute("liferay-asset:asset-tags-selector:id", getId());
request.setAttribute(
"liferay-asset:asset-tags-selector:portletURL", getPortletURL());
request.setAttribute(
"liferay-asset:asset-tags-selector:removeCallback",
String.valueOf(_removeCallback));
request.setAttribute(
"liferay-asset:asset-tags-selector:tagNames", getTagNames());
}
private static final String _PAGE = "/asset_tags_selector/page.jsp";
private String _addCallback;
private boolean _allowAddEntry = true;
private boolean _autoFocus;
private String _className;
private long _classPK;
private long[] _groupIds;
private String _hiddenInput = "assetTagNames";
private String _id;
private boolean _ignoreRequestValue;
private String _removeCallback;
private String _tagNames;
}