/** {@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(); }
/** * 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 }; }