/** * 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.priorizacao.ui.admin.pages.votacao; import java.text.MessageFormat; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.Model; import org.apache.wicket.validation.validator.MinimumValidator; import br.gov.camara.edemocracia.portlets.priorizacao.UsuariosComMaisVotosPorPropostaException; import br.gov.camara.edemocracia.portlets.priorizacao.UsuariosComMaisVotosTotaisException; import br.gov.camara.edemocracia.portlets.priorizacao.model.Configuracao; import br.gov.camara.edemocracia.portlets.priorizacao.service.PriorizacaoServiceUtil; import br.gov.camara.edemocracia.portlets.priorizacao.ui.admin.panels.PriorizacaoAdminMenuPanel; import br.gov.camara.edemocracia.portlets.priorizacao.ui.util.UIUtils; 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; public class ConfigurarVotacaoPage extends WebPage { private Form<Void> formConfiguracao; private RequiredTextField<Integer> maximoVotos; private RequiredTextField<Integer> maximoVotosProposta; private CheckBox votacaoAberta; private static final Log LOG = LogFactoryUtil .getLog(ConfigurarVotacaoPage.class); private Configuracao configuracao; @Override protected void onInitialize() { super.onInitialize(); initConfiguracao(); initMenuPriorizacao(); initMensagensFeedBack(); initFormConfiguracao(); initMaximoVotos(); initMaximoVotosProposta(); initVotacaoAberta(); } @Override protected void onConfigure() { super.onConfigure(); initConfiguracao(); } private void initConfiguracao() { configuracao = getConfiguracao(); } private void initMenuPriorizacao() { add(new PriorizacaoAdminMenuPanel("menuPriorizacao")); } private void initMensagensFeedBack() { add(new FeedbackPanel("mensagensFeedback")); } private void initFormConfiguracao() { formConfiguracao = new Form<Void>("formConfiguracao") { private static final long serialVersionUID = 1L; @Override protected void onValidate() { super.onValidate(); try { int maxVotos = maximoVotos.getConvertedInput(); int maxVotosProposta = maximoVotosProposta .getConvertedInput(); if (maxVotosProposta > maxVotos) error("O número de votos por proposta não pode ser maior que o máximo de votos."); } catch (NullPointerException ex) { // Ignore } } @Override protected void onSubmit() { super.onSubmit(); gravarAlteracoes(); } }; add(formConfiguracao); } private void initMaximoVotos() { maximoVotos = new RequiredTextField<Integer>("maximoVotos", new Model<Integer>(configuracao.getMaximoVotos())); maximoVotos.setType(Integer.class); maximoVotos.add(new MinimumValidator<Integer>(1)); formConfiguracao.add(maximoVotos); } private void initMaximoVotosProposta() { maximoVotosProposta = new RequiredTextField<Integer>( "maximoVotosProposta", new Model<Integer>( configuracao.getMaxVotosProposta())); maximoVotosProposta.setType(Integer.class); maximoVotosProposta.add(new MinimumValidator<Integer>(1)); formConfiguracao.add(maximoVotosProposta); } private void initVotacaoAberta() { votacaoAberta = new CheckBox("votacaoAberta", Model.of(configuracao.isVotacaoAberta())); formConfiguracao.add(votacaoAberta); } private void gravarAlteracoes() { int maximoVotos = this.maximoVotos.getModelObject(); int maxVotosProposta = this.maximoVotosProposta.getModelObject(); boolean votacaoAberta = this.votacaoAberta.getModelObject(); try { PriorizacaoServiceUtil.updateConfiguracao( UIUtils.getScopeGroupId(), maximoVotos, maxVotosProposta, votacaoAberta); info("Configuração atualizada com sucesso!"); } catch (UsuariosComMaisVotosPorPropostaException e) { error(MessageFormat.format("Já há pelo menos um usuário que votou mais de {0} vezes em um proposta", maxVotosProposta)); } catch (UsuariosComMaisVotosTotaisException e) { error(MessageFormat.format("Já há pelo menos um usuário que votou mais de {0} vezes", maximoVotos)); } catch (PortalException e) { LOG.error("Erro ao atualizar configuração."); error("Erro ao atualizar configuração"); } catch (SystemException e) { error("Erro ao atualizar configuração"); LOG.error("Erro ao atualizar configuração."); } } private Configuracao getConfiguracao() { Configuracao configuracao = null; try { configuracao = PriorizacaoServiceUtil.getConfiguracaoPorGrupo(UIUtils .getScopeGroupId()); } catch (PortalException e) { LOG.error("Erro ao obter configuracao"); } catch (SystemException e) { LOG.error("Erro ao obter configuracao"); } return configuracao; } }