From 75b9d90f89438630acb6d1c39088149be67750cd Mon Sep 17 00:00:00 2001 From: joss Date: Sat, 14 Jun 2025 20:33:01 +0200 Subject: [PATCH] TreeView is an actual tree now --- src/views/TreeView.java | 80 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 7 deletions(-) diff --git a/src/views/TreeView.java b/src/views/TreeView.java index 272d427..964a90c 100644 --- a/src/views/TreeView.java +++ b/src/views/TreeView.java @@ -2,26 +2,92 @@ package hsmw.jotto5.beleg.views; import hsmw.jotto5.beleg.data.Model; +import java.util.Arrays; +import java.util.ArrayList; import java.io.IOException; import java.io.OutputStream; import com.sun.net.httpserver.*; public class TreeView implements HttpHandler { + /** + * Generiert HTML-Code für einen Baum aus dem gegebenen mehrstufigen Array. + * Damit der Baum "richtig" aussieht sollte das Eingabearray zumindest gruppiert + * sein (nach den Ast-Knoten). + */ + private String makeObjectTree(String[][] data) { + String result; + ArrayList stack; + int levels; + + result = ""; + } + } + + // Jetzt gehen wir einfach so viele Stufen nach unten wie wir müssen + // Es ist jetzt garantiert dass e = stack oder e > stack + // Auch hier überspringen wir das letzte Element in e, um es nicht auszugeben + // Hilfsvariable da wir stack verändern + levels = e.length - 1 - stack.size(); + for ( int i = 0; i < levels; i++ ) { + result += "
  • " + e[stack.size() + i] + "
      "; + stack.add(e[stack.size() + i]); + } + + // Wir müssen die URL für die Bearbeitungsseite noch zusammenbauen + result += "
    • " + e[e.length - 1] + "
    • "; + } + result += "
    "; + + return result; + } + public void handle(HttpExchange t) throws IOException { String response; OutputStream os; Model m; - + String[] uids; // enthält alle UIDs als String + String[][] objPaths; // enthält alle Objekt-IDs, aufgeteilt in ihre Pfadelemente + m = Model.getModel(); + uids = m.getAllUids(); + // Array noch sortieren, da es zum Baum generieren sortiert sein muss und sich String[]s + // aus irgendeinem Grund nur SEHR schlecht sortieren lassen :( + Arrays.sort(uids); + + // Wir nutzen Javas Lambda-Notation um mit einem Mapping zu arbeiten. + // Außerdem müssen wir den Allokator überschreiben um ein Array des richtigen Typs zu bekommen, siehe + // https://stackoverflow.com/questions/52416381/how-can-i-map-over-an-array-in-java + objPaths = Arrays.stream(uids).map(uid -> uid.split("/")).toArray(size -> new String[size][]); response = Defaults.HTMLHEADER + "

    Beleg - Objektübersicht

      "; - - for ( String s : m.getAllUids() ) { - response += "
    • " + s + "
    • "; - } - - response += "
    " + Defaults.HTMLFOOTER; + try { response += makeObjectTree(objPaths); } catch(Exception e) { e.printStackTrace(); } + response += Defaults.HTMLFOOTER; os = t.getResponseBody();