Package ecar.sinalizacao

Source Code of ecar.sinalizacao.CalculoSinalizacao$PrevistoFaixa

package ecar.sinalizacao;

import java.util.ArrayList;
import java.util.List;

import ecar.api.facade.IndicadorResultado;
import ecar.api.facade.Previsto;
import ecar.api.facade.Realizado;
import ecar.dao.CorDao;
import ecar.exception.ECARException;
import ecar.pojo.AcompRealFisicoArf;
import ecar.pojo.AcompReferenciaItemAri;
import ecar.pojo.Cor;

/**
*
* @author Rafael de Morais
*
*/
public class CalculoSinalizacao {
 
  private static Faixa NA;
  private static Faixa NA_REALIZADO; 

  static {
    try {
      Cor na = (Cor) new CorDao(null).buscar(Cor.class, new Long(5));
      Cor na_realizado = (Cor) new CorDao(null).buscar(Cor.class, new Long(6));
      NA           = new Faixa(na, 0, 0);
      NA_REALIZADO = new Faixa(na_realizado, 0, 0);
    } catch (ECARException e) {
      e.printStackTrace();
    }
  }
 
  private AcompReferenciaItemAri ari;
  private AcompRealFisicoArf ind;
  private Long calculo;
 
  private Faixa faixaSelecionada = new Faixa();
  private Faixa faixaLinhaDeBase = new Faixa();

  public CalculoSinalizacao(AcompReferenciaItemAri ari, AcompRealFisicoArf ind) {
    this.ari = ari;
    this.ind = ind;
  }
 
  public void execute() throws NumberFormatException, ECARException {
    IndicadorResultado indicadorResultado = new IndicadorResultado(ind.getItemEstrtIndResulIettr());
    Double c = 0.0;
    Double prev;
    List<PrevistoFaixa> previstos = new ArrayList<PrevistoFaixa>();
   
    Sinalizacao sinalizacao = ind.getItemEstrtIndResulIettr().getSinalizacao();
   
    if(sinalizacao == null) {
      faixaSelecionada = NA;
      faixaLinhaDeBase = NA;
      return;
    }
   
    Previsto previsto = indicadorResultado.getPrevistoMensal(
        Integer.valueOf(ari.getAcompReferenciaAref().getMesAref()),
        Integer.valueOf(ari.getAcompReferenciaAref().getAnoAref())
        );
   
    Realizado realizado = indicadorResultado.getRealizadoMensal(
        Long.valueOf(ari.getAcompReferenciaAref().getMesAref()),
        Long.valueOf(ari.getAcompReferenciaAref().getAnoAref())
        );
   
    if(previsto != null) {
      prev = previsto.getValorPrevisto();
    }else {
      prev = null;
    }
    previstos.add(new PrevistoFaixa(prev, faixaSelecionada));
   
    if(ind.getItemEstrtIndResulIettr().getConsiderarLinhaDeBase()) {
      previstos.add(new PrevistoFaixa(ind.getItemEstrtIndResulIettr().getLinhaBase(), faixaLinhaDeBase));
    }else {
      faixaLinhaDeBase = NA;
    }
   
    for (PrevistoFaixa previstoFaixa : previstos) {
      if(!isNA(previstoFaixa.getPrevisto(), realizado, previstoFaixa.getFaixa())) {
        if(previstoFaixa.getPrevisto() != 0) {
          if(sinalizacao.getPolaridade() == true) {
            c = (1 + ((realizado.getRealizado() - previstoFaixa.getPrevisto()) / previstoFaixa.getPrevisto())) * 100;
          }else {
            c = (1 - ((realizado.getRealizado() - previstoFaixa.getPrevisto()) / previstoFaixa.getPrevisto())) * 100;
          }
        }else {
          c = null;
        }
        if (c != null && c < 0.0) {
          c = 0.0;
        }
        System.out.println(c);
        //calculo = Math.round(c);
        if(c != null) {
          for (Faixa faixa : sinalizacao.getFaixas()) {
            if(estaNaFaixa(faixa, c)) {
              previstoFaixa.setFaixa(faixa);
              break;
            }
          }         
        }
      }
    }
  }
 
  /**
   *
   * Valida a regra para o NA - N�o se Aplica
   *
   * Regra:
   *
   * 1. Quando houver 0 (zero) em previsto, o sinalizador fica branco.
   *
   * 2. Caso haja algum realizado, continua branco, mas com uma exclama��o no centro.
   *
   * As regras acima ser�o expressas na forma do objeto {@link Cor}
   *
   * @param previsto
   * @param realizado
   * @return true caso os parametros estejam enquadrados na regra de NA - N�o se Aplica
   */
  private boolean isNA(Double previsto, Realizado realizado, Faixa faixa) {
    if(previsto == null) {
      if(realizado != null && realizado.getRealizado() > 0.0) {
        copyFaixa(NA_REALIZADO, faixa);
      }else {
        copyFaixa(NA, faixa);
      }
      return true;
    }
    return false;
  }
 
  private boolean estaNaFaixa(Faixa faixa, Double calculo) {
    if(calculo >= faixa.getMin() && calculo < faixa.getMax()) {
      return true;
    }
    return false;
  }
 
  private void copyFaixa(Faixa in, Faixa out) {
    out.setCodFaixa(in.getCodFaixa());
    out.setCor(in.getCor());
    out.setMax(in.getMax());
    out.setMin(in.getMin());
    out.setSinalizacao(in.getSinalizacao());
  }
 
  public Faixa getFaixa() {
    return faixaSelecionada;
  }
 
  public Long getCalculo() {
    return calculo;
  }
  public Faixa getFaixaLinhaDeBase() {
    return faixaLinhaDeBase;
  }
 
  class PrevistoFaixa {
    private Double previsto;
    private Faixa faixa;
   
    public PrevistoFaixa(Double previsto, Faixa faixa) {
      super();
      this.previsto = previsto;
      this.faixa = faixa;
    }
   
    public Double getPrevisto() {
      return previsto;
    }
    public Faixa getFaixa() {
      return faixa;
    }
    public void setFaixa(Faixa faixa) {
      this.faixa.setCodFaixa(faixa.getCodFaixa());
      this.faixa.setCor(faixa.getCor());
      this.faixa.setMax(faixa.getMax());
      this.faixa.setMin(faixa.getMin());
      this.faixa.setSinalizacao(faixa.getSinalizacao());
    }
  }
 
}
TOP

Related Classes of ecar.sinalizacao.CalculoSinalizacao$PrevistoFaixa

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.