package org.jboss.as.controller;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
import org.jboss.as.controller.logging.ControllerLogger;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
import org.jboss.as.controller.registry.OperationEntry.Flag;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* A persistent resource definition. This needs to be combined with {@link PersistentResourceXMLDescription} to
* simplify the process of creating parsers and persisters.
*
* @author <a href="mailto:tomaz.cerar@redhat.com">Tomaz Cerar</a> (c) 2013 Red Hat Inc.
*/
public abstract class PersistentResourceDefinition extends SimpleResourceDefinition {
protected PersistentResourceDefinition(PathElement pathElement, ResourceDescriptionResolver descriptionResolver) {
super(pathElement, descriptionResolver);
}
protected PersistentResourceDefinition(PathElement pathElement, ResourceDescriptionResolver descriptionResolver, OperationStepHandler addHandler, OperationStepHandler removeHandler) {
super(pathElement, descriptionResolver, addHandler, removeHandler);
}
protected PersistentResourceDefinition(PathElement pathElement, ResourceDescriptionResolver descriptionResolver, OperationStepHandler addHandler, OperationStepHandler removeHandler, OperationEntry.Flag addRestartLevel, OperationEntry.Flag removeRestartLevel) {
super(new Parameters(pathElement, descriptionResolver)
.setAddHandler(addHandler)
.setRemoveHandler(removeHandler)
.setAddRestartLevel(addRestartLevel)
.setRemoveRestartLevel(removeRestartLevel)
);
}
protected PersistentResourceDefinition(PathElement pathElement, ResourceDescriptionResolver descriptionResolver, OperationStepHandler addHandler,
OperationStepHandler removeHandler, boolean isRuntime) {
super(new Parameters(pathElement, descriptionResolver)
.setAddHandler(addHandler)
.setRemoveHandler(removeHandler)
.setRuntime(isRuntime)
);
}
protected PersistentResourceDefinition(PathElement pathElement, ResourceDescriptionResolver descriptionResolver, OperationStepHandler addHandler,
OperationStepHandler removeHandler, OperationEntry.Flag addRestartLevel, OperationEntry.Flag removeRestartLevel, boolean isRuntime) {
super(new Parameters(pathElement, descriptionResolver)
.setAddHandler(addHandler)
.setRemoveHandler(removeHandler)
.setAddRestartLevel(addRestartLevel)
.setRemoveRestartLevel(removeRestartLevel)
.setRuntime(isRuntime)
);
}
protected PersistentResourceDefinition(Parameters parameters){
super(parameters);
}
@Override
public void registerChildren(ManagementResourceRegistration resourceRegistration) {
super.registerChildren(resourceRegistration);
for (PersistentResourceDefinition child : getChildren()) {
resourceRegistration.registerSubModel(child);
}
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);
ReloadRequiredWriteAttributeHandler handler = new ReloadRequiredWriteAttributeHandler(getAttributes());
for (AttributeDefinition attr : getAttributes()) {
if(!attr.getFlags().contains(AttributeAccess.Flag.RESTART_ALL_SERVICES)) {
throw ControllerLogger.ROOT_LOGGER.attributeWasNotMarkedAsReloadRequired(attr.getName(), resourceRegistration.getPathAddress());
}
resourceRegistration.registerReadWriteAttribute(attr, null, handler);
}
}
protected List<? extends PersistentResourceDefinition> getChildren() {
return Collections.emptyList();
}
public abstract Collection<AttributeDefinition> getAttributes();
public static class Parameters extends SimpleResourceDefinition.Parameters {
/**
* Creates a Parameters object
*
* @param pathElement the path element of the created ResourceDefinition. Cannot be {@code null}
* @param descriptionResolver the description provider. Cannot be {@code null}
*/
public Parameters(PathElement pathElement, ResourceDescriptionResolver descriptionResolver) {
super(pathElement, descriptionResolver);
}
public Parameters setDescriptionResolver(ResourceDescriptionResolver descriptionResolver) {
super.setDescriptionResolver(descriptionResolver);
return this;
}
public Parameters setAddHandler(OperationStepHandler addHandler) {
super.setAddHandler(addHandler);
return this;
}
public Parameters setRemoveHandler(OperationStepHandler removeHandler) {
super.setRemoveHandler(removeHandler);
return this;
}
public Parameters setAddRestartLevel(Flag addRestartLevel) {
super.setAddRestartLevel(addRestartLevel);
return this;
}
public Parameters setRemoveRestartLevel(Flag removeRestartLevel) {
super.setRemoveRestartLevel(removeRestartLevel);
return this;
}
public Parameters setRuntime() {
super.setRuntime();
return this;
}
public Parameters setRuntime(boolean isRuntime) {
super.setRuntime(isRuntime);
return this;
}
public Parameters setDeprecationData(DeprecationData deprecationData) {
super.setDeprecationData(deprecationData);
return this;
}
public org.jboss.as.controller.SimpleResourceDefinition.Parameters setDeprecatedSince(ModelVersion deprecatedSince) {
super.setDeprecatedSince(deprecatedSince);
return this;
}
public Parameters setOrderedChild() {
super.setOrderedChild();
return this;
}
public Parameters setCapabilities(RuntimeCapability... capabilities) {
super.setCapabilities(capabilities);
return this;
}
}
}