You need an interface like javax.swing.tree.TreeNode that all your nested objects implement. This is what wicket uses for its tree implementation (take a look in wicket-extensions for 1.x). The wicket tree impl rocks, so you can do no better than look there for inspiration. Also, take a look at DefaultMutableTreeNode for ideas on how to implement.
best, jim On 3/23/07, Matt Welch <[EMAIL PROTECTED]> wrote: > As the subject indicates, this isn't a question specific to Wicket (although > it WILL eventually involve Wicket to display these objects), so if you feel > I should post this elsewhere, feel free to tell me so, however it seemed > like a pretty bright bunch of Java guys hang around here so I'm hoping for > some insight. > > I've been tasked with implementing a rather curious (to me anyway) > hierarchical object structure. Most of the objects in this structure serve > no other purpose than to group the objects below them; it's only at the > final leaf levels that there are some significant behavioral difference in > the objects. For lack of a better example, I'll call these objects Grouper1, > Grouper2, Grouper3, and Leaf. So I might have a structure that looks like: > > Grouper1 > --Grouper2 > ----Grouper3 > ------Leaf > ------Leaf > ------Leaf > ----Grouper3 > ------Leaf > ------Leaf > ------Leaf > > It can also look like this: > > Grouper1 > --Grouper3 > ----Leaf > ----Leaf > ----Leaf > --Grouper3 > ----Leaf > ----Leaf > ----Leaf > > Or like this: > > Grouper1 > --Leaf > --Leaf > --Grouper2 > ----Grouper3 > ------Leaf > ------Leaf > ------Leaf > ----Grouper3 > ------Leaf > ------Leaf > ------Leaf > > Or even like this: > > Grouper3 > --Leaf > --Leaf > --Leaf > > Although I'm willing to exclude that last example (with something other than > a Grouper1 at the top) if it helps simplify things any. > > As you can see almost all objects in the hierarchy can exist at any level. > Only the leaf node has any properties beyond those shared by all of the > other objects. And before you ask, despite the fact that the branch items > are so similar, they do have different labels that are important to the > people using the hierarchy. I'm just trying to determine if those labels are > important to the domain model. > > I started to model this using simple inheritance. Something like the > following: > > public abstract class MyHierarchyObject{ > private String commonAttribute1; > private boolean commonAttribute2 = false; > private List<MyHierarchyObject> children = new > ArrayList<MyHierarchyObject>; > private MyHierarchyObject parent; //the association needs to be > bidirectional for up and down navigation > ... > } > > public class Grouper1 extends MyHierarchyObject{ > } > > etc. etc. > > Of course, I realized after just a few seconds that this seemed a little > silly since I was going to end up with at least three classes with either no > behavior or properties or only extremely minor changes to the abstract > class's properties like setting commonAttribute2 to true by default. > > So does using inheritance like this still make sense or should I do > something like make the MyHierarchyObject not abstract and add a Type > property that can be populated from an enum with elements like Grouper1, > Grouper2, and Grouper3? What about the leaf node. It's not allowed to have > children but because it can be a child of any of the Groupers, it seems like > it needs to extend MyHierarchyObject in order to fit into the child parent > model. Should I put the children related methods into an interface that only > the Grouper classes implement? Of course that only works if I use the > inheritance model; maybe that's a good reason to use it? Or is there a > design pattern I'm missing in all of this that might help me. > > I've been thinking about this for so long now that I'm afraid I'm too deep > into it and not thinking clearly about the best approaches. That's why I'm > posting here. Unfortunately, the hierarchy is quite a bit more complex than > this example, but I think if I can solve this level of complexity, I can > apply similar logic to the rest of the hierarchy that I didn't represent > here. > > Thanks for reading such a long post. > > Matt > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user > > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user