package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.registroatendimento.FiltroRegistroAtendimentoAnexo;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoAnexo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.gui.StatusWizard;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Esta classe tem por finalidade exibir para o usu�rio a tela que receber� os par�metros para realiza��o
* da atualiza��o de um R.A (Aba n� 04 - Anexos)
*
* @author Raphael Rossiter
* @date 27/07/2009
*/
public class ExibirAtualizarRegistroAtendimentoAnexosAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("atualizarRegistroAtendimentoAnexos");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
String adicionar = httpServletRequest.getParameter("adicionar");
String remover = httpServletRequest.getParameter("remover");
String visualizar = httpServletRequest.getParameter("visualizar");
//ADICIONANDO UM ARQUIVO
if (adicionar != null && !adicionar.equals("")){
Object[] parametrosFormulario = null;
FileItem arquivoInformado = null;
String observacaoAnexo = null;
//ARQUIVO
try{
parametrosFormulario = recebendoObjetos(httpServletRequest);
}
catch (FileUploadException e) {
throw new ActionServletException("erro.sistema", e);
}
arquivoInformado = (FileItem) parametrosFormulario[0];
observacaoAnexo = (String) parametrosFormulario[1];
//VALIDA��O DO ARQUIVO
fachada.validarRegistroAtendimentoAnexos(arquivoInformado);
RegistroAtendimentoAnexo registroAtendimentoanexo = this.gerarRegistroAtendimentoAnexo(
arquivoInformado, observacaoAnexo);
//INSERINDO O ARQUIVO NA COLE��O DE VISUALIZA��O
Collection colecaoRegistroAtendimentoAnexo = null;
if (sessao.getAttribute("colecaoRegistroAtendimentoAnexo") != null){
colecaoRegistroAtendimentoAnexo = (Collection)
sessao.getAttribute("colecaoRegistroAtendimentoAnexo");
colecaoRegistroAtendimentoAnexo.add(registroAtendimentoanexo);
}
else{
colecaoRegistroAtendimentoAnexo = new ArrayList();
colecaoRegistroAtendimentoAnexo.add(registroAtendimentoanexo);
sessao.setAttribute("colecaoRegistroAtendimentoAnexo", colecaoRegistroAtendimentoAnexo);
}
}
//REMOVENDO UM ARQUIVO
this.removerArquivo(remover, sessao);
//OBTENDO ARQUIVO PARA VISUALIZA��O
RegistroAtendimentoAnexo registroAtendimentoAnexo = this.obterArquivoParaVisualizacao(visualizar, sessao);
//PREPARANDO VISUALIZA��O DO ARQUIVO
if (registroAtendimentoAnexo != null){
OutputStream out = null;
String mimeType = ConstantesSistema.CONTENT_TYPE_GENERICO;
if (registroAtendimentoAnexo.getNomeExtensaoDocumento().equals(ConstantesSistema.EXTENSAO_DOC)){
mimeType = ConstantesSistema.CONTENT_TYPE_MSWORD;
}
else if (registroAtendimentoAnexo.getNomeExtensaoDocumento().equals(ConstantesSistema.EXTENSAO_PDF)){
mimeType = ConstantesSistema.CONTENT_TYPE_PDF;
}
else if (registroAtendimentoAnexo.getNomeExtensaoDocumento().equals(ConstantesSistema.EXTENSAO_JPG)){
mimeType = ConstantesSistema.CONTENT_TYPE_JPEG;
}
try {
httpServletResponse.setContentType(mimeType);
out = httpServletResponse.getOutputStream();
out.write(registroAtendimentoAnexo.getImagemDocumento());
out.flush();
out.close();
}
catch (IOException e) {
throw new ActionServletException("erro.sistema", e);
}
}
//CARREGANDO OS ANEXOS QUE EST�O CADASTRADOS NA BASE
if (sessao.getAttribute("colecaoRegistroAtendimentoAnexo") == null) {
StatusWizard statusWizard = (StatusWizard) sessao.getAttribute("statusWizard");
FiltroRegistroAtendimentoAnexo filtroRegistroAtendimentoAnexo = new FiltroRegistroAtendimentoAnexo();
filtroRegistroAtendimentoAnexo.adicionarParametro(new ParametroSimples(
FiltroRegistroAtendimentoAnexo.REGISTRO_ATENDIMENTO_ID,
statusWizard.getId()));
Collection colecaoRegistroAtendimentoAnexo = fachada.pesquisar(filtroRegistroAtendimentoAnexo,
RegistroAtendimentoAnexo.class.getName());
sessao.setAttribute("colecaoRegistroAtendimentoAnexo", colecaoRegistroAtendimentoAnexo);
}
httpServletRequest.setAttribute("nomeCampo", "arquivoAnexo");
return retorno;
}
/**
* Removendo um arquivo da cole��o
*
* @author Raphael Rossiter
* @date 30/07/2009
*
* @param String
* @param HttpSession
*/
private void removerArquivo(String identificacao, HttpSession sessao){
if (identificacao != null && !identificacao.equals("")){
Collection colecaoRegistroAtendimentoAnexo = (Collection)
sessao.getAttribute("colecaoRegistroAtendimentoAnexo");
Iterator it = colecaoRegistroAtendimentoAnexo.iterator();
RegistroAtendimentoAnexo anexoColecao = null;
while (it.hasNext()){
anexoColecao = (RegistroAtendimentoAnexo) it.next();
if (obterTimestampIdObjeto(anexoColecao) == Long.parseLong(identificacao)){
colecaoRegistroAtendimentoAnexo.remove(anexoColecao);
break;
}
}
}
}
/**
* Realizando o upload do arquivo informado
*
* @author Raphael Rossiter
* @date 30/07/2009
*
* @param HttpServletRequest
*/
private Object[] recebendoObjetos(HttpServletRequest httpServletRequest) throws FileUploadException {
Object[] parametrosFormulario = new Object[2];
DiskFileUpload upload = new DiskFileUpload();
List itens = upload.parseRequest(httpServletRequest);
FileItem fileItem = null;
if (itens != null) {
Iterator iter = itens.iterator();
while (iter.hasNext()) {
fileItem = (FileItem) iter.next();
if (fileItem.getFieldName().equals("arquivoAnexo")) {
parametrosFormulario[0] = fileItem;
}
if (fileItem.getFieldName().equals("observacaoAnexo")) {
parametrosFormulario[1] = fileItem.getString();
}
}
}
return parametrosFormulario;
}
/**
* Gerando o objeto que referencia o arquivo que ser� anexado ao RA
*
* @author Raphael Rossiter
* @date 30/07/2009
*
* @param FileItem
* @param String
*/
private RegistroAtendimentoAnexo gerarRegistroAtendimentoAnexo(FileItem arquivoAnexo,
String observacaoAnexo){
RegistroAtendimentoAnexo anexo = new RegistroAtendimentoAnexo();
//ARQUIVO EM BYTES
anexo.setImagemDocumento(arquivoAnexo.get());
//EXTENS�O
anexo.setNomeExtensaoDocumento(Util.obterExtensaoDoArquivo(arquivoAnexo));
//OBSERVA��O
if (observacaoAnexo != null && !observacaoAnexo.equals("")){
anexo.setDescricaoDocumento(observacaoAnexo.trim());
}
//�LTIMA ALTERA��O
anexo.setUltimaAlteracao(new Date());
return anexo;
}
/**
* Removendo um arquivo da cole��o
*
* @author Raphael Rossiter
* @date 30/07/2009
*
* @param String
* @param HttpSession
*/
private RegistroAtendimentoAnexo obterArquivoParaVisualizacao(String identificacao, HttpSession sessao){
RegistroAtendimentoAnexo registroAtendimentoAnexo = null;
if (identificacao != null && !identificacao.equals("")){
Collection colecaoRegistroAtendimentoAnexo = (Collection)
sessao.getAttribute("colecaoRegistroAtendimentoAnexo");
Iterator it = colecaoRegistroAtendimentoAnexo.iterator();
RegistroAtendimentoAnexo anexoColecao = null;
while (it.hasNext()){
anexoColecao = (RegistroAtendimentoAnexo) it.next();
if (obterTimestampIdObjeto(anexoColecao) == Long.parseLong(identificacao)){
registroAtendimentoAnexo = anexoColecao;
break;
}
}
}
return registroAtendimentoAnexo;
}
}