One way to make it easier is that all classes implement the same interface so you can treat them indistinctly. Theres a known pattern for this:
The good newnews is that as this creates a tree, you. You can then write, in an external managing class, recursive methods to look up items.
For example you could write a method findAndAdd(String tagToFind, Component componentToAdd);
To the base interfaces doumenteddocumented in the pattern you should add a tagMatches(String tag) as well as all common getters and setters so you can, again, treat items indistincltly of their class.
I would add hasChild() and nextChild() methods to implement iterations.
