package org.jboss.as.connector.subsystems.jca;
import static org.jboss.as.connector.subsystems.jca.JcaCachedConnectionManagerDefinition.CcmParameters.DEBUG;
import static org.jboss.as.connector.subsystems.jca.JcaCachedConnectionManagerDefinition.CcmParameters.ERROR;
import static org.jboss.as.connector.subsystems.jca.JcaCachedConnectionManagerDefinition.CcmParameters.IGNORE_UNKNOWN_CONNECTIONS;
import static org.jboss.as.connector.subsystems.jca.JcaCachedConnectionManagerDefinition.CcmParameters.INSTALL;
import java.util.Set;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.OperationStepHandler;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.dmr.ModelNode;
class CachedConnectionManagerRemove implements OperationStepHandler {
static final CachedConnectionManagerRemove INSTANCE = new CachedConnectionManagerRemove();
private CachedConnectionManagerRemove() {}
@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
// This is an odd case where we do not actually do a remove; we just reset state to
// what it would be following parsing if the xml element does not exist.
// See discussion on PR with fix for WFLY-2640 .
ModelNode model = context.readResourceForUpdate(PathAddress.EMPTY_ADDRESS).getModel();
for (JcaCachedConnectionManagerDefinition.CcmParameters param : JcaCachedConnectionManagerDefinition.CcmParameters.values()) {
AttributeDefinition ad = param.getAttribute();
if (param == INSTALL || param == DEBUG || param == ERROR || param == IGNORE_UNKNOWN_CONNECTIONS) {
model.get(ad.getName()).clear();
} else {
// Someone added a new param since wFLY-2640/WFLY-8141 and did not account for it above
throw new IllegalStateException();
}
}
// At the time of WFLY-2640 there were no capabilities associated with this resource,
// but if anyone adds one, part of the task is to deal with deregistration.
// So here's an assert to ensure that is considered
Set<RuntimeCapability> capabilitySet = context.getResourceRegistration().getCapabilities();
assert capabilitySet.isEmpty();
if (context.isDefaultRequiresRuntime()) {
context.addStep(new OperationStepHandler() {
@Override
public void execute(OperationContext operationContext, ModelNode modelNode) throws OperationFailedException {
context.reloadRequired();
context.completeStep(new OperationContext.RollbackHandler() {
@Override
public void handleRollback(OperationContext operationContext, ModelNode modelNode) {
context.revertReloadRequired();
}
});
}
}, OperationContext.Stage.RUNTIME);
}
}
}