/**
* 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.portal.search.web.internal.type.facet.portlet;
import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil;
import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.portal.kernel.security.permission.ResourceActionsUtil;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.KeyValuePair;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.search.web.internal.util.PortletPreferencesHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import javax.portlet.PortletPreferences;
/**
* @author Lino Alves
*/
public class TypeFacetPortletPreferencesImpl
implements TypeFacetPortletPreferences {
public TypeFacetPortletPreferencesImpl(
Optional<PortletPreferences> portletPreferencesOptional) {
_portletPreferencesHelper = new PortletPreferencesHelper(
portletPreferencesOptional);
}
@Override
public Optional<String[]> getAssetTypesArray() {
Optional<String> assetTypes = _portletPreferencesHelper.getString(
TypeFacetPortletPreferences.PREFERENCE_KEY_ASSET_TYPES);
return assetTypes.map(StringUtil::split);
}
@Override
public String getAssetTypesString() {
return _portletPreferencesHelper.getString(
TypeFacetPortletPreferences.PREFERENCE_KEY_ASSET_TYPES,
StringPool.BLANK);
}
@Override
public List<KeyValuePair> getAvailableAssetTypes(
long companyId, Locale locale) {
Optional<String[]> assetTypesOptional = getAssetTypesArray();
String[] allAssetTypes = getAllAssetTypes(companyId);
String[] assetTypes = assetTypesOptional.orElse(allAssetTypes);
List<KeyValuePair> availableAssetTypes = new ArrayList<>();
for (String className : allAssetTypes) {
if (!ArrayUtil.contains(assetTypes, className)) {
availableAssetTypes.add(getKeyValuePair(locale, className));
}
}
return availableAssetTypes;
}
@Override
public List<KeyValuePair> getCurrentAssetTypes(
long companyId, Locale locale) {
Optional<String[]> assetTypesOptional = getAssetTypesArray();
String[] allAssetTypes = getAllAssetTypes(companyId);
String[] assetTypes = assetTypesOptional.orElse(allAssetTypes);
List<KeyValuePair> currentAssetTypes = new ArrayList<>();
for (String className : assetTypes) {
currentAssetTypes.add(getKeyValuePair(locale, className));
}
return currentAssetTypes;
}
@Override
public int getFrequencyThreshold() {
return _portletPreferencesHelper.getInteger(
TypeFacetPortletPreferences.PREFERENCE_KEY_FREQUENCY_THRESHOLD, 1);
}
@Override
public String getParameterName() {
return _portletPreferencesHelper.getString(
TypeFacetPortletPreferences.PREFERENCE_KEY_PARAMETER_NAME, "type");
}
@Override
public boolean isFrequenciesVisible() {
return _portletPreferencesHelper.getBoolean(
TypeFacetPortletPreferences.PREFERENCE_KEY_FREQUENCIES_VISIBLE,
true);
}
protected String[] getAllAssetTypes(long companyId) {
List<String> classNames = new ArrayList<>();
List<AssetRendererFactory<?>> assetRendererFactories =
AssetRendererFactoryRegistryUtil.getAssetRendererFactories(
companyId);
for (AssetRendererFactory<?> assetRendererFactory :
assetRendererFactories) {
String className = assetRendererFactory.getClassName();
classNames.add(className);
}
return ArrayUtil.toStringArray(classNames);
}
protected KeyValuePair getKeyValuePair(Locale locale, String className) {
return new KeyValuePair(
className, ResourceActionsUtil.getModelResource(locale, className));
}
private final PortletPreferencesHelper _portletPreferencesHelper;
}