4 votes

Comment stocker une structure arborescente en utilisant neo4j et gremlin

Je souhaite stocker l'arborescence de répertoires suivante à l'aide de neo4j base de données locale et Gremlin en Java.

           (ROOT)
        /          \\
    Dir2           Dir3
    /    \\             \\
  Dir4   Dir5        Dir6
  /
Dir7 

J'ai défini une méthode StorePath(String path).
Ce que je veux : Lorsque j'appelle StorePath(path) avec path = "Root \Dir2\Dir4\Dir7 "Les données doivent alors être stockées comme suit

         Root
         /
       Dir2
       /
     Dir4
     /
   Dir7 

où Root et Dir* sont des sommets dont les arêtes sont vierges. Veuillez m'aider avec le code Java.

6voto

Michael Hunger Points 16906
private static final RelationshipType SUB_DIR = DynamicRelationshipType.withName("SUB_DIR");

public void storePath(String path) {
    Node dir = graphDb.getReferenceNode();
    for (String name : path.split(File.separator)) {
        dir = obtainSubDir(dir, name);
    }
}

private Node obtainSubDir(Node dir, String name) {
    Node subDir = getSubDir(dir,name);
    if (subDir!=null) return subDir;
    return createSubDir(dir, name);
}

private Node getSubDir(Node dir, String name) {
    for (Relationship rel : dir.getRelationships(SUB_DIR, Direction.OUTGOING)) {
        final Node subDir = rel.getEndNode();
        if (subDir.getProperty("name", "").equals(name)) return subDir;
    }
    return null;
}

private Node createSubDir(Node dir, String name) {
    Node subDir = dir.getGraphDatabase().createNode();
    subDir.setProperty("name", name);
    dir.createRelationshipTo(subDir, SUB_DIR);
    return subDir;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X