I would like to work on cleaning up the screen widget Java code. Here are some of my ideas:
1. The screen widget model classes are trying to be too many things. As a result, they contain some messy and scary code. I'd like to see the model widget become more of a data structure, and move the rendering code into the rendering classes. 2. Use a true visitor pattern in the model widgets. The current pattern is what I would call "befuddled double dispatch with baggage." Methods like public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) would become public void accept(ScreenWidgetVisitor visitor). Rendering classes would implement the ScreenWidgetVisitor interface. The model widgets won't need to be concerned with writers, contexts, or any other messy details. 3. Convert the existing artifact gathering code to a screen widget visitor. That would get the artifact gathering code out of the model widgets and put it where it belongs. It would probably simplify the artifact gathering code as well. Once these steps are completed, the model widget classes will be simple immutable data structures. The only code most of the model classes will have is a constructor and the accept method. The rendering code will be simplified, since there will be better separation of concerns. I will probably start off with #1 - move the rendering code from the model classes to the rendering classes. Once the dust settles from that, I will introduce the visitor interfaces and visitor classes. The existing model methods will be deprecated. The model classes will be bloated while they support both patterns. When the time is right we can remove the deprecated methods and we'll have lean, well structured screen widget code. What do you think? -Adrian