View Javadoc

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  }