2010-11-22 18 views
0

Ich habe Baum, wo alle Blätter Index haben, wenn Baum rekursiv in der Datenbank lodded ist, wird Datenbank Baum nach Indizes bestellen. Zuerst werden die Wurzelknoten nach Index sortiert und so weiter. Jetzt muss ich eine Aktion implementieren, wie der Benutzer diese Indizes sortieren kann, indem er die Pfeilsymbole nach oben/unten drückt. Wenn der Benutzer die Taste drückt, sollte der Index den Index nehmen, der sich unter seinem eigenen Index befindet, und wenn der Pfeil nach oben gedrückt wird, sollte es umgekehrt laufen. Ich weiß einfach nicht, was der beste Weg wäre, um diese Art von Funktionalität zu implementieren.Reihenfolge des rekursiven Baumindex?

+0

Haben alle Knoten einen Index oder nur Blätter? Wie werden Indizes generiert? –

+0

Alle Knoten haben Indizes, alle Knoten befinden sich in derselben Datenbanktabelle. Der Index wird als höchster Index aller Indizes als "taubult" erstellt. – newbie

Antwort

1

Da Ihre Frage ein wenig vage ist, geht diese Antwort davon aus, dass Sie wissen, was Sie tun, wenn es um die Datenbank geht (ich würde den Ruhezustand für Java empfehlen, wenn nicht) und der folgende Code soll Ihnen ein paar Ideen geben Implementierung Ihrer Lösung

//If I have understood your question, you want two nodes to swap position in the tree structure 
public static swapNode(Node parent, Node child) 
{ 
    Long superId = parent.getParentId(); 
    child.parentId(superId); 
    parent.setParentId(child.getId()); 
    child.setId(parentId); 
    //update children lists of parent and child 
    //update parent ids of children lists 

    //save changes to database 
} 

//create tree structure from database. Assumes nodes have been loaded from a database 
//table where each row represents a node with a parent id column the root node which has parent id null) 
//invoke this with all nodes and null for parentId argument 
public static List<Node> createNodeTree(List<Node> allNodes, Long parentId) 
{ 
    List<Node> treeList = new ArrayList<Node>(); 
    for(Node node : nodes) 
    { 
     if(parentIdMatches(node, parentId)) 
     { 
      node.setChildren(createNodeTree(allNodes, node.getId())); 
      treeList.add(node); 
     } 
    } 
    return treeList; 
} 

private static boolean parentIdMatches(Node node, Long parentId) 
{ 
    return (parentId != null && parentId.equals(node.getParentId())) 
     || (parentId == null && node.getParentId() == null); 
} 

//The objects loaded from the database should implement this interface 
public interface Node 
{ 
    void setParentId(Long id); 
    Long getParentId(); 
    Long getId(); 
    List<Node> getChildren(); 
    void setChildren(List<Node> nodes); 
} 
Verwandte Themen