1 15 package org.apache.tapestry; 16 17 import org.apache.commons.logging.Log; 18 import org.apache.commons.logging.LogFactory; 19 import org.apache.tapestry.engine.IPageLoader; 20 import org.apache.tapestry.spec.IComponentSpecification; 21 22 27 28 public class BaseComponent extends AbstractComponent implements ITemplateComponent 29 { 30 private static final Log LOG = LogFactory.getLog(BaseComponent.class); 31 32 private static final int OUTER_INIT_SIZE = 5; 33 34 private IRender[] _outer; 35 36 private int _outerCount = 0; 37 38 43 44 public void addOuter(IRender element) 45 { 46 if (_outer == null) 47 { 48 _outer = new IRender[OUTER_INIT_SIZE]; 49 _outer[0] = element; 50 51 _outerCount = 1; 52 return; 53 } 54 55 57 if (_outerCount == _outer.length) 58 { 59 IRender[] newOuter; 60 61 newOuter = new IRender[_outer.length * 2]; 62 63 System.arraycopy(_outer, 0, newOuter, 0, _outerCount); 64 65 _outer = newOuter; 66 } 67 68 _outer[_outerCount++] = element; 69 } 70 71 74 75 private void readTemplate(IRequestCycle cycle, IPageLoader loader) 76 { 77 loader.loadTemplateForComponent(cycle, this); 78 } 79 80 85 86 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) 87 { 88 if (LOG.isDebugEnabled()) 89 LOG.debug("Begin render " + getExtendedId()); 90 91 for (int i = 0; i < _outerCount; i++) 92 _outer[i].render(writer, cycle); 93 94 if (LOG.isDebugEnabled()) 95 LOG.debug("End render " + getExtendedId()); 96 } 97 98 104 105 public void finishLoad(IRequestCycle cycle, IPageLoader loader, IComponentSpecification specification) 106 { 107 readTemplate(cycle, loader); 108 109 super.finishLoad(cycle, loader, specification); 110 } 111 } | Popular Tags |