# 3.7. DirectedCycle

> Vitam utilise DirectedCycle pour verifier la structure des arbres et de s’assurer qu’on n” a pas un cycle dans le graphe.

## 3.7.1. Initialisation

> Pour initialiser un objet DirectedCycle, il faut instancier un objet DirectedGraph à partir d’un fichier Json (vous trouvrez ci-dessous un exemple).

    File file = PropertiesUtils.getResourcesFile("ingest_acyc.json");
    JsonNode json = JsonHandler.getFromFile(file);
    DirectedGraph g = new DirectedGraph(json);
    DirectedCycle graphe = new DirectedCycle(g);

## 3.7.2. Usage

Pour vérifier la présence d’un cycle dans le graphe

    graphe..isCyclic() ;

La méthode isCyclic return true si on a un cycle.

Exemple de fichier json: ingest_acyc.json

{
  « ID027 » : { }, « ID028 » : { « _up » : [ « ID027 » ]}, « ID029 » : {« _up » : [ « ID028 » ]}, « ID030 » : {« _up » : [ « ID027 » ]}, »ID032 » : {« _up » : [ « ID030 », « ID029 » ] }, « ID031 » : {« _up » : [ « ID027 » ]}

}

## 3.7.3. Remarque

Pour Vitam, fonctionnellement il ne faut pas trouver des cycles au niveau des arbres des units. (au niveau du bordereau)

# 3.8. Graph

> Vitam utilise le Graphe pour determiner l’ordre d’indexation en se basant sur la notion de chemin le plus long (longest path)

## 3.8.1. Initialisation

> Pour initialiser un objet Graph:

    File file = PropertiesUtils.getResourcesFile("ingest_tree.json");
    JsonNode json = JsonHandler.getFromFile(file);
    Graph graph = new Graph(json);

## 3.8.2. Usage

Pour determiner l’ordre il faut avoir le chemin le plus long par rapport aux différentes racines :

    graph.getGraphWithLongestPaths()

La méthode getGraphWithLongestPaths return un map qui contient l’ordre on key et la liste (Set) des units id en valeur

Exemple de resultat:

{0=[ID027], 1=[ID030, ID031, ID028], 2=[ID029], 3=[ID032]}