1 2 package org.weda.tapestry; 3 4 import java.util.List; 5 import org.apache.commons.logging.Log; 6 import org.apache.commons.logging.LogFactory; 7 import org.apache.tapestry.AbstractComponent; 8 import org.apache.tapestry.IRender; 9 10 /** 11 * 12 * @author Mikhail Titov 13 */ 14 public class Utils { 15 private final static Log log = LogFactory.getLog(Utils.class); 16 17 public static <T> void extractObjectsFromRender( 18 IRender render, Class<T> objectClass, List<T> objects) 19 { 20 extractObjectsFromRender(render, objectClass, objects, null, true); 21 } 22 23 public static <T> void extractObjectsFromRender( 24 IRender render, Class<T> objectClass, List<T> objects 25 , Class stopOnClass, boolean startFromChilds) 26 { 27 if (log.isDebugEnabled()) 28 log.debug( 29 "--> extractObjectsFromRender. render: "+ 30 (render==null?null:render.getClass().getName())); 31 if (render == null) 32 return; 33 if (!startFromChilds){ 34 if ( stopOnClass!=null 35 && stopOnClass.isAssignableFrom(render.getClass())) 36 { 37 return; 38 } 39 if (objectClass.isAssignableFrom(render.getClass())){ 40 objects.add((T)render); 41 if (log.isDebugEnabled()) 42 log.debug(String.format( 43 "Added new action listener (%s)" 44 , render.getClass().getName())); 45 } 46 } 47 if (AbstractComponent.class.isAssignableFrom(render.getClass())){ 48 IRender[] renders=((AbstractComponent)render).getBody(); 49 if (renders!=null) 50 for (IRender r: renders) 51 extractObjectsFromRender( 52 r, objectClass, objects, stopOnClass, false); 53 } 54 if (log.isDebugEnabled()) 55 log.debug( 56 "<-- extractObjectsFromRender. render: "+ 57 (render==null?null:render.getClass().getName())); 58 } 59 60 }