/**
* 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.content.targeting.portlet.util;
import com.liferay.content.targeting.util.ContentTargetingUtil;
import com.liferay.content.targeting.util.WebKeys;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
import com.liferay.portlet.asset.model.AssetEntry;
import com.liferay.portlet.asset.model.AssetRenderer;
import com.liferay.portlet.asset.model.AssetRendererFactory;
import com.liferay.portlet.asset.service.AssetEntryServiceUtil;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Map;
import javax.portlet.PortletConfig;
import javax.portlet.PortletRequest;
import javax.servlet.http.HttpServletRequest;
/**
* @author Julio Camarero
*/
public abstract class AssetQueryRule implements QueryRule {
public AssetQueryRule(long assetEntryId, int index, Locale locale)
throws PortalException, SystemException {
_assetEntryId = assetEntryId;
_index = index;
initAssetEntry(locale);
}
@Override
public int compareTo(QueryRule queryRule) {
return _index - queryRule.getIndex();
}
@Override
public boolean evaluate(long[] ids) {
return true;
}
@Override
public String getAssetClassName() {
return _assetClassName;
}
@Override
public long getAssetClassPK() {
return _assetClassPK;
}
@Override
public AssetEntry getAssetEntry() {
return _assetEntry;
}
@Override
public long getAssetEntryId() {
return _assetEntryId;
}
@Override
public String getAssetImage(PortletRequest portletRequest)
throws Exception {
if (Validator.isNull(_assetClassName) || (_assetClassPK <= 0)) {
return StringPool.BLANK;
}
return _assetRenderer.getThumbnailPath(portletRequest);
}
public Map<String, Object> getAssetSelectorIconData(
HttpServletRequest request,
AssetRendererFactory assetRendererFactory, String index)
throws Exception {
return ContentTargetingUtil.getAssetSelectorIconData(
request, assetRendererFactory, index);
}
@Override
public String getAssetTitle() {
return _assetTitle;
}
@Override
public String getAssetType() {
return _assetType;
}
@Override
public String getCssClass(int position) {
if (position == 0) {
return "first active";
}
else if (_index == -1) {
return "last";
}
return StringPool.BLANK;
}
@Override
public long getGroupId(long scopeGroupId) {
return scopeGroupId;
}
@Override
public int getIndex() {
return _index;
}
@Override
public String getTemplate() {
return _template;
}
@Override
public boolean hasAssetEntry() {
if ((_assetEntry != null) && _assetEntry.isVisible()) {
return true;
}
return false;
}
@Override
public boolean isDefaultRule() {
if (_index == -1) {
return true;
}
return false;
}
@Override
public boolean isValid() {
return hasAssetEntry();
}
@Override
public void setAssetAttributes(PortletRequest portletRequest) {
ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
WebKeys.THEME_DISPLAY);
portletRequest.setAttribute("view.jsp-results", new ArrayList());
portletRequest.setAttribute("view.jsp-assetEntryIndex", new Integer(0));
portletRequest.setAttribute("view.jsp-assetEntry", _assetEntry);
portletRequest.setAttribute(
"view.jsp-assetRendererFactory", _assetRendererFactory);
portletRequest.setAttribute("view.jsp-assetRenderer", _assetRenderer);
portletRequest.setAttribute(
"view.jsp-title", _assetEntry.getTitle(themeDisplay.getLocale()));
portletRequest.setAttribute("view.jsp-show", new Boolean(false));
portletRequest.setAttribute("view.jsp-print", new Boolean(false));
}
@Override
public void setAssetClassName(String assetClassName) {
_assetClassName = assetClassName;
}
@Override
public void setAssetClassPK(long assetClassPK) {
_assetClassPK = assetClassPK;
}
@Override
public void setAssetEntryId(long assetEntryId) {
_assetEntryId = assetEntryId;
}
@Override
public void setAssetTitle(String assetTitle) {
_assetTitle = assetTitle;
}
@Override
public void setAssetType(String assetType) {
_assetType = assetType;
}
@Override
public void setIndex(int index) {
_index = index;
}
@Override
public void setTemplate(String template) {
_template = template;
}
protected String htmlOperator(
Boolean andOperator, boolean contains, PortletConfig portletConfig,
Locale locale) {
StringBundler sb = new StringBundler(5);
String cssClass = "query-operator";
if ((andOperator == null) && !contains) {
sb.append(LanguageUtil.get(portletConfig, locale, "not"));
sb.append(StringPool.SPACE);
cssClass += " first";
}
else {
sb.append(StringPool.SPACE);
sb.append(
andOperator ?
LanguageUtil.get(portletConfig, locale, "and") :
LanguageUtil.get(portletConfig, locale, "or"));
sb.append(StringPool.SPACE);
if (!contains) {
sb.append(LanguageUtil.get(portletConfig, locale, "not"));
sb.append(StringPool.SPACE);
}
}
StringBundler html = new StringBundler(5);
html.append("<span class=\"");
html.append(cssClass);
html.append("\">");
html.append(StringUtil.toLowerCase(sb.toString()));
html.append("</span>");
return html.toString();
}
protected void initAssetEntry(Locale locale)
throws PortalException, SystemException {
try {
// See LPS-55480
_assetEntry = AssetEntryServiceUtil.getEntry(_assetEntryId);
}
catch (Exception e) {
if (_log.isDebugEnabled()) {
_log.debug(e);
}
return;
}
if (!_assetEntry.isVisible()) {
return;
}
_assetClassName = _assetEntry.getClassName();
_assetClassPK = _assetEntry.getClassPK();
_assetRendererFactory =
AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
_assetEntry.getClassName());
_assetRenderer = _assetRendererFactory.getAssetRenderer(_assetClassPK);
_assetTitle = _assetEntry.getTitle(locale);
_assetType = _assetRendererFactory.getTypeName(locale, true);
}
private static Log _log = LogFactoryUtil.getLog(AssetQueryRule.class);
private String _assetClassName = StringPool.BLANK;
private long _assetClassPK;
private AssetEntry _assetEntry;
private long _assetEntryId;
private AssetRenderer _assetRenderer;
private AssetRendererFactory _assetRendererFactory;
private String _assetTitle = StringPool.BLANK;
private String _assetType = StringPool.BLANK;
private int _index;
private String _template = null;
}