All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.adaptive.media.image.internal.handler.PathInterpreter 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.handler;

import com.liferay.adaptive.media.AMAttribute;
import com.liferay.adaptive.media.exception.AMRuntimeException;
import com.liferay.adaptive.media.image.configuration.AMImageConfigurationEntry;
import com.liferay.adaptive.media.image.configuration.AMImageConfigurationHelper;
import com.liferay.adaptive.media.image.internal.util.Tuple;
import com.liferay.document.library.kernel.service.DLAppService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileVersion;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Adolfo Pérez
 */
@Component(immediate = true, service = PathInterpreter.class)
public class PathInterpreter {

	public Optional>> interpretPath(
		String pathInfo) {

		try {
			if (pathInfo == null) {
				throw new IllegalArgumentException("Path information is null");
			}

			Matcher matcher = _pattern.matcher(pathInfo);

			if (!matcher.matches()) {
				return Optional.empty();
			}

			long fileEntryId = Long.valueOf(matcher.group(1));

			FileEntry fileEntry = _dlAppService.getFileEntry(fileEntryId);

			long fileVersionId = _getFileVersionId(matcher);

			FileVersion fileVersion = _getFileVersion(fileEntry, fileVersionId);

			String configurationEntryUUID = _getConfigurationEntryUUID(matcher);

			Optional
				amImageConfigurationEntryOptional =
					_amImageConfigurationHelper.getAMImageConfigurationEntry(
						fileVersion.getCompanyId(), configurationEntryUUID);

			Map properties =
				amImageConfigurationEntryOptional.map(
					amImageConfigurationEntry -> {
						Map curProperties =
							amImageConfigurationEntry.getProperties();

						AMAttribute configurationUuidAMAttribute =
							AMAttribute.getConfigurationUuidAMAttribute();

						curProperties.put(
							configurationUuidAMAttribute.getName(),
							amImageConfigurationEntry.getUUID());

						return curProperties;
					}
				).orElse(
					new HashMap<>()
				);

			return Optional.of(Tuple.of(fileVersion, properties));
		}
		catch (PortalException pe) {
			throw new AMRuntimeException(pe);
		}
	}

	@Reference(unbind = "-")
	public void setAMImageConfigurationHelper(
		AMImageConfigurationHelper amImageConfigurationHelper) {

		_amImageConfigurationHelper = amImageConfigurationHelper;
	}

	@Reference(unbind = "-")
	public void setDLAppService(DLAppService dlAppService) {
		_dlAppService = dlAppService;
	}

	private String _getConfigurationEntryUUID(Matcher matcher) {
		return matcher.group(3);
	}

	private FileVersion _getFileVersion(FileEntry fileEntry, long fileVersionId)
		throws PortalException {

		if (fileVersionId == 0) {
			return fileEntry.getFileVersion();
		}

		return _dlAppService.getFileVersion(fileVersionId);
	}

	private long _getFileVersionId(Matcher matcher) {
		if (matcher.group(2) == null) {
			return 0;
		}

		return Long.valueOf(matcher.group(2));
	}

	private static final Pattern _pattern = Pattern.compile(
		"/image/(\\d+)(?:/(\\d+))?/([^/]+)/(?:[^/]+)");

	private AMImageConfigurationHelper _amImageConfigurationHelper;
	private DLAppService _dlAppService;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy