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

com.liferay.adaptive.media.image.service.impl.AMImageEntryLocalServiceImpl Maven / Gradle / Ivy

/**
 * 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.adaptive.media.image.service.impl;

import com.liferay.adaptive.media.exception.AMRuntimeException;
import com.liferay.adaptive.media.image.configuration.AMImageConfigurationEntry;
import com.liferay.adaptive.media.image.counter.AMImageCounter;
import com.liferay.adaptive.media.image.exception.DuplicateAMImageEntryException;
import com.liferay.adaptive.media.image.internal.storage.ImageStorage;
import com.liferay.adaptive.media.image.model.AMImageEntry;
import com.liferay.adaptive.media.image.service.base.AMImageEntryLocalServiceBaseImpl;
import com.liferay.document.library.kernel.service.DLAppLocalService;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMap;
import com.liferay.osgi.service.tracker.collections.map.ServiceTrackerMapFactory;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.spring.extender.service.ServiceReference;

import java.io.InputStream;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;

/**
 * Provides the local service for accessing, adding, and deleting adaptive media
 * image entries.
 *
 * 

* This service adds adaptive media images to both the database as adaptive * media image entries and to the file store as bytes. Deleting adaptive media * images removes the adaptive media image entry from the database and the bytes * from the file store. *

* *

* This service is a low level API and, in general, should not be used by third * party developers as the entry point for adaptive media images. *

* * @author Sergio González */ public class AMImageEntryLocalServiceImpl extends AMImageEntryLocalServiceBaseImpl { /** * Adds an adaptive media image entry in the database and stores the image * bytes in the file store. * * @param amImageConfigurationEntry the configuration used to create the * adaptive media image * @param fileVersion the file version used to create the adaptive media * image * @param height the adaptive media image's height * @param width the adaptive media image's width * @param inputStream the adaptive media image's input stream to store in * the file store * @param size the adaptive media image's size * @return the adaptive media image * @throws PortalException if an adaptive media image already exists for the * file version and configuration */ @Override public AMImageEntry addAMImageEntry( AMImageConfigurationEntry amImageConfigurationEntry, FileVersion fileVersion, int height, int width, InputStream inputStream, long size) throws PortalException { _checkDuplicateAMImageEntry( amImageConfigurationEntry.getUUID(), fileVersion.getFileVersionId()); long imageEntryId = counterLocalService.increment(); AMImageEntry amImageEntry = amImageEntryPersistence.create( imageEntryId); amImageEntry.setGroupId(fileVersion.getGroupId()); amImageEntry.setCompanyId(fileVersion.getCompanyId()); amImageEntry.setCreateDate(new Date()); amImageEntry.setConfigurationUuid(amImageConfigurationEntry.getUUID()); amImageEntry.setFileVersionId(fileVersion.getFileVersionId()); amImageEntry.setMimeType(fileVersion.getMimeType()); amImageEntry.setHeight(height); amImageEntry.setWidth(width); amImageEntry.setSize(size); imageStorage.save( fileVersion, amImageConfigurationEntry.getUUID(), inputStream); return amImageEntryPersistence.update(amImageEntry); } @Override public void afterPropertiesSet() { super.afterPropertiesSet(); Bundle bundle = FrameworkUtil.getBundle( AMImageEntryLocalServiceImpl.class); BundleContext bundleContext = bundle.getBundleContext(); _serviceTrackerMap = ServiceTrackerMapFactory.openSingleValueMap( bundleContext, AMImageCounter.class, "adaptive.media.key"); } /** * Deletes all the adaptive media images generated for the configuration in * the company. This method deletes both the adaptive media image entry from * the database and the bytes from the file store. * * @param companyId the primary key of the company * @param amImageConfigurationEntry the configuration used to create the * adaptive media image */ @Override public void deleteAMImageEntries( long companyId, AMImageConfigurationEntry amImageConfigurationEntry) { amImageEntryPersistence.removeByC_C( companyId, amImageConfigurationEntry.getUUID()); imageStorage.delete(companyId, amImageConfigurationEntry.getUUID()); } /** * Deletes all the adaptive media images generated for a file version. This * method deletes both the adaptive media image entry from the database and * the bytes from the file store. * * @param fileVersion the file version * @throws PortalException if the file version was not found */ @Override public void deleteAMImageEntryFileVersion(FileVersion fileVersion) throws PortalException { List amImageEntries = amImageEntryPersistence.findByFileVersionId( fileVersion.getFileVersionId()); for (AMImageEntry amImageEntry : amImageEntries) { try { amImageEntryPersistence.remove(amImageEntry); imageStorage.delete( fileVersion, amImageEntry.getConfigurationUuid()); } catch (AMRuntimeException.IOException amreioe) { _log.error(amreioe, amreioe); } } } /** * Deletes adaptive media images generated for a file version under a given * configuration. This method deletes both the adaptive media image entry * from the database and the bytes from the file store. * * @param configurationUuid the configuration UUID * @param fileVersionId the primary key of the file version * @throws PortalException if the file version was not found */ @Override public void deleteAMImageEntryFileVersion( String configurationUuid, long fileVersionId) throws PortalException { FileVersion fileVersion = dlAppLocalService.getFileVersion( fileVersionId); AMImageEntry amImageEntry = amImageEntryPersistence.findByC_F( configurationUuid, fileVersionId); amImageEntryPersistence.remove(amImageEntry); imageStorage.delete(fileVersion, amImageEntry.getConfigurationUuid()); } @Override public void destroy() { super.destroy(); _serviceTrackerMap.close(); } /** * Returns the adaptive media image entry generated for the configuration * and file version. * * @param configurationUuid the UUID of the configuration used to create * the adaptive media image * @param fileVersionId the primary key of the file version * @return the matching adaptive media image entry, or null if * a matching adaptive media image entry could not be found */ @Override public AMImageEntry fetchAMImageEntry( String configurationUuid, long fileVersionId) { return amImageEntryPersistence.fetchByC_F( configurationUuid, fileVersionId); } /** * Returns the number of adaptive media image entries generated for the * configuration in the company. * * @param companyId the primary key of the company * @param configurationUuid the UUID of the configuration used to create * the adaptive media image * @return the number of adaptive media image entries in the company for the * configuration */ @Override public int getAMImageEntriesCount( long companyId, String configurationUuid) { return amImageEntryPersistence.countByC_C(companyId, configurationUuid); } /** * Returns the input stream of the adaptive media image generated for a file * version and configuration. * * @param amImageConfigurationEntry the configuration used to create the * adaptive media image * @param fileVersion the file version used to create the adaptive media * image * @return the input stream of the adaptive media image generated for a file * version and configuration */ @Override public InputStream getAMImageEntryContentStream( AMImageConfigurationEntry amImageConfigurationEntry, FileVersion fileVersion) { return imageStorage.getContentStream( fileVersion, amImageConfigurationEntry.getUUID()); } /** * Returns the total number of adaptive media images that are expected to be * in a company once they are generated. The number of adaptive media images * could be less if there are images that haven't generated the adaptive * media image yet. * * @param companyId the primary key of the company * @return the number of expected adaptive media images for a company */ @Override public int getExpectedAMImageEntriesCount(long companyId) { Collection amImageCounters = _serviceTrackerMap.values(); Stream amImageCounterStream = amImageCounters.stream(); return amImageCounterStream.mapToInt( amImageCounter -> amImageCounter.countExpectedAMImageEntries(companyId) ).sum(); } /** * Returns the percentage of images that have an adaptive media image * generated based on the expected number of adaptive media images for a * configuration in a company. * * @param companyId the primary key of the company * @param configurationUuid the UUID of the configuration used to create * the adaptive media image * @return the percentage of images that have an adaptive media image out of * the expected adaptive media images */ @Override public int getPercentage(long companyId, String configurationUuid) { int expectedAMImageEntriesCount = getExpectedAMImageEntriesCount( companyId); if (expectedAMImageEntriesCount == 0) { return 0; } int actualAMImageEntriesCount = getAMImageEntriesCount( companyId, configurationUuid); int percentage = (actualAMImageEntriesCount * 100) / expectedAMImageEntriesCount; return Math.min(percentage, 100); } @ServiceReference(type = DLAppLocalService.class) protected DLAppLocalService dlAppLocalService; @ServiceReference(type = ImageStorage.class) protected ImageStorage imageStorage; private void _checkDuplicateAMImageEntry( String configurationUuid, long fileVersionId) throws DuplicateAMImageEntryException { AMImageEntry amImageEntry = amImageEntryPersistence.fetchByC_F( configurationUuid, fileVersionId); if (amImageEntry != null) { throw new DuplicateAMImageEntryException(); } } private static final Log _log = LogFactoryUtil.getLog( AMImageEntryLocalServiceImpl.class); private ServiceTrackerMap _serviceTrackerMap; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy