/** * 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.kernel.service.persistence; import com.liferay.asset.kernel.model.AssetCategory; import com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil; import com.liferay.asset.kernel.service.AssetTagLocalServiceUtil; import com.liferay.dynamic.data.mapping.kernel.DDMStructureManager; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.PortletRequest; /** * @author Brian Wing Shun Chan * @author Jorge Ferrer * @author Juan Fernández */ public class AssetEntryQuery { public static final String[] ORDER_BY_COLUMNS = new String[] { "title", "createDate", "modifiedDate", "publishDate", "expirationDate", "priority", "viewCount", "ratings" }; public static String checkOrderByCol(String orderByCol) { if (ArrayUtil.contains(ORDER_BY_COLUMNS, orderByCol) || ((orderByCol != null) && orderByCol.startsWith( DDMStructureManager.STRUCTURE_INDEXER_FIELD_PREFIX))) { return orderByCol; } return ORDER_BY_COLUMNS[2]; } public static String checkOrderByType(String orderByType) { if ((orderByType == null) || StringUtil.equalsIgnoreCase(orderByType, "DESC")) { return "DESC"; } else { return "ASC"; } } public AssetEntryQuery() { Date now = new Date(); _expirationDate = now; _publishDate = now; } public AssetEntryQuery(AssetEntryQuery assetEntryQuery) { setAllCategoryIds(assetEntryQuery.getAllCategoryIds()); setAllTagIdsArray(assetEntryQuery.getAllTagIdsArray()); setAndOperator(assetEntryQuery.isAndOperator()); setAnyCategoryIds(assetEntryQuery.getAnyCategoryIds()); setAnyTagIds(assetEntryQuery.getAnyTagIds()); setAttributes(assetEntryQuery.getAttributes()); setClassNameIds(assetEntryQuery.getClassNameIds()); setClassTypeIds(assetEntryQuery.getClassTypeIds()); setDescription(assetEntryQuery.getDescription()); setEnablePermissions(assetEntryQuery.isEnablePermissions()); setEnd(assetEntryQuery.getEnd()); setExcludeZeroViewCount(assetEntryQuery.isExcludeZeroViewCount()); setExpirationDate(assetEntryQuery.getExpirationDate()); setGroupIds(assetEntryQuery.getGroupIds()); setKeywords(assetEntryQuery.getKeywords()); setLayout(assetEntryQuery.getLayout()); setLinkedAssetEntryId(assetEntryQuery.getLinkedAssetEntryId()); setListable(assetEntryQuery.isListable()); setNotAllCategoryIds(assetEntryQuery.getNotAllCategoryIds()); setNotAllTagIdsArray(assetEntryQuery.getNotAllTagIdsArray()); setNotAnyCategoryIds(assetEntryQuery.getNotAnyCategoryIds()); setNotAnyTagIds(assetEntryQuery.getNotAnyTagIds()); setOrderByCol1(assetEntryQuery.getOrderByCol1()); setOrderByCol2(assetEntryQuery.getOrderByCol2()); setOrderByType1(assetEntryQuery.getOrderByType1()); setOrderByType2(assetEntryQuery.getOrderByType2()); setPaginationType(assetEntryQuery.getPaginationType()); setPublishDate(assetEntryQuery.getPublishDate()); setStart(assetEntryQuery.getStart()); setTitle(assetEntryQuery.getTitle()); setUserName(assetEntryQuery.getUserName()); setVisible(assetEntryQuery.isVisible()); } public AssetEntryQuery( long[] classNameIds, SearchContainer<?> searchContainer) { this(); setClassNameIds(classNameIds); _start = searchContainer.getStart(); _end = searchContainer.getEnd(); if (Validator.isNotNull(searchContainer.getOrderByCol())) { setOrderByCol1(searchContainer.getOrderByCol()); setOrderByType1(searchContainer.getOrderByType()); } PortletRequest portletRequest = searchContainer.getPortletRequest(); ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute( WebKeys.THEME_DISPLAY); _groupIds = new long[] {themeDisplay.getScopeGroupId()}; long categoryId = ParamUtil.getLong(portletRequest, "categoryId"); if (categoryId > 0) { _allCategoryIds = new long[] {categoryId}; } String tagName = ParamUtil.getString(portletRequest, "tag"); if (Validator.isNotNull(tagName)) { _allTagIds = AssetTagLocalServiceUtil.getTagIds( PortalUtil.getSiteGroupId(themeDisplay.getScopeGroupId()), new String[] {tagName}); if (_allTagIds.length == 0) { _allTagIds = new long[] {0}; } _allTagIdsArray = new long[][] {_allTagIds}; } } public AssetEntryQuery( String className, SearchContainer<?> searchContainer) { this( new long[] {PortalUtil.getClassNameId(className)}, searchContainer); } public void addAllTagIdsArray(long[] allTagsIds) { if (allTagsIds.length == 0) { return; } _allTagIdsArray = ArrayUtil.append(_allTagIdsArray, allTagsIds); _allTagIds = _flattenTagIds(_allTagIdsArray); } public void addNotAllTagIdsArray(long[] notAllTagsIds) { if (notAllTagsIds.length == 0) { return; } _notAllTagIdsArray = ArrayUtil.append( _notAllTagIdsArray, notAllTagsIds); _notAllTagIds = _flattenTagIds(_notAllTagIdsArray); } public long[] getAllCategoryIds() { return _allCategoryIds; } public long[] getAllLeftAndRightCategoryIds() { return _getLeftAndRightCategoryIds(_allCategoryIds); } public long[] getAllTagIds() { return _allTagIds; } public long[][] getAllTagIdsArray() { return _allTagIdsArray; } public long[] getAnyCategoryIds() { return _anyCategoryIds; } public long[] getAnyLeftAndRightCategoryIds() { return _getLeftAndRightCategoryIds(_anyCategoryIds); } public long[] getAnyTagIds() { return _anyTagIds; } public Serializable getAttribute(String name) { return _attributes.get(name); } public Map<String, Serializable> getAttributes() { return _attributes; } public long[] getClassNameIds() { return _classNameIds; } public long[] getClassTypeIds() { return _classTypeIds; } public String getDescription() { return _description; } public int getEnd() { return _end; } public Date getExpirationDate() { return _expirationDate; } public long[] getGroupIds() { return _groupIds; } public String getKeywords() { return _keywords; } public Layout getLayout() { return _layout; } public long getLinkedAssetEntryId() { return _linkedAssetEntryId; } public long[] getNotAllCategoryIds() { return _notAllCategoryIds; } public long[] getNotAllLeftAndRightCategoryIds() { return _getLeftAndRightCategoryIds(_notAllCategoryIds); } public long[] getNotAllTagIds() { return _notAllTagIds; } public long[][] getNotAllTagIdsArray() { return _notAllTagIdsArray; } public long[] getNotAnyCategoryIds() { return _notAnyCategoryIds; } public long[] getNotAnyLeftAndRightCategoryIds() { return _getLeftAndRightCategoryIds(_notAnyCategoryIds); } public long[] getNotAnyTagIds() { return _notAnyTagIds; } public String getOrderByCol1() { return checkOrderByCol(_orderByCol1); } public String getOrderByCol2() { return checkOrderByCol(_orderByCol2); } public String getOrderByType1() { return checkOrderByType(_orderByType1); } public String getOrderByType2() { return checkOrderByType(_orderByType2); } public String getPaginationType() { return _paginationType; } public Date getPublishDate() { return _publishDate; } public int getStart() { return _start; } public String getTitle() { return _title; } public String getUserName() { return _userName; } public boolean isAndOperator() { return _andOperator; } public boolean isEnablePermissions() { return _enablePermissions; } public boolean isExcludeZeroViewCount() { return _excludeZeroViewCount; } public Boolean isListable() { return _listable; } public Boolean isVisible() { return _visible; } public void setAllCategoryIds(long[] allCategoryIds) { _allCategoryIds = allCategoryIds; _toString = null; } public void setAllTagIds(long[] allTagIds) { _allTagIds = allTagIds; _allTagIdsArray = _expandTagIds(allTagIds); _toString = null; } public void setAllTagIdsArray(long[][] allTagIdsArray) { _allTagIdsArray = allTagIdsArray; _allTagIds = _flattenTagIds(allTagIdsArray); _toString = null; } public void setAndOperator(boolean andOperator) { _andOperator = andOperator; } public void setAnyCategoryIds(long[] anyCategoryIds) { _anyCategoryIds = anyCategoryIds; _toString = null; } public void setAnyTagIds(long[] anyTagIds) { _anyTagIds = anyTagIds; _toString = null; } public void setAttribute(String name, Serializable value) { _attributes.put(name, value); } public void setAttributes(Map<String, Serializable> attributes) { if (_attributes == null) { _attributes = new HashMap<>(); } else { _attributes = attributes; } } public void setClassName(String className) { long classNameId = PortalUtil.getClassNameId(className); _classNameIds = new long[] {classNameId}; _toString = null; } public void setClassNameIds(long[] classNameIds) { _classNameIds = classNameIds; _toString = null; } public void setClassTypeIds(long[] classTypeIds) { _classTypeIds = classTypeIds; _toString = null; } public void setDescription(String description) { _description = description; } public void setEnablePermissions(boolean enablePermissions) { _enablePermissions = enablePermissions; } public void setEnd(int end) { _end = end; _toString = null; } public void setExcludeZeroViewCount(boolean excludeZeroViewCount) { _excludeZeroViewCount = excludeZeroViewCount; _toString = null; } public void setExpirationDate(Date expirationDate) { _expirationDate = expirationDate; _toString = null; } public void setGroupIds(long[] groupIds) { _groupIds = groupIds; _toString = null; } public void setKeywords(String keywords) { _keywords = keywords; } public void setLayout(Layout layout) { _layout = layout; _toString = null; } public void setLinkedAssetEntryId(long linkedAssetEntryId) { _linkedAssetEntryId = linkedAssetEntryId; _toString = null; } public void setListable(Boolean listable) { _listable = listable; } public void setNotAllCategoryIds(long[] notAllCategoryIds) { _notAllCategoryIds = notAllCategoryIds; _toString = null; } public void setNotAllTagIds(long[] notAllTagIds) { _notAllTagIds = notAllTagIds; _notAllTagIdsArray = _expandTagIds(notAllTagIds); _toString = null; } public void setNotAllTagIdsArray(long[][] notAllTagIdsArray) { _notAllTagIdsArray = notAllTagIdsArray; _notAllTagIds = _flattenTagIds(notAllTagIdsArray); _toString = null; } public void setNotAnyCategoryIds(long[] notAnyCategoryIds) { _notAnyCategoryIds = notAnyCategoryIds; _toString = null; } public void setNotAnyTagIds(long[] notAnyTagIds) { _notAnyTagIds = notAnyTagIds; _toString = null; } public void setOrderByCol1(String orderByCol1) { _orderByCol1 = orderByCol1; _toString = null; } public void setOrderByCol2(String orderByCol2) { _orderByCol2 = orderByCol2; _toString = null; } public void setOrderByType1(String orderByType1) { _orderByType1 = orderByType1; _toString = null; } public void setOrderByType2(String orderByType2) { _orderByType2 = orderByType2; _toString = null; } public void setPaginationType(String paginationType) { _paginationType = paginationType; _toString = null; } public void setPublishDate(Date publishDate) { _publishDate = publishDate; _toString = null; } public void setStart(int start) { _start = start; _toString = null; } public void setTitle(String title) { _title = title; } public void setUserName(String userName) { _userName = userName; } public void setVisible(Boolean visible) { _visible = visible; _toString = null; } @Override public String toString() { if (_toString != null) { return _toString; } StringBundler sb = new StringBundler(61); sb.append("{allCategoryIds="); sb.append(StringUtil.merge(_allCategoryIds)); sb.append(", allTagIds="); sb.append(StringUtil.merge(_allTagIds)); sb.append(", andOperator="); sb.append(_andOperator); sb.append(", anyCategoryIds="); sb.append(StringUtil.merge(_anyCategoryIds)); sb.append(", anyTagIds="); sb.append(StringUtil.merge(_anyTagIds)); sb.append(", classNameIds="); sb.append(StringUtil.merge(_classNameIds)); sb.append(", classTypeIds="); sb.append(StringUtil.merge(_classTypeIds)); sb.append(", description="); sb.append(_description); if (_layout != null) { sb.append(", layout="); sb.append(_layout.getPlid()); } sb.append(", end="); sb.append(_end); sb.append(", excludeZeroViewCount="); sb.append(_excludeZeroViewCount); sb.append(", expirationDate="); sb.append(_expirationDate); sb.append(", groupIds="); sb.append(StringUtil.merge(_groupIds)); sb.append(", keywords="); sb.append(_keywords); sb.append(", linkedAssetEntryId="); sb.append(_linkedAssetEntryId); sb.append(", listable="); sb.append(_listable); sb.append(", notAllCategoryIds="); sb.append(StringUtil.merge(_notAllCategoryIds)); sb.append(", notAllTagIds="); sb.append(StringUtil.merge(_notAllTagIds)); sb.append(", notAnyCategoryIds="); sb.append(StringUtil.merge(_notAnyCategoryIds)); sb.append(", notAnyTagIds="); sb.append(StringUtil.merge(_notAnyTagIds)); sb.append(", orderByCol1="); sb.append(_orderByCol1); sb.append(", orderByCol2="); sb.append(_orderByCol2); sb.append(", orderByType1="); sb.append(_orderByType1); sb.append(", orderByType2="); sb.append(_orderByType2); sb.append(", paginationType="); sb.append(_paginationType); sb.append(", publishDate="); sb.append(_publishDate); sb.append(", start="); sb.append(_start); sb.append(", title="); sb.append(_title); sb.append(", userName="); sb.append(_userName); sb.append(", visible="); sb.append(_visible); sb.append("}"); _toString = sb.toString(); return _toString; } private long[][] _expandTagIds(long[] tagIds) { long[][] tagIdsArray = new long[tagIds.length][1]; for (int i = 0; i < tagIds.length; i++) { tagIdsArray[i][0] = tagIds[i]; } return tagIdsArray; } private long[] _flattenTagIds(long[][] tagIdsArray) { List<Long> tagIdsList = new ArrayList<>(); for (int i = 0; i < tagIdsArray.length; i++) { long[] tagIds = tagIdsArray[i]; for (int j = 0; j < tagIds.length; j++) { long tagId = tagIds[j]; tagIdsList.add(tagId); } } return ArrayUtil.toArray( tagIdsList.toArray(new Long[tagIdsList.size()])); } private long[] _getLeftAndRightCategoryIds(long[] categoryIds) { long[] leftRightIds = new long[categoryIds.length * 3]; for (int i = 0; i < categoryIds.length; i++) { long categoryId = categoryIds[i]; try { AssetCategory category = AssetCategoryLocalServiceUtil.getCategory(categoryId); leftRightIds[3 * i] = category.getGroupId(); leftRightIds[3 * i + 1] = category.getLeftCategoryId(); leftRightIds[3 * i + 2] = category.getRightCategoryId(); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn("Error retrieving category " + categoryId); } } } return leftRightIds; } private static final Log _log = LogFactoryUtil.getLog( AssetEntryQuery.class); private long[] _allCategoryIds = new long[0]; private long[] _allTagIds = new long[0]; private long[][] _allTagIdsArray = new long[0][]; private boolean _andOperator; private long[] _anyCategoryIds = new long[0]; private long[] _anyTagIds = new long[0]; private Map<String, Serializable> _attributes = new HashMap<>(); private long[] _classNameIds = new long[0]; private long[] _classTypeIds = new long[0]; private String _description; private boolean _enablePermissions; private int _end = QueryUtil.ALL_POS; private boolean _excludeZeroViewCount; private Date _expirationDate; private long[] _groupIds = new long[0]; private String _keywords; private Layout _layout; private long _linkedAssetEntryId; private Boolean _listable = true; private long[] _notAllCategoryIds = new long[0]; private long[] _notAllTagIds = new long[0]; private long[][] _notAllTagIdsArray = new long[0][]; private long[] _notAnyCategoryIds = new long[0]; private long[] _notAnyTagIds = new long[0]; private String _orderByCol1; private String _orderByCol2; private String _orderByType1; private String _orderByType2; private String _paginationType; private Date _publishDate; private int _start = QueryUtil.ALL_POS; private String _title; private String _toString; private String _userName; private Boolean _visible = Boolean.TRUE; }