private void parseLocking(
      XMLExtendedStreamReader reader, ModelNode cache, List<ModelNode> operations)
      throws XMLStreamException {

    // ModelNode for the cache add operation
    ModelNode lockingAddress = cache.get(ModelDescriptionConstants.OP_ADDR).clone();
    lockingAddress.add(ModelKeys.LOCKING, ModelKeys.LOCKING_NAME);
    lockingAddress.protect();
    ModelNode locking = Util.getEmptyOperation(ModelDescriptionConstants.ADD, lockingAddress);

    for (int i = 0; i < reader.getAttributeCount(); i++) {
      String value = reader.getAttributeValue(i);
      Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
      switch (attribute) {
        case ISOLATION:
          {
            LockingResource.ISOLATION.parseAndSetParameter(value, locking, reader);
            break;
          }
        case STRIPING:
          {
            LockingResource.STRIPING.parseAndSetParameter(value, locking, reader);
            break;
          }
        case ACQUIRE_TIMEOUT:
          {
            LockingResource.ACQUIRE_TIMEOUT.parseAndSetParameter(value, locking, reader);
            break;
          }
        case CONCURRENCY_LEVEL:
          {
            LockingResource.CONCURRENCY_LEVEL.parseAndSetParameter(value, locking, reader);
            break;
          }
        default:
          {
            throw ParseUtils.unexpectedAttribute(reader, i);
          }
      }
    }
    ParseUtils.requireNoContent(reader);
    operations.add(locking);
  }