Ex05 Aufgabe 2.1/2.2
Verfasst: 29. Nov 2007 19:56
Okay, also Aufgabe 1 haben wir jetzt endlich gelöst: Mit einem Adapter, der die Company auf HierarchyDisplay adaptiert, und mit einem zweiten, der Employee auf CompositeNode adaptiert. Das klappt soweit auch alles mit der Anzeige und mit dem "Change" menu wunderbar. Problematisch wird es nur bei der zweiten Aufgabe.
Zuerst einmal muss man ja CompositeNode mit einem weiteren Adapter auf ICollapsedCompositeNode adaptieren, was sich noch relativ leicht umsetzen lässt (wenn man irgendwann mal herausgefunden hat, wie man überhaupt verhindert, dass die Kinder eines Knotens dargestellt werden). Damit nun tatsächlich ICollapsedCompositeNode's anstelle von CompositeNodes erzeugt werden, mussten wir zwangsläufig auch die Adapter aus Aufgabe 1 anpassen. Employee wird nun auf also direkt auf ICollapsedCompositeNode adaptiert.
Das Problem ist nun, dass in dem vorgegebenen HierarchyDisplay nun zwar ICollapsedCompositeNode's drinstecken (genauer gesagt CompsiteNodeAdapter, die ICollapsedCompositeNode realisieren), der statische Typ ist aber weiterhin Node. Das ist vorgegeben und kann auch nicht geändert werden! Um tatsächlich collapse() oder expand() verweden zu können, muss man nun leider die Nodes, die sich der RandomCompanyChange (oder jetzt besser gesagt der RandomVisibilityChange) aus dem HierarchyDisplay "herausholt", auf CompsiteNodeAdapter casten. Diese Typecasts sind aber extrem hässlich!
Die Frage ist nur, wie man so etwas umgehen kann. Noch einen weiteren Adapter um HierarchyDisplay zu bauen (oder den bestehenden CompanyAdapter zu erweitern), um die statischen Typen auf CollapsedCompositeNodes zu ändern, klappt leider nicht. Zum Beispiel kann der statische Typ von setRoot() ja beim Erben von HierarchyDisplay nicht auf CollapsedCompositeNodes eingeschränkt, sondern höchstens erweitert werden. Der Rückgabewert von getRoot() ließe sich natürlich einschränken auf CollapsedCompositeNode, dann bräuchte man aber intern (d.h. beim Adaptieren des HierarchyDisplay) wieder einen unsicheren Typecast...
Zuerst einmal muss man ja CompositeNode mit einem weiteren Adapter auf ICollapsedCompositeNode adaptieren, was sich noch relativ leicht umsetzen lässt (wenn man irgendwann mal herausgefunden hat, wie man überhaupt verhindert, dass die Kinder eines Knotens dargestellt werden). Damit nun tatsächlich ICollapsedCompositeNode's anstelle von CompositeNodes erzeugt werden, mussten wir zwangsläufig auch die Adapter aus Aufgabe 1 anpassen. Employee wird nun auf also direkt auf ICollapsedCompositeNode adaptiert.
Das Problem ist nun, dass in dem vorgegebenen HierarchyDisplay nun zwar ICollapsedCompositeNode's drinstecken (genauer gesagt CompsiteNodeAdapter, die ICollapsedCompositeNode realisieren), der statische Typ ist aber weiterhin Node. Das ist vorgegeben und kann auch nicht geändert werden! Um tatsächlich collapse() oder expand() verweden zu können, muss man nun leider die Nodes, die sich der RandomCompanyChange (oder jetzt besser gesagt der RandomVisibilityChange) aus dem HierarchyDisplay "herausholt", auf CompsiteNodeAdapter casten. Diese Typecasts sind aber extrem hässlich!
Die Frage ist nur, wie man so etwas umgehen kann. Noch einen weiteren Adapter um HierarchyDisplay zu bauen (oder den bestehenden CompanyAdapter zu erweitern), um die statischen Typen auf CollapsedCompositeNodes zu ändern, klappt leider nicht. Zum Beispiel kann der statische Typ von setRoot() ja beim Erben von HierarchyDisplay nicht auf CollapsedCompositeNodes eingeschränkt, sondern höchstens erweitert werden. Der Rückgabewert von getRoot() ließe sich natürlich einschränken auf CollapsedCompositeNode, dann bräuchte man aber intern (d.h. beim Adaptieren des HierarchyDisplay) wieder einen unsicheren Typecast...