2.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.
2.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);
2.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 » ]}
}
2.7.3. Remarque¶
Pour Vitam, fonctionnellement il ne faut pas trouver des cycles au niveau des arbres des units. (au niveau du bordereau)
2.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)
2.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);
2.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]}