/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.portlets.guiadiscussao.util;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.Resource;
import javax.faces.application.ResourceHandler;
import br.gov.camara.edemocracia.portlets.guiadiscussao.beans.admin.FileEntryDisplay;
import com.liferay.faces.portal.context.LiferayFacesContext;
import com.liferay.faces.util.lang.StringPool;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
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.portlet.documentlibrary.model.DLFileEntry;
import com.liferay.portlet.documentlibrary.model.DLFolder;
import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
import com.liferay.portlet.documentlibrary.util.DLUtil;
import com.liferay.portlet.shopping.util.comparator.OrderDateComparator;
public final class BibliotecaImagensUtil {
private static final Log LOG = LogFactoryUtil
.getLog(BibliotecaImagensUtil.class);
private BibliotecaImagensUtil() {
}
/**
* Carrega todas as imagens que estão cadastradas na biblioteca de
* documentos da comunidade
*/
public static List<FileEntryDisplay> getTodasImagensDaBiblioteca(
long groupId) {
List<FileEntryDisplay> retorno = new ArrayList<FileEntryDisplay>();
retorno.add(getImagemPadraoBanner());
try {
List<DLFileEntry> dlFileEntries = DLFileEntryLocalServiceUtil
.getGroupFileEntries(groupId, QueryUtil.ALL_POS,
QueryUtil.ALL_POS);
retorno.addAll(filtrarImagens(dlFileEntries));
} catch (SystemException e) {
LOG.error("Erro ao carregar imagens.", e);
} catch (PortalException e) {
LOG.error("Erro ao carregar imagens.", e);
}
return retorno;
}
public static String getUrlImagem(long fileEntryId) {
if (fileEntryId == 0) {
return getUrlImagemPadrao();
} else {
try {
FileEntry fileEntry = DLAppServiceUtil
.getFileEntry(fileEntryId);
return getUrlImagem(fileEntry);
} catch (PortalException e) {
return "";
} catch (SystemException e) {
LOG.error("Ocorreu um erro ao recuperar imagem " + fileEntryId, e);
return getUrlImagemPadrao();
}
}
}
public static String getUrlImagem(FileEntry fileEntry)
throws PortalException, SystemException {
return DLUtil.getPreviewURL(fileEntry, fileEntry.getFileVersion(),
LiferayFacesContext.getInstance().getThemeDisplay(),
StringPool.BLANK, false, true);
}
/**
* Retorna uma instancia de FileEntryDisplay
*
* @param fileEntryId
* @return
* @throws PortalException
* se a imagem não for encontrada
*/
public static FileEntryDisplay getFileEntryDisplay(long fileEntryId)
throws PortalException {
FileEntryDisplay fileEntryDisplay = null;
try {
FileEntry fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId);
fileEntryDisplay = new FileEntryDisplay(fileEntry.getFileEntryId(),
fileEntry.getTitle(), getUrlImagem(fileEntry));
} catch (SystemException e) {
LOG.error("Erro ao construir url para imagem.", e);
throw new RuntimeException(e);
}
return fileEntryDisplay;
}
/**
* Carrega todos os icones que estão na biblioteca de documentos global na
* pasta: /icones/guia
*
* @throws PortalException
*/
public static List<FileEntryDisplay> getTodosIconesAcoes() {
long companyGroupId = LiferayFacesContext.getInstance()
.getThemeDisplay().getCompanyGroupId();
List<FileEntryDisplay> retorno = new ArrayList<FileEntryDisplay>();
retorno.add(getImagemPadrao());
try {
DLFolder pastaIcones = DLFolderLocalServiceUtil.getFolder(
companyGroupId, 0l, "icones");
DLFolder pastaGuia = DLFolderLocalServiceUtil.getFolder(
companyGroupId, pastaIcones.getFolderId(), "guia");
OrderDateComparator orderByDate = new OrderDateComparator();
List<DLFileEntry> dlFileEntries = DLFileEntryLocalServiceUtil
.getFileEntries(companyGroupId, pastaGuia.getFolderId(),
QueryUtil.ALL_POS, QueryUtil.ALL_POS, orderByDate);
retorno.addAll(filtrarImagens(dlFileEntries));
} catch (SystemException e) {
LOG.error("Erro ao carregar icones.", e);
} catch (PortalException e) {
// Ignore: Esse erro ocorre quando não há pasta
}
return retorno;
}
/**
* Retorna uma lista de FileEntryDisplay contendo somente as imagens
*
* @param dlFileEntries
* @return
* @throws PortalException
*/
private static List<FileEntryDisplay> filtrarImagens(List<DLFileEntry> dlFileEntries) throws PortalException {
List<FileEntryDisplay> retorno = new ArrayList<FileEntryDisplay>();
for (DLFileEntry file : dlFileEntries) {
if (file.getMimeType().startsWith("image/") ) {
retorno.add(getFileEntryDisplay(file.getFileEntryId()));
}
}
return retorno;
}
/**
* Retorna url para imagem padrão das ações
*/
public static String getUrlImagemPadrao() {
return getURLImagemResource("padrao.jpg");
}
/**
* Retorna imagem padrão para ações
* @return
*/
public static FileEntryDisplay getImagemPadrao() {
return new FileEntryDisplay(0, "Imagem Padrão", getUrlImagemPadrao());
}
/**
* Retorna url para imagem padrão do banner
* @return
*/
public static String getUrlImagemPadraoBanner() {
return getURLImagemResource("padrao-banner.jpg");
}
/**
* Retorna imagem padrão para banner
* @return
*/
public static FileEntryDisplay getImagemPadraoBanner() {
return new FileEntryDisplay(0, "Imagem Padrão", getUrlImagemPadraoBanner());
}
/**
* Retorna a url da imagem localizada na pasta imagem dentro de resources
* @param nomeDaImagem
* @return
*/
private static String getURLImagemResource(String nomeDaImagem){
ResourceHandler rs = LiferayFacesContext.getInstance().getApplication()
.getResourceHandler();
Resource resource = rs.createResource(nomeDaImagem, "images");
return resource.getRequestPath();
}
}