/** * 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.document.library.demo.data.creator.internal; import com.liferay.document.library.demo.data.creator.FileEntryDemoDataCreator; import com.liferay.document.library.kernel.exception.NoSuchFileEntryException; import com.liferay.document.library.kernel.service.DLAppLocalService; 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.FileEntry; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.security.RandomUtil; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.util.FileUtil; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.concurrent.CopyOnWriteArrayList; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Alejandro Hernández */ @Component( property = {"source=unsplash", "type=image"}, service = FileEntryDemoDataCreator.class ) public class UnsplashFileEntryDemoDataCreatorImpl implements FileEntryDemoDataCreator { @Override public FileEntry create(long userId, long folderId) throws IOException, PortalException { UUID uuid = UUID.randomUUID(); String sourceFileName = uuid.toString() + ".jpeg"; return create(userId, folderId, sourceFileName); } @Override public FileEntry create(long userId, long folderId, String name) throws IOException, PortalException { Folder folder = _dlAppLocalService.getFolder(folderId); FileEntry fileEntry = _dlAppLocalService.addFileEntry( userId, folder.getGroupId(), folderId, name, "image/jpeg", _getBytes(), new ServiceContext()); _fileEntryIds.add(fileEntry.getFileEntryId()); return fileEntry; } @Override public void delete() throws PortalException { for (long fileEntryId : _fileEntryIds) { try { _dlAppLocalService.deleteFileEntry(fileEntryId); } catch (NoSuchFileEntryException nsfee) { if (_log.isWarnEnabled()) { _log.warn(nsfee, nsfee); } } _fileEntryIds.remove(fileEntryId); } } private byte[] _getBytes() throws IOException, PortalException { URL url = _getNextUrl(); InputStream inputStream = null; try { inputStream = url.openStream(); return FileUtil.getBytes(inputStream); } catch (IOException ioe) { if (_log.isWarnEnabled()) { _log.warn(ioe, ioe); } String fileName = String.format( "dependencies/%d.jpg", RandomUtil.nextInt(5)); try { return FileUtil.getBytes(getClass(), fileName); } catch (Exception e) { throw new PortalException(e); } } finally { if (inputStream != null) { inputStream.close(); } } } private URL _getNextUrl() throws MalformedURLException { _categoryIndex++; if (_categoryIndex == _categories.size()) { _categoryIndex = 0; } String urlString = String.format( "https://source.unsplash.com/category/%s/1920x1080", _categories.get(_categoryIndex)); return new URL(urlString); } private static final Log _log = LogFactoryUtil.getLog( UnsplashFileEntryDemoDataCreatorImpl.class); private static final List<String> _categories = Arrays.asList( "buildings", "food", "nature", "people", "technology", "objects"); private volatile int _categoryIndex = -1; @Reference private DLAppLocalService _dlAppLocalService; private final List<Long> _fileEntryIds = new CopyOnWriteArrayList<>(); }