Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich arbeite mich gerade ein wenig in die API ein und wollte mir jetzt alle Medienunterordner eines bestimmten Hauptordners ausgeben lassen:
Codeschnipsel:
MediaFolder folder = (MediaFolder) mediaStore.getStoreElement(38965);
Listable<StoreElement> children = folder.getChildren();
for(StoreElement mediaElement: children) {
if (mediaElement instanceof MediaFolder)
{
System.out.println(mediaElement.getName());
}
}
Das funktioniert auch prinzipiell gut, allerdings bekomme ich nur die 1. Ebenene angezeigt, es gibt aber bis zu 5 Ebenen nach unten.
Jemand eine Idee, was an dem Code nicht passt?
Danke und viele Grüße
Christian
folder.getChildren(); gibt die Kinder des einen Folders zurück. Um auch die Enkel zu bekommen musst Du anschließend über die Kinder iterieren bzw. rekursuv alle alle Kinder den ganzen Baum.
Hallo Christian,
es gibt mehrere getChildren()-Methoden. Für Deinen Fall dürfte getChildren(Class<T> type, boolean recurse) die passende sein.
Gerade wenn man rekursiv alle Objekte eines bestimmten Typs braucht ist das sehr praktisch.
Außerdem sparst Du Dir den Cast, da direkt ein Listable<T> zurückgegeben wird.
Wichtig ist hier allerdings, dass man auf dem Ergebnis (Listable<T>) am besten nur iteriert. Hier das toList() aufzurufen lädt alle entsprechenden Elemente in den Speicher was je nach Startpunkt und Tiefe (also letztlich je nach Anzahl der gelieferten Objekte) sehr ungünstigen Einfluss auf die Performance haben kann.
Da Du Dich gerade in die API einarbeitest noch ein Tipp:
Schöner ist es, sich Elemente vom entsprechenden StoreElementAgent liefern zu lassen (s.u.).
Dein Code könnte also insgesamt so aussehen:
StoreElementAgent sea = context.requireSpecialist(StoreElementAgent.TYPE);
MediaFolder folder = (MediaFolder) sea.loadStoreElement("uid_des_folders", MediaFolder.UID_TYPE, false);
for (MediaFolder mediaElement : folder.getChildren(MediaFolder.class, true)) {
System.out.println(mediaElement.getName());
}
Viele Grüße
Michael