package gcom.gui.micromedicao.hidrometro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.hidrometro.FiltroHidrometro;
import gcom.micromedicao.hidrometro.Hidrometro;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ComparacaoTexto;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class PesquisarHidrometroAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Obt�m o action form
PesquisarHidrometroActionForm pesquisarHidrometroActionForm = (PesquisarHidrometroActionForm) actionForm;
// Cole��o que armazena o resultado da pesquisa
Collection<Hidrometro> hidrometros = null;
// Seta o caminho de retorno
ActionForward retorno = actionMapping.findForward("listaHidrometro");
// cria sessao
HttpSession sessao = httpServletRequest.getSession(false);
// Pega a instancia da fachada
Fachada fachada = Fachada.getInstancia();
FiltroHidrometro filtroHidrometro = new FiltroHidrometro(
FiltroHidrometro.NUMERO_HIDROMETRO);
// Recupera os par�metros do form
String numeroHidrometro = pesquisarHidrometroActionForm.getNumeroHidrometro();
String dataAquisicao = pesquisarHidrometroActionForm.getDataAquisicao();
String anoFabricacao = pesquisarHidrometroActionForm.getAnoFabricacao();
String indicadorMacromedidor = pesquisarHidrometroActionForm.getFinalidade();
String idHidrometroClasseMetrologica = pesquisarHidrometroActionForm.getIdHidrometroClasseMetrologica();
String idHidrometroMarca = pesquisarHidrometroActionForm.getIdHidrometroMarca();
String idHidrometroDiametro = pesquisarHidrometroActionForm.getIdHidrometroDiametro();
String idHidrometroCapacidade = pesquisarHidrometroActionForm.getIdHidrometroCapacidade();
String idHidrometroTipo = pesquisarHidrometroActionForm.getIdHidrometroTipo();
String idLocalArmazenagem = pesquisarHidrometroActionForm.getIdLocalArmazenamento();
String idHidrometroSituacao = pesquisarHidrometroActionForm.getIdHidrometroSituacao();
String fixo = pesquisarHidrometroActionForm.getFixo();
String faixaInicial = pesquisarHidrometroActionForm.getFaixaInicial();
String faixaFinal = pesquisarHidrometroActionForm.getFaixaFinal();
boolean peloMenosUmParametroInformado = false;
// Caso o fixo, a faixa inicial e faixa final seja diferente de null
// ent�o ignora os outros parametros e faz a pesquisa do filtro por
// esses 3 par�metros
if ((fixo != null && !fixo.trim().equalsIgnoreCase(""))
&& (faixaInicial != null
&& !faixaInicial.trim().equalsIgnoreCase("") && (faixaFinal != null && !faixaFinal
.trim().equalsIgnoreCase("")))) {
// Verifica se a faixa inicial e final s�o iguais a zero
if( faixaInicial.equals("") || faixaInicial == null ){
throw new ActionServletException(
"atencao.faixa.inicial.deve.ser.informada");
}else{
if( faixaInicial.equals("0") ){
throw new ActionServletException(
"atencao.faixa.inicial.deve.ser.maior.zero");
}
}
if( faixaFinal.equals("") || faixaFinal == null ){
throw new ActionServletException(
"atencao.faixa.final.deve.ser.informada");
}else{
if( faixaFinal.equals("0")){
throw new ActionServletException(
"atencao.faixa.final.deve.ser.maior.zero");
}
}
if( faixaInicial != null && faixaFinal != null ){
Integer faixaIni = new Integer(faixaInicial);
Integer faixaFim = new Integer(faixaFinal);
if( faixaIni > faixaFim ){
throw new ActionServletException(
"atencao.faixa.final.deve.ser.maior.faixao.inicial");
}
}
hidrometros = fachada.pesquisarNumeroHidrometroFaixa(fixo,
faixaInicial, faixaFinal);
} else {
// Insere os par�metros informados no filtro
if (numeroHidrometro != null
&& !numeroHidrometro.trim().equalsIgnoreCase("")) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ComparacaoTexto(
FiltroHidrometro.NUMERO_HIDROMETRO, numeroHidrometro));
}
if (dataAquisicao != null
&& !dataAquisicao.trim().equalsIgnoreCase("")) {
// Caso a data de aquisi��o seja maior que a data atual
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Date dataAquisicaoFormatada = null;
try {
dataAquisicaoFormatada = formatoData.parse(dataAquisicao);
} catch (ParseException ex) {
// Erro no hibernate
reportarErros(httpServletRequest, "erro.sistema", ex);
// Atribui o mapeamento de retorno para a tela de erro
retorno = actionMapping.findForward("telaErro");
}
// caso a data de aquisi��o seja menor que a data atual
if (dataAquisicaoFormatada.after(new Date())) {
throw new ActionServletException(
"atencao.data.aquisicao.nao.superior.data.corrente");
}
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.DATA_AQUISICAO, Util.converteStringParaDate(dataAquisicao)));
}
if (anoFabricacao != null
&& !anoFabricacao.trim().equalsIgnoreCase("")) {
// Verifica se o ano de fabrica��o � maior que o ano da data de aquisi��o
//Integer anoFabricacaoForm = new Integer(anoFabricacao);
Short anoFabricacaoForm = new Short(anoFabricacao);
if (dataAquisicao != null
&& !dataAquisicao.trim().equalsIgnoreCase("")
&& dataAquisicao.length() == 10) {
Integer anoDataAquisicao = new Integer(dataAquisicao.substring(6));
if (anoFabricacaoForm > anoDataAquisicao) {
throw new ActionServletException(
"atencao.ano.fabricacao.nao.superior.data.fabricacao");
}
}
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.ANO_FABRICACAO, anoFabricacao));
}
if (indicadorMacromedidor != null
&& !indicadorMacromedidor.trim().equalsIgnoreCase("")
&& !indicadorMacromedidor.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.INDICADOR_MACROMEDIDOR,
indicadorMacromedidor));
}
if (idHidrometroClasseMetrologica != null
&& Integer.parseInt(idHidrometroClasseMetrologica) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_CLASSE_METROLOGICA_ID,
idHidrometroClasseMetrologica));
}
if (idHidrometroMarca != null
&& Integer.parseInt(idHidrometroMarca) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro
.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_MARCA_ID,
idHidrometroMarca));
}
if (idHidrometroDiametro != null
&& Integer.parseInt(idHidrometroDiametro) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_DIAMETRO_ID,
idHidrometroDiametro));
}
if (idHidrometroCapacidade != null
&& Integer.parseInt(idHidrometroCapacidade) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_CAPACIDADE_ID,
idHidrometroCapacidade));
}
if (idHidrometroTipo != null
&& Integer.parseInt(idHidrometroTipo) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_TIPO_ID, idHidrometroTipo));
}
if (idLocalArmazenagem != null && !idLocalArmazenagem.equals("")) {
peloMenosUmParametroInformado = true;
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_LOCAL_ARMAZENAGEM_ID,
idLocalArmazenagem));
}
if (idHidrometroSituacao != null
&& Integer.parseInt(idHidrometroSituacao) > ConstantesSistema.NUMERO_NAO_INFORMADO) {
peloMenosUmParametroInformado = true;
filtroHidrometro
.adicionarParametro(new ParametroSimples(
FiltroHidrometro.HIDROMETRO_SITUACAO_ID,
pesquisarHidrometroActionForm
.getIdHidrometroSituacao()));
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
filtroHidrometro
.adicionarCaminhoParaCarregamentoEntidade("hidrometroSituacao");
filtroHidrometro
.adicionarCaminhoParaCarregamentoEntidade("hidrometroMarca");
filtroHidrometro
.adicionarCaminhoParaCarregamentoEntidade("hidrometroCapacidade");
// Faz a pesquisa baseada no filtro
//hidrometros = fachada.pesquisar(filtroHidrometro, Hidrometro.class
// .getName());
Map resultado = controlarPaginacao(httpServletRequest, retorno,
filtroHidrometro, Hidrometro.class.getName());
hidrometros = (Collection) resultado.get("colecaoRetorno");
retorno = (ActionForward) resultado.get("destinoActionForward");
}
// Verificar se a pesquisa de hidrometros retornou vazia
if (hidrometros == null || hidrometros.isEmpty()) {
throw new ActionServletException(
"atencao.pesquisa.nenhumresultado", null, "Hidr�metro");
}
sessao.setAttribute("colecaoHidrometros",
hidrometros);
// Manda a cole��o dos hidr�metros pesquisados para o request
httpServletRequest.getSession(false).setAttribute("colecaoHidrometros",
hidrometros);
return retorno;
}
}