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 /**
024 * If this component is a container.
025 */
026 public boolean getContainerState()
027 {
028 return getIsContainer();
029 }
030
031 public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
032 {
033 if(!cycle.isRewinding() && !getNeverDestroy()) {
034 if (!cycle.getResponseBuilder().isDynamic()
035 || cycle.getResponseBuilder().explicitlyContains(this)) {
036 setDestroy(false);
037 } else
038 setDestroy(true);
039 }
040
041 // don't render if not part of update response and we're not containers
042 if (!getContainerState()) {
043 if (cycle.getResponseBuilder().isDynamic()
044 && (!cycle.getResponseBuilder().explicitlyContains(this)
045 && !cycle.getResponseBuilder().contains(this))) {
046 return;
047 }
048 }
049
050 renderWidget(writer, cycle);
051 }
052
053
054 }