Exemplo n.º 1
0
  /** {@inheritDoc} */
  @Override
  public void writeContent(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context)
      throws XMLStreamException {

    context.startSubsystemElement(Namespace.CURRENT.getUriString(), false);

    ModelNode node = context.getModelNode();

    writeAttribute(writer, Attribute.NATIVE.getLocalName(), node);
    writeAttribute(writer, Attribute.DEFAULT_VIRTUAL_SERVER.getLocalName(), node);
    writeAttribute(writer, Attribute.INSTANCE_ID.getLocalName(), node);
    if (node.hasDefined(CONTAINER_CONFIG)) {
      writeContainerConfig(writer, node.get(CONTAINER_CONFIG));
    }
    if (node.hasDefined(CONNECTOR)) {
      for (final Property connector : node.get(CONNECTOR).asPropertyList()) {
        final ModelNode config = connector.getValue();
        writer.writeStartElement(Element.CONNECTOR.getLocalName());
        writer.writeAttribute(NAME, connector.getName());
        writeAttribute(writer, Attribute.PROTOCOL.getLocalName(), config);
        writeAttribute(writer, Attribute.SOCKET_BINDING.getLocalName(), config);
        writeAttribute(writer, Attribute.SCHEME.getLocalName(), config);
        writeAttribute(writer, Attribute.ENABLED.getLocalName(), config);
        writeAttribute(writer, Attribute.ENABLE_LOOKUPS.getLocalName(), config);
        writeAttribute(writer, Attribute.PROXY_NAME.getLocalName(), config);
        writeAttribute(writer, Attribute.PROXY_PORT.getLocalName(), config);
        writeAttribute(writer, Attribute.SECURE.getLocalName(), config);
        writeAttribute(writer, Attribute.EXECUTOR.getLocalName(), config);
        writeAttribute(writer, Attribute.MAX_POST_SIZE.getLocalName(), config);
        writeAttribute(writer, Attribute.MAX_SAVE_POST_SIZE.getLocalName(), config);
        writeAttribute(writer, Attribute.MAX_CONNECTIONS.getLocalName(), config);
        writeAttribute(writer, Attribute.REDIRECT_PORT.getLocalName(), config);

        if (config.get(SSL).isDefined() && config.get(SSL).has("configuration")) {
          ModelNode sslConfig = config.get(SSL).get("configuration");
          writer.writeStartElement(Element.SSL.getLocalName());
          writeAttribute(writer, Attribute.NAME.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.KEY_ALIAS.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.PASSWORD.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.CERTIFICATE_KEY_FILE.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.CIPHER_SUITE.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.PROTOCOL.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.VERIFY_CLIENT.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.VERIFY_DEPTH.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.CERTIFICATE_FILE.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.CA_CERTIFICATE_FILE.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.CA_REVOCATION_URL.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.SESSION_CACHE_SIZE.getLocalName(), sslConfig);
          writeAttribute(writer, Attribute.SESSION_TIMEOUT.getLocalName(), sslConfig);
          writer.writeEndElement();
        }
        if (config.hasDefined(VIRTUAL_SERVER)) {
          for (final ModelNode virtualServer : config.get(VIRTUAL_SERVER).asList()) {
            writer.writeEmptyElement(VIRTUAL_SERVER);
            writer.writeAttribute(NAME, virtualServer.asString());
          }
        }

        writer.writeEndElement();
      }
    }
    if (node.hasDefined(VIRTUAL_SERVER)) {
      for (final Property host : node.get(VIRTUAL_SERVER).asPropertyList()) {
        final ModelNode config = host.getValue();
        writer.writeStartElement(Element.VIRTUAL_SERVER.getLocalName());
        writer.writeAttribute(NAME, host.getName());
        writeAttribute(writer, Attribute.DEFAULT_WEB_MODULE.getLocalName(), config);
        if (config.hasDefined(ENABLE_WELCOME_ROOT) && config.get(ENABLE_WELCOME_ROOT).asBoolean())
          writer.writeAttribute(ENABLE_WELCOME_ROOT, "true");

        if (config.hasDefined(ALIAS)) {
          for (final ModelNode alias : config.get(ALIAS).asList()) {
            writer.writeEmptyElement(ALIAS);
            writer.writeAttribute(NAME, alias.asString());
          }
        }

        if (config.get(ACCESS_LOG).isDefined() && config.get(ACCESS_LOG).has("configuration")) {
          ModelNode accessLog = config.get(ACCESS_LOG).get("configuration");
          writer.writeStartElement(Element.ACCESS_LOG.getLocalName());
          writeAttribute(writer, Attribute.PATTERN.getLocalName(), accessLog);
          writeAttribute(writer, Attribute.RESOLVE_HOSTS.getLocalName(), accessLog);
          writeAttribute(writer, Attribute.EXTENDED.getLocalName(), accessLog);
          writeAttribute(writer, Attribute.PREFIX.getLocalName(), accessLog);
          writeAttribute(writer, Attribute.ROTATE.getLocalName(), accessLog);

          if (accessLog.has(DIRECTORY) && accessLog.get(DIRECTORY).has("configuration")) {
            ModelNode directory = accessLog.get(DIRECTORY).get("configuration");
            String name = Element.DIRECTORY.getLocalName();
            boolean startwritten = false;
            startwritten =
                writeAttribute(
                    writer, Attribute.PATH.getLocalName(), directory, startwritten, name);
            startwritten =
                writeAttribute(
                    writer, Attribute.RELATIVE_TO.getLocalName(), directory, startwritten, name);
            if (startwritten) writer.writeEndElement();
          }
          writer.writeEndElement();
        }

        if (config.hasDefined(REWRITE)) {
          for (final ModelNode rewritenode : config.get(REWRITE).asList()) {
            String name = getAddedRule(rewritenode);
            ModelNode rewrite;
            if (rewritenode.hasDefined(name)) rewrite = rewritenode.get(name);
            else rewrite = rewritenode;
            writer.writeStartElement(REWRITE);
            writeAttribute(writer, Attribute.PATTERN.getLocalName(), rewrite);
            writeAttribute(writer, Attribute.SUBSTITUTION.getLocalName(), rewrite);
            writeAttribute(writer, Attribute.FLAGS.getLocalName(), rewrite);

            if (rewrite.hasDefined(CONDITION)) {
              for (final ModelNode conditionnode : rewrite.get(CONDITION).asList()) {
                String condname = getAddedConditionName(conditionnode);
                ModelNode condition;
                if (conditionnode.hasDefined(condname)) condition = conditionnode.get(condname);
                else condition = conditionnode;
                writer.writeStartElement(CONDITION);
                writeAttribute(writer, Attribute.TEST.getLocalName(), condition);
                writeAttribute(writer, Attribute.PATTERN.getLocalName(), condition);
                writeAttribute(writer, Attribute.FLAGS.getLocalName(), condition);
                writer.writeEndElement();
              }
            }
            writer.writeEndElement();
          }
        }

        if (config.hasDefined(SSO) && config.get(SSO).has("configuration")) {
          final ModelNode sso;
          sso = config.get(SSO).get("configuration");
          writer.writeStartElement(SSO);
          writeAttribute(writer, Attribute.CACHE_CONTAINER.getLocalName(), sso);
          writeAttribute(writer, Attribute.CACHE_NAME.getLocalName(), sso);
          writeAttribute(writer, Attribute.DOMAIN.getLocalName(), sso);
          writeAttribute(writer, Attribute.REAUTHENTICATE.getLocalName(), sso);
          writer.writeEndElement();
        }

        // End of the VIRTUAL_SERVER
        writer.writeEndElement();
      }
    }
    writer.writeEndElement();
  }
Exemplo n.º 2
0
/**
 * Attributes used in setting up ModeShape configurations. To mark an attribute as required, mark it
 * as not allowing null.
 */
public class ModelAttributes {

  private static final ParameterValidator ROLE_NAME_VALIDATOR =
      new StringSetValidator(
          false,
          false,
          "",
          ModeShapeRoles.ADMIN,
          ModeShapeRoles.READONLY,
          ModeShapeRoles.READWRITE);
  private static final ParameterValidator WORKSPACE_NAME_VALIDATOR =
      new ModelTypeValidator(ModelType.STRING, false, false, true);
  private static final ParameterValidator NODE_TYPE_VALIDATOR =
      new ModelTypeValidator(ModelType.STRING, false, false, true);
  private static final ParameterValidator INITIAL_CONTENT_VALIDATOR =
      new ModelTypeValidator(ModelType.PROPERTY, false, false, true);
  private static final ParameterValidator DEFAULT_INITIAL_CONTENT_VALIDATOR =
      new ModelTypeValidator(ModelType.STRING, true, false, true);
  private static final ParameterValidator PATH_EXPRESSION_VALIDATOR =
      new PathExpressionValidator(false);

  private static final ParameterValidator PROJECTION_VALIDATOR = new ProjectionValidator(false);

  private static final ParameterValidator COLUMNS_VALIDATOR = new IndexColumnsValidator(false);

  private static final ParameterValidator INDEX_KIND_VALIDATOR =
      new StringSetValidator(
          true,
          true,
          RepositoryConfiguration.FieldValue.KIND_ENUMERATED,
          RepositoryConfiguration.FieldValue.KIND_NODE_TYPE,
          RepositoryConfiguration.FieldValue.KIND_TEXT,
          RepositoryConfiguration.FieldValue.KIND_UNIQUE,
          RepositoryConfiguration.FieldValue.KIND_VALUE);
  private static final ParameterValidator REINDEXING_MODE_VALIDATOR =
      new StringSetValidator(
          true,
          true,
          RepositoryConfiguration.ReindexingMode.IF_MISSING.name(),
          RepositoryConfiguration.ReindexingMode.INCREMENTAL.name());
  private static final ParameterValidator MIME_TYPE_DETECTION_VALIDATOR =
      new StringSetValidator(
          true,
          true,
          RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_CONTENT,
          RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_NAME,
          RepositoryConfiguration.FieldValue.MIMETYPE_DETECTION_NONE);

  public static final SimpleAttributeDefinition ALLOW_WORKSPACE_CREATION =
      new MappedAttributeDefinitionBuilder(ModelKeys.ALLOW_WORKSPACE_CREATION, ModelType.BOOLEAN)
          .setXmlName(Attribute.ALLOW_WORKSPACE_CREATION.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(true))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.WORKSPACES, FieldName.ALLOW_CREATION)
          .build();

  public static final SimpleAttributeDefinition WORKSPACES_CACHE_SIZE =
      new MappedAttributeDefinitionBuilder(ModelKeys.WORKSPACES_CACHE_SIZE, ModelType.INT)
          .setXmlName(Attribute.CACHE_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setValidator(new IntRangeValidator(1))
          .build();

  public static final ListAttributeDefinition ANONYMOUS_ROLES =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.ANONYMOUS_ROLES,
              new MappedAttributeDefinitionBuilder(ModelKeys.ANONYMOUS_ROLE, ModelType.STRING)
                  .setAllowExpression(true)
                  .setAllowNull(true)
                  .setDefaultValue(
                      new ModelNode().add(new ModelNode().set(ModeShapeRoles.READONLY)))
                  .setValidator(ROLE_NAME_VALIDATOR)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .setAccessConstraints(
                      SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF)
                  .build())
          .setAllowNull(true)
          .setMinSize(0)
          .setMaxSize(100)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SECURITY, FieldName.ANONYMOUS, FieldName.ANONYMOUS_ROLES)
          .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF)
          .build();

  public static final SimpleAttributeDefinition ANONYMOUS_USERNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.ANONYMOUS_USERNAME, ModelType.STRING)
          .setXmlName(Attribute.ANONYMOUS_USERNAME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("<anonymous>"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SECURITY, FieldName.ANONYMOUS, FieldName.ANONYMOUS_USERNAME)
          .build();

  public static final SimpleAttributeDefinition AUTHENTICATOR_CLASSNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.AUTHENTICATOR_CLASSNAME, ModelType.STRING)
          .setXmlName(Attribute.CLASSNAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SECURITY, FieldName.PROVIDERS, FieldName.CLASSNAME)
          .build();

  public static final SimpleAttributeDefinition CACHE_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.CACHE_NAME, ModelType.STRING)
          .setXmlName(Attribute.CACHE_NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition CACHE_CONFIG =
      new MappedAttributeDefinitionBuilder(ModelKeys.CACHE_CONFIG, ModelType.STRING)
          .setXmlName(Attribute.CACHE_CONFIG.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition CONFIG_RELATIVE_TO =
      new MappedAttributeDefinitionBuilder(ModelKeys.CONFIG_RELATIVE_TO, ModelType.STRING)
          .setXmlName(Attribute.CONFIG_RELATIVE_TO.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(ModeShapeExtension.JBOSS_CONFIG_DIR_VARIABLE))
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition CLASSNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.CLASSNAME, ModelType.STRING)
          .setXmlName(Attribute.CLASSNAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition DATA_SOURCE_JNDI_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.DATA_SOURCE_JNDI_NAME, ModelType.STRING)
          .setXmlName(Attribute.DATA_SOURCE_JNDI_NAME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(false)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition DEFAULT_WORKSPACE =
      new MappedAttributeDefinitionBuilder(ModelKeys.DEFAULT_WORKSPACE, ModelType.STRING)
          .setXmlName(Attribute.DEFAULT_WORKSPACE.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("default"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.WORKSPACES, FieldName.DEFAULT)
          .build();

  public static final SimpleAttributeDefinition ENABLE_MONITORING =
      new MappedAttributeDefinitionBuilder(ModelKeys.ENABLE_MONITORING, ModelType.BOOLEAN)
          .setXmlName(Attribute.ENABLE_MONITORING.getLocalName())
          .setAllowNull(true)
          .setAllowExpression(true)
          .setDefaultValue(new ModelNode().set(true))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.MONITORING, FieldName.MONITORING_ENABLED)
          .build();

  public static final SimpleAttributeDefinition GARBAGE_COLLECTION_THREAD_POOL =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.GARBAGE_COLLECTION_THREAD_POOL, ModelType.STRING)
          .setXmlName(Attribute.GARBAGE_COLLECTION_THREAD_POOL.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("modeshape-gc"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.GARBAGE_COLLECTION, FieldName.THREAD_POOL)
          .build();
  public static final SimpleAttributeDefinition GARBAGE_COLLECTION_INITIAL_TIME =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.GARBAGE_COLLECTION_INITIAL_TIME, ModelType.STRING)
          .setXmlName(Attribute.GARBAGE_COLLECTION_INITIAL_TIME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("00:00"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.GARBAGE_COLLECTION, FieldName.INITIAL_TIME)
          .build();
  public static final SimpleAttributeDefinition GARBAGE_COLLECTION_INTERVAL =
      new MappedAttributeDefinitionBuilder(ModelKeys.GARBAGE_COLLECTION_INTERVAL, ModelType.INT)
          .setXmlName(Attribute.GARBAGE_COLLECTION_INTERVAL.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(24))
          .setMeasurementUnit(MeasurementUnit.HOURS)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.GARBAGE_COLLECTION, FieldName.INTERVAL_IN_HOURS)
          .build();
  public static final SimpleAttributeDefinition DOCUMENT_OPTIMIZATION_THREAD_POOL =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.DOCUMENT_OPTIMIZATION_THREAD_POOL, ModelType.STRING)
          .setXmlName(Attribute.DOCUMENT_OPTIMIZATION_THREAD_POOL.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("modeshape-opt"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.DOCUMENT_OPTIMIZATION, FieldName.THREAD_POOL)
          .build();
  public static final SimpleAttributeDefinition DOCUMENT_OPTIMIZATION_INITIAL_TIME =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.DOCUMENT_OPTIMIZATION_INITIAL_TIME, ModelType.STRING)
          .setXmlName(Attribute.DOCUMENT_OPTIMIZATION_INITIAL_TIME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("00:00"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.DOCUMENT_OPTIMIZATION, FieldName.INITIAL_TIME)
          .build();
  public static final SimpleAttributeDefinition DOCUMENT_OPTIMIZATION_INTERVAL =
      new MappedAttributeDefinitionBuilder(ModelKeys.DOCUMENT_OPTIMIZATION_INTERVAL, ModelType.INT)
          .setXmlName(Attribute.DOCUMENT_OPTIMIZATION_INTERVAL.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(24))
          .setMeasurementUnit(MeasurementUnit.HOURS)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.DOCUMENT_OPTIMIZATION, FieldName.INTERVAL_IN_HOURS)
          .build();
  public static final SimpleAttributeDefinition DOCUMENT_OPTIMIZATION_CHILD_COUNT_TARGET =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.DOCUMENT_OPTIMIZATION_CHILD_COUNT_TARGET, ModelType.INT)
          .setXmlName(Attribute.DOCUMENT_OPTIMIZATION_CHILD_COUNT_TARGET.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE,
              FieldName.DOCUMENT_OPTIMIZATION,
              FieldName.OPTIMIZATION_CHILD_COUNT_TARGET)
          .build();
  public static final SimpleAttributeDefinition DOCUMENT_OPTIMIZATION_CHILD_COUNT_TOLERANCE =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.DOCUMENT_OPTIMIZATION_CHILD_COUNT_TOLERANCE, ModelType.INT)
          .setXmlName(Attribute.DOCUMENT_OPTIMIZATION_CHILD_COUNT_TOLERANCE.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE,
              FieldName.DOCUMENT_OPTIMIZATION,
              FieldName.OPTIMIZATION_CHILD_COUNT_TOLERANCE)
          .build();

  public static final SimpleAttributeDefinition EVENT_BUS_SIZE =
      new MappedAttributeDefinitionBuilder(ModelKeys.EVENT_BUS_SIZE, ModelType.INT)
          .setXmlName(Attribute.EVENT_BUS_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.EVENT_BUS_SIZE)
          .build();

  public static final SimpleAttributeDefinition REINDEXING_ASYNC =
      new MappedAttributeDefinitionBuilder(ModelKeys.REINDEXING_ASYNC, ModelType.BOOLEAN)
          .setXmlName(Attribute.REINDEXING_ASNC.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.REINDEXING, FieldName.REINDEXING_ASYNC)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition REINDEXING_MODE =
      new MappedAttributeDefinitionBuilder(ModelKeys.REINDEXING_MODE, ModelType.STRING)
          .setXmlName(Attribute.REINDEXING_MODE.getLocalName())
          .setAllowExpression(false)
          .setValidator(REINDEXING_MODE_VALIDATOR)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFieldPathInRepositoryConfiguration(FieldName.REINDEXING, FieldName.REINDEXING_MODE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition INDEX_KIND =
      new MappedAttributeDefinitionBuilder(ModelKeys.INDEX_KIND, ModelType.STRING)
          .setXmlName(Attribute.INDEX_KIND.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(IndexKind.VALUE.toString()))
          .setValidator(INDEX_KIND_VALIDATOR)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition SYNCHRONOUS =
      new MappedAttributeDefinitionBuilder(ModelKeys.SYNCHRONOUS, ModelType.BOOLEAN)
          .setXmlName(Attribute.SYNCHRONOUS.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(Boolean.TRUE))
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition JNDI_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.JNDI_NAME, ModelType.STRING)
          .setXmlName(Attribute.JNDI_NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition MINIMUM_BINARY_SIZE =
      new MappedAttributeDefinitionBuilder(ModelKeys.MINIMUM_BINARY_SIZE, ModelType.INT)
          .setXmlName(Attribute.MIN_VALUE_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.BYTES)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.BINARY_STORAGE, FieldName.MINIMUM_BINARY_SIZE_IN_BYTES)
          .build();

  public static final SimpleAttributeDefinition MINIMUM_STRING_SIZE =
      new MappedAttributeDefinitionBuilder(ModelKeys.MINIMUM_STRING_SIZE, ModelType.INT)
          .setXmlName(Attribute.MIN_STRING_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.BINARY_STORAGE, FieldName.MINIMUM_STRING_SIZE)
          .build();

  public static final SimpleAttributeDefinition MIME_TYPE_DETECTION =
      new MappedAttributeDefinitionBuilder(ModelKeys.MIME_TYPE_DETECTION, ModelType.STRING)
          .setXmlName(Attribute.MIME_TYPE_DETECTION.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setMeasurementUnit(MeasurementUnit.NONE)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setValidator(MIME_TYPE_DETECTION_VALIDATOR)
          .setFieldPathInRepositoryConfiguration(
              FieldName.STORAGE, FieldName.BINARY_STORAGE, FieldName.MIMETYPE_DETECTION)
          .build();

  public static final SimpleAttributeDefinition MODULE =
      new MappedAttributeDefinitionBuilder(ModelKeys.MODULE, ModelType.STRING)
          .setXmlName(Attribute.MODULE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.NAME, ModelType.STRING)
          .setXmlName(Attribute.NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(false)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition NODE_TYPE_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.NODE_TYPE_NAME, ModelType.STRING)
          .setXmlName(Attribute.NODE_TYPE.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(false)
          .setValidator(NODE_TYPE_VALIDATOR)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition INDEX_COLUMNS =
      new MappedAttributeDefinitionBuilder(ModelKeys.INDEX_COLUMNS, ModelType.STRING)
          .setXmlName(Attribute.COLUMNS.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(false)
          .setValidator(COLUMNS_VALIDATOR)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition PROVIDER_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.PROVIDER_NAME, ModelType.STRING)
          .setXmlName(Attribute.PROVIDER_NAME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition PATH =
      new MappedAttributeDefinitionBuilder(ModelKeys.PATH, ModelType.STRING)
          .setXmlName(Attribute.PATH.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();
  public static final SimpleAttributeDefinition TRASH =
      new MappedAttributeDefinitionBuilder(ModelKeys.TRASH, ModelType.STRING)
          .setXmlName(Attribute.TRASH.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final ListAttributeDefinition PATH_EXPRESSIONS =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.PATH_EXPRESSIONS,
              new MappedAttributeDefinitionBuilder(ModelKeys.PATH_EXPRESSION, ModelType.STRING)
                  .setAllowExpression(true)
                  .setAllowNull(false)
                  .setValidator(PATH_EXPRESSION_VALIDATOR)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .build())
          .setAllowNull(true)
          .setMinSize(0)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SEQUENCING, FieldName.SEQUENCERS, FieldName.PATH_EXPRESSIONS)
          .build();

  public static final ListAttributeDefinition PROJECTIONS =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.PROJECTIONS,
              new MappedAttributeDefinitionBuilder(ModelKeys.PROJECTION, ModelType.STRING)
                  .setAllowExpression(true)
                  .setAllowNull(false)
                  .setValidator(PROJECTION_VALIDATOR)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .build())
          .setAllowNull(true)
          .setMinSize(1)
          .build();

  public static final SimpleAttributeDefinition CONNECTOR_CLASSNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.CONNECTOR_CLASSNAME, ModelType.STRING)
          .setXmlName(Attribute.CLASSNAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition CACHEABLE =
      new MappedAttributeDefinitionBuilder(ModelKeys.CACHEABLE, ModelType.BOOLEAN)
          .setXmlName(Attribute.CACHEABLE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition QUERYABLE =
      new MappedAttributeDefinitionBuilder(ModelKeys.QUERYABLE, ModelType.BOOLEAN)
          .setXmlName(Attribute.QUERYABLE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition READONLY =
      new MappedAttributeDefinitionBuilder(ModelKeys.READONLY, ModelType.BOOLEAN)
          .setXmlName(Attribute.READONLY.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(new ModelNode(false))
          .build();

  public static final SimpleAttributeDefinition EXPOSE_AS_WORKSPACE =
      new MappedAttributeDefinitionBuilder(ModelKeys.EXPOSE_AS_WORKSPACE, ModelType.STRING)
          .setXmlName(Attribute.EXPOSE_AS_WORKSPACE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(new ModelNode(false))
          .build();

  public static final ListAttributeDefinition PREDEFINED_WORKSPACE_NAMES =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.PREDEFINED_WORKSPACE_NAMES,
              new MappedAttributeDefinitionBuilder(
                      ModelKeys.PREDEFINED_WORKSPACE_NAME, ModelType.STRING)
                  .setAllowExpression(true)
                  .setAllowNull(false)
                  .setValidator(WORKSPACE_NAME_VALIDATOR)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .build())
          .setAllowNull(true)
          .setMinSize(0)
          .setFieldPathInRepositoryConfiguration(FieldName.WORKSPACES, FieldName.PREDEFINED)
          .build();

  public static final SimpleAttributeDefinition DEFAULT_INITIAL_CONTENT =
      new MappedAttributeDefinitionBuilder(ModelKeys.DEFAULT_INITIAL_CONTENT, ModelType.STRING)
          .setAllowExpression(false)
          .setAllowNull(true)
          .setValidator(DEFAULT_INITIAL_CONTENT_VALIDATOR)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final ListAttributeDefinition WORKSPACES_INITIAL_CONTENT =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.WORKSPACES_INITIAL_CONTENT,
              new MappedAttributeDefinitionBuilder(ModelKeys.INITIAL_CONTENT, ModelType.PROPERTY)
                  .setAllowNull(false)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .setValidator(INITIAL_CONTENT_VALIDATOR)
                  .build())
          .setAllowNull(true)
          .setMinSize(0)
          .build();

  public static final ListAttributeDefinition NODE_TYPES =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.NODE_TYPES,
              new MappedAttributeDefinitionBuilder(ModelKeys.NODE_TYPE, ModelType.STRING)
                  .setAllowExpression(true)
                  .setAllowNull(false)
                  .setValidator(NODE_TYPE_VALIDATOR)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .build())
          .setAllowNull(true)
          .setMinSize(0)
          .build();

  public static final SimpleAttributeDefinition PROPERTY =
      new SimpleAttributeDefinition(ModelKeys.PROPERTY, ModelType.PROPERTY, true);
  public static final SimpleListAttributeDefinition PROPERTIES =
      SimpleListAttributeDefinition.Builder.of(ModelKeys.PROPERTIES, PROPERTY)
          .setAllowNull(true)
          .build();

  public static final SimpleAttributeDefinition RELATIVE_TO =
      new MappedAttributeDefinitionBuilder(ModelKeys.RELATIVE_TO, ModelType.STRING)
          .setXmlName(Attribute.RELATIVE_TO.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(JBOSS_DATA_DIR_VARIABLE))
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition SEQUENCER_CLASSNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.SEQUENCER_CLASSNAME, ModelType.STRING)
          .setXmlName(Attribute.CLASSNAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SEQUENCING, FieldName.SEQUENCERS, FieldName.CLASSNAME)
          .build();
  public static final SimpleAttributeDefinition SEQUENCER_THREAD_POOL_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.SEQUENCERS_THREAD_POOL_NAME, ModelType.STRING)
          .setXmlName(Attribute.THREAD_POOL_NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(new ModelNode().set(RepositoryConfiguration.Default.SEQUENCING_POOL))
          .setFieldPathInRepositoryConfiguration(
              FieldName.SEQUENCING, FieldName.SEQUENCERS, FieldName.THREAD_POOL)
          .build();

  public static final SimpleAttributeDefinition SEQUENCER_MAX_POOL_SIZE =
      new MappedAttributeDefinitionBuilder(ModelKeys.SEQUENCERS_MAX_POOL_SIZE, ModelType.STRING)
          .setXmlName(Attribute.MAX_POOL_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(
              new ModelNode().set(RepositoryConfiguration.Default.SEQUENCING_MAX_POOL_SIZE))
          .setFieldPathInRepositoryConfiguration(
              FieldName.SEQUENCING, FieldName.SEQUENCERS, FieldName.MAX_POOL_SIZE)
          .build();

  public static final SimpleAttributeDefinition STORE_NAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.STORE_NAME, ModelType.STRING)
          .setXmlName(Attribute.STORE_NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final ListAttributeDefinition NESTED_STORES =
      MappedListAttributeDefinition.Builder.of(
              ModelKeys.NESTED_STORES,
              new MappedAttributeDefinitionBuilder(ModelKeys.STORE_NAME, ModelType.STRING)
                  .setAllowExpression(false)
                  .setAllowNull(false)
                  .setFlags(AttributeAccess.Flag.RESTART_NONE)
                  .build())
          .setAllowNull(false)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition TEXT_EXTRACTOR_CLASSNAME =
      new MappedAttributeDefinitionBuilder(ModelKeys.TEXT_EXTRACTOR_CLASSNAME, ModelType.STRING)
          .setXmlName(Attribute.CLASSNAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setFieldPathInRepositoryConfiguration(
              FieldName.TEXT_EXTRACTION, FieldName.EXTRACTORS, FieldName.CLASSNAME)
          .build();
  public static final SimpleAttributeDefinition TEXT_EXTRACTOR_THREAD_POOL_NAME =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.TEXT_EXTRACTORS_THREAD_POOL_NAME, ModelType.STRING)
          .setXmlName(Attribute.THREAD_POOL_NAME.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(
              new ModelNode().set(RepositoryConfiguration.Default.TEXT_EXTRACTION_POOL))
          .setFieldPathInRepositoryConfiguration(
              FieldName.TEXT_EXTRACTION, FieldName.EXTRACTORS, FieldName.THREAD_POOL)
          .build();

  public static final SimpleAttributeDefinition TEXT_EXTRACTOR_MAX_POOL_SIZE =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.TEXT_EXTRACTORS_MAX_POOL_SIZE, ModelType.STRING)
          .setXmlName(Attribute.MAX_POOL_SIZE.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setDefaultValue(
              new ModelNode().set(RepositoryConfiguration.Default.TEXT_EXTRACTION_MAX_POOL_SIZE))
          .setFieldPathInRepositoryConfiguration(
              FieldName.TEXT_EXTRACTION, FieldName.EXTRACTORS, FieldName.MAX_POOL_SIZE)
          .build();

  public static final SimpleAttributeDefinition SECURITY_DOMAIN =
      new MappedAttributeDefinitionBuilder(ModelKeys.SECURITY_DOMAIN, ModelType.STRING)
          .setXmlName(Attribute.SECURITY_DOMAIN.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("modeshape-security"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SECURITY, FieldName.JAAS, FieldName.JAAS_POLICY_NAME)
          .build();

  public static final SimpleAttributeDefinition USE_ANONYMOUS_IF_AUTH_FAILED =
      new MappedAttributeDefinitionBuilder(
              ModelKeys.USE_ANONYMOUS_IF_AUTH_FAILED, ModelType.BOOLEAN)
          .setXmlName(Attribute.USE_ANONYMOUS_IF_AUTH_FAILED.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(false))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .setAccessConstraints(SensitiveTargetAccessConstraintDefinition.SECURITY_DOMAIN_REF)
          .setFieldPathInRepositoryConfiguration(
              FieldName.SECURITY, FieldName.ANONYMOUS, FieldName.USE_ANONYMOUS_ON_FAILED_LOGINS)
          .build();

  public static final SimpleAttributeDefinition EXPLODED =
      new MappedAttributeDefinitionBuilder(ModelKeys.EXPLODED, ModelType.BOOLEAN)
          .setXmlName(Attribute.EXPLODED.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set(false))
          .build();

  public static final SimpleAttributeDefinition JOURNALING =
      new MappedAttributeDefinitionBuilder(ModelKeys.JOURNALING, ModelType.BOOLEAN)
          .setXmlName(Attribute.JOURNALING.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode(false))
          .build();

  public static final SimpleAttributeDefinition JOURNAL_PATH =
      new MappedAttributeDefinitionBuilder(ModelKeys.JOURNAL_PATH, ModelType.STRING)
          .setXmlName(Attribute.JOURNAL_PATH.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition JOURNAL_RELATIVE_TO =
      new MappedAttributeDefinitionBuilder(ModelKeys.JOURNAL_RELATIVE_TO, ModelType.STRING)
          .setXmlName(Attribute.JOURNAL_RELATIVE_TO.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition MAX_DAYS_TO_KEEP_RECORDS =
      new MappedAttributeDefinitionBuilder(ModelKeys.MAX_DAYS_TO_KEEP_RECORDS, ModelType.INT)
          .setXmlName(Attribute.MAX_DAYS_TO_KEEP_RECORDS.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode(-1))
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition ASYNC_WRITES =
      new MappedAttributeDefinitionBuilder(ModelKeys.ASYNC_WRITES, ModelType.BOOLEAN)
          .setXmlName(Attribute.ASYNC_WRITES.getLocalName())
          .setAllowExpression(false)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode(false))
          .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
          .build();

  public static final SimpleAttributeDefinition JOURNAL_GC_THREAD_POOL =
      new MappedAttributeDefinitionBuilder(ModelKeys.JOURNAL_GC_THREAD_POOL, ModelType.STRING)
          .setXmlName(Attribute.JOURNAL_GC_THREAD_POOL.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("modeshape-journaling-gc"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final SimpleAttributeDefinition JOURNAL_GC_INITIAL_TIME =
      new MappedAttributeDefinitionBuilder(ModelKeys.JOURNAL_GC_INITIAL_TIME, ModelType.STRING)
          .setXmlName(Attribute.JOURNAL_GC_INITIAL_TIME.getLocalName())
          .setAllowExpression(true)
          .setAllowNull(true)
          .setDefaultValue(new ModelNode().set("00:00"))
          .setFlags(AttributeAccess.Flag.RESTART_NONE)
          .build();

  public static final AttributeDefinition[] SUBSYSTEM_ATTRIBUTES = {};

  public static final AttributeDefinition[] WEBAPP_ATTRIBUTES = {EXPLODED};

  public static final AttributeDefinition[] REPOSITORY_ATTRIBUTES = {
    CACHE_NAME,
    CACHE_CONFIG,
    CONFIG_RELATIVE_TO,
    JNDI_NAME,
    ENABLE_MONITORING,
    SECURITY_DOMAIN,
    ANONYMOUS_ROLES,
    ANONYMOUS_USERNAME,
    USE_ANONYMOUS_IF_AUTH_FAILED,
    NODE_TYPES,
    DEFAULT_WORKSPACE,
    PREDEFINED_WORKSPACE_NAMES,
    ALLOW_WORKSPACE_CREATION,
    WORKSPACES_CACHE_SIZE,
    DEFAULT_INITIAL_CONTENT,
    WORKSPACES_INITIAL_CONTENT,
    GARBAGE_COLLECTION_THREAD_POOL,
    GARBAGE_COLLECTION_INITIAL_TIME,
    GARBAGE_COLLECTION_INTERVAL,
    DOCUMENT_OPTIMIZATION_THREAD_POOL,
    DOCUMENT_OPTIMIZATION_INITIAL_TIME,
    DOCUMENT_OPTIMIZATION_INTERVAL,
    DOCUMENT_OPTIMIZATION_CHILD_COUNT_TARGET,
    DOCUMENT_OPTIMIZATION_CHILD_COUNT_TOLERANCE,
    JOURNAL_PATH,
    JOURNAL_RELATIVE_TO,
    MAX_DAYS_TO_KEEP_RECORDS,
    JOURNAL_GC_INITIAL_TIME,
    JOURNAL_GC_THREAD_POOL,
    ASYNC_WRITES,
    JOURNALING,
    SEQUENCER_THREAD_POOL_NAME,
    SEQUENCER_MAX_POOL_SIZE,
    TEXT_EXTRACTOR_THREAD_POOL_NAME,
    TEXT_EXTRACTOR_MAX_POOL_SIZE,
    EVENT_BUS_SIZE,
    REINDEXING_ASYNC,
    REINDEXING_MODE
  };

  public static final AttributeDefinition[] TRANSIENT_BINARY_STORAGE_ATTRIBUTES = {
    MINIMUM_BINARY_SIZE, MINIMUM_STRING_SIZE, MIME_TYPE_DETECTION
  };

  public static final AttributeDefinition[] FILE_BINARY_STORAGE_ATTRIBUTES = {
    MINIMUM_BINARY_SIZE,
    MINIMUM_STRING_SIZE,
    PATH,
    TRASH,
    RELATIVE_TO,
    STORE_NAME,
    MIME_TYPE_DETECTION
  };

  public static final AttributeDefinition[] DATABASE_BINARY_STORAGE_ATTRIBUTES = {
    MINIMUM_BINARY_SIZE, MINIMUM_STRING_SIZE, DATA_SOURCE_JNDI_NAME, STORE_NAME, MIME_TYPE_DETECTION
  };

  public static final AttributeDefinition[] COMPOSITE_BINARY_STORAGE_ATTRIBUTES = {
    MINIMUM_BINARY_SIZE, MINIMUM_STRING_SIZE, NESTED_STORES, MIME_TYPE_DETECTION
  };

  public static final AttributeDefinition[] CUSTOM_BINARY_STORAGE_ATTRIBUTES = {
    MINIMUM_BINARY_SIZE, MINIMUM_STRING_SIZE, CLASSNAME, MODULE, STORE_NAME, MIME_TYPE_DETECTION
  };

  public static final AttributeDefinition[] INDEX_DEFINITION_ATTRIBUTES = {
    INDEX_KIND, PROVIDER_NAME, NODE_TYPE_NAME, SYNCHRONOUS, INDEX_COLUMNS, PROPERTIES
  };

  public static final AttributeDefinition[] INDEX_PROVIDER_ATTRIBUTES = {
    CLASSNAME, MODULE, RELATIVE_TO, PATH, PROPERTIES
  };

  public static final AttributeDefinition[] SEQUENCER_ATTRIBUTES = {
    PATH_EXPRESSIONS, SEQUENCER_CLASSNAME, MODULE, PROPERTIES
  };
  public static final AttributeDefinition[] SOURCE_ATTRIBUTES = {
    PROJECTIONS, CONNECTOR_CLASSNAME, READONLY, CACHEABLE,
    QUERYABLE, MODULE, PROPERTIES, EXPOSE_AS_WORKSPACE
  };
  public static final AttributeDefinition[] TEXT_EXTRACTOR_ATTRIBUTES = {
    TEXT_EXTRACTOR_CLASSNAME, MODULE, PROPERTIES
  };
  public static final AttributeDefinition[] AUTHENTICATOR_ATTRIBUTES = {
    AUTHENTICATOR_CLASSNAME, MODULE, PROPERTIES
  };
}