docs: public void forAllSubClasses(String template, Properties attributes) throws XDocletException
      {
          ArrayList subTypes = new ArrayList();
          XClass    type     = getCurrentClass();
  
          addDirectSubTypes(type, subTypes);
  
          int                pos = 0;
          ClassDescriptorDef classDef;
  
          while (pos < subTypes.size())
          {
              type     = (XClass)subTypes.get(pos);
              classDef = _model.getClass(type.getQualifiedName());
              if ((classDef != null) && classDef.hasProperty(PropertyHelper.OJB_PROPERTY_OJB_PERSISTENT))
              {
                  pos++;
              }
              else
              {
                  subTypes.remove(pos);
                  addDirectSubTypes(type, subTypes);
              }
          }
          for (Iterator it = subTypes.iterator(); it.hasNext(); )
          {
              pushCurrentClass((XClass)it.next());
              generate(template);
              popCurrentClass();
          }
      }