private void parseTextExtractor(
      XMLExtendedStreamReader reader, String repositoryName, final List<ModelNode> extractors)
      throws XMLStreamException {

    final ModelNode extractor = new ModelNode();
    extractor.get(OP).set(ADD);
    String name = null;

    extractors.add(extractor);

    if (reader.getAttributeCount() > 0) {
      for (int i = 0; i < reader.getAttributeCount(); i++) {
        String attrName = reader.getAttributeLocalName(i);
        String attrValue = reader.getAttributeValue(i);
        Attribute attribute = Attribute.forName(attrName);
        switch (attribute) {
          case NAME:
            name = attrValue;
            break;
          case CLASSNAME:
            ModelAttributes.TEXT_EXTRACTOR_CLASSNAME.parseAndSetParameter(
                attrValue, extractor, reader);
            if (name == null) name = attrValue;
            break;
          case MODULE:
            ModelAttributes.MODULE.parseAndSetParameter(attrValue, extractor, reader);
            break;
          default:
            // extra attributes are allowed to set extractor-specific properties ...
            extractor.get(ModelKeys.PROPERTIES).add(attrName, attrValue);
            break;
        }
      }
    }

    extractor
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.TEXT_EXTRACTOR, name);

    requireNoElements(reader);
  }