4

neo4jローカル データベースとGremlinJavaを使用して、次のディレクトリ ツリー構造を保存したいと考えています。

           (根)
        / \
    方向 2 方向 3
    / \ \
  方向4 方向5 方向6
  /
方向 7

メソッド StorePath(String path) を定義しました。
私が欲しいもの:パス= "Root\Dir2\Dir4\Dir7"でStorePath(パス)を呼び出すと、データは次のように保存されます

         根
         /
       方向2
       /
     方向4
     /
   方向 7

ここで、Root と Dir* は空白のエッジを持つ頂点です。Javaコードで私を助けてください。

4

1 に答える 1

6
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;
}
于 2011-08-04T09:18:30.430 に答える