/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.struts.action.aprendizado;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
import br.gov.serpro.ouvidoria.controller.aprendizado.BoletimCtrl;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.model.Boletim;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.struts.DispatchActionSupport;
import br.gov.serpro.ouvidoria.util.Constants;
import br.gov.serpro.ouvidoria.util.Utilitario;
import de.laures.cewolf.CewolfException;
import de.laures.cewolf.ChartImage;
import de.laures.cewolf.storage.TransientSessionStorage;
/**
* Administrar as funcionalidades de Boleim
*
* @author SERPRO
* @version $Revision: 1.1.2.4 $, $Date: 2011/10/20 15:30:36 $
* @version 0.1, 2005/02/01
*/
public class AtualizarBoletimAction extends DispatchActionSupport {
public ActionForward listar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm _form = (DynaActionForm) form;
BoletimCtrl defaultCtrl = new BoletimCtrl(getDaoFactory());
Orgao org = this.getOrgao(request);
List results = defaultCtrl.obterBoletinsFiltro(Utilitario
.trataPlic(_form.getString("txtBusca")), _form
.getString("txtPeriodoIni"), _form.getString("txtPeriodoFim"),
org);
request.setAttribute("listar", results);
return mapping.findForward("listar");
}
public ActionForward exibir(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Boletim object = (Boletim) request.getSession().getAttribute(
Constants.BOLETIM);
if (object == null) {
object = new Boletim();
}
Funcionario funcionario = (Funcionario) this.getFuncionario(request);
request.getSession().setAttribute(Constants.SS_FUNCIONARIO, funcionario);
request.setAttribute(Constants.BOLETIM, object);
return mapping.findForward("exibir");
}
public ActionForward exibirDetalhe(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
final String id = request.getParameter("id");
Boletim object = null;
if (id == null || id.trim().length() == 0) {
object = new Boletim();
} else {
BoletimCtrl defaultCtrl = new BoletimCtrl(getDaoFactory());
object = defaultCtrl.get(new Long(id));
}
request.setAttribute("diretorio", this.getOrgao(request)
.getConfiguracoes().getNomeDiretorioOrgao());
request.setAttribute("object", object);
request.setAttribute("function", request.getParameter("function"));
return mapping.findForward("exibirDetalhe");
}
public ActionForward gerar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws DaoException {
ActionMessages msgs = new ActionMessages();
final String nome = request.getParameter("nome");
final String numero = request.getParameter("numero");
final String area = request.getParameter("area");
final String telefone = request.getParameter("telefone");
final String conteudo = request.getParameter("conteudo");
final String cabecalho = request.getParameter("cabecalho");
final String grafico = request.getParameter("grafico");
final String tabela = request.getParameter("tabela");
BoletimCtrl defaultCtrl = new BoletimCtrl(getDaoFactory());
if (nome == null || nome.trim().length() == 0) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.nome"));
}
Integer num = null;
try {
if (numero != null && numero.trim().length() > 0) {
num = new Integer(numero);
} else {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.numero"));
}
} catch (NumberFormatException nfe) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.numero"));
}
if (area == null || area.trim().length() == 0) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.area"));
}
if (telefone == null || telefone.trim().length() == 0) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.telefone"));
}
if (conteudo == null || conteudo.trim().length() == 0) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.conteudo"));
}
if (num != null
&& defaultCtrl.existeNumeroCadastrado(getOrgao(request), num)) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.chaveDuplicada"));
}
Boolean possuiCabecalho = Boolean.TRUE;
if (cabecalho == null) {
possuiCabecalho = Boolean.FALSE;
}
Boolean possuiGrafico = Boolean.TRUE;
if (grafico == null) {
possuiGrafico = Boolean.FALSE;
}
Boolean possuiTabela = Boolean.TRUE;
if (tabela == null) {
possuiTabela = Boolean.FALSE;
}
// Recupera o Funcionário logado
Funcionario funcionario = (Funcionario) this.getFuncionario(request);
Boletim boletim = defaultCtrl.gerar(getOrgao(request), funcionario,
nome, num, area, telefone, conteudo, possuiCabecalho,
possuiGrafico, possuiTabela);
request.getSession().setAttribute(Constants.BOLETIM, boletim);
request.getSession().setAttribute(Constants.SS_FUNCIONARIO, funcionario);
if (msgs.isEmpty()) {
return mapping.findForward("exibir");
}
saveErrors(request, msgs);
return mapping.findForward("error");
}
public ActionForward salvar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws DaoException {
ActionMessages msgs = new ActionMessages();
BoletimCtrl defaultCtrl = new BoletimCtrl(getDaoFactory());
Boletim boletim = (Boletim) request.getSession().getAttribute(
Constants.BOLETIM);
boolean erroLogica = false;
try {
defaultCtrl.save(boletim);
final String html = request.getParameter("htmlBoletim");
final String imgUrl = (String) request.getSession().getAttribute(
Constants.IMAGE_CHART);
final String contextUrl = request.getContextPath();
try {
final String domain = request.getScheme()
+ "://"
.concat(request.getServerName())
.concat(":")
.concat(String.valueOf(request.getServerPort()));
final TransientSessionStorage storage = new TransientSessionStorage();
storage.init(this.getServlet().getServletContext());
final String imgUrls = imgUrl;
final int posI = imgUrls.indexOf("?") + 5;
final int posF = imgUrls.indexOf("&", posI);
final String imgId = imgUrls.substring(posI, posF);
final ChartImage chartImages = storage.getChartImage(imgId,
request);
defaultCtrl.criaArquivoBoletim(getOrgao(request), boletim,
html, chartImages.getBytes(), domain, contextUrl);
} catch (CewolfException e1) {
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.arquivo"));
}
} catch (IOException e) {
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.arquivo"));
} catch (DaoException e) {
String errorMessage = e.getMessage();
if (errorMessage != null
&& errorMessage.toLowerCase().indexOf("duplicate key") >= 0) {
erroLogica = true;
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.atualizarBoletim.chaveDuplicada"));
} else {
throw e;
}
}
if (erroLogica) {
saveErrors(request, msgs);
return mapping.findForward("error");
}
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"message.atualizarBoletim.incluir"));
saveMessages(request, msgs);
return mapping.findForward("success");
}
public ActionForward publicar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws DaoException {
DynaActionForm _form = (DynaActionForm) form;
BoletimCtrl defaultCtrl = new BoletimCtrl(getDaoFactory());
ActionMessages msgs = new ActionMessages();
Boletim boletim = defaultCtrl.get(new Long(request.getParameter("id")));
//Se estava true e virou false
if (boletim.getPublicar().booleanValue()
&& _form.getString("publicar").length() == 0) {
defaultCtrl.publicar(boletim.getId(), Boolean.FALSE);
}
//Se estava false e virou true
if (!boletim.getPublicar().booleanValue()
&& _form.getString("publicar").compareToIgnoreCase("true") == 0) {
defaultCtrl.publicar(boletim.getId(), Boolean.TRUE);
}
boletim = defaultCtrl.get(new Long(request.getParameter("id")));
request.setAttribute("diretorio", this.getOrgao(request)
.getConfiguracoes().getNomeDiretorioOrgao());
request.setAttribute("object", boletim);
request.setAttribute("function", request.getParameter("function"));
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"message.atualizarBoletim.publicar"));
saveMessages(request, msgs);
return mapping.findForward("success");
}
}