Beispiel #1
0
 static {
   final Map<String, Attribute> map = new HashMap<String, Attribute>();
   for (Attribute attribute : values()) {
     final String name = attribute.getLocalName();
     if (name != null) map.put(name, attribute);
   }
   attributes = map;
 }
  private ModelNode parseDatabaseBinaryStorage(
      final XMLExtendedStreamReader reader, final String repositoryName) throws XMLStreamException {
    final ModelNode storageType = new ModelNode();
    storageType.get(OP).set(ADD);
    storageType
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.CONFIGURATION, ModelKeys.BINARY_STORAGE)
        .add(ModelKeys.STORAGE_TYPE, ModelKeys.DB_BINARY_STORAGE);

    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) {
            // The rest go on the ModelNode for the type ...
          case DATA_SOURCE_JNDI_NAME:
            ModelAttributes.DATA_SOURCE_JNDI_NAME.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case MIN_VALUE_SIZE:
            ModelAttributes.MINIMUM_BINARY_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          default:
            throw ParseUtils.unexpectedAttribute(reader, i);
        }
      }
    }
    requireNoElements(reader);

    return storageType;
  }
 private void parseAuthenticator(final XMLExtendedStreamReader reader, final ModelNode repository)
     throws XMLStreamException {
   if (reader.getAttributeCount() > 0) {
     ModelNode authenticator = new ModelNode();
     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) {
           // Set these as properties on the repository ModelNode ...
         case NAME:
           ModelAttributes.NAME.parseAndSetParameter(attrValue, authenticator, reader);
           break;
         case CLASSNAME:
           ModelAttributes.CLASSNAME.parseAndSetParameter(attrValue, authenticator, reader);
           if (!authenticator.has(ModelKeys.NAME)) {
             ModelAttributes.NAME.parseAndSetParameter(attrValue, authenticator, reader);
           }
           break;
         case MODULE:
           ModelAttributes.MODULE.parseAndSetParameter(attrValue, authenticator, reader);
           break;
         default:
           authenticator.get(attrName).set(attrValue);
           break;
       }
     }
     if (authenticator.has(ModelKeys.NAME))
       repository.get(ModelKeys.AUTHENTICATORS).add(authenticator);
   }
   requireNoElements(reader);
 }
  private void parseSequencer(
      XMLExtendedStreamReader reader, String repositoryName, final List<ModelNode> sequencers)
      throws XMLStreamException {

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

    sequencers.add(sequencer);

    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 PATH_EXPRESSION:
            ModelAttributes.PATH_EXPRESSIONS.parseAndAddParameterElement(
                attrValue, sequencer, reader);
            break;
          case CLASSNAME:
            ModelAttributes.SEQUENCER_CLASSNAME.parseAndSetParameter(attrValue, sequencer, reader);
            if (name == null) name = attrValue;
            break;
          case MODULE:
            ModelAttributes.MODULE.parseAndSetParameter(attrValue, sequencer, reader);
            break;
          default:
            // extra attributes are allowed to set sequencer-specific properties ...
            sequencer.get(ModelKeys.PROPERTIES).add(attrName, attrValue);
            break;
        }
      }
    }

    while (reader.hasNext() && (reader.nextTag() != XMLStreamConstants.END_ELEMENT)) {
      final Element element = Element.forName(reader.getLocalName());
      switch (element) {
        case PATH_EXPRESSION:
          String value = reader.getElementText();
          ModelAttributes.PATH_EXPRESSIONS.parseAndAddParameterElement(value, sequencer, reader);
          break;
        default:
          throw ParseUtils.unexpectedElement(reader);
      }
    }

    sequencer
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.SEQUENCER, name);
  }
  private void parseIndexing(
      final XMLExtendedStreamReader reader,
      final ModelNode parentAddress,
      final ModelNode repository)
      throws XMLStreamException {
    if (reader.getAttributeCount() > 0) {
      for (int i = 0; i < reader.getAttributeCount(); i++) {
        String attrName = reader.getAttributeLocalName(i);
        String attrValue = reader.getAttributeValue(i);
        Attribute element = Attribute.forName(attrName);
        switch (element) {
          case REBUILD_UPON_STARTUP:
            ModelAttributes.REBUILD_INDEXES_UPON_STARTUP.parseAndSetParameter(
                attrValue, repository, reader);
            break;
          case THREAD_POOL:
            ModelAttributes.THREAD_POOL.parseAndSetParameter(attrValue, repository, reader);
            break;
          case BATCH_SIZE:
            ModelAttributes.BATCH_SIZE.parseAndSetParameter(attrValue, repository, reader);
            break;
          case READER_STRATEGY:
            ModelAttributes.READER_STRATEGY.parseAndSetParameter(attrValue, repository, reader);
            break;
          case MODE:
            ModelAttributes.MODE.parseAndSetParameter(attrValue, repository, reader);
            break;
          case SYSTEM_CONTENT_MODE:
            ModelAttributes.SYSTEM_CONTENT_MODE.parseAndSetParameter(attrValue, repository, reader);
            break;
          case ASYNC_THREAD_POOL_SIZE:
            ModelAttributes.ASYNC_THREAD_POOL_SIZE.parseAndSetParameter(
                attrValue, repository, reader);
            break;
          case ASYNC_MAX_QUEUE_SIZE:
            ModelAttributes.ASYNC_MAX_QUEUE_SIZE.parseAndSetParameter(
                attrValue, repository, reader);
            break;
          case ANALYZER_CLASSNAME:
            ModelAttributes.ANALYZER_CLASSNAME.parseAndSetParameter(attrValue, repository, reader);
            break;
          case ANALYZER_MODULE:
            ModelAttributes.ANALYZER_MODULE.parseAndSetParameter(attrValue, repository, reader);
            break;
          default:
            if (attrName.startsWith("hibernate")) {
              repository.get(attrName).set(attrValue);
            } else {
              throw ParseUtils.unexpectedAttribute(reader, i);
            }
        }
      }
    }

    requireNoElements(reader);
  }
  private ModelNode parseRamIndexStorage(
      final XMLExtendedStreamReader reader, final String repositoryName) throws XMLStreamException {
    final ModelNode storageType = new ModelNode();
    storageType.get(OP).set(ADD);
    storageType
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.CONFIGURATION, ModelKeys.INDEX_STORAGE)
        .add(ModelKeys.STORAGE_TYPE, ModelKeys.RAM_INDEX_STORAGE);

    if (reader.getAttributeCount() > 0) {
      for (int i = 0; i < reader.getAttributeCount(); i++) {
        String attrName = reader.getAttributeLocalName(i);
        String attrValue = reader.getAttributeValue(i);
        Attribute element = Attribute.forName(attrName);
        switch (element) {
          case THREAD_POOL:
            ModelAttributes.THREAD_POOL.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case BATCH_SIZE:
            ModelAttributes.BATCH_SIZE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case READER_STRATEGY:
            ModelAttributes.READER_STRATEGY.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case MODE:
            ModelAttributes.MODE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case ASYNC_THREAD_POOL_SIZE:
            ModelAttributes.ASYNC_THREAD_POOL_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case ASYNC_MAX_QUEUE_SIZE:
            ModelAttributes.ASYNC_MAX_QUEUE_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case ANALYZER_CLASSNAME:
            ModelAttributes.ANALYZER_CLASSNAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case ANALYZER_MODULE:
            ModelAttributes.ANALYZER_MODULE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          default:
            storageType.get(attrName).set(attrValue);
            break;
        }
      }
    }

    requireNoElements(reader);

    return storageType;
  }
  private ModelNode parseCacheIndexStorage(
      final XMLExtendedStreamReader reader, final String repositoryName) throws XMLStreamException {
    final ModelNode storageType = new ModelNode();
    storageType.get(OP).set(ADD);
    storageType
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.CONFIGURATION, ModelKeys.INDEX_STORAGE)
        .add(ModelKeys.STORAGE_TYPE, ModelKeys.CACHE_INDEX_STORAGE);

    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 FORMAT:
            ModelAttributes.INDEX_FORMAT.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case LOCK_CACHE_NAME:
            ModelAttributes.LOCK_CACHE_NAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case DATA_CACHE_NAME:
            ModelAttributes.DATA_CACHE_NAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case META_CACHE_NAME:
            ModelAttributes.METADATA_CACHE_NAME.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case CACHE_CONTAINER_JNDI_NAME:
            ModelAttributes.CACHE_CONTAINER_JNDI_NAME.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case CHUNK_SIZE:
            ModelAttributes.CHUNK_SIZE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          default:
            storageType.get(attrName).set(attrValue);
            break;
        }
      }
    }
    requireNoElements(reader);

    return storageType;
  }
  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);
  }
  private void parseWorkspace(final XMLExtendedStreamReader reader, final ModelNode repository)
      throws XMLStreamException {
    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:
            repository.get(ModelKeys.PREDEFINED_WORKSPACE_NAMES).add(attrValue);
            break;
          default:
            throw ParseUtils.unexpectedAttribute(reader, i);
        }
      }
    }

    requireNoElements(reader);
  }
  private void parseWorkspaces(
      final XMLExtendedStreamReader reader,
      final ModelNode parentAddress,
      final ModelNode repository)
      throws XMLStreamException {
    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) {
            // Set these as properties on the repository ModelNode ...
          case ALLOW_WORKSPACE_CREATION:
            ModelAttributes.ALLOW_WORKSPACE_CREATION.parseAndSetParameter(
                attrValue, repository, reader);
            break;
          case DEFAULT_WORKSPACE:
            ModelAttributes.DEFAULT_WORKSPACE.parseAndSetParameter(attrValue, repository, reader);
            break;
          default:
            throw ParseUtils.unexpectedAttribute(reader, i);
        }
      }
    }

    while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
      final Element element = Element.forName(reader.getLocalName());
      switch (element) {
        case WORKSPACE:
          {
            parseWorkspace(reader, repository);
            break;
          }
        default:
          {
            throw ParseUtils.unexpectedElement(reader);
          }
      }
    }
  }
  private ModelNode parseCustomBinaryStorage(
      final XMLExtendedStreamReader reader, final String repositoryName) throws XMLStreamException {
    final ModelNode storageType = new ModelNode();
    storageType.get(OP).set(ADD);
    storageType
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.CONFIGURATION, ModelKeys.BINARY_STORAGE)
        .add(ModelKeys.STORAGE_TYPE, ModelKeys.CUSTOM_BINARY_STORAGE);

    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 CLASSNAME:
            ModelAttributes.CLASSNAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case MODULE:
            ModelAttributes.MODULE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case MIN_VALUE_SIZE:
            ModelAttributes.MINIMUM_BINARY_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          default:
            storageType.get(attrName).set(attrValue);
            break;
        }
      }
    }
    requireNoElements(reader);

    return storageType;
  }
  private void parseRepository(
      final XMLExtendedStreamReader reader,
      final ModelNode address,
      final List<ModelNode> repositories)
      throws XMLStreamException {

    final ModelNode repositoryAddress = address.clone();
    final ModelNode repository =
        Util.getEmptyOperation(ModelDescriptionConstants.ADD, repositoryAddress);

    String repositoryName = null;
    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:
            repositoryName = attrValue;
            repositoryAddress.add("repository", attrValue); // $NON-NLS-1$
            repositoryAddress.protect();
            repository.get(OP).set(ADD);
            repository.get(OP_ADDR).set(repositoryAddress);
            repositories.add(repository);
            break;
          case CACHE_NAME:
            ModelAttributes.CACHE_NAME.parseAndSetParameter(attrValue, repository, reader);
            break;
          case CACHE_CONTAINER:
            ModelAttributes.CACHE_CONTAINER.parseAndSetParameter(attrValue, repository, reader);
            break;
          case JNDI_NAME:
            ModelAttributes.JNDI_NAME.parseAndSetParameter(attrValue, repository, reader);
            break;
          case ENABLE_MONITORING:
            ModelAttributes.ENABLE_MONITORING.parseAndSetParameter(attrValue, repository, reader);
            break;
          case SECURITY_DOMAIN:
            ModelAttributes.SECURITY_DOMAIN.parseAndSetParameter(attrValue, repository, reader);
            break;
          case ANONYMOUS_ROLES:
            for (String role : reader.getListAttributeValue(i)) {
              repository.get(ModelKeys.ANONYMOUS_ROLES).add(role);
            }
            break;
          case ANONYMOUS_USERNAME:
            ModelAttributes.ANONYMOUS_USERNAME.parseAndSetParameter(attrValue, repository, reader);
            break;
          case USE_ANONYMOUS_IF_AUTH_FAILED:
            ModelAttributes.USE_ANONYMOUS_IF_AUTH_FAILED.parseAndSetParameter(
                attrValue, repository, reader);
            break;
          case CLUSTER_STACK:
            ModelAttributes.CLUSTER_STACK.parseAndSetParameter(attrValue, repository, reader);
            break;
          case CLUSTER_NAME:
            ModelAttributes.CLUSTER_NAME.parseAndSetParameter(attrValue, repository, reader);
            break;
          default:
            throw ParseUtils.unexpectedAttribute(reader, i);
        }
      }
    }

    ModelNode indexStorage = null;
    ModelNode binaryStorage = null;
    List<ModelNode> sequencers = new ArrayList<ModelNode>();
    List<ModelNode> textExtractors = new ArrayList<ModelNode>();
    while (reader.hasNext() && (reader.nextTag() != XMLStreamConstants.END_ELEMENT)) {
      Element element = Element.forName(reader.getLocalName());
      switch (element) {
        case WORKSPACES:
          parseWorkspaces(reader, address, repository);
          break;
        case INDEXING:
          parseIndexing(reader, address, repository);
          break;

          // Index storage ...
        case RAM_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage = parseRamIndexStorage(reader, repositoryName);
          break;
        case LOCAL_FILE_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage =
              parseFileIndexStorage(reader, repositoryName, ModelKeys.LOCAL_FILE_INDEX_STORAGE);
          break;
        case MASTER_FILE_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage =
              parseFileIndexStorage(reader, repositoryName, ModelKeys.MASTER_FILE_INDEX_STORAGE);
          break;
        case SLAVE_FILE_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage =
              parseFileIndexStorage(reader, repositoryName, ModelKeys.SLAVE_FILE_INDEX_STORAGE);
          break;
        case CACHE_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage = parseCacheIndexStorage(reader, repositoryName);
          break;
        case CUSTOM_INDEX_STORAGE:
          addIndexStorageConfiguration(repositories, repositoryName);
          indexStorage = parseCustomIndexStorage(reader, repositoryName);
          break;

          // Binary storage ...
        case FILE_BINARY_STORAGE:
          addBinaryStorageConfiguration(repositories, repositoryName);
          binaryStorage = parseFileBinaryStorage(reader, repositoryName);
          break;
        case DB_BINARY_STORAGE:
          addBinaryStorageConfiguration(repositories, repositoryName);
          binaryStorage = parseDatabaseBinaryStorage(reader, repositoryName);
          break;
        case CACHE_BINARY_STORAGE:
          addBinaryStorageConfiguration(repositories, repositoryName);
          binaryStorage = parseCacheBinaryStorage(reader, repositoryName);
          break;
        case CUSTOM_BINARY_STORAGE:
          addBinaryStorageConfiguration(repositories, repositoryName);
          binaryStorage = parseCustomBinaryStorage(reader, repositoryName);
          break;

          // Sequencing ...
        case AUTHENTICATORS:
          parseAuthenticators(reader, address, repository);
          break;

          // Sequencing ...
        case SEQUENCERS:
          sequencers = parseSequencers(reader, address, repositoryName);
          break;

          // Text extracting ...
        case TEXT_EXTRACTORS:
          textExtractors = parseTextExtracting(reader, repositoryName);
          break;

        default:
          throw ParseUtils.unexpectedElement(reader);
      }
    }

    if (indexStorage != null) repositories.add(indexStorage);
    if (binaryStorage != null) repositories.add(binaryStorage);
    repositories.addAll(sequencers);
    repositories.addAll(textExtractors);
  }
  private ModelNode parseFileIndexStorage(
      final XMLExtendedStreamReader reader, final String repositoryName, String name)
      throws XMLStreamException {
    final ModelNode storageType = new ModelNode();
    storageType.get(OP).set(ADD);
    storageType
        .get(OP_ADDR)
        .add(SUBSYSTEM, ModeShapeExtension.SUBSYSTEM_NAME)
        .add(ModelKeys.REPOSITORY, repositoryName)
        .add(ModelKeys.CONFIGURATION, ModelKeys.INDEX_STORAGE)
        .add(ModelKeys.STORAGE_TYPE, name);

    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) {
            // Set these as properties on the storage ModelNode ...
          case FORMAT:
            ModelAttributes.INDEX_FORMAT.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case REBUILD_UPON_STARTUP:
            ModelAttributes.REBUILD_INDEXES_UPON_STARTUP.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case THREAD_POOL:
            ModelAttributes.THREAD_POOL.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case BATCH_SIZE:
            ModelAttributes.BATCH_SIZE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case READER_STRATEGY:
            ModelAttributes.READER_STRATEGY.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case MODE:
            ModelAttributes.MODE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case ASYNC_THREAD_POOL_SIZE:
            ModelAttributes.ASYNC_THREAD_POOL_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case ASYNC_MAX_QUEUE_SIZE:
            ModelAttributes.ASYNC_MAX_QUEUE_SIZE.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case ANALYZER_CLASSNAME:
            ModelAttributes.ANALYZER_CLASSNAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case ANALYZER_MODULE:
            ModelAttributes.ANALYZER_MODULE.parseAndSetParameter(attrValue, storageType, reader);
            break;
            // These are file-related
          case RELATIVE_TO:
            ModelAttributes.RELATIVE_TO.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case PATH:
            ModelAttributes.PATH.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case ACCESS_TYPE:
            ModelAttributes.ACCESS_TYPE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case LOCKING_STRATEGY:
            ModelAttributes.LOCKING_STRATEGY.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case REFRESH_PERIOD:
            ModelAttributes.REFRESH_PERIOD.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case COPY_BUFFER_SIZE:
            ModelAttributes.COPY_BUFFER_SIZE.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case SOURCE_PATH:
            ModelAttributes.SOURCE_PATH.parseAndSetParameter(attrValue, storageType, reader);
            break;
          case SOURCE_RELATIVE_TO:
            ModelAttributes.SOURCE_RELATIVE_TO.parseAndSetParameter(attrValue, storageType, reader);
            break;
            // These are JMS-related
          case CONNECTION_FACTORY_JNDI_NAME:
            ModelAttributes.CONNECTION_FACTORY_JNDI_NAME.parseAndSetParameter(
                attrValue, storageType, reader);
            break;
          case QUEUE_JNDI_NAME:
            ModelAttributes.QUEUE_JNDI_NAME.parseAndSetParameter(attrValue, storageType, reader);
            break;
          default:
            storageType.get(attrName).set(attrValue);
            break;
        }
      }
    }
    requireNoElements(reader);

    return storageType;
  }