com.liferay.adaptive.media.image.internal.finder.AMImageFinderImpl Maven / Gradle / Ivy
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.adaptive.media.image.internal.finder;
import com.liferay.adaptive.media.AMAttribute;
import com.liferay.adaptive.media.AMDistanceComparator;
import com.liferay.adaptive.media.AdaptiveMedia;
import com.liferay.adaptive.media.exception.AMRuntimeException;
import com.liferay.adaptive.media.finder.AMFinder;
import com.liferay.adaptive.media.finder.AMQuery;
import com.liferay.adaptive.media.image.configuration.AMImageConfigurationEntry;
import com.liferay.adaptive.media.image.configuration.AMImageConfigurationHelper;
import com.liferay.adaptive.media.image.finder.AMImageFinder;
import com.liferay.adaptive.media.image.finder.AMImageQueryBuilder;
import com.liferay.adaptive.media.image.internal.configuration.AMImageAttributeMapping;
import com.liferay.adaptive.media.image.internal.processor.AMImage;
import com.liferay.adaptive.media.image.mime.type.AMImageMimeTypeProvider;
import com.liferay.adaptive.media.image.model.AMImageEntry;
import com.liferay.adaptive.media.image.processor.AMImageAttribute;
import com.liferay.adaptive.media.image.processor.AMImageProcessor;
import com.liferay.adaptive.media.image.service.AMImageEntryLocalService;
import com.liferay.adaptive.media.image.url.AMImageURLFactory;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.kernel.util.ContentTypes;
import java.net.URI;
import java.util.Collection;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Adolfo Pérez
*/
@Component(
immediate = true,
property = "model.class.name=com.liferay.portal.kernel.repository.model.FileVersion",
service = {AMFinder.class, AMImageFinder.class}
)
public class AMImageFinderImpl implements AMImageFinder {
@Override
public Stream> getAdaptiveMediaStream(
Function
>
amImageQueryBuilderFunction)
throws PortalException {
if (amImageQueryBuilderFunction == null) {
throw new IllegalArgumentException(
"Adaptive media image query builder is null");
}
AMImageQueryBuilderImpl amImageQueryBuilderImpl =
new AMImageQueryBuilderImpl();
AMQuery amQuery =
amImageQueryBuilderFunction.apply(amImageQueryBuilderImpl);
if (amQuery != AMImageQueryBuilderImpl.AM_QUERY) {
throw new IllegalArgumentException(
"Only queries built by the provided query builder are valid");
}
FileVersion fileVersion = amImageQueryBuilderImpl.getFileVersion();
if (!_amImageMimeTypeProvider.isMimeTypeSupported(
fileVersion.getMimeType())) {
return Stream.empty();
}
String mimeType = fileVersion.getMimeType();
if (mimeType.equals(ContentTypes.IMAGE_SVG_XML)) {
return Stream.of(_createRawAdaptiveMedia(fileVersion));
}
BiFunction uriFactory =
_getURIFactory(amImageQueryBuilderImpl);
AMImageQueryBuilder.ConfigurationStatus configurationStatus =
amImageQueryBuilderImpl.getConfigurationStatus();
Collection amImageConfigurationEntries =
_amImageConfigurationHelper.getAMImageConfigurationEntries(
fileVersion.getCompanyId(), configurationStatus.getPredicate());
Predicate filter =
amImageQueryBuilderImpl.getConfigurationEntryFilter();
AMDistanceComparator>
amDistanceComparator =
amImageQueryBuilderImpl.getAMDistanceComparator();
Stream amImageConfigurationEntryStream =
amImageConfigurationEntries.stream();
return amImageConfigurationEntryStream.filter(
amImageConfigurationEntry ->
filter.test(amImageConfigurationEntry) &&
_hasAdaptiveMedia(fileVersion, amImageConfigurationEntry)
).map(
amImageConfigurationEntry -> _createMedia(
fileVersion, uriFactory, amImageConfigurationEntry)
).sorted(
amDistanceComparator.toComparator()
);
}
private AdaptiveMedia _createMedia(
FileVersion fileVersion,
BiFunction uriFactory,
AMImageConfigurationEntry amImageConfigurationEntry) {
Map properties =
amImageConfigurationEntry.getProperties();
AMAttribute © 2015 - 2025 Weber Informatics LLC | Privacy Policy