package gcom.gui.micromedicao;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.Subcategoria;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.ConsumoMinimoArea;
import gcom.util.ConstantesSistema;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
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.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Descri��o da classe
*
* @author R�mulo Aurelio
* @date 21/05/2008
*/
public class AdicionarConsumoAreaAction extends GcomAction {
/**
* Este caso de uso permite a inclus�o ou altera��o de um novo consumo pela
* �rea
*
* [UC0781] Informar Consumo por �rea
*
*
* @author R�mulo Aur�lio
* @date 12/05/2008
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping
.findForward("exibirAdicionarConsumoArea");
HttpSession sessao = httpServletRequest.getSession(false);
AdicionarConsumoAreaActionForm form = (AdicionarConsumoAreaActionForm) actionForm;
String numeroConsumo = form.getNumeroConsumo();
String numeroAreaFormatado = form.getNumeroArea().replace(".", "")
.replace(",", ".");
BigDecimal numeroArea = new BigDecimal(numeroAreaFormatado);
Collection<ConsumoMinimoArea> colecaoConsumoMinimoAreaAux = (Collection) sessao
.getAttribute("colecaoConsumoMinimoArea");
if (sessao.getAttribute("colecaoConsumoMinimoArea") != null) {
Collection<ConsumoMinimoArea> colecaoConsumoMinimoArea = (Collection) sessao
.getAttribute("colecaoConsumoMinimoArea");
if (httpServletRequest.getParameter("adicionar") != null) {
String ano = form.getMesAnoReferencia().substring(3, 7);
String mes = form.getMesAnoReferencia().substring(0, 2);
String anoMesInformado = ano + mes;
String idCategoria = (String) sessao
.getAttribute("idCategoria");
String idSubCategoria = (String) sessao
.getAttribute("idSubCategoria");
ConsumoMinimoArea consumoMinimoArea = new ConsumoMinimoArea();
consumoMinimoArea.setAnoMesReferencia((new Integer(
anoMesInformado)).intValue());
Categoria categoria = new Categoria();
categoria.setId(new Integer(idCategoria));
consumoMinimoArea.setCategoria(categoria);
Subcategoria subcategoria = new Subcategoria();
subcategoria.setId(new Integer(idSubCategoria));
consumoMinimoArea.setSubCategoria(subcategoria);
consumoMinimoArea.setNumeroConsumo(new Integer(numeroConsumo));
consumoMinimoArea.setNumeroAreaFinal(numeroArea);
consumoMinimoArea
.setIndicadorUso(ConstantesSistema.INDICADOR_USO_ATIVO);
consumoMinimoArea.setUltimaAlteracao(new Date());
/**
* [FS0006]- Validar �rea igual
*/
Iterator colecaoConsumoMinimoAreaAuxIterator = colecaoConsumoMinimoAreaAux
.iterator();
while (colecaoConsumoMinimoAreaAuxIterator.hasNext()) {
ConsumoMinimoArea consumoMinimoAreaAux = (ConsumoMinimoArea) colecaoConsumoMinimoAreaAuxIterator
.next();
if (consumoMinimoArea.getAnoMesReferencia() == consumoMinimoAreaAux
.getAnoMesReferencia()
&& consumoMinimoArea.getCategoria().getId()
.intValue() == consumoMinimoAreaAux
.getCategoria().getId().intValue()
&& consumoMinimoArea.getSubCategoria().getId()
.intValue() == consumoMinimoAreaAux
.getSubCategoria().getId().intValue()
&& consumoMinimoArea.getNumeroAreaFinal()
.compareTo(
consumoMinimoAreaAux
.getNumeroAreaFinal()) == 0) {
throw new ActionServletException(
"atencao.area_ja_informada", form
.getNumeroArea(), form
.getMesAnoReferencia(), form
.getCategoria(), form.getSubCategoria());
}
}
/**
* FIM ---[FS0006]- Validar �rea igual
*/
colecaoConsumoMinimoArea.add(consumoMinimoArea);
sessao.setAttribute("colecaoConsumoMinimoArea",
colecaoConsumoMinimoArea);
} else {// atualizar
int posicaoComponente;
if (sessao.getAttribute("posicaoComponente") != null) {
posicaoComponente = (Integer) sessao
.getAttribute("posicaoComponente");
} else {
posicaoComponente = 0;
}
//sessao.removeAttribute("posicaoComponente");
int index = 0;
Iterator colecaoConsumoMinimoAreaIterator = colecaoConsumoMinimoArea
.iterator();
Iterator colecaoConsumoMinimoAreaAuxIterator = colecaoConsumoMinimoAreaAux
.iterator();
while (colecaoConsumoMinimoAreaIterator.hasNext()) {
index++;
ConsumoMinimoArea consumoMinimoArea = (ConsumoMinimoArea) colecaoConsumoMinimoAreaIterator
.next();
if (index == posicaoComponente) {
consumoMinimoArea.setNumeroConsumo(new Integer(numeroConsumo));
consumoMinimoArea.setNumeroAreaFinal(numeroArea);
consumoMinimoArea
.setIndicadorUso(ConstantesSistema.INDICADOR_USO_ATIVO);
while (colecaoConsumoMinimoAreaAuxIterator.hasNext()) {
ConsumoMinimoArea consumoMinimoAreaAux = (ConsumoMinimoArea) colecaoConsumoMinimoAreaAuxIterator
.next();
if (consumoMinimoArea.getId().intValue() != consumoMinimoAreaAux
.getId().intValue()
&& consumoMinimoArea.getAnoMesReferencia() == consumoMinimoAreaAux
.getAnoMesReferencia()
&& consumoMinimoArea.getCategoria().getId()
.intValue() == consumoMinimoAreaAux
.getCategoria().getId().intValue()
&& consumoMinimoArea.getSubCategoria()
.getId().intValue() == consumoMinimoAreaAux
.getSubCategoria().getId()
.intValue()
&& consumoMinimoArea
.getNumeroAreaFinal()
.compareTo(
consumoMinimoAreaAux
.getNumeroAreaFinal()) == 0) {
throw new ActionServletException(
"atencao.area_ja_informada", form
.getNumeroArea(), form
.getMesAnoReferencia(), form
.getCategoria(), form
.getSubCategoria());
}
}
Collections.sort((List) colecaoConsumoMinimoArea, new Comparator() {
public int compare(Object a, Object b) {
BigDecimal area1 = ((ConsumoMinimoArea) a).getNumeroAreaFinal();
BigDecimal area2 = ((ConsumoMinimoArea) b).getNumeroAreaFinal();
return area1.compareTo(area2);
}
});
sessao.setAttribute("colecaoConsumoMinimoArea",
colecaoConsumoMinimoArea);
}
}
}
httpServletRequest.setAttribute("reload", true);
}
sessao.setAttribute("adicionar", true);
sessao.setAttribute("informar", true);
return retorno;
}
}