/**
* 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.dashboard.beans;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.portlet.ReadOnlyException;
import javax.portlet.ValidatorException;
import br.gov.camara.edemocracia.portlets.dashboard.Recurso;
import br.gov.camara.edemocracia.portlets.dashboard.VisualizacaoDados;
import br.gov.camara.edemocracia.portlets.dashboard.cache.util.DashboardCacheUtil;
import br.gov.camara.edemocracia.portlets.dashboard.dto.Configuracao;
import br.gov.camara.edemocracia.portlets.dashboard.manager.ConfiguracaoManager;
import br.gov.camara.edemocracia.portlets.dashboard.service.DashboardLocalServiceUtil;
import com.liferay.faces.portal.context.LiferayFacesContext;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Group;
import com.liferay.portal.service.ClassNameLocalServiceUtil;
import com.liferay.portal.service.ClassNameServiceUtil;
import com.liferay.util.portlet.PortletProps;
@ManagedBean(name = "configBean")
@RequestScoped
public class ConfiguracaoBean implements Serializable {
private static final long serialVersionUID = 1450749541796782156L;
private static final Log _log = LogFactoryUtil.getLog(ConfiguracaoBean.class);
private List<Group> comunidades;
private Configuracao config;
private String textoAjuda;
private List<Recurso> recursos;
@PostConstruct
private void init() {
carregarConfiguracao();
carregarTextoAjudaDeConfiguracao();
carregarComunidadesDisponiveis();
carregarRecursosDisponiveis();
}
private void carregarComunidadesDisponiveis() {
try {
comunidades = DashboardLocalServiceUtil
.getComunidadesDisponiveis(LiferayFacesContext
.getInstance().getCompanyId());
} catch (SystemException e) {
mostrarMensagemDeErro("Erro ao recuperar comunidades disponíveis.");
_log.error("Erro ao recuperar comunidades disponíveis.", e);
}
}
private void carregarConfiguracao() {
try {
Configuracao config = ConfiguracaoManager.getConfiguracao();
if (config == null) {
this.config = Configuracao.getConfiguracaoPadrao();
} else {
this.config = config;
}
} catch (JSONException e) {
mostrarMensagemDeErro("Erro ao carregar configuração.");
_log.error("Ocorreu um erro ao carregar configuracao.", e);
}
}
private void carregarTextoAjudaDeConfiguracao(){
Recurso recursoSelecionado = Recurso.withValue(config.getRecurso());
String ajuda = PortletProps.get("ajuda." + recursoSelecionado.toString().toLowerCase());
textoAjuda = recursoSelecionado.getLabelConfiguracao() + ": " + ajuda;
}
/**
* Verifica se os portlets que contem os recursos
* disponiveis no dashboard estão instalados.
*
*/
private void carregarRecursosDisponiveis() {
recursos = new ArrayList<Recurso>();
Recurso[] recursosCadastrados = Recurso.values();
for (Recurso recurso : recursosCadastrados) {
long classNameId = 0;
try {
classNameId = ClassNameServiceUtil.fetchClassNameId(recurso.getClassName());
} catch (Exception ex) {
_log.error("Erro ao recuperar classNameIds. ", ex);
}
if (classNameId != 0) {
recursos.add(recurso);
}
}
}
public void exibirAjuda(final AjaxBehaviorEvent event){
carregarTextoAjudaDeConfiguracao();
}
public String gravarConfiguracoes() throws JSONException {
try {
ConfiguracaoManager.salvarConfiguracao(config);
String portletInstanceId = (String) LiferayFacesContext.getInstance().getRequestAttribute("PORTLET_ID");
DashboardCacheUtil.limparTodos(portletInstanceId);
mostrarMensagemDeSucesso("Configurações gravadas com sucesso!");
} catch (ReadOnlyException e) {
mostrarMensagemDeErro("Erro ao salvar configuração.");
_log.error("Erro ao salvar configuração.", e);
} catch (ValidatorException e) {
mostrarMensagemDeErro("Erro ao salvar configuração.");
_log.error("Erro ao salvar configuração.", e);
} catch (IOException e) {
mostrarMensagemDeErro("Erro ao salvar configuração.");
_log.error("Erro ao salvar configuração.", e);
} catch (Exception e) {
mostrarMensagemDeErro("Erro ao salvar configuração.");
_log.error("Erro ao salvar configuração.", e);
}
return null;
}
private void mostrarMensagemDeErro(String mensagem) {
LiferayFacesContext.getInstance().addGlobalErrorMessage(mensagem);
}
private void mostrarMensagemDeSucesso(String mensagem) {
LiferayFacesContext.getInstance().addGlobalInfoMessage(mensagem);
}
public VisualizacaoDados[] getModosVisualizacao() {
return VisualizacaoDados.values();
}
public List<Recurso> getRecursos(){
return recursos;
}
public List<Group> getComunidades() {
return comunidades;
}
public void setComunidades(List<Group> comunidades) {
this.comunidades = comunidades;
}
public Configuracao getConfig() {
return config;
}
public void setConfig(Configuracao config) {
this.config = config;
}
public String getTextoAjuda() {
return textoAjuda;
}
}