package org.jboss.as.clustering.infinispan.subsystem;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import org.infinispan.configuration.cache.IndexingConfiguration;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.AttributeMarshaller;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleMapAttributeDefinition;
import org.jboss.as.controller.StringListAttributeDefinition;
import org.jboss.as.controller.operations.validation.EnumValidator;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.jboss.dmr.Property;
/**
* Resource description for the addressable resource /subsystem=infinispan/cache-container=X/cache=Y/indexing=INDEXING
*
* @author Tristan Tarrant
*/
public class IndexingConfigurationResource extends CacheConfigurationChildResource {
public static final PathElement PATH = PathElement.pathElement(ModelKeys.INDEXING, ModelKeys.INDEXING_NAME);
// attributes
static final SimpleAttributeDefinition INDEXING =
new SimpleAttributeDefinitionBuilder(ModelKeys.INDEXING, ModelType.STRING, true)
.setXmlName(Attribute.INDEX.getLocalName())
.setAllowExpression(true)
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.setValidator(new EnumValidator<>(Indexing.class, true, false))
.setDefaultValue(new ModelNode().set(Indexing.NONE.name()))
.build();
static final SimpleAttributeDefinition INDEXING_AUTO_CONFIG =
new SimpleAttributeDefinitionBuilder(ModelKeys.AUTO_CONFIG, ModelType.BOOLEAN, true)
.setXmlName(Attribute.AUTO_CONFIG.getLocalName())
.setAllowExpression(true)
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.setDefaultValue(new ModelNode().set(IndexingConfiguration.AUTO_CONFIG.getDefaultValue()))
.build();
static final StringListAttributeDefinition INDEXED_ENTITIES = new StringListAttributeDefinition.Builder(ModelKeys.INDEXED_ENTITIES)
.setAllowNull(true)
.setAllowExpression(false)
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.build();
static final SimpleMapAttributeDefinition INDEXING_PROPERTIES = new SimpleMapAttributeDefinition.Builder(ModelKeys.INDEXING_PROPERTIES, true)
.setAllowExpression(true)
.setAttributeMarshaller(new AttributeMarshaller() {
@Override
public void marshallAsElement(AttributeDefinition attribute, ModelNode resourceModel, boolean marshallDefault, XMLStreamWriter writer) throws XMLStreamException {
resourceModel = resourceModel.get(attribute.getName());
if (!resourceModel.isDefined()) {
return;
}
for (Property property : resourceModel.asPropertyList()) {
writer.writeStartElement(org.jboss.as.controller.parsing.Element.PROPERTY.getLocalName());
writer.writeAttribute(org.jboss.as.controller.parsing.Element.NAME.getLocalName(), property.getName());
writer.writeCharacters(property.getValue().asString());
writer.writeEndElement();
}
}
})
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.build();
static final AttributeDefinition[] ATTRIBUTES = {INDEXING, INDEXING_AUTO_CONFIG, INDEXED_ENTITIES, INDEXING_PROPERTIES};
public IndexingConfigurationResource(CacheConfigurationResource parent) {
super(PATH, ModelKeys.INDEXING, parent, ATTRIBUTES);
}
}