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

com.liferay.document.library.internal.atom.FileEntryAtomCollectionAdapter 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.document.library.internal.atom;

import com.liferay.document.library.kernel.service.DLAppService;
import com.liferay.document.library.kernel.util.comparator.RepositoryModelTitleComparator;
import com.liferay.portal.atom.AtomPager;
import com.liferay.portal.atom.AtomUtil;
import com.liferay.portal.kernel.atom.AtomCollectionAdapter;
import com.liferay.portal.kernel.atom.AtomEntryContent;
import com.liferay.portal.kernel.atom.AtomException;
import com.liferay.portal.kernel.atom.AtomRequestContext;
import com.liferay.portal.kernel.atom.BaseMediaAtomCollectionAdapter;
import com.liferay.portal.kernel.portlet.PortletProvider;
import com.liferay.portal.kernel.portlet.PortletProviderUtil;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.util.Base64;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.MimeTypesUtil;
import com.liferay.portal.kernel.util.StreamUtil;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import java.util.Date;
import java.util.List;

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

/**
 * @author Igor Spasic
 */
@Component(
	property = "model.class.name=com.liferay.portal.kernel.repository.model.FileEntry",
	service = AtomCollectionAdapter.class
)
public class FileEntryAtomCollectionAdapter
	extends BaseMediaAtomCollectionAdapter {

	@Override
	public String getCollectionName() {
		return COLLECTION_NAME;
	}

	@Override
	public List getEntryAuthors(FileEntry fileEntry) {
		return ListUtil.fromArray(fileEntry.getUserName());
	}

	@Override
	public AtomEntryContent getEntryContent(
		FileEntry fileEntry, AtomRequestContext atomRequestContext) {

		AtomEntryContent atomEntryContent = new AtomEntryContent(
			AtomEntryContent.Type.MEDIA);

		atomEntryContent.setMimeType(fileEntry.getMimeType());

		String srcLink = AtomUtil.createEntryLink(
			atomRequestContext, COLLECTION_NAME,
			fileEntry.getFileEntryId() + ":media");

		atomEntryContent.setSrcLink(srcLink);

		return atomEntryContent;
	}

	@Override
	public String getEntryId(FileEntry fileEntry) {
		return String.valueOf(fileEntry.getPrimaryKey());
	}

	@Override
	public String getEntrySummary(FileEntry fileEntry) {
		return fileEntry.getDescription();
	}

	@Override
	public String getEntryTitle(FileEntry fileEntry) {
		return fileEntry.getTitle();
	}

	@Override
	public Date getEntryUpdated(FileEntry fileEntry) {
		return fileEntry.getModifiedDate();
	}

	@Override
	public String getFeedTitle(AtomRequestContext atomRequestContext) {
		String portletId = PortletProviderUtil.getPortletId(
			FileEntry.class.getName(), PortletProvider.Action.VIEW);

		return AtomUtil.createFeedTitleFromPortletName(
			atomRequestContext, portletId) + " files";
	}

	@Override
	public String getMediaContentType(FileEntry fileEntry) {
		return fileEntry.getMimeType();
	}

	@Override
	public String getMediaName(FileEntry fileEntry) {
		return fileEntry.getTitle();
	}

	@Override
	public InputStream getMediaStream(FileEntry fileEntry)
		throws AtomException {

		try {
			return fileEntry.getContentStream();
		}
		catch (Exception e) {
			throw new AtomException(SC_INTERNAL_SERVER_ERROR, e);
		}
	}

	@Override
	protected void doDeleteEntry(
			String resourceName, AtomRequestContext atomRequestContext)
		throws Exception {

		long fileEntryId = GetterUtil.getLong(resourceName);

		_dlAppService.deleteFileEntry(fileEntryId);
	}

	@Override
	protected FileEntry doGetEntry(
			String resourceName, AtomRequestContext atomRequestContext)
		throws Exception {

		long fileEntryId = GetterUtil.getLong(resourceName);

		return _dlAppService.getFileEntry(fileEntryId);
	}

	@Override
	protected Iterable doGetFeedEntries(
			AtomRequestContext atomRequestContext)
		throws Exception {

		long folderId = atomRequestContext.getLongParameter("folderId");

		long repositoryId = 0;

		if (folderId != 0) {
			Folder folder = _dlAppService.getFolder(folderId);

			repositoryId = folder.getRepositoryId();
		}
		else {
			repositoryId = atomRequestContext.getLongParameter("repositoryId");
		}

		int count = _dlAppService.getFileEntriesCount(repositoryId, folderId);

		AtomPager atomPager = new AtomPager(atomRequestContext, count);

		AtomUtil.saveAtomPagerInRequest(atomRequestContext, atomPager);

		return _dlAppService.getFileEntries(
			repositoryId, folderId, atomPager.getStart(),
			atomPager.getEnd() + 1,
			new RepositoryModelTitleComparator());
	}

	@Override
	protected FileEntry doPostEntry(
			String title, String summary, String content, Date date,
			AtomRequestContext atomRequestContext)
		throws Exception {

		long folderId = atomRequestContext.getLongParameter("folderId");

		long repositoryId = 0;

		if (folderId != 0) {
			Folder folder = _dlAppService.getFolder(folderId);

			repositoryId = folder.getRepositoryId();
		}
		else {
			repositoryId = atomRequestContext.getLongParameter("repositoryId");
		}

		String mimeType = atomRequestContext.getHeader("Media-Content-Type");

		if (mimeType == null) {
			mimeType = MimeTypesUtil.getContentType(title);
		}

		byte[] contentDecoded = Base64.decode(content);

		ByteArrayInputStream contentInputStream = new ByteArrayInputStream(
			contentDecoded);

		ServiceContext serviceContext = new ServiceContext();

		return _dlAppService.addFileEntry(
			repositoryId, folderId, title, mimeType, title, summary, null,
			contentInputStream, contentDecoded.length, serviceContext);
	}

	@Override
	protected FileEntry doPostMedia(
			String mimeType, String slug, InputStream inputStream,
			AtomRequestContext atomRequestContext)
		throws Exception {

		long folderId = atomRequestContext.getLongParameter("folderId");

		long repositoryId = 0;

		if (folderId != 0) {
			Folder folder = _dlAppService.getFolder(folderId);

			repositoryId = folder.getRepositoryId();
		}
		else {
			repositoryId = atomRequestContext.getLongParameter("repositoryId");
		}

		String title = atomRequestContext.getHeader("Title");
		String description = atomRequestContext.getHeader("Summary");

		ByteArrayOutputStream byteArrayOutputStream =
			new ByteArrayOutputStream();

		StreamUtil.transfer(inputStream, byteArrayOutputStream);

		byte[] content = byteArrayOutputStream.toByteArray();

		ByteArrayInputStream contentInputStream = new ByteArrayInputStream(
			content);

		ServiceContext serviceContext = new ServiceContext();

		return _dlAppService.addFileEntry(
			repositoryId, folderId, title, mimeType, title, description, null,
			contentInputStream, content.length, serviceContext);
	}

	@Override
	protected void doPutEntry(
			FileEntry fileEntry, String title, String summary, String content,
			Date date, AtomRequestContext atomRequestContext)
		throws Exception {

		String mimeType = atomRequestContext.getHeader("Media-Content-Type");

		if (mimeType == null) {
			mimeType = MimeTypesUtil.getContentType(title);
		}

		byte[] contentDecoded = Base64.decode(content);

		ByteArrayInputStream contentInputStream = new ByteArrayInputStream(
			contentDecoded);

		ServiceContext serviceContext = new ServiceContext();

		_dlAppService.updateFileEntry(
			fileEntry.getFileEntryId(), title, mimeType, title, summary, null,
			true, contentInputStream, contentDecoded.length, serviceContext);
	}

	@Override
	protected void doPutMedia(
			FileEntry fileEntry, String mimeType, String slug,
			InputStream inputStream, AtomRequestContext atomRequestContext)
		throws Exception {

		String title = atomRequestContext.getHeader("Title");
		String description = atomRequestContext.getHeader("Summary");

		ByteArrayOutputStream byteArrayOutputStream =
			new ByteArrayOutputStream();

		StreamUtil.transfer(inputStream, byteArrayOutputStream);

		byte[] content = byteArrayOutputStream.toByteArray();

		ByteArrayInputStream contentInputStream = new ByteArrayInputStream(
			content);

		ServiceContext serviceContext = new ServiceContext();

		_dlAppService.updateFileEntry(
			fileEntry.getFileEntryId(), slug, mimeType, title, description,
			null, true, contentInputStream, content.length, serviceContext);
	}

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

	protected static final String COLLECTION_NAME = "files";

	private DLAppService _dlAppService;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy