001 /* 002 * AbstractContainerWidget.java 003 * 004 * Created on February 3, 2007, 7:01 AM 005 */ 006 007 package net.sf.tacos.components.dojo; 008 009 import org.apache.tapestry.IMarkupWriter; 010 import org.apache.tapestry.IRequestCycle; 011 import org.apache.tapestry.dojo.AbstractWidget; 012 013 /** 014 * A widget that can also be a container. 015 * 016 * @author andyhot 017 */ 018 public abstract class GenericWidget extends AbstractWidget{ 019 020 public abstract boolean getIsContainer(); 021 public abstract boolean getNeverDestroy(); 022 023 public void renderComponent(IMarkupWriter writer, IRequestCycle cycle) 024 { 025 if(!cycle.isRewinding() && !getNeverDestroy()) { 026 if (!cycle.getResponseBuilder().isDynamic() 027 || cycle.getResponseBuilder().explicitlyContains(this)) { 028 setDestroy(false); 029 } else 030 setDestroy(true); 031 } 032 033 // don't render if not part of update response and we're not containers 034 if (!getIsContainer()) { 035 if (cycle.getResponseBuilder().isDynamic() 036 && (!cycle.getResponseBuilder().explicitlyContains(this) 037 && !cycle.getResponseBuilder().contains(this))) { 038 return; 039 } 040 } 041 042 renderWidget(writer, cycle); 043 } 044 045 046 }