/**
   * Constructs a vector of single-attribute SplitterBuilders to match the given ExampleDescription.
   */
  public Vector<SplitterBuilder> build(
      ExampleDescription exDesc,
      int[] attr,
      boolean usePolicy,
      Configuration config,
      Booster booster)
      throws IncompAttException {
    // attribute class templates
    RealAttribute realAttribute = new RealAttribute(0.0);
    DiscreteAttribute discreteAttribute = new DiscreteAttribute(0);
    SetAttribute setAttribute = new SetAttribute();
    IntegerAttribute integerAttribute = new IntegerAttribute();

    Vector<SplitterBuilder> retval = new Vector<SplitterBuilder>();
    AttributeDescription[] attrDesc = exDesc.getAttributes();
    int noOfAtt = attr.length;
    SplitterBuilder tmpSB = null;

    // check each attribute to make sure that we are ignoring attributes when
    // necessary
    for (int i = 0; i < noOfAtt; i++) {
      if (!attrDesc[attr[i]].isIgnored()) {
        Class<?> attributeClass = attrDesc[attr[i]].getAttributeClass();

        if (attributeClass.equals(realAttribute.getClass())) {
          tmpSB =
              new InequalitySplitterBuilder(
                  attr[i], booster, new AttributeDescription[] {attrDesc[attr[i]]});
        } else if (attributeClass.equals(integerAttribute.getClass())) {
          tmpSB =
              new InequalitySplitterBuilder(
                  attr[i], booster, new AttributeDescription[] {attrDesc[attr[i]]});
        } else if (attributeClass.equals(discreteAttribute.getClass())) {
          tmpSB =
              new EqualitySplitterBuilder(
                  attr[i], booster, new AttributeDescription[] {attrDesc[attr[i]]});
        } else if (attributeClass.equals(setAttribute.getClass())) {
          tmpSB =
              SetSplitterBuilder.newSplitterBuilder(
                  attr[i], booster, textAbstain, new AttributeDescription[] {attrDesc[attr[i]]});
        } else {
          throw new IncompAttException(
              "Trying to build SplitterBuilders vector but cannot identify attribute:",
              attr[i],
              attributeClass);
        }

        Monitor.log(
            "attribute " + attr[i] + " class is:" + attributeClass, Monitor.LOG_LEVEL_THREE);

        retval.add(tmpSB);
      }
    }
    return retval;
  }