Skip to content
Permalink
Browse files

[WFCORE-4061] ApplicationTypeConfigWriteAttributeHandler and Sensitiv…

…ityClassificationWriteAttributeHandler rollback handling
  • Loading branch information
soul2zimate committed Aug 27, 2018
1 parent 245593b commit 9009338eb8d559204003943af71e184d15ae3f5c
@@ -23,6 +23,7 @@
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.APPLIES_TO;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CLASSIFICATION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NAME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VALUE;
import static org.jboss.as.controller.parsing.Attribute.APPLICATION;

@@ -121,6 +122,11 @@ public void execute(OperationContext context, ModelNode operation) throws Operat

@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR));
ModelNode modelNode = context.readResourceFromRoot(address).getModel();
// record model values for rollback handler
ModelNode configuredApplication = modelNode.get(ModelDescriptionConstants.CONFIGURED_APPLICATION);

final String attribute = operation.require(NAME).asString();
final ModelNode value = operation.require(VALUE);
final ApplicationTypeConfigResource resource = (ApplicationTypeConfigResource)context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS);
@@ -132,6 +138,20 @@ public void execute(OperationContext context, ModelNode operation) throws Operat
//TODO i18n
throw new IllegalStateException();
}

context.completeStep(new OperationContext.RollbackHandler() {

@Override
public void handleRollback(OperationContext context, ModelNode operation) {
try {
classification.setConfiguredApplication(readValue(context, configuredApplication, CONFIGURED_APPLICATION));
} catch (OperationFailedException e) {
// Should not happen since configured value is retrieved from resource.
throw new RuntimeException(e);
}

}
});
}

private Boolean readValue(OperationContext context, ModelNode value, AttributeDefinition definition) throws OperationFailedException {
@@ -25,6 +25,7 @@
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CLASSIFICATION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CONSTRAINT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NAME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VALUE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VAULT_EXPRESSION;
import static org.jboss.as.controller.parsing.Attribute.REQUIRES_ADDRESSABLE;
@@ -57,6 +58,7 @@
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.Resource.ResourceEntry;
import org.jboss.as.domain.management._private.DomainManagementResolver;
import org.jboss.as.domain.management.logging.DomainManagementLogger;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;

@@ -186,8 +188,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat
} else if (attribute.equals(CONFIGURED_REQUIRES_WRITE.getName())) {
result = classification.getConfiguredRequiresWritePermission();
} else {
//TODO i18n
throw new IllegalStateException();
throw DomainManagementLogger.ROOT_LOGGER.invalidSensitiveClassificationAttribute(attribute);
}

context.getResult();
@@ -209,6 +210,13 @@ public void execute(OperationContext context, ModelNode operation) throws Operat
}
@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
PathAddress address = PathAddress.pathAddress(operation.get(OP_ADDR));
ModelNode modelNode = context.readResourceFromRoot(address).getModel();
// record model values for rollback handler
ModelNode configuredRequiresAddressable = modelNode.get(ModelDescriptionConstants.CONFIGURED_REQUIRES_ADDRESSABLE);
ModelNode configuredRequiresRead = modelNode.get(ModelDescriptionConstants.CONFIGURED_REQUIRES_READ);
ModelNode configuredRequiresWrite = modelNode.get(ModelDescriptionConstants.CONFIGURED_REQUIRES_WRITE);

final String attribute = operation.require(NAME).asString();
final ModelNode value = operation.require(VALUE);
final SensitivityClassificationResource resource = (SensitivityClassificationResource)context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS);
@@ -220,9 +228,28 @@ public void execute(OperationContext context, ModelNode operation) throws Operat
} else if (attribute.equals(CONFIGURED_REQUIRES_WRITE.getName())) {
classification.setConfiguredRequiresWritePermission(readValue(context, value, CONFIGURED_REQUIRES_WRITE));
} else {
//TODO i18n
throw new IllegalStateException();
throw DomainManagementLogger.ROOT_LOGGER.invalidSensitiveClassificationAttribute(attribute);
}

context.completeStep(new OperationContext.RollbackHandler() {
@Override
public void handleRollback(OperationContext context, ModelNode operation) {
try {
if (attribute.equals(CONFIGURED_REQUIRES_ADDRESSABLE.getName()) && includeAddressable) {
classification.setConfiguredRequiresAccessPermission(readValue(context, configuredRequiresAddressable, CONFIGURED_REQUIRES_ADDRESSABLE));
} else if (attribute.equals(CONFIGURED_REQUIRES_READ.getName())) {
classification.setConfiguredRequiresReadPermission(readValue(context, configuredRequiresRead, CONFIGURED_REQUIRES_READ));
} else if (attribute.equals(CONFIGURED_REQUIRES_WRITE.getName())) {
classification.setConfiguredRequiresWritePermission(readValue(context, configuredRequiresWrite, CONFIGURED_REQUIRES_WRITE));
} else {
throw DomainManagementLogger.ROOT_LOGGER.invalidSensitiveClassificationAttribute(attribute);
}
} catch (OperationFailedException e) {
// Should not happen since configured value is retrieved from resource.
throw new RuntimeException(e);
}
}
});
}

private Boolean readValue(OperationContext context, ModelNode value, AttributeDefinition definition) throws OperationFailedException {
@@ -1264,6 +1264,8 @@
@Message(id = 142, value = "Following mechanisms configured on the server (%s) are not supported by the realm '%s'.")
StartException legacyMechanismsAreNotSupported(String mechanismNames, String realmName);

@Message(id = 143, value = "Invalid sensitive classification attribute '%s'")
IllegalStateException invalidSensitiveClassificationAttribute(String attr);

/**
* Information message saying the username and password must be different.

0 comments on commit 9009338

Please sign in to comment.
You can’t perform that action at this time.