com.automaster.autoview.client.ui.paineis.tabs.monitoramento.TabInicio.java Source code

Java tutorial

Introduction

Here is the source code for com.automaster.autoview.client.ui.paineis.tabs.monitoramento.TabInicio.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.automaster.autoview.client.ui.paineis.tabs.monitoramento;

import com.automaster.autoview.client.Info;
import com.automaster.autoview.client.ordenadores.OrdenaPosicao;
import com.automaster.autoview.client.ui.openlayers.MapaInicioOpenLayer;
import com.automaster.autoview.client.ui.paineis.tabs.TabLog;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.SortSpecifier;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.AnimationEffect;
import com.smartgwt.client.types.GroupStartOpen;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.ImgButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.DrawEvent;
import com.smartgwt.client.widgets.events.DrawHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.DataArrivedEvent;
import com.smartgwt.client.widgets.grid.events.DataArrivedHandler;
import com.smartgwt.client.widgets.grid.events.GroupStateChangedEvent;
import com.smartgwt.client.widgets.grid.events.GroupStateChangedHandler;
import com.smartgwt.client.widgets.grid.events.SelectionUpdatedEvent;
import com.smartgwt.client.widgets.grid.events.SelectionUpdatedHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 *
 * @author Adriano
 */
public class TabInicio extends Tab {

    //private int contador;
    // Pega o cdigo da Unidade do Usurio Logado Cliente ou Funiconrio
    int codigoUnidade = Integer.parseInt(
            (Info.usuarioLogado.get("codUnidadeCliente") == null) ? Info.usuarioLogado.get("codUnidadeFuncionario")
                    : Info.usuarioLogado.get("codUnidadeCliente"));
    public static int indexVeiculos;
    public static ListGrid veiculos;
    public static ListGrid posicoesVeiculos;
    public static int indexVeiculoPlaca;
    public static int codUltimaPosicao;
    public static int offSet;
    private int offSetAux;
    private int codUltimaPosicaoAux;
    private String nomeCliente = "";
    //private boolean inicio = true;
    private boolean flagCincoPosicoes = false;
    private boolean flagPosicoesDemanda = true;
    private int countThreadNovasDemanda = 0;
    private boolean flagNovasPosicoes = true;
    private int countThreadNovasPosicoes = 0;
    private int direcaoPosicao = 0;
    private double distancia = 0;
    private double distanciaTotal = 0;
    private double latAnt = 0, lonAnt = 0, latAtual = 0, lonAtual = 0;
    private int indexDistancia = 0;
    private String kms = null;
    private double metros = 0;
    private String m = null;
    private String dist = " Percorridos 0 metros";
    private String tempoDecorrido = " 0";
    private String icone = null;
    private int tamanhoListaVeiculos;
    private boolean verificaListaDeVeiculos = true;
    //private boolean verificaPrimeiraPosicao = true;
    private final VLayout painelSectionPlacas = new VLayout();
    private final Label infoVeiculo = new Label("<strong style=\"font-size:15px; \">  Placa: XXX-1111"
            + " Fabricante: XXXX" + " Modelo: XXXX" + " Cor: XXXX" + " Ano: 0000/0000" + "</strong>");
    //private boolean verificaArrived = true;
    //private TreeMap<String, ArrayList<TreeMap<String, String>>> listaVeiculosAuxiliar;
    public static ArrayList<Record> posicoesSemEndereco;
    public static TreeMap<String, Object> listaVeiculos;
    public static DataSource dataSourcePlacas;
    private String latEndereco = null;
    private String lonEndereco = null;
    private String placaSelecionadaAtual = null;
    private boolean flagSemEndereco = true;
    private static boolean flagBuscaEndereco = true;

    public static boolean TABELAVEICULODESENHADA = false;
    private static TreeMap<String, TreeMap<String, String>> gruposDeVeiculos;

    public static TreeMap<String, TreeMap<String, String>> getGruposDeVeiculos() {
        return gruposDeVeiculos;
    }

    public static void setGruposDeVeiculos(TreeMap<String, TreeMap<String, String>> gruposDeVeiculos) {
        TabInicio.gruposDeVeiculos = gruposDeVeiculos;
    }

    //public static TreeMap<String, String> placasNaoRepetidas;
    public static TreeMap<String, Object> getListaVeiculos() {
        return listaVeiculos;
    }

    public static void setListaVeiculos(String placa, ArrayList<TreeMap<String, String>> novaListaVeiculo) {
        listaVeiculos.put(placa, novaListaVeiculo);
    }

    public static void setListaVeiculos(TreeMap<String, Object> listaVeiculos) {
        TabInicio.listaVeiculos = listaVeiculos;
    }

    private MapaInicioOpenLayer mapaInicioOpenLayer;

    public TabInicio() {
        //, TimeZone.createTimeZone(120)
        //tabelaDesenhada = true;
        //placasNaoRepetidas = new TreeMap<>();
        //this.timeZone = Info.timeZoneClient();
        //DateUtil.setDefaultDisplayTimezone(timeZone);  
        Info.enderecosResolvidos = new TreeMap<>();
        indexVeiculos = 0;
        indexVeiculoPlaca = 0;
        codUltimaPosicao = 0;
        codUltimaPosicaoAux = 1;
        offSet = 0;
        offSetAux = -1;
        TabInicio.posicoesSemEndereco = new ArrayList<>();
        TabInicio.listaVeiculos = new TreeMap<>();
        this.tamanhoListaVeiculos = 0;
        TabInicio.veiculos = new ListGrid();
        TabInicio.veiculos.setSortDirection(SortDirection.ASCENDING);
        TabInicio.veiculos.setSortField("placa");
        TabInicio.veiculos.setCanSort(false);
        TabInicio.veiculos.setCanGroupBy(true);
        TabInicio.veiculos.setGroupByMaxRecords(100000);
        TabInicio.veiculos.setCanAutoFitFields(false);
        TabInicio.veiculos.setSelectionType(SelectionStyle.SINGLE);
        TabInicio.veiculos.setWidth("10%");
        TabInicio.veiculos.setCanPickFields(false);
        TabInicio.veiculos.setAlternateRecordStyles(true);
        TabInicio.veiculos.setShowFilterEditor(true);
        TabInicio.veiculos.setTooltip(Info.titulosMsg.get("listaVeiculos"));
        TabInicio.veiculos.setFilterOnKeypress(true);
        TabInicio.veiculos.setCanSort(false);

        TabInicio.dataSourcePlacas = new DataSource();
        TabInicio.dataSourcePlacas.setClientOnly(true);
        DataSourceTextField codVeiculoField = new DataSourceTextField("codigo",
                Info.titulosMsg.get("tituloCodigo"));
        codVeiculoField.setHidden(true);
        DataSourceTextField placaVeiculo = new DataSourceTextField("placa", Info.titulosMsg.get("placa"));
        placaVeiculo.setRequired(true);
        //placaVeiculo.setPrimaryKey(true);
        DataSourceTextField iconeVeiculo = new DataSourceTextField("icone", "?cone de veculo");
        iconeVeiculo.setHidden(true);
        DataSourceTextField grupoVeiculo = new DataSourceTextField("grupo", "grupo");
        //grupoVeiculo.setGroup(icone);
        grupoVeiculo.setHidden(true);
        TabInicio.dataSourcePlacas.setFields(codVeiculoField, iconeVeiculo, placaVeiculo, grupoVeiculo);

        TabInicio.posicoesVeiculos = new ListGrid();
        //this.indexVeiculoPlaca = 0;
        //this.index20 = 0;
        //this.indexDecrescente = 100;
        //TabInicio.semafaro = true;
        //criando o Vlayout que ir armazenar todo o layout da janela
        final HLayout painelPai = new HLayout();
        painelPai.setWidth100();
        painelPai.setHeight100();
        painelPai.setAlign(Alignment.CENTER);
        Info.dbService.buscarVeiculoPorUsuarioLogado(Integer.parseInt(Info.usuarioLogado.get("codUsuario")),
                new AsyncCallback<TreeMap<String, Object>>() {

                    @Override
                    public void onFailure(Throwable caught) {
                        //
                        if (caught instanceof Exception) {
                            SC.warn("Falha na conexo - buscarVeiculo");
                        }
                    }

                    @Override
                    public void onSuccess(TreeMap<String, Object> result) {
                        if (result != null) {
                            setListaVeiculos(result);
                            tamanhoListaVeiculos = result.size() - 3;
                            //GWT.log("TamanhoLista : "+tamanhoListaVeiculos);
                            TreeMap<String, Object> veiculosAuxiliar = new TreeMap<>(result);
                            //ListGridRecord[] registeredPlacaRecords = new ListGridRecord[result.size()];
                            if (veiculosAuxiliar.size() > 0) {

                                TabInicio.codUltimaPosicao = Integer.parseInt((String) result.get("MAXIMO"));
                                //codUltimaPosicaoAux = Integer.parseInt((String) result.get("MAXIMO"));
                                Info.enderecosResolvidos.putAll((TreeMap<String, String>) result.get("ENDERECO"));
                                TabInicio.indexVeiculos = 0;
                                TreeMap<String, TreeMap<String, String>> grupoAux = (TreeMap<String, TreeMap<String, String>>) result
                                        .get("GRUPO");
                                setGruposDeVeiculos(grupoAux);
                                //GWT.log("Grupos : " + grupoAux.size());
                                for (Map.Entry<String, TreeMap<String, String>> entrySet : grupoAux.entrySet()) {
                                    String key = entrySet.getKey();
                                    TreeMap<String, String> value = entrySet.getValue();
                                    for (Map.Entry<String, String> entrySet1 : value.entrySet()) {
                                        String key1 = entrySet1.getKey();
                                        //String value1 = entrySet1.getValue();
                                        ListGridRecord recordVeiculos = new ListGridRecord();
                                        recordVeiculos.setAttribute("icone", key1.substring(0, key1.indexOf(";")));
                                        recordVeiculos.setAttribute("placa",
                                                key1.substring(key1.indexOf(";") + 1, key1.length()));
                                        recordVeiculos.setAttribute("grupo", key);
                                        TabInicio.dataSourcePlacas.addData(recordVeiculos);
                                    }

                                }
                                //GWT.log("FLAG DE 5 POSICOES : " + flagCincoPosicoes);
                                flagCincoPosicoes = true;
                                //GWT.log("FLAG DE 5 POSICOES : " + flagCincoPosicoes);
                            } else {
                                GWT.log("ERRO ao listar os veculos do usurio DataSource: "
                                        + Info.usuarioLogado.get("codUsuario"));
                            }
                        } else {
                            GWT.log("Usurio sem veculo: " + Info.usuarioLogado.get("codUsuario"));
                        }
                    }
                });
        //Setando itens de configurao da tab
        setTitle(Info.titulosMsg.get("inicio"));
        //final Label infoVeiculo = new Label("<strong style=\"font-size:15px; \">Placa: XXX-1111" + " Fabricante: XXXX" + " Modelo: XXXX" + " Cor: XXXX" + " Ano: 0000/0000" + "</strong>");
        infoVeiculo.setHeight(30);
        final SectionStackSection mapaSection = new SectionStackSection();
        mapaSection.setID("mapaSection");
        mapaSection.setTitle(Info.titulosMsg.get("mapa"));//
        mapaSection.setExpanded(true);
        /********************************************/
        mapaInicioOpenLayer = new MapaInicioOpenLayer();

        /*******************************************/
        mapaSection.setItems(mapaInicioOpenLayer);

        final VLayout painelGridVeiculos = new VLayout();
        //painelGridVeiculos.setMembersMargin(10);
        painelGridVeiculos.addMember(infoVeiculo);
        painelGridVeiculos.addMember(TabInicio.posicoesVeiculos);
        painelGridVeiculos.setHeight100();

        final HLayout painelGridInfoVeiculo = new HLayout();
        painelGridInfoVeiculo.setMembersMargin(5);
        painelGridInfoVeiculo.addMember(TabInicio.veiculos);
        painelGridInfoVeiculo.addMember(painelGridVeiculos);
        painelGridInfoVeiculo.setHeight("25%");

        final SectionStackSection dadosSection = new SectionStackSection();
        dadosSection.setTitle(Info.titulosMsg.get("dadosVeiculo"));
        dadosSection.setItems(painelGridInfoVeiculo);
        dadosSection.setExpanded(true);

        final SectionStack buscarClientes = new SectionStack();
        buscarClientes.setSections(mapaSection, dadosSection);
        buscarClientes.setVisibilityMode(VisibilityMode.MULTIPLE);
        buscarClientes.setAnimateSections(true);
        buscarClientes.setWidth100();
        buscarClientes.setHeight100();
        buscarClientes.setOverflow(Overflow.VISIBLE);
        //excluir.setWidth(40);
        final ListGridField codigo = new ListGridField("codigo", Info.titulosMsg.get("tituloCodigo"));
        final ListGridField placaGrid = new ListGridField("placa", Info.titulosMsg.get("lista"));
        codigo.setHidden(true);
        placaGrid.setAlign(Alignment.CENTER);

        TabInicio.veiculos.setDataSource(TabInicio.dataSourcePlacas);

        //final ListGridField quantidade = new ListGridField("contador", Info.titulosMsg.get("numeroEndereco"));
        final ListGridField googleMap = new ListGridField("google", "Mapa");
        final ListGridField codPosicao = new ListGridField("codPosicao", "codPosicao");
        final ListGridField lat = new ListGridField("lat", Info.titulosMsg.get("latitude"));
        final ListGridField lon = new ListGridField("lon", Info.titulosMsg.get("longitude"));
        final ListGridField dataEhoraReal = new ListGridField("dataEhoraReal", Info.titulosMsg.get("dataHora"));
        final ListGridField dataEhora = new ListGridField("dataEhora", Info.titulosMsg.get("dataHora"));
        final ListGridField sat = new ListGridField("sat", Info.titulosMsg.get("satelite"));
        final ListGridField gps = new ListGridField("gps", Info.titulosMsg.get("gps"));
        final ListGridField vel = new ListGridField("vel", Info.titulosMsg.get("velocidade"));
        final ListGridField ing = new ListGridField("ign", Info.titulosMsg.get("ignicao"));
        final ListGridField ingReal = new ListGridField("ignReal", Info.titulosMsg.get("ignicao"));
        final ListGridField entrada = new ListGridField("entrada", Info.titulosMsg.get("entrada"));
        final ListGridField saida = new ListGridField("saida", Info.titulosMsg.get("saida"));
        final ListGridField evento = new ListGridField("evento", Info.titulosMsg.get("evento"));
        final ListGridField enderecoGrid = new ListGridField("endereco", Info.titulosMsg.get("endereco"));
        final ListGridField codDirecao = new ListGridField("codDirecao", Info.titulosMsg.get("direcao"));
        final ListGridField direcao = new ListGridField("direcao", Info.titulosMsg.get("direcao"));
        final ListGridField fabricante = new ListGridField("fabricante", Info.titulosMsg.get("fabricante"));
        final ListGridField modelo = new ListGridField("modelo", Info.titulosMsg.get("modelo"));
        final ListGridField cor = new ListGridField("cor", Info.titulosMsg.get("cor"));
        final ListGridField ano = new ListGridField("ano", Info.titulosMsg.get("ano"));
        final ListGridField nomeClienteGrid = new ListGridField("cliente", "Cliente");
        //quantidade.setWidth(40);
        //quantidade.setAlign(Alignment.CENTER);
        //quantidade.setHidden(true);
        googleMap.setAlign(Alignment.CENTER);
        googleMap.setWidth(60);
        codPosicao.setHidden(true);
        fabricante.setHidden(true);
        modelo.setHidden(true);
        cor.setHidden(true);
        ano.setHidden(true);
        codPosicao.setSortDirection(SortDirection.DESCENDING);
        codPosicao.setWidth(1);
        lat.setAlign(Alignment.CENTER);
        lat.setWidth(80);
        lon.setAlign(Alignment.CENTER);
        lon.setWidth(80);
        dataEhora.setAlign(Alignment.CENTER);
        dataEhora.setWidth(115);
        sat.setAlign(Alignment.CENTER);
        sat.setWidth(80);
        gps.setAlign(Alignment.CENTER);
        gps.setWidth(65);
        vel.setAlign(Alignment.CENTER);
        vel.setWidth(80);
        ing.setAlign(Alignment.CENTER);
        ing.setWidth(70);
        ingReal.setAlign(Alignment.LEFT);
        ingReal.setHidden(true);
        entrada.setAlign(Alignment.CENTER);
        entrada.setWidth(80);
        saida.setAlign(Alignment.CENTER);
        saida.setWidth(80);
        evento.setAlign(Alignment.CENTER);
        evento.setWidth(80);
        enderecoGrid.setAlign(Alignment.CENTER);
        //enderecoGrid.setWidth(500);
        codDirecao.setAlign(Alignment.CENTER);
        codDirecao.setHidden(true);
        direcao.setAlign(Alignment.CENTER);
        direcao.setWidth(70);
        //direcao.setHidden(true);
        dataEhoraReal.setHidden(true);
        nomeClienteGrid.setHidden(true);
        if (Info.usuarioLogado.get("codClienteCliente") != null) {
            lat.setHidden(true);
            lon.setHidden(true);
            //sat.setHidden(true);
            entrada.setHidden(true);
            saida.setHidden(true);
            evento.setHidden(true);
        }
        TabInicio.posicoesVeiculos.setFields(googleMap, codPosicao, dataEhoraReal, dataEhora, vel, ingReal, ing,
                lat, lon, sat, gps, entrada, saida, evento, enderecoGrid, codDirecao, direcao, fabricante, modelo,
                cor, ano, nomeClienteGrid);
        TabInicio.posicoesVeiculos.setCanPickFields(false);
        TabInicio.posicoesVeiculos.setSelectionType(SelectionStyle.MULTIPLE);
        TabInicio.posicoesVeiculos.setCanDragSelect(true);
        TabInicio.posicoesVeiculos.setCanAutoFitFields(false);
        TabInicio.posicoesVeiculos.setCanAutoFitFields(false);
        TabInicio.posicoesVeiculos.setCanSort(false);
        TabInicio.posicoesVeiculos.setCanGroupBy(false);
        TabInicio.posicoesVeiculos.setCanFreezeFields(false);
        //posicoesVeiculos.setSortField("dataEhora");
        //posicoesVeiculos.setSortDirection(SortDirection.DESCENDING);
        SortSpecifier sortSpecifier = new SortSpecifier("dataEhoraReal", SortDirection.DESCENDING);
        TabInicio.posicoesVeiculos.setSort(sortSpecifier);
        TabInicio.posicoesVeiculos.setProgressiveLoading(true);
        //TabInicio.posicoesVeiculos.setAnimateScrollAcceleration(AnimationAcceleration.SMOOTH_START);
        //TabInicio.posicoesVeiculos.addSort(sortSpecifier);
        //TabInicio.posicoesVeiculos.setCanSort(false);        
        //TabInicio.posicoesVeiculos.setSortField(0);  
        final ImgButton addPlacas = new ImgButton();
        addPlacas.setSrc("[SKIN]actions/add.png");
        addPlacas.setTooltip("Maximizar lista de veculos");
        addPlacas.setSize(16);
        addPlacas.setShowFocused(false);
        addPlacas.setShowRollOver(false);
        addPlacas.setShowDown(false);
        addPlacas.setDisabled(true);

        final ImgButton telaCheia = new ImgButton();
        telaCheia.setSrc("../imagens/fullscreen.png");
        telaCheia.setTooltip("Tela Cheia");
        telaCheia.setSize(16);
        telaCheia.setShowFocused(false);
        telaCheia.setShowRollOver(false);
        telaCheia.setShowDown(false);
        //telaCheia.setDisabled(true);
        telaCheia.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                Info.telaCheia("map-inicio");
            }
        });

        final ImgButton removePlacas = new ImgButton();
        removePlacas.setSrc("[SKIN]actions/remove.png");
        removePlacas.setTooltip("Minimizar lista de veculos");
        removePlacas.setSize(16);
        removePlacas.setShowFocused(false);
        removePlacas.setShowRollOver(false);
        removePlacas.setShowDown(false);
        removePlacas.setDisabled(true);

        final ImgButton refreshMapa = new ImgButton();
        refreshMapa.setSrc("[SKIN]actions/refresh.png");
        refreshMapa.setTooltip("Atualizar mapa");
        refreshMapa.setSize(16);
        refreshMapa.setShowFocused(false);
        refreshMapa.setShowRollOver(false);
        refreshMapa.setShowDown(false);
        refreshMapa.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                //Info.mapa.refresh(Info.mapa.value());
                mapaInicioOpenLayer.getOsm_1().redraw();
            }
        });
        //        boolean internetExplore = false;
        //        internetExplore = Info.identificaNavegador();
        //        if(internetExplore){
        mapaSection.setControls(refreshMapa, addPlacas, removePlacas);
        //        } else {
        //          mapaSection.setControls(telaCheia, refreshMapa, addPlacas, removePlacas);  
        //        }
        addPlacas.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                painelSectionPlacas.setAnimateTime(1200);
                painelSectionPlacas.animateShow(AnimationEffect.FADE);
                addPlacas.setDisabled(true);
                removePlacas.setDisabled(false);
            }
        });

        removePlacas.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                //veiculos.selectRecord(indexVeiculoPlaca);
                painelSectionPlacas.setAnimateTime(1200);
                painelSectionPlacas.animateHide(AnimationEffect.FADE);
                addPlacas.setDisabled(false);
                removePlacas.setDisabled(true);
                //painelFormulario.hide();
            }
        });

        TabInicio.posicoesVeiculos.addSelectionUpdatedHandler(new SelectionUpdatedHandler() {

            @Override
            public void onSelectionUpdated(SelectionUpdatedEvent event) {

                ListGridRecord[] lista = new ListGridRecord[0];
                lista = TabInicio.posicoesVeiculos.getSelectedRecords();
                sortPosicoes(lista);
            }
        });
        painelPai.addMember(buscarClientes);
        setPane(painelPai);
        TabInicio.veiculos.addDrawHandler(new DrawHandler() {

            @Override
            public void onDraw(DrawEvent event) {
                //GWT.log("addDrawHandler(new DrawHandler()");                 
                //Info.esconderLogoGoogle();
                TabInicio.TABELAVEICULODESENHADA = true;
                //GWT.log("addDrawHandler(new DrawHandler(): "+TabInicio.TABELAVEICULODESENHADA);

                if (tamanhoListaVeiculos > 0) {
                    if (TabInicio.indexVeiculoPlaca == tamanhoListaVeiculos) {
                        TabInicio.indexVeiculoPlaca--;
                    }
                    TabInicio.veiculos.selectRecord(TabInicio.veiculos.getRecord(TabInicio.indexVeiculoPlaca));
                    TabInicio.veiculos.groupBy("grupo");
                    TabInicio.veiculos.selectRecord(TabInicio.veiculos.getRecord(TabInicio.indexVeiculoPlaca));
                    TabInicio.posicoesVeiculos.selectRecord(0, true);

                    if (tamanhoListaVeiculos > 7 && verificaListaDeVeiculos) {
                        verificaListaDeVeiculos = false;
                        //GWT.log("Tamanho lista veculos INICIO : " + tamanhoListaVeiculos + " verficaLista : " + verificaListaDeVeiculos);
                        //painelPai.clear();
                        removePlacas.setDisabled(false);
                        painelPai.redraw();
                        final SectionStackSection placasSection = new SectionStackSection();
                        placasSection.setTitle("Placas");
                        TabInicio.veiculos.markForRedraw();
                        TabInicio.veiculos.setBorder("0px");
                        TabInicio.veiculos.setWidth("100%");
                        placasSection.setItems(TabInicio.veiculos);
                        placasSection.setExpanded(true);

                        final SectionStack listaDePlacasSectionStack = new SectionStack();
                        listaDePlacasSectionStack.setSections(placasSection);
                        listaDePlacasSectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
                        listaDePlacasSectionStack.setAnimateSections(true);
                        listaDePlacasSectionStack.setWidth100();
                        listaDePlacasSectionStack.setHeight100();
                        listaDePlacasSectionStack.setOverflow(Overflow.VISIBLE);
                        painelSectionPlacas.setMembersMargin(5);
                        painelSectionPlacas.setWidth("10%");
                        painelSectionPlacas.setHeight100();
                        painelSectionPlacas.addMember(listaDePlacasSectionStack);

                        painelGridVeiculos.markForRedraw();
                        painelGridVeiculos.addMember(TabInicio.posicoesVeiculos);

                        painelPai.addMember(painelSectionPlacas, 0);
                        painelPai.addMember(buscarClientes, 1);
                    }
                }
            }
        });
        //TabInicio.veiculos.setAutoFetchData(true);
        TabInicio.veiculos.setDataSource(TabInicio.dataSourcePlacas);
        TabInicio.veiculos.fetchData();
        //TabInicio.veiculos.groupBy("grupo");
        //TabInicio.veiculos.selectRecord(indexVeiculoPlaca, true);
        TabInicio.veiculos.setGroupStartOpen(GroupStartOpen.ALL);
        TabInicio.veiculos.setGroupByField("grupo");
        TabInicio.veiculos.groupBy("grupo");

        TabInicio.veiculos.addGroupStateChangedHandler(new GroupStateChangedHandler() {

            @Override
            public void onGroupStateChanged(GroupStateChangedEvent event) {
                if (TabInicio.veiculos.getTotalRows() > indexVeiculoPlaca) {
                    //TabInicio.veiculos.selectRecord(indexVeiculoPlaca + 1);
                    TabInicio.veiculos.selectRecord(TabInicio.veiculos.getRecord(indexVeiculoPlaca));
                } else {
                    TabInicio.veiculos.selectRecord(TabInicio.veiculos.getRecord(0));
                    //GWT.log("addGroupStateChangedHandler" + indexVeiculoPlaca);
                }
                //TabInicio.veiculos.focus();
            }
        });

        TabInicio.veiculos.addDataArrivedHandler(new DataArrivedHandler() {

            @Override
            public void onDataArrived(DataArrivedEvent event) {
                if (tamanhoListaVeiculos > 7 && verificaListaDeVeiculos) {
                    verificaListaDeVeiculos = false;
                    //GWT.log("Tamanho lista veculos INICIO : " + tamanhoListaVeiculos + " verficaLista : " + verificaListaDeVeiculos);
                    //painelPai.clear();
                    removePlacas.setDisabled(false);
                    painelPai.redraw();
                    final SectionStackSection placasSection = new SectionStackSection();
                    placasSection.setTitle("Placas");
                    TabInicio.veiculos.markForRedraw();
                    TabInicio.veiculos.setBorder("0px");
                    TabInicio.veiculos.setWidth("100%");
                    placasSection.setItems(veiculos);
                    placasSection.setExpanded(true);
                    //placasSection.setControls(addPlacas, removePlacas);

                    final SectionStack listaDePlacasSectionStack = new SectionStack();
                    listaDePlacasSectionStack.setSections(placasSection);
                    listaDePlacasSectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
                    listaDePlacasSectionStack.setAnimateSections(true);
                    listaDePlacasSectionStack.setWidth100();
                    listaDePlacasSectionStack.setHeight100();
                    listaDePlacasSectionStack.setOverflow(Overflow.VISIBLE);
                    painelSectionPlacas.setMembersMargin(5);
                    painelSectionPlacas.setWidth("10%");
                    painelSectionPlacas.setHeight100();
                    painelSectionPlacas.addMember(listaDePlacasSectionStack);

                    painelGridVeiculos.markForRedraw();
                    painelGridVeiculos.addMember(posicoesVeiculos);

                    painelPai.addMember(painelSectionPlacas, 0);
                    painelPai.addMember(buscarClientes, 1);
                }
            }
        });
        // Evento de seleo na tabela  veculos//
        TabInicio.veiculos.addSelectionUpdatedHandler(new SelectionUpdatedHandler() {

            @Override
            public void onSelectionUpdated(SelectionUpdatedEvent event) {
                //GWT.log("veiculos.getSelectedRecord()<<>> "+veiculos.getSelectedRecord());
                TabInicio.posicoesSemEndereco.clear();
                String placaVeiculo = veiculos.getSelectedRecord().getAttributeAsString("placa");
                placaSelecionadaAtual = placaVeiculo;
                TabInicio.indexVeiculoPlaca = veiculos.getRecordIndex(veiculos.getSelectedRecord());
                TabInicio.posicoesVeiculos.setData(new Record[0]);
                ArrayList<TreeMap<String, String>> posicoesVeiculo = (ArrayList<TreeMap<String, String>>) getListaVeiculos()
                        .get(placaVeiculo);

                for (TreeMap<String, String> posicoes : posicoesVeiculo) {
                    //if (posicoes.get("placa").equalsIgnoreCase(placaVeiculo)) {
                    Record registro = new Record();
                    //registro.setAttribute("contador", i);
                    registro.setAttribute("google", "<a  href=\"http://maps.google.com.br/maps?q="
                            + posicoes.get("lat") + "," + posicoes.get("lon")
                            + "\" title=\"Google maps\" target=\"_blank\"><img src=\"./imagens/mapa.png\" alt=\"Google\" height =\"16px\" width=\"16px\"></a>");
                    registro.setAttribute("codPosicao", Integer.parseInt(posicoes.get("codUltimo")));
                    registro.setAttribute("lat", posicoes.get("lat"));
                    registro.setAttribute("lon", posicoes.get("lon"));
                    registro.setAttribute("dataEhoraReal", Long.parseLong(posicoes.get("dataHora")));
                    //DateUtil.setDefaultDisplayTimezone("-03:00");
                    //registro.setAttribute("dataEhora", DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM).format(new Timestamp(Long.parseLong(posicoes.get("dataHora"))), TimeZone.createTimeZone(120)));
                    registro.setAttribute("dataEhora", posicoes.get("dataHoraString"));
                    //registro.setAttribute("sat", posicoes.get("sat"));
                    registro.setAttribute("sat", posicoes.get("sat")
                            + " <img src=\"../imagens/satelite.png\" width=\"16\" height=\"16\" alt=\"Satlite\" title=\"Satlite\"/>");
                    registro.setAttribute("gps",
                            (posicoes.get("gps").equalsIgnoreCase("0")) ? "<nbr class=\"positivo\">Atualizado</nbr>"
                                    : "<nbr class=\"alerta\">Memria</nbr>");
                    registro.setAttribute("vel", posicoes.get("vel"));
                    registro.setAttribute("ignReal", Boolean.parseBoolean(posicoes.get("ign")));
                    registro.setAttribute("ign", (Boolean.parseBoolean(posicoes.get("ign")))
                            ? "<img src=\"../imagens/ignligada.png\" width=\"16\" height=\"16\" alt=\"Ligada\" title=\"Ligada\"/>"
                            : "<img src=\"../imagens/igndesligada.png\" width=\"16\" height=\"16\" alt=\"desligada\"  title=\"Desligada\"/>");
                    registro.setAttribute("entrada", posicoes.get("entrada"));
                    registro.setAttribute("saida", posicoes.get("saida"));
                    registro.setAttribute("evento", posicoes.get("evento"));
                    registro.setAttribute("endereco",
                            (posicoes.get("endereco") == null) ? "Sem endereo" : posicoes.get("endereco"));
                    registro.setAttribute("codDirecao", posicoes.get("codDirecao"));
                    registro.setAttribute("direcao", posicoes.get("direcao"));
                    registro.setAttribute("fabricante", posicoes.get("fabricante"));
                    registro.setAttribute("modelo", posicoes.get("modelo"));
                    registro.setAttribute("cor", posicoes.get("cor"));
                    registro.setAttribute("ano", posicoes.get("ano"));
                    registro.setAttribute("cliente", posicoes.get("nomeCliente"));
                    //<a  href=\"http://maps.google.com.br/maps?q="+lat+","+lon+"\" title=\"Google maps\" target=\"_blank\"><img src=\"./imagens/mapa.png\" alt=\"Google\" height =\"16px\" width=\"16px\"></a>
                    TabInicio.posicoesVeiculos.addData(registro);
                    //registro.setAttribute("contador", TabInicio.posicoesVeiculos.getRecordIndex(registro));
                    //posicoesVeiculos.refreshRecordComponent(TabInicio.posicoesVeiculos.getRecordIndex(registro), 0);
                    //GWT.log("lat: "+posicoes.get("endereco")+" lon: "+posicoes.get("lon")+" end: "+posicoes.get("endereco"));
                    if (posicoes.get("endereco") == null) {
                        TabInicio.posicoesSemEndereco.add(registro);
                    }
                    //}

                }
                TabInicio.posicoesVeiculos.selectRecord(0, true);
                if (flagSemEndereco) {
                    flagSemEndereco = false;
                    Info.atualizaPosicoesSemEndereco.scheduleRepeating(5000);
                }
                //indexDecrescente = posicoesVeiculos.getRecords().length - 1;
                infoVeiculo.redraw();
                //infoVeiculo.setTooltip("TESTE 2");
                infoVeiculo.setContents("<strong style=\"font-size:15px; \">  " + Info.titulosMsg.get("placa")
                        + ": " + placaVeiculo + " " + Info.titulosMsg.get("fabricante") + ": "
                        + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("fabricante") + " "
                        + Info.titulosMsg.get("modelo") + ": "
                        + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("modelo") + " "
                        + Info.titulosMsg.get("cor") + ": "
                        + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("cor") + " "
                        + Info.titulosMsg.get("ano") + ": "
                        + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("ano")
                        + ".</strong> Percorridos 0 metros. Tempo : 0.");

            }
        });

        Info.atualizaVeiculosTodos = new Timer() {

            @Override
            public void run() {
                if (Info.validaConexao()) {
                    //GWT.log("flagCincoPosicoes : " + flagCincoPosicoes + " flagPosicoesDemanda: " + flagPosicoesDemanda + " offSet: " + offSet + " offSetAux: " + offSetAux);
                    if (flagCincoPosicoes && flagPosicoesDemanda && offSet > offSetAux) {

                        //GWT.log("FLAG DE POSICOES OFFSET : " + flagPosicoesDemanda);
                        flagPosicoesDemanda = false;
                        //GWT.log("FLAG DE POSICOES OFFSET : " + flagPosicoesDemanda);
                        //GWT.log("flagPosicoesDemanda: " + flagPosicoesDemanda + " codMinimaPosicao: " + offSet + " codMinimaPosicaoAux: " + offSetAux);
                        Info.dbService.buscarVeiculoPorUsuarioLogadoTodas(
                                Integer.parseInt(Info.usuarioLogado.get("codUsuario")), offSet,
                                new AsyncCallback<TreeMap<String, Object>>() {

                                    @Override
                                    public void onFailure(Throwable caught) {
                                        SC.warn("ERRO - Falha na conexo com a internet - buscarVeiculoTodos");
                                    }

                                    @Override
                                    public void onSuccess(TreeMap<String, Object> result) {

                                        if (result != null) {
                                            offSetAux = TabInicio.offSet;
                                            TabInicio.offSet = Integer
                                                    .parseInt(String.valueOf(result.get("OFFSET")));
                                            countThreadNovasDemanda = 0;
                                            //GWT.log("resultOFFSET .size(): " + result.size() + " codMinimaPosicao: " + offSet);
                                            //Info.enderecosResolvidos.clear();
                                            Info.enderecosResolvidos
                                                    .putAll((TreeMap<String, String>) result.get("ENDERECO"));
                                            // diz para a thread que a busca pelas 100 posicoes foi feita;                                    
                                            Record registro = new Record();
                                            registro.setAttribute("dataHoraReal",
                                                    new Timestamp(System.currentTimeMillis()).getTime());
                                            registro.setAttribute("log",
                                                    "Linha da Thread atualiza Veiculos por OFFSET : "
                                                            + DateTimeFormat
                                                                    .getFormat(PredefinedFormat.DATE_TIME_MEDIUM)
                                                                    .format(new Timestamp(
                                                                            System.currentTimeMillis())));
                                            TabLog.log.addData(registro);
                                            TabInicio.listaVeiculos.putAll(result);
                                            String placaSelecao = null;
                                            long dataReal = 0;
                                            ArrayList<TreeMap<String, String>> lista = new ArrayList<>();
                                            //GWT.log("Por OFFSET TABELAVEICULODESENHADA 00 : " + TABELAVEICULODESENHADA);
                                            if (TabInicio.TABELAVEICULODESENHADA) {
                                                //GWT.log("1 Por OFFSET TABELAVEICULODESENHADA : " + TabInicio.TABELAVEICULODESENHADA);
                                                //GWT.log("2 Por OFFSET TABELAVEICULODESENHADA placaSelecao : " + placaSelecao);
                                                placaSelecao = veiculos.getSelectedRecord()
                                                        .getAttributeAsString("placa");
                                                //GWT.log("3 Por OFFSET TABELAVEICULODESENHADA  placaSelecao : " + placaSelecao);
                                                lista = (ArrayList<TreeMap<String, String>>) TabInicio.listaVeiculos
                                                        .get(placaSelecao);
                                                //GWT.log("4 Por OFFSET TABELAVEICULODESENHADA  placaSelecao : " + placaSelecao);
                                                //GWT.log("Por OFFSET POSICOES - placaSelecao: " + placaSelecao+" - DataReal: "+posicoesVeiculos.getRecord(posicoesVeiculos.getRecords().length - 1).getAttributeAsLong("dataEhoraReal"));
                                                dataReal = TabInicio.posicoesVeiculos
                                                        .getRecord(
                                                                TabInicio.posicoesVeiculos.getRecords().length - 1)
                                                        .getAttributeAsLong("dataEhoraReal");
                                                //GWT.log("Por OFFSET POSICOES - placaSelecao: " + placaSelecao+" - DataReal: "+dataReal);

                                            }

                                            if (!lista.isEmpty()) {
                                                TabInicio.posicoesSemEndereco.clear();
                                                for (TreeMap<String, String> k : lista) {
                                                    Record registroPosicion = new Record();
                                                    //registroPosicion.setAttribute("contador", "<strong>NV</strong>");
                                                    registroPosicion.setAttribute("google",
                                                            "<a  href=\"http://maps.google.com.br/maps?q="
                                                                    + k.get("lat") + "," + k.get("lon")
                                                                    + "\" title=\"Google maps\" target=\"_blank\"><img src=\"./imagens/mapa.png\" alt=\"Google\" height =\"16px\" width=\"16px\"></a>");
                                                    registroPosicion.setAttribute("codPosicao",
                                                            Integer.parseInt(k.get("codUltimo")));
                                                    registroPosicion.setAttribute("lat", k.get("lat"));
                                                    registroPosicion.setAttribute("lon", k.get("lon"));
                                                    registroPosicion.setAttribute("dataEhoraReal",
                                                            Long.parseLong(k.get("dataHora")));
                                                    //DateUtil.setDefaultDisplayTimezone("-03:00");
                                                    //registroPosicion.setAttribute("dataEhora", DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM).format(new Timestamp(Long.parseLong(k.get("dataHora"))), TimeZone.createTimeZone(120)));
                                                    registroPosicion.setAttribute("dataEhora",
                                                            k.get("dataHoraString"));
                                                    //registroPosicion.setAttribute("sat", k.get("sat"));
                                                    registroPosicion.setAttribute("sat", k.get("sat")
                                                            + " <img src=\"../imagens/satelite.png\" width=\"16\" height=\"16\" alt=\"Satlite\" title=\"Satlite\"/>");
                                                    registroPosicion.setAttribute("gps",
                                                            (k.get("gps").equalsIgnoreCase("0"))
                                                                    ? "<nbr class=\"positivo\">Atualizado</nbr>"
                                                                    : "<nbr class=\"alerta\">Memria</nbr>");
                                                    registroPosicion.setAttribute("vel", k.get("vel"));
                                                    registroPosicion.setAttribute("ignReal",
                                                            Boolean.parseBoolean(k.get("ign")));
                                                    //registroPosicion.setAttribute("ign", (Boolean.parseBoolean(k.get("ign"))) ? "<nbr class=\"positivo\">Ligada</nbr>" : "<nbr class=\negativo\">Desligada</nbr>");
                                                    registroPosicion.setAttribute("ign",
                                                            (Boolean.parseBoolean(k.get("ign")))
                                                                    ? "<img src=\"../imagens/ignligada.png\" width=\"16\" height=\"16\" alt=\"Ligada\" title=\"Ligada\"/>"
                                                                    : "<img src=\"../imagens/igndesligada.png\" width=\"16\" height=\"16\" alt=\"desligada\"  title=\"Desligada\"/>");
                                                    registroPosicion.setAttribute("entrada", k.get("entrada"));
                                                    registroPosicion.setAttribute("saida", k.get("saida"));
                                                    registroPosicion.setAttribute("evento", k.get("evento"));
                                                    registroPosicion.setAttribute("endereco",
                                                            (k.get("endereco") == null) ? "Sem endereo"
                                                                    : k.get("endereco"));
                                                    registroPosicion.setAttribute("codDirecao",
                                                            k.get("codDirecao"));
                                                    registroPosicion.setAttribute("direcao", k.get("direcao"));
                                                    registroPosicion.setAttribute("fabricante",
                                                            k.get("fabricante"));
                                                    registroPosicion.setAttribute("modelo", k.get("modelo"));
                                                    registroPosicion.setAttribute("cor", k.get("cor"));
                                                    registroPosicion.setAttribute("ano", k.get("ano"));
                                                    registroPosicion.setAttribute("cliente", k.get("nomeCliente"));
                                                    //GWT.log("atualizaVeiculosTodos: lat: "+k.get("endereco")+" lon: "+k.get("lon")+" end: "+k.get("endereco"));
                                                    if (Long.parseLong(k.get("dataHora")) < dataReal) {
                                                        TabInicio.posicoesVeiculos.addData(registroPosicion);
                                                    }
                                                    if (k.get("endereco") == null) {
                                                        TabInicio.posicoesSemEndereco.add(registroPosicion);
                                                    }
                                                }
                                            }
                                            //GWT.log("Por OFFSET POSICOES 2 : " + flagPosicoesDemanda);
                                            flagPosicoesDemanda = true;
                                            //GWT.log("Por OFFSET POSICOES 3 : " + flagPosicoesDemanda);
                                        } else {
                                            //veiculos.setDataSource(new DataSource());
                                            countThreadNovasDemanda++;
                                            GWT.log("LISTA DE POSIES EM LOTE EST? VAZIA!");
                                            flagPosicoesDemanda = true;

                                        }
                                    }
                                });
                    } else {
                        //countThreadNovasDemanda++;
                        //flagPosicoesDemanda = true;
                        GWT.log("ESPERANDO............. " + countThreadNovasDemanda);

                    }
                } else {
                    SC.warn("***** Voc est offline *****");
                }
            }
        };
        Info.atualizaVeiculosTodos.scheduleRepeating(5000);

        Info.atualizaVeiculosNovasPosicoes = new Timer() {

            @Override
            public void run() {
                if (Info.validaConexao()) {
                    if (countThreadNovasPosicoes > 23) {
                        flagNovasPosicoes = true;
                        countThreadNovasPosicoes = 0;
                        codUltimaPosicaoAux = 1;
                    }
                    if (countThreadNovasDemanda > 48) {
                        TabInicio.offSet = 0;
                        offSetAux = -1;
                        countThreadNovasDemanda = 0;
                        //GWT.log("CANCELANDO: Info.atualizaVeiculosTodos.cancel()!");
                        Info.atualizaVeiculosTodos.cancel();
                        //GWT.log("CANCELADO: Info.atualizaVeiculosTodos.cancel()!");
                    }
                    //GWT.log("ANTES DO IF : inicio: "+inicio+" CINCO POSICOES: "+flagCincoPosicoes+" FLAG CEM POSICOES: "+flagPosicoesDemanda+" FLAG NOVAS POSICOES: " +flagNovasPosicoes + " codUltimaPosicao: "+codUltimaPosicao+" codUltimaPosicaoAux: "+codUltimaPosicaoAux);
                    if (flagCincoPosicoes && flagNovasPosicoes
                            && TabInicio.codUltimaPosicao > codUltimaPosicaoAux) {
                        //GWT.log("FLAG DE NOVAS POSICOES 2 : " + flagNovasPosicoes);
                        flagNovasPosicoes = false;
                        //GWT.log("FLAG DE NOVAS POSICOES 3 : " + flagNovasPosicoes);
                        //GWT.log("(TabInicio) - buscarVeiculoPorUsuarioLogadoPosicoesNovas: codUsuario: " + Info.usuarioLogado.get("codUsuario") + " codUltimaPosicao: " + codUltimaPosicao);
                        //GWT.log("CodUsurio: "+Info.usuarioLogado.get("codUsuario")+" Info.posicoesSemEndereco: "+TabInicio.posicoesSemEndereco.size());
                        Info.dbService.buscarVeiculoPorUsuarioLogadoPosicoesNovas(
                                Integer.parseInt(Info.usuarioLogado.get("codUsuario")), TabInicio.codUltimaPosicao,
                                new AsyncCallback<TreeMap<String, Object>>() {

                                    @Override
                                    public void onFailure(Throwable caught) {
                                        SC.warn("Falha na conexo - PosicoesNovas");
                                    }

                                    @Override
                                    public void onSuccess(TreeMap<String, Object> result) {
                                        //Timestamp dataUltimaPosicaoAuxiliar = new Timestamp((Long.parseLong(listaVeiculosAuxiliar.get(veiculos.getSelectedRecord().getAttributeAsString("placa")).get(0).get("dataHora"))));
                                        //GWT.log("LINHA do buscar posicoes novas!");
                                        //flagNovasPosicoes = true;
                                        countThreadNovasPosicoes = 0;
                                        //GWT.log("LINHA do buscar posicoes novas: "+codUltimaPosicao);
                                        if (result != null) {
                                            codUltimaPosicaoAux = TabInicio.codUltimaPosicao;
                                            TabInicio.codUltimaPosicao = Integer
                                                    .parseInt(String.valueOf(result.get("MAXIMO")));
                                            Record registro = new Record();
                                            registro.setAttribute("dataHoraReal",
                                                    new Timestamp(System.currentTimeMillis()).getTime());
                                            registro.setAttribute("log",
                                                    "Linha da Thread atualiza novas Posicoes: " + DateTimeFormat
                                                            .getFormat(PredefinedFormat.DATE_TIME_MEDIUM)
                                                            .format(new Timestamp(System.currentTimeMillis())));
                                            TabLog.log.addData(registro);
                                            //GWT.log("LINHA 00 NOVAS POSICOES - M?XIMO: "+result.get("MAXIMO"));
                                            //veiculos.selectRecord(indexVeiculoPlaca);
                                            String placaSelecao = null;
                                            //GWT.log("FLAG DE NOVAS POSICOES TABELAVEICULODESENHADA 00 : " + TABELAVEICULODESENHADA);
                                            if (TabInicio.TABELAVEICULODESENHADA) {
                                                //GWT.log("FLAG DE NOVAS POSICOES TABELAVEICULODESENHADA : " + TABELAVEICULODESENHADA);
                                                placaSelecao = veiculos.getSelectedRecord()
                                                        .getAttributeAsString("placa");
                                                //GWT.log("LINHA 0001 NOVAS POSICOES - PLACA: " + placaSelecao);
                                            }
                                            //GWT.log("TABELA DESENHADA: " + TABELAVEICULODESENHADA);
                                            if (Integer.parseInt((String) result.get("MAXIMO")) > 0) {
                                                //GWT.log("LINHA 00012 NOVAS POSICOES - PLACA: "+placaSelecao);
                                                Info.enderecosResolvidos
                                                        .putAll((TreeMap<String, String>) result.get("ENDERECO"));
                                                //GWT.log("LINHA 01 NOVAS POSICOES - ENDERECOS RESOLVIDOS: " + Info.enderecosResolvidos.size());
                                                for (java.util.Map.Entry<String, Object> entrySet : result
                                                        .entrySet()) {
                                                    //GWT.log("LINHA 02 NOVAS POSICOES" + codUltimaPosicao);
                                                    String key = entrySet.getKey();
                                                    if (!key.equalsIgnoreCase("OFFSET")
                                                            && !key.equalsIgnoreCase("MAXIMO")
                                                            && !key.equalsIgnoreCase("MINIMO")
                                                            && !key.equalsIgnoreCase("ENDERECO")
                                                            && !key.equalsIgnoreCase("GRUPO")) {
                                                        //if (!key.equalsIgnoreCase("MINIMO") && !key.equalsIgnoreCase("MAXIMO") && !key.equalsIgnoreCase("ENDERECO")) {
                                                        //GWT.log("LINHA 03 NOVAS POSICOES" + codUltimaPosicao);
                                                        ArrayList<TreeMap<String, String>> value = (ArrayList<TreeMap<String, String>>) entrySet
                                                                .getValue();
                                                        if (TabInicio.listaVeiculos.containsKey(key)) {
                                                            //GWT.log("LINHA 04 PLACA: "+key+" LINHA 04 NOVAS POSICOES" + codUltimaPosicao);
                                                            for (TreeMap<String, String> k : value) {
                                                                //GWT.log("LINHA 05: "+key+" LINHA 05 NOVAS POSICOES" + codUltimaPosicao);
                                                                ArrayList<TreeMap<String, String>> lista = (ArrayList<TreeMap<String, String>>) TabInicio.listaVeiculos
                                                                        .get(key);
                                                                TreeSet<TreeMap<String, String>> treeSetAux = new TreeSet<>(
                                                                        new OrdenaPosicao());
                                                                treeSetAux.addAll(lista);
                                                                //GWT.log("LINHA 06 Placa novas: ");
                                                                if (treeSetAux.add(k)) {
                                                                    //GWT.log("LINHA 07 Placa novas: ");
                                                                    if (key.equalsIgnoreCase(placaSelecao)) {
                                                                        //GWT.log("LINHA 08 Placa novas: ");
                                                                        //GWT.log("REMOVER: "+TabInicio.posicoesVeiculos.getRecord(TabInicio.posicoesVeiculos.getRecords().length - 1).getAttributeAsString("codPosicao"));
                                                                        ListGridRecord[] selecionados = TabInicio.posicoesVeiculos
                                                                                .getSelectedRecords();
                                                                        int indexSelecao = -5;
                                                                        int auxIndex = -3;
                                                                        if (selecionados.length == 1) {
                                                                            //GWT.log("LINHA 09 Placa novas: ");
                                                                            int index = TabInicio.posicoesVeiculos
                                                                                    .getRecordIndex(
                                                                                            TabInicio.posicoesVeiculos
                                                                                                    .getSelectedRecord());
                                                                            //GWT.log("LINHA 10 Placa novas: ");
                                                                            if (index == 0) {
                                                                                //GWT.log("LINHA 11 Placa novas: " + key);
                                                                                TabInicio.posicoesVeiculos
                                                                                        .deselectAllRecords();
                                                                                indexSelecao = 0;
                                                                                //GWT.log("LINHA 12 Placa novas: ");

                                                                            } else if (index == TabInicio.posicoesVeiculos
                                                                                    .getRecords().length - 1) {
                                                                                //GWT.log("LINHA 13 Placa novas: ");
                                                                                //if(TabInicio.posicoesVeiculos.getRecords().length <= 100){
                                                                                TabInicio.posicoesVeiculos
                                                                                        .deselectAllRecords();
                                                                                //GWT.log("LINHA 14 Placa novas: ");
                                                                                indexSelecao = index;
                                                                                auxIndex = index;
                                                                                //GWT.log("Index ltimo 15: " + indexSelecao);
                                                                            }

                                                                        }
                                                                        if (TabInicio.posicoesVeiculos
                                                                                .getRecords().length >= 100) {
                                                                            //GWT.log("LINHA 16 Placa novas: ");
                                                                            TabInicio.posicoesVeiculos.removeData(
                                                                                    TabInicio.posicoesVeiculos
                                                                                            .getRecord(
                                                                                                    TabInicio.posicoesVeiculos
                                                                                                            .getRecords().length
                                                                                                            - 1));
                                                                            //GWT.log("LINHA 17 Placa novas: ");
                                                                        }
                                                                        //GWT.log("LINHA 18 Placa novas: ");
                                                                        Record registroPosicion = new Record();
                                                                        registroPosicion.setAttribute("google",
                                                                                "<a  href=\"http://maps.google.com.br/maps?q="
                                                                                        + k.get("lat") + ","
                                                                                        + k.get("lon")
                                                                                        + "\" title=\"Google maps\" target=\"_blank\"><img src=\"./imagens/mapa.png\" alt=\"Google\" height =\"16px\" width=\"16px\"></a>");
                                                                        registroPosicion.setAttribute("codPosicao",
                                                                                Integer.parseInt(
                                                                                        k.get("codUltimo")));
                                                                        registroPosicion.setAttribute("lat",
                                                                                k.get("lat"));
                                                                        registroPosicion.setAttribute("lon",
                                                                                k.get("lon"));
                                                                        registroPosicion.setAttribute(
                                                                                "dataEhoraReal",
                                                                                Long.parseLong(k.get("dataHora")));
                                                                        registroPosicion.setAttribute("dataEhora",
                                                                                k.get("dataHoraString"));
                                                                        registroPosicion.setAttribute("sat", k
                                                                                .get("sat")
                                                                                + " <img src=\"../imagens/satelite.png\" width=\"16\" height=\"16\" alt=\"Satlite\" title=\"Satlite\"/>");
                                                                        registroPosicion.setAttribute("gps",
                                                                                (k.get("gps").equalsIgnoreCase("0"))
                                                                                        ? "<nbr class=\"positivo\">Atualizado</nbr>"
                                                                                        : "<nbr class=\"alerta\">Memria</nbr>");
                                                                        registroPosicion.setAttribute("vel",
                                                                                k.get("vel"));
                                                                        registroPosicion.setAttribute("ignReal",
                                                                                Boolean.parseBoolean(k.get("ign")));
                                                                        registroPosicion.setAttribute("ign",
                                                                                (Boolean.parseBoolean(k.get("ign")))
                                                                                        ? "<img src=\"../imagens/ignligada.png\" width=\"16\" height=\"16\" alt=\"Ligada\" title=\"Ligada\"/>"
                                                                                        : "<img src=\"../imagens/igndesligada.png\" width=\"16\" height=\"16\" alt=\"desligada\"  title=\"Desligada\"/>");
                                                                        registroPosicion.setAttribute("entrada",
                                                                                k.get("entrada"));
                                                                        registroPosicion.setAttribute("saida",
                                                                                k.get("saida"));
                                                                        registroPosicion.setAttribute("evento",
                                                                                k.get("evento"));
                                                                        registroPosicion.setAttribute("endereco",
                                                                                (k.get("endereco") == null)
                                                                                        ? "Sem endereo"
                                                                                        : k.get("endereco"));
                                                                        registroPosicion.setAttribute("codDirecao",
                                                                                k.get("codDirecao"));
                                                                        registroPosicion.setAttribute("direcao",
                                                                                k.get("direcao"));
                                                                        registroPosicion.setAttribute("fabricante",
                                                                                k.get("fabricante"));
                                                                        registroPosicion.setAttribute("modelo",
                                                                                k.get("modelo"));
                                                                        registroPosicion.setAttribute("cor",
                                                                                k.get("cor"));
                                                                        registroPosicion.setAttribute("ano",
                                                                                k.get("ano"));
                                                                        registroPosicion.setAttribute("cliente",
                                                                                k.get("nomeCliente"));
                                                                        TabInicio.posicoesVeiculos
                                                                                .addData(registroPosicion);
                                                                        //GWT.log("atualizaVeiculosNovasPosicoes: lat: "+k.get("endereco")+" lon: "+k.get("lon")+" end: "+k.get("endereco"));
                                                                        if (k.get("endereco") == null) {
                                                                            TabInicio.posicoesSemEndereco
                                                                                    .add(registroPosicion);
                                                                        }
                                                                        //GWT.log("LINHA 19 Placa novas: ");
                                                                        //GWT.log("POSICAO NOVA: "+k); 

                                                                        if ((selecionados.length == 1
                                                                                && indexSelecao == 0)
                                                                                || (selecionados.length == 1
                                                                                        && indexSelecao == auxIndex)) {
                                                                            //GWT.log("LINHA 20 Placa novas: ");
                                                                            TabInicio.posicoesVeiculos
                                                                                    .selectRecord(indexSelecao);
                                                                            //GWT.log("Index Selecionado: " + indexSelecao);
                                                                            //GWT.log("LINHA 21 Placa novas: ");
                                                                        }
                                                                        //GWT.log("ENDEREO - POSICOES NOVAS: "+registroPosicion.getAttributeAsString("endereco"));
                                                                        if (registroPosicion
                                                                                .getAttributeAsString("endereco")
                                                                                .equalsIgnoreCase(
                                                                                        "Sem endereo")) {
                                                                            //GWT.log("LINHA 22 Placa novas: ");
                                                                            //int indexNovaPosicao = TabInicio.posicoesVeiculos.getRecordIndex(registroPosicion);
                                                                            TabInicio.posicoesSemEndereco
                                                                                    .add(registroPosicion);
                                                                            //GWT.log("LINHA 23 Placa novas: ");
                                                                            buscaEndereco(registroPosicion
                                                                                    .getAttributeAsString("lat"),
                                                                                    registroPosicion
                                                                                            .getAttributeAsString(
                                                                                                    "lon"),
                                                                                    key, registroPosicion);
                                                                            //GWT.log("LINHA 24 Placa novas: ");
                                                                            //GWT.log("LINHA DA CHEGADA DA NOVA POSICAO");
                                                                        }

                                                                    }
                                                                    if (treeSetAux.size() >= 100) {
                                                                        //GWT.log("LINHA 25 Placa novas: ");
                                                                        treeSetAux.pollLast();
                                                                        //GWT.log("LINHA 26 Placa novas: ");
                                                                    }
                                                                    //GWT.log("LINHA 07 NOVAS POSICOES - REMOVEU LTIMO: " +treeSetAux.size());
                                                                    lista.clear();
                                                                    lista.addAll(treeSetAux);
                                                                    //GWT.log("LINHA 27 Placa novas: ");
                                                                    //GWT.log("LINHA 08 NOVAS POSICOES - ADICIONOU TREESET A LISTA: "+lista.size());
                                                                    TabInicio.listaVeiculos.put(key, lista);
                                                                    //GWT.log("LINHA 28 Placa novas: ");
                                                                    //GWT.log("LINHA 09 NOVAS POSICOES - ADICIONOU LISTA AO TREEMAP GERAL");
                                                                }
                                                            }

                                                        } else {
                                                            //GWT.log("LINHA 29 Placa novas: ");
                                                            TabInicio.listaVeiculos.put(key, value);
                                                            Record recordVeiculos = new Record();
                                                            recordVeiculos.setAttribute("icone",
                                                                    value.get(0).get("codIcone"));
                                                            recordVeiculos.setAttribute("placa",
                                                                    value.get(0).get("placa"));
                                                            recordVeiculos.setAttribute("grupo",
                                                                    value.get(0).get("nomeGrupo"));
                                                            TabInicio.dataSourcePlacas.addData(recordVeiculos);
                                                            TabInicio.veiculos.fetchData();
                                                            if (!TabHistorico.codPlacasHistorico
                                                                    .containsKey(value.get(0).get("codVeiculo"))) {
                                                                TabHistorico.codPlacasHistorico.put(
                                                                        value.get(0).get("codVeiculo"),
                                                                        value.get(0).get("codVeiculo"));
                                                                Record recordVeiculosHist = new Record();
                                                                recordVeiculosHist.setAttribute("codigo",
                                                                        value.get(0).get("codVeiculo"));
                                                                recordVeiculosHist.setAttribute("placa",
                                                                        value.get(0).get("placa"));
                                                                recordVeiculosHist.setAttribute("fabricante",
                                                                        value.get(0).get("fabricante"));
                                                                recordVeiculosHist.setAttribute("modelo",
                                                                        value.get(0).get("modelo"));
                                                                recordVeiculosHist.setAttribute("cor",
                                                                        value.get(0).get("cor"));
                                                                recordVeiculosHist.setAttribute("ano",
                                                                        value.get(0).get("ano"));
                                                                recordVeiculosHist.setAttribute("icone",
                                                                        value.get(0).get("codIcone"));
                                                                recordVeiculosHist.setAttribute("grupo",
                                                                        Info.usuarioLogado.get("nomeGrupo"));
                                                                recordVeiculosHist.setAttribute("cliente",
                                                                        value.get(0).get("nomeCliente"));
                                                                //GWT.log("LINHA 32 Placa novas: ");
                                                                TabHistorico.dataSoucePlacas
                                                                        .addData(recordVeiculosHist);
                                                                TabHistorico.veiculos.fetchData();
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            //GWT.log("LINHA 34 Placa novas: ");
                                            // diz para a thread que a consulta das novas posicoes foi feita;
                                            flagNovasPosicoes = true;
                                            //GWT.log("LINHA 35 Placa novas: ");

                                        } else {
                                            GWT.log("LISTA VAZIA!!!");
                                            flagNovasPosicoes = true;
                                        }
                                    }
                                });
                    } else {
                        //GWT.log("FLAG DE NOVAS POSICOES 4 : " + flagNovasPosicoes);
                        countThreadNovasPosicoes++;
                        //GWT.log("Contador de espera das novas posicoes: " + countThreadNovasPosicoes);
                        // GWT.log("FLAG DE NOVAS POSICOES 5 : " + flagNovasPosicoes);
                    }
                } else {
                    SC.warn("..:: Voc est offline ::..");
                }
            }
        };
        Info.atualizaVeiculosNovasPosicoes.scheduleRepeating(5000);

        Info.atualizaPosicoesSemEndereco = new Timer() {

            @Override
            public void run() {

                if (Info.validaConexao()) {
                    final String placaSelecao = TabInicio.veiculos.getSelectedRecord()
                            .getAttributeAsString("placa");
                    //GWT.log("Placa INCIIO : "+placaSelecao);
                    if (TabInicio.posicoesSemEndereco.size() > 0) {

                        for (Record posicaoSemEndereco : TabInicio.posicoesSemEndereco) {

                            latEndereco = posicaoSemEndereco.getAttributeAsString("lat");
                            lonEndereco = posicaoSemEndereco.getAttributeAsString("lon");

                            String latLng = String.valueOf(latEndereco) + ";" + String.valueOf(lonEndereco);

                            if (Info.enderecosResolvidos.containsKey(latLng)) {

                                int index = TabInicio.posicoesVeiculos.getRecordIndex(posicaoSemEndereco);

                                if (index != -1) {
                                    GWT.log("Info.enderecosResolvidos: " + "lat: " + latEndereco + " lon: "
                                            + lonEndereco + " end: " + Info.enderecosResolvidos.get(latLng));
                                    TabInicio.posicoesVeiculos.getRecord(index).setAttribute("endereco",
                                            Info.enderecosResolvidos.get(latLng));
                                    TabInicio.posicoesVeiculos.markForRedraw();
                                    TabInicio.posicoesVeiculos.refreshRecordComponent(index, 13);
                                    TabInicio.posicoesSemEndereco.remove(posicaoSemEndereco);

                                    TreeMap<String, String> enderecoPosicao = new TreeMap<>();
                                    enderecoPosicao.put("placa", placaSelecao);
                                    //GWT.log("Placa selecionada INICIO 1 "+placaSelecao);
                                    enderecoPosicao.put("lat", latEndereco);
                                    enderecoPosicao.put("lon", lonEndereco);

                                    TabInicio.posicoesSemEndereco.remove(posicaoSemEndereco);

                                    ArrayList<TreeMap<String, String>> posicaoPlacaAux = (ArrayList<TreeMap<String, String>>) TabInicio
                                            .getListaVeiculos().get(placaSelecao);

                                    for (int i = 0; i < posicaoPlacaAux.size(); i++) {
                                        //GWT.log("LINHA 999 TabInicio.FLAG_CONSULTA_ENDERECO_GOOGLE; placaSelecao: "+placaSelecao);
                                        if (Double.parseDouble(posicaoPlacaAux.get(i).get("lat")) == Double
                                                .parseDouble(latEndereco)
                                                && Double.parseDouble(posicaoPlacaAux.get(i).get("lon")) == Double
                                                        .parseDouble(lonEndereco)) {
                                            TreeMap<String, String> pAux = posicaoPlacaAux.get(i);
                                            pAux.put("endereco", Info.enderecosResolvidos.get(latLng));
                                            posicaoPlacaAux.set(i, pAux);
                                        }
                                    }
                                    TabInicio.setListaVeiculos(placaSelecao, posicaoPlacaAux);

                                    Info.dbService.atualizarPosicaoEndereco(enderecoPosicao,
                                            new AsyncCallback<Boolean>() {

                                                @Override
                                                public void onFailure(Throwable caught) {
                                                    Window.alert(
                                                            "atualizarPosicaoEnderecoInicio - A remote interface failure !: "
                                                                    + caught.getMessage());
                                                }

                                                @Override
                                                public void onSuccess(Boolean result) {
                                                    //GWT.log("Endereco atualizado no BD : " + result);
                                                }
                                            });

                                }

                            } else {
                                //for (int i = 0; i < 20; i++) {
                                //if (i == 19) {
                                if (flagBuscaEndereco) {
                                    flagBuscaEndereco = false;
                                    GWT.log("Meu sleep forado 1");
                                    buscaEndereco(latEndereco, lonEndereco, placaSelecao, posicaoSemEndereco);
                                    GWT.log("Meu sleep forado 2");
                                }
                                //}

                                //}
                            }
                        }

                    } else {
                        //TabInicio.LIMIT_CONSULTA_ENDERECO_GOOGLE = 0;
                    }
                } else {
                    SC.warn("Voc est Offline!");
                }
            }
        };

    }

    private void buscaEndereco(final String lat, final String lon, final String placa, final Record record) {

        //String resposta = "Sem endereo";
        GWT.log("LINHA 01");
        TreeMap<String, String> posicoesEndereco = new TreeMap<>();
        posicoesEndereco.put("lat", lat);
        posicoesEndereco.put("lon", lon);
        posicoesEndereco.put("placa", placa);
        GWT.log("LINHA 03");
        String latLon = lat + "," + lon;
        Info.enderecoGoogleInicio(latLon, lat, lon, placa, record);
        //        Info.dbService.resolveEnderecoExterno(latLon, new AsyncCallback<String>() {
        //            @Override
        //            public void onFailure(Throwable caught) {
        //                flagBuscaEndereco = true;
        //                SC.warn("ERRO ao resolver endereo!");
        //            }
        //
        //            @Override
        //            public void onSuccess(String resposta) {
        //                GWT.log("Resposta: "+resposta);
        //                 if ( resposta != null) {
        //            
        //                if (Info.validaConexao()) {
        //                
        //                    int index = TabInicio.posicoesVeiculos.getRecordIndex(record);
        //                    if (index != -1) {
        //                        TabInicio.posicoesSemEndereco.remove(record);
        //                        Info.enderecosResolvidos.put(lat + ";" + lon, resposta);
        //
        //                        if (TabInicio.posicoesVeiculos.getRecord(index).getAttributeAsDouble("lat") == Double.parseDouble(lat) && TabInicio.posicoesVeiculos.getRecord(index).getAttributeAsDouble("lon") == Double.parseDouble(lon)) {
        //                            TabInicio.posicoesVeiculos.getRecord(index).setAttribute("endereco", resposta);
        //                            TabInicio.posicoesVeiculos.markForRedraw();
        //                            TabInicio.posicoesVeiculos.refreshRecordComponent(index, 13);
        //                            //GWT.log("LINHA 10 TabInicio.FLAG_CONSULTA_ENDERECO_GOOGLE");
        //                        }
        //                        TreeMap<String, String> enderecoPosicao = new TreeMap<>();
        //                        enderecoPosicao.put("placa", placa);
        //                        //GWT.log("Placa selecionada INICIO 2 "+placa);
        //                        enderecoPosicao.put("lat", lat);
        //                        enderecoPosicao.put("lon", lon);
        //                        enderecoPosicao.put("endereco", resposta);
        //                        ArrayList<TreeMap<String, String>> posicaoPlacaAux = (ArrayList<TreeMap<String, String>>) TabInicio.getListaVeiculos().get(placa);
        //
        //                        for (int i = 0; i < posicaoPlacaAux.size(); i++) {
        //                            if (Double.parseDouble(posicaoPlacaAux.get(i).get("lat")) == Double.parseDouble(lat) && Double.parseDouble(posicaoPlacaAux.get(i).get("lon")) == Double.parseDouble(lon)) {
        //                                TreeMap<String, String> pAux = posicaoPlacaAux.get(i);
        //                                pAux.put("endereco", resposta);
        //                                posicaoPlacaAux.set(i, pAux);
        //                                GWT.log("Endereco alterado: lat: " + lat + " lon" + lon + " pAux: " + resposta);
        //                            }
        //                        }
        //                        TabInicio.setListaVeiculos(placa, posicaoPlacaAux);
        //
        //                        Info.dbService.cadastrarPosicaoEndereco(enderecoPosicao, new AsyncCallback<Integer>() {
        //
        //                            @Override
        //                            public void onFailure(Throwable caught) {
        //                                flagBuscaEndereco = true;
        //                                Window.alert("cadastrarPosicaoEnderecoInicio - A remote interface failure !: " + caught.getMessage());
        //                            }
        //
        //                            @Override
        //                            public void onSuccess(Integer result) {
        //                                //TabInicio.semafaro = true;
        //                                flagBuscaEndereco = true;
        //                                GWT.log("ltima posico cadastrada: " + result);
        //                            }
        //                        });
        //
        //                    } else {
        //                        TabInicio.posicoesSemEndereco.remove(record);
        //                        Info.enderecosResolvidos.put(lat + ";" + lon, resposta);
        //                        TreeMap<String, String> enderecoPosicao = new TreeMap<>();
        //                        enderecoPosicao.put("placa", placa);
        //                        enderecoPosicao.put("lat", lat);
        //                        enderecoPosicao.put("lon", lon);
        //                        enderecoPosicao.put("endereco", resposta);
        //                        GWT.log("enderecoPosicao 22: lat: " + lat + " long: " + lon + " end: " + enderecoPosicao);
        //                        Info.dbService.cadastrarPosicaoEndereco(enderecoPosicao, new AsyncCallback<Integer>() {
        //
        //                            @Override
        //                            public void onFailure(Throwable caught) {
        //                                flagBuscaEndereco = true;
        //                            }
        //
        //                            @Override
        //                            public void onSuccess(Integer result) {
        //                                flagBuscaEndereco = true;
        //                                GWT.log("ltima posico cadastrada 2: " + result);
        //                            }
        //                        });
        //                        //TabInicio.FLAG_CONSULTA_ENDERECO_GOOGLE = true;
        //                    }
        //                } else {
        //                    SC.warn("Voc est Offline");
        //                }
        //
        //                } else {
        //                    flagBuscaEndereco = true;
        //                    GWT.log("Sem endereo no meu BD");
        //                }
        //            }
        //        });

    }

    public static void enderecoGoogle(final String resposta, String lat, String lon, String placa, Record record) {

        GWT.log("ENDEREO GOOGLE: " + resposta);

        if (resposta != null) {

            if (Info.validaConexao()) {

                int index = TabInicio.posicoesVeiculos.getRecordIndex(record);
                if (index != -1) {
                    TabInicio.posicoesSemEndereco.remove(record);
                    Info.enderecosResolvidos.put(lat + ";" + lon, resposta);

                    if (TabInicio.posicoesVeiculos.getRecord(index).getAttributeAsDouble("lat") == Double
                            .parseDouble(lat)
                            && TabInicio.posicoesVeiculos.getRecord(index).getAttributeAsDouble("lon") == Double
                                    .parseDouble(lon)) {
                        TabInicio.posicoesVeiculos.getRecord(index).setAttribute("endereco", resposta);
                        TabInicio.posicoesVeiculos.markForRedraw();
                        TabInicio.posicoesVeiculos.refreshRecordComponent(index, 13);
                        //GWT.log("LINHA 10 TabInicio.FLAG_CONSULTA_ENDERECO_GOOGLE");
                    }
                    TreeMap<String, String> enderecoPosicao = new TreeMap<>();
                    enderecoPosicao.put("placa", placa);
                    //GWT.log("Placa selecionada INICIO 2 "+placa);
                    enderecoPosicao.put("lat", lat);
                    enderecoPosicao.put("lon", lon);
                    enderecoPosicao.put("endereco", resposta);
                    ArrayList<TreeMap<String, String>> posicaoPlacaAux = (ArrayList<TreeMap<String, String>>) TabInicio
                            .getListaVeiculos().get(placa);

                    for (int i = 0; i < posicaoPlacaAux.size(); i++) {
                        if (Double.parseDouble(posicaoPlacaAux.get(i).get("lat")) == Double.parseDouble(lat)
                                && Double.parseDouble(posicaoPlacaAux.get(i).get("lon")) == Double
                                        .parseDouble(lon)) {
                            TreeMap<String, String> pAux = posicaoPlacaAux.get(i);
                            pAux.put("endereco", resposta);
                            posicaoPlacaAux.set(i, pAux);
                            GWT.log("Endereco alterado: lat: " + lat + " lon" + lon + " pAux: " + resposta);
                        }
                    }
                    TabInicio.setListaVeiculos(placa, posicaoPlacaAux);

                    Info.dbService.cadastrarPosicaoEndereco(enderecoPosicao, new AsyncCallback<Integer>() {

                        @Override
                        public void onFailure(Throwable caught) {
                            Window.alert("cadastrarPosicaoEnderecoInicio - A remote interface failure !: "
                                    + caught.getMessage());
                        }

                        @Override
                        public void onSuccess(Integer result) {
                            //TabInicio.semafaro = true;
                            flagBuscaEndereco = true;
                            GWT.log("ltima posico cadastrada: " + result);
                        }
                    });

                } else {
                    TabInicio.posicoesSemEndereco.remove(record);
                    Info.enderecosResolvidos.put(lat + ";" + lon, resposta);
                    TreeMap<String, String> enderecoPosicao = new TreeMap<>();
                    enderecoPosicao.put("placa", placa);
                    enderecoPosicao.put("lat", lat);
                    enderecoPosicao.put("lon", lon);
                    enderecoPosicao.put("endereco", resposta);
                    GWT.log("enderecoPosicao 22: lat: " + lat + " long: " + lon + " end: " + enderecoPosicao);
                    Info.dbService.cadastrarPosicaoEndereco(enderecoPosicao, new AsyncCallback<Integer>() {

                        @Override
                        public void onFailure(Throwable caught) {
                            flagBuscaEndereco = true;
                            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                        }

                        @Override
                        public void onSuccess(Integer result) {
                            flagBuscaEndereco = true;
                            GWT.log("ltima posico cadastrada 2: " + result);
                        }
                    });
                    //TabInicio.FLAG_CONSULTA_ENDERECO_GOOGLE = true;
                }
            } else {
                SC.warn("Voc est Offline");
            }

        } else {
            flagBuscaEndereco = true;
            GWT.log("Sem endereo no meu BD");
        }

    }

    public void sortPosicoes(ListGridRecord[] list) {
        ListGridRecord temp;
        for (int j = 0; j <= list.length - 1; j++) {
            for (int k = 0; k <= list.length - 2; ++k) {
                if (list[k].getAttributeAsLong("dataEhoraReal") < list[k + 1].getAttributeAsLong("dataEhoraReal")) {
                    temp = list[k];
                    list[k] = list[k + 1];
                    list[k + 1] = temp;
                }
            }
        }

        Info.listaSeleciona = list;
        mapaInicioOpenLayer.clearMarkers();

        latAnt = 0;
        lonAnt = 0;
        latAtual = 0;
        lonAtual = 0;
        distancia = 0;
        distanciaTotal = 0;
        infoVeiculo.redraw();
        infoVeiculo.setContents("<strong style=\"font-size:15px; \">  " + Info.titulosMsg.get("placa") + ": "
                + TabInicio.veiculos.getSelectedRecord().getAttributeAsString("placa") + " "
                + Info.titulosMsg.get("fabricante") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("fabricante") + " "
                + Info.titulosMsg.get("modelo") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("modelo") + " "
                + Info.titulosMsg.get("cor") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("cor") + " "
                + Info.titulosMsg.get("ano") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("ano")
                + ".</strong> Percorridos 0 metros. Tempo : 0.");
        //    GWT.log("Linha do IF!");
        for (int j = 0; j < list.length; j++) {
            direcaoPosicao = list[j].getAttributeAsInt("codDirecao");

            icone = "./imagens/ponto_desligado.png";
            nomeCliente = ((Info.usuarioLogado.get("codUnidadeCliente") == null)
                    ? "</strong></br>Cliente: <strong>" + list[j].getAttributeAsString("cliente") + "</strong>"
                    : "");
            if (j == 0) {

                distancia = 0;
                if (list[j].getAttributeAsString("ignReal").equalsIgnoreCase("false")) {

                    if (direcaoPosicao == 0) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/parado_desligado.png";
                    } else if (direcaoPosicao == 1) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/norte_desligado.png";
                    } else if (direcaoPosicao == 2) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/nordeste_desligado.png";
                    } else if (direcaoPosicao == 3) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/leste_desligado.png";
                    } else if (direcaoPosicao == 4) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sudeste_desligado.png";
                    } else if (direcaoPosicao == 5) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sul_desligado.png";
                    } else if (direcaoPosicao == 6) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sudoeste_desligado.png";
                    } else if (direcaoPosicao == 7) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/oeste_desligado.png";
                    } else if (direcaoPosicao == 8) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/noroeste_desligado.png";
                    }
                } else {
                    if (direcaoPosicao == 0) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/parado_ligado.png";
                    } else if (direcaoPosicao == 1) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/norte_ligado.png";
                    } else if (direcaoPosicao == 2) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/nordeste_ligado.png";
                    } else if (direcaoPosicao == 3) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/leste_ligado.png";
                    } else if (direcaoPosicao == 4) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sudeste_ligado.png";
                    } else if (direcaoPosicao == 5) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sul_ligado.png";
                    } else if (direcaoPosicao == 6) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/sudoeste_ligado.png";
                    } else if (direcaoPosicao == 7) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/oeste_ligado.png";
                    } else if (direcaoPosicao == 8) {
                        icone = "./imagens/" + TabInicio.veiculos.getSelectedRecord().getAttribute("icone")
                                + "/noroeste_ligado.png";
                    }
                }
                String placaPosicao = TabInicio.veiculos.getSelectedRecord().getAttribute("placa");
                double latitudePosicao = list[j].getAttributeAsDouble("lat");
                double longitudePosicao = list[j].getAttributeAsDouble("lon");
                String data = list[j].getAttributeAsString("dataEhora");
                String velocidade = list[j].getAttributeAsString("vel");
                String ignicao = list[j].getAttributeAsString("ignReal").equalsIgnoreCase("false") ? "Desligada"
                        : "Ligada";
                String enderecoPosicao = (list[j].getAttributeAsString("endereco").equalsIgnoreCase("Sem endereo")
                        ? "No h resoluo de endereo para este local"
                        : list[j].getAttributeAsString("endereco"));
                nomeCliente = ((Info.usuarioLogado.get("codUnidadeCliente") == null)
                        ? "</br><strong>Cliente: </strong>" + list[0].getAttributeAsString("cliente") + "</strong>"
                        : "");
                String direcaoP = "</br><strong>Direo: </strong> " + list[j].getAttributeAsString("direcao")
                        + nomeCliente;
                mapaInicioOpenLayer.addMarker(longitudePosicao, latitudePosicao, placaPosicao, icone, j, data,
                        velocidade, ignicao, enderecoPosicao, direcaoP);

            } else {
                if (list[j].getAttributeAsString("ignReal").equalsIgnoreCase("false")) {
                    icone = "./imagens/ponto_desligado.png";
                } else {
                    icone = "./imagens/ponto_ligado.png";
                }
                String placaPosicao = TabInicio.veiculos.getSelectedRecord().getAttribute("placa");
                double latitudePosicao = list[j].getAttributeAsDouble("lat");
                double longitudePosicao = list[j].getAttributeAsDouble("lon");
                String data = list[j].getAttributeAsString("dataEhora");
                String velocidade = list[j].getAttributeAsString("vel");
                String ignicao = list[j].getAttributeAsString("ignReal").equalsIgnoreCase("false") ? "Desligada"
                        : "Ligada";
                String enderecoPosicao = (list[j].getAttributeAsString("endereco").equalsIgnoreCase("Sem endereo")
                        ? "No h resoluo de endereo para este local"
                        : list[j].getAttributeAsString("endereco"));
                nomeCliente = ((Info.usuarioLogado.get("codUnidadeCliente") == null)
                        ? "</br><strong>Cliente: </strong>" + list[0].getAttributeAsString("cliente") + "</strong>"
                        : "");
                String direcaoP = "</br><strong>Direo: </strong>" + list[j].getAttributeAsString("direcao")
                        + nomeCliente;
                mapaInicioOpenLayer.addMarker(longitudePosicao, latitudePosicao, placaPosicao, icone, j, data,
                        velocidade, ignicao, enderecoPosicao, direcaoP);

                latAnt = list[j - 1].getAttributeAsDouble("lat");
                lonAnt = list[j - 1].getAttributeAsDouble("lon");
                latAtual = list[j].getAttributeAsDouble("lat");
                lonAtual = list[j].getAttributeAsDouble("lon");
                if (latAnt == latAtual && lonAnt == lonAtual) {
                    distancia = 0;
                } else {
                    distancia = Info.caculaDistanciaEntreDoisPontos(latAnt, lonAnt, latAtual, lonAtual);

                }

            }
            distanciaTotal = distanciaTotal + distancia;
        }
        GWT.log("Data : 1");
        mapaInicioOpenLayer.addLinha();
        tempoDecorrido = Info.calculaDatas(list[0].getAttributeAsLong("dataEhoraReal"),
                list[list.length - 1].getAttributeAsLong("dataEhoraReal"));
        //GWT.log("Data : 2");
        if (distanciaTotal > 0) {
            indexDistancia = String.valueOf(Info.formataDecimal(distanciaTotal)).indexOf(".");
            kms = String.valueOf(Info.formataDecimal(distanciaTotal)).substring(0, indexDistancia);
            m = "0" + (String.valueOf(Info.formataDecimal(distanciaTotal)).substring(indexDistancia));
            metros = Double.parseDouble(m) * 1000;
            dist = ((Double.parseDouble(kms) > 0) ? ". Percorridos: " + kms + " KM e " + metros + " metros"
                    : ". Percorridos: " + metros + " metros");
        } else {
            dist = " Percorridos 0 metros";
        }
        infoVeiculo.redraw();
        infoVeiculo.setContents("<strong style=\"font-size:15px; \">  " + Info.titulosMsg.get("placa") + ": "
                + TabInicio.veiculos.getSelectedRecord().getAttributeAsString("placa") + " "
                + Info.titulosMsg.get("fabricante") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("fabricante") + " "
                + Info.titulosMsg.get("modelo") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("modelo") + " "
                + Info.titulosMsg.get("cor") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("cor") + " "
                + Info.titulosMsg.get("ano") + ": "
                + TabInicio.posicoesVeiculos.getRecord(0).getAttributeAsString("ano") + "</strong>" + dist
                + ". Tempo : " + tempoDecorrido);

    }

}