Example #1
0
 // scan up the component hierarchy until the real owner is found and collect all cloned
 // components.
 private static List<Component> scanClones(DataBinder binder, Component comp) {
   if (DataBinder.isTemplate(comp)) {
     final List<Component> owners =
         scanClones(binder, binder.getCollectionOwner(comp)); // recursive
     final List<Component> kidowners = new LinkedList<Component>();
     for (Component owner : owners) {
       final CollectionItem decor = binder.getCollectionItemByOwner(owner);
       // backward compatible, CollectionItemEx.getItems() is faster
       if (decor instanceof CollectionItemExt) {
         final CollectionItemExt decorex = (CollectionItemExt) decor;
         for (final Iterator iti = decorex.getItems(owner).iterator(); iti.hasNext(); ) {
           final Component item = (Component) iti.next();
           kidowners.add(DataBinder.lookupClone(item, comp));
         }
       } else {
         try {
           for (int j = 0; true; ++j) { // iterate until out of bound
             final Component item = decor.getComponentAtIndexByOwner(owner, j);
             kidowners.add(DataBinder.lookupClone(item, comp));
           }
         } catch (IndexOutOfBoundsException ex) {
           // ignore, iterate until out of bound
         }
       }
     }
     return kidowners;
   } else {
     final List<Component> owners = new ArrayList<Component>();
     owners.add(comp);
     return owners;
   }
 }