Exercise: complete wizard example from class Preparation: Look in the friday-24 folder, grab sse04-intermediate-updated.zip, make it run etc. This is the software that was the result of the Friday 24th April lecture; to go back to the software we started with at the beginning of the day, see description at the end of this text file. Overview: The mail configuration wizard is complete; the wizard class and all pages are generated, as is the abstract controller class. The mail configuration wizard is however not integrated with the abstract controller class. You can generate it from the existing page model, but it needs a concrete subclass like color_wizard.ColorWizardControllerImpl Approach: The concrete subclass class should implement the abstract methods from the generated abstract controller class and the functionality from selectNext should be moved into the appropriate, corresponding method (you should be able to figure this out intuitively or alternatively from the original application). Earlier version: Starting from friday-17/SSE04-wizard-v1.zip you need to add a page model and extend the Generator class so that it can (1) generate multiple page classes based on the page model and (2) can generate both the favorite color and mail configuration wizards. The page metamodel is easy to define given that the classes are almost identical and that we can use the name of page as command string on the button. To solve (1) and (2) I refactored the Generator class into an abstract Compiler class that has methods for creating directories and writing classes etc. For the specific case of (2) a concrete subclass is added for each metamodel instance that we want to generate code from (later on when we add an XML frontend it can subclass from the same class). Last, a template for the page classes can be added, and you should now be have functionality similar to friday-24/sse04-intermediate.zip. To continue from there, the selectNext method must be automatically generated to call a number of abstract methods that define the interface between the generated code and the manually written code. The page model contains all the information necessary, but a new template is needed to generate the implementation of the abstract controller class. Once generated an implementation has been generated, the concrete controller class for the wizard is refactored to be a subclass of the generated class.