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]}