package org.prgtest.genetic;

import java.util.*;


import org.prganalysis.graph.*;
import org.jgap.*;
import org.prgtest.settings.*;

public class VertexFinder {
     KernelTG kernel = KernelTG.getInstance();
  public VertexFinder() {
  }


  public Vector findUnvisited(Gene[] geneArraySolution) {

     /* TGraph tGraph = kernel.getProgramNonRuntimeResults().getGraph();
      java.util.Vector vect = new java.util.Vector();
      java.util.Vector vectUnvisited = new java.util.Vector();

      for (int y = 0; y < geneArraySolution.length; y++) {
        StructureGene structureGene = (StructureGene) geneArraySolution[
            y];
        for (int x = 0; x < structureGene.tVertexVector.size(); x++) {
          TVertex vertex = (TVertex) structureGene.tVertexVector.elementAt(x);
          if (!vect.contains(vertex)) {
            vect.addElement(vertex);
          }

        }
      }
      Enumeration enuml = tGraph.enumerateVertices(); //a_candidateChromosomes.add(a_population[i]);

      while (enuml.hasMoreElements()) {
        Object obj = enuml.nextElement();
        try {
          TVertex vertex = (TVertex) obj;
          if (!vect.contains(vertex)) {
            vectUnvisited.addElement(vertex);
          }
        }
        catch (Exception ex1) {
          System.out.println("Error" + ex1);
        }
      }

      return vectUnvisited;

    }

  public Vector findUnvisited(Chromosome chromosome) {

    TGraph tGraph = kernel.getProgramNonRuntimeResults().getGraph();
    java.util.Vector vect = new java.util.Vector();
    java.util.Vector vectUnvisited = new java.util.Vector();

    for (int y = 0; y < chromosome.getGenes().length; y++) {
      StructureGene structureGene = (StructureGene) chromosome.getGenes()[
          y];
      for (int x = 0; x < structureGene.tVertexVector.size(); x++) {
        TVertex vertex = (TVertex) structureGene.tVertexVector.elementAt(x);
        if (!vect.contains(vertex)) {
          vect.addElement(vertex);
        }

      }
    }
    Enumeration enume = tGraph.enumerateVertices(); //a_candidateChromosomes.add(a_population[i]);

    while (enume.hasMoreElements()) {
      Object obj = enume.nextElement();
      try {
        TVertex vertex = (TVertex) obj;
        if (!vect.contains(vertex)) {
          vectUnvisited.addElement(vertex);
        }
      }
      catch (Exception ex1) {
        System.out.println("Error" + ex1);
      }
    }

    return vectUnvisited;

  }

  public Vector findPaths(TVertex tVertex) {

    TGraph tGraph = kernel.getProgramNonRuntimeResults().getGraph();

    //java.util.Vector vect = new java.util.Vector();
    java.util.Vector vectPath = new java.util.Vector();
    for (int i = 0; i < tGraph.sizeVertices(); i++) {
      TVertex tVertex2 = (TVertex) tGraph.vertexAt(i);

      if (tVertex2 == tVertex) {
        tVertex = tVertex2;
      }

    }

    TVertex tVertexCurrent = tVertex;

    while (tVertexCurrent != null) {
      vectPath.add(tVertexCurrent);
      Enumeration enumeration = tVertexCurrent.
          enumerateIncomingDirectedNeighbors();
      tVertexCurrent = null;
      while (enumeration.hasMoreElements()) {
        tVertexCurrent = (TVertex) enumeration.nextElement();
        break;

      }
    }
    return vectPath;
  }

}
