001    package org.trails.page;
002    
003    import org.apache.hivemind.util.Defense;
004    import org.apache.tapestry.event.PageEvent;
005    import org.apache.tapestry.callback.ICallback;
006    import org.apache.tapestry.IRequestCycle;
007    
008    /**
009     * A page which has a model object.
010     *
011     * @author Chris Nelson
012     */
013    public abstract class ModelPage extends TrailsPage implements IModelPage
014    {
015    
016            public void pushCallback()
017            {
018                    ICallback callback = callbackToThisPage();
019                    if (getCallbackStack() != null && (getCallbackStack().isEmpty() || !getCallbackStack().peek().equals(callback)))
020                    {
021                            getCallbackStack().push(callback);
022                    }
023            }
024    
025            protected abstract ICallback callbackToThisPage();
026    
027            public void pageBeginRender(PageEvent event)
028            {
029                    super.pageBeginRender(event);
030                    Defense.notNull(getModel(), "model");
031                    Defense.notNull(isModelNew(), "modelNew");
032            }
033    
034    }