org.metawidget.widgetbuilder.iface.AdvancedWidgetBuilder Maven / Gradle / Ivy
// Metawidget
//
// This file is dual licensed under both the LGPL
// (http://www.gnu.org/licenses/lgpl-2.1.html) and the EPL
// (http://www.eclipse.org/org/documents/epl-v10.php). As a
// recipient of Metawidget, you may choose to receive it under either
// the LGPL or the EPL.
//
// Commercial licenses are also available. See http://metawidget.org
// for details.
package org.metawidget.widgetbuilder.iface;
/**
* Common interface implemented by all AdvancedWidgetBuilders. AdvancedWidgetBuilders can hook
* into additional lifecycle events.
*
* There are advantages to keeping the vanilla WidgetBuilder
interface as a
* single-method interface: First, it alleviates the need for a BaseWidgetBuilder
or
* WidgetBuilderAdapter
class (to provide default implementations for subclasses who
* don't override all the methods); second, it makes WidgetBuilder
an example of the
* Strategy pattern; third, it makes WidgetBuilder
amenable to automatic function
* objects (part of closures in Java 7).
*
* @author Richard Kennard
*/
public interface AdvancedWidgetBuilder
extends WidgetBuilder {
//
// Methods
//
/**
* Event called at the start of the widget building process, before any
* WidgetBuilder
s are called. WidgetBuilder
s may wish to act on this
* event to initialize themselves ready for processing. This event is only called once per
* inspection, not once per widget built.
*
* @param metawidget
* the parent Metawidget. Never null
*/
void onStartBuild( M metawidget );
/**
* Event called at the end of widget building, after all widgets have been built and added to
* the Layout
. WidgetBuilders
s may wish to act on this event to clean
* themselves up after processing. This event is only called once per inspection, not once per
* widget built.
*
* @param metawidget
* the parent Metawidget. Never null
*/
void onEndBuild( M metawidget );
}