/**
   * Convert this filter into Java code. Output whatever text necessary and return the variable
   * name.
   *
   * @param out The output buffer.
   * @param context Three integers as follows:
   *     <li>indent level - the number of spaces to insert at the beginning of each line
   *     <li>filter number - the next available filter number
   *     <li>filter array number - the next available array of filters number
   * @return The variable name to use when referencing this filter (usually "filter" + context[1]++)
   */
  public String toJavaCode(StringBuffer out, int[] context) {
    String name;
    String ret;

    if (null != mFilter.getChildFilter())
      name = ((Filter) mFilter.getChildFilter()).toJavaCode(out, context);
    else name = null;
    ret = "filter" + context[1]++;
    spaces(out, context[0]);
    out.append("HasChildFilter ");
    out.append(ret);
    out.append(" = new HasChildFilter ();");
    newline(out);
    spaces(out, context[0]);
    out.append(ret);
    out.append(".setRecursive (");
    out.append(mFilter.getRecursive() ? "true" : "false");
    out.append(");");
    newline(out);
    if (null != name) {
      spaces(out, context[0]);
      out.append(ret);
      out.append(".setChildFilter (");
      out.append(name);
      out.append(");");
      newline(out);
    }

    return (ret);
  }
  /**
   * Get the underlying node filter object.
   *
   * @return The node filter object suitable for serialization.
   */
  public NodeFilter getNodeFilter() {
    NodeFilter filter;
    HasChildFilter ret;

    ret = new HasChildFilter();

    ret.setRecursive(mFilter.getRecursive());
    filter = mFilter.getChildFilter();
    if (null != filter) ret.setChildFilter(((Filter) filter).getNodeFilter());

    return (ret);
  }
  /** Create a wrapper over a new HasChildFilter. */
  public HasChildFilterWrapper() {
    mFilter = new HasChildFilter();

    // add the recursive flag
    mRecursive = new JCheckBox("Recursive");
    add(mRecursive);
    mRecursive.addActionListener(this);
    mRecursive.setSelected(mFilter.getRecursive());

    // add the subfilter container
    mContainer = new SubFilterList(this, "Child Filter", 1);
    add(mContainer);
  }
 /**
  * Assign the underlying node filter for this wrapper.
  *
  * @param filter The filter to wrap.
  * @param context The parser to use for conditioning this filter. Some filters need contextual
  *     information to provide to the user, i.e. for tag names or attribute names or values, so the
  *     Parser context is provided.
  */
 public void setNodeFilter(NodeFilter filter, Parser context) {
   mFilter = (HasChildFilter) filter;
   mRecursive.setSelected(mFilter.getRecursive());
 }