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 }