Search code examples
javawicketcode-reuse

How can I reuse code when two different wicket applications share common functionality


I have a Wicket AuthenticatedWebApplication which has several pages and features that need to be reused in a new AuthenticatedWebApplication that I have to develop.

I am using Wicket 1.4, Spring and Hibernate.

Both applications will even share the same look (except for Application logo) which is now implemented in a base page.

Has anyone had a similar experience? I definitely don't want to recur to copy-paste code because the common functionality implements a workflow process which can and will change.

What can I do to keep my applications modular, and achieve my goal?


Solution

  • My company does this all the time. We have a core package that holds the base UserApplication, User accounts, login, authentication, etc. Then, every project we develop extends this base package. There is some duplication - e.g. almost all of the configuration files look identical in each - but each one has it's own theme directory that supplies the markup, customized to the look and feel of the application.

    Some suggestions as you do this:

    1. The core application should have a fair number of getXPanel() methods that each sub-application overrides. For example, getHeaderPanel()
    2. Use a "BasePage" class that everyone extends. This is where you set up your overall look-and-feel, overridden in sub-application theme folders, and make heavy use of <wicket:extend> features. Also a good place to put your jQuery import, ec.
    3. Keep in mind that markup is easily overridden. Your sub-application doesn't need to create java extensions of pages in order to change the logos. Just use different markup.

    Each of our applications is divided into at least 4 modules. For example:

    1. base - Wicket dependency, basic event logging
    2. data - UserApplication, AdminPage, User hibernate obect. Each page has its own markup, but is usually overridden.
    3. science - A core project with a lot of code for displaying a science textbook. ScienceApplication extends UserAppication.
    4. foundations - A theme specific implementation for elementary students FoundationsApplication extends ScienceApplication
    5. inquiry - A different theme specific implementation for high school students InquiryApplication extends ScienceApplication

    Our two science applications have different headers and even a few different pages, but ScienceApplication has a those methods I described above.