Package ecar.action

Source Code of ecar.action.ActionHierarquia

package ecar.action;

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

import ecar.pojo.EstruturaEtt;
import ecar.pojo.Hierarchyable;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.NoArvoreEstrutura;

/**
*
* @author 70744416353
*/
public class ActionHierarquia {

  private List<NoArvoreEstrutura> listaMontada;
 
        /**
         *
         * @param lista
         * @return
         */
        public List montarListaEstruturaHierarquizada(List<Hierarchyable> lista) {
   
    listaMontada = new ArrayList<NoArvoreEstrutura>();
    List filhos = new ArrayList<EstruturaEtt>();
    boolean controle = true;
   
   
    for (Hierarchyable _objeto : lista) {
   
      if (lista.contains(_objeto.iGetPai())) { // Quando o pai do elemento est� na lista, executa o c�digo abaixo.
        if (_objeto.iGetPai() == null) { //Quando a estrutura n�o possui pai ela � raiz deve ser inserida na lista
          NoArvoreEstrutura noArvore = new NoArvoreEstrutura();
          noArvore.setElemento(_objeto);
          noArvore.setListaFilhos(new ArrayList<NoArvoreEstrutura>());
          listaMontada.add(noArvore);
        } else {
          filhos.add(_objeto);
        }
      } else {//Quando o pai do elemento n�o est� na lista, n�o precisa procurar basta criar o n� e inserir na listaMontada. Quando o pai n�o estiver na lista � porque n�o foi selecionado pelo usu�rio.
        NoArvoreEstrutura noArvore = new NoArvoreEstrutura();
        noArvore.setElemento(_objeto);
        noArvore.setListaFilhos(new ArrayList<NoArvoreEstrutura>());
        listaMontada.add(noArvore);
      }
    }
   
    if (!filhos.isEmpty()){ //lista de Filhos n�o � vazia
      montarNivelFilho (filhos);
    }
   
   
    return limparListaMontada(lista);
  }
 

 
  /**
   * Monta o segundo n�vel da �rvore, o n�vel dos filhos.
   *
   * @param filhos
   */
  private void montarNivelFilho(List<Hierarchyable> filhos) {
   
    List netos = new ArrayList<Hierarchyable>();
    boolean encontrouPai;
   
    for (Hierarchyable _objeto : filhos) {
      encontrouPai = false;
      for (NoArvoreEstrutura no : listaMontada) {
        //if (no.getElemento().equals(_objeto.iGetPai())) {//verifica se o n� da lista � igual ao n� pai da estrutura, caso seja, o pai da estrutura foi encontrado.
        if (_objeto.iGetPai().equals(no.getElemento())) {//verifica se o n� da lista � igual ao n� pai da estrutura, caso seja, o pai da estrutura foi encontrado.
          NoArvoreEstrutura noArvore = new NoArvoreEstrutura();
          noArvore.setElemento(_objeto);
          noArvore.setListaFilhos(new ArrayList<NoArvoreEstrutura>());
          no.getListaFilhos().add(noArvore); //Adiciona o novo n� criado a lista de filhos do pai
          listaMontada.add(noArvore); //Adiciona o filho na lista geral, isso facilita muito a busca.
          encontrouPai = true;
          break;
        }
      }
     
      if (!encontrouPai) {
        netos.add(_objeto);
      }
    }
   
    if (!netos.isEmpty()){ //lista de Netos n�o � vazia
      montarNivelSeguinte (netos);
    }
   
  }

 
  /**
   * Monta do terceiro n�vel (netos) em diante e completa toda a �rvore  
   * @param netos
   */
  private void montarNivelSeguinte(List<EstruturaEtt> netos) {

    List restantes = new ArrayList<EstruturaEtt>();
    boolean encontrouPai;
   
    for (Hierarchyable _objeto : netos) {
      encontrouPai = false;
      for (NoArvoreEstrutura no : listaMontada) {
        //if (no.getElemento().equals(_objeto.iGetPai())) {//verifica se o n� da lista � igual ao n� pai da estrutura, caso seja, o pai da estrutura foi encontrado.
        if (_objeto.iGetPai().equals(no.getElemento())) {//verifica se o n� da lista � igual ao n� pai da estrutura, caso seja, o pai da estrutura foi encontrado.
          NoArvoreEstrutura noArvore = new NoArvoreEstrutura();
          noArvore.setElemento(_objeto);
          noArvore.setListaFilhos(new ArrayList<NoArvoreEstrutura>());
          no.getListaFilhos().add(noArvore); //Adiciona o novo n� criado a lista de filhos do pai
          listaMontada.add(noArvore); //Adiciona o filho na lista geral, isso facilita muito a busca.
          encontrouPai = true;
          break;
        }
      }
     
      if (!encontrouPai) {
        restantes.add(_objeto);
      }
    }
   
    if (!restantes.isEmpty()){
      montarNivelSeguinte(restantes);
    }
  }

 
  /**
   * Criar� uma lista apenas com os n�s Raiz
   *
   * Apartir dos n�s Raiz todos os n�s de n�vel mais baixo ser�o acess�veis  
   * @return
   */
  private List limparListaMontada(List lista) {
   
    List listaLimpa = new ArrayList<NoArvoreEstrutura>();
   
    for (NoArvoreEstrutura noArvore : listaMontada) {
     
      if (noArvore.getElemento().iGetPai() == null){ //Se a estrutura for raiz ser� inserida na lista
        listaLimpa.add (noArvore);
      } else if (noArvore.getElemento() instanceof ItemEstruturaIett && !lista.contains(noArvore.getElemento().iGetPai())) { //ou se o pai do item n�o estiver na lista original, portanto ele tambem dever� ser inserido na lista.
        listaLimpa.add (noArvore);
      }
     
    }
   
    return listaLimpa;
  }

}
TOP

Related Classes of ecar.action.ActionHierarquia

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