Skip to content

Commit

Permalink
WFCORE-4041: supply default values for nested attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
michpetrov committed Nov 5, 2021
1 parent dbbbf9d commit 69a375f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
Expand Up @@ -753,9 +753,7 @@ private static ModelNode buildUsersResource(PropertiesRealmConfiguration config)
mn.get(Util.RELATIVE_TO).set(config.getRelativeTo());
}
mn.get(Util.DIGEST_REALM_NAME).set(config.getExposedRealmName());
if (config.getPlainText()) {
mn.get(Util.PLAIN_TEXT).set(config.getPlainText());
}
mn.get(Util.PLAIN_TEXT).set(config.getPlainText());
return mn;
}

Expand Down
Expand Up @@ -32,6 +32,9 @@

import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.ObjectListAttributeDefinition;
import org.jboss.as.controller.ObjectMapAttributeDefinition;
import org.jboss.as.controller.ObjectTypeAttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationDefinition;
import org.jboss.as.controller.OperationFailedException;
Expand Down Expand Up @@ -302,6 +305,9 @@ static void resolveAttribute(OperationContext context, AttributeDefinition attri
} else if (subModel.hasDefined(attribute.getName())) {
final ModelNode result = subModel.get(attribute.getName());
context.getResult().set(result);
if (defaults) {
handleObjectAttributes(context.getResult(), attribute);
}
} else if (defaults && attribute.getDefaultValue() != null) {
// No defined value in the model. See if we should reply with a default from the metadata,
// reply with undefined, or fail because it's a non-existent attribute name
Expand All @@ -312,4 +318,34 @@ static void resolveAttribute(OperationContext context, AttributeDefinition attri
context.getResult(); // this initializes the "result" to ModelType.UNDEFINED
}
}

private static void handleObjectAttributes(ModelNode model, AttributeDefinition attribute) {
if (attribute instanceof ObjectTypeAttributeDefinition) {
readNestedDefaults(model, (ObjectTypeAttributeDefinition) attribute);
} else if (attribute instanceof ObjectListAttributeDefinition) {
ObjectTypeAttributeDefinition valueType = ((ObjectListAttributeDefinition) attribute).getValueType();
for (int i = 0; i < model.asInt(); i++) {
readNestedDefaults(model.get(i), valueType);
}
} else if (attribute instanceof ObjectMapAttributeDefinition) {
ObjectTypeAttributeDefinition valueType = ((ObjectMapAttributeDefinition) attribute).getValueType();
for (String key : model.keys()) {
readNestedDefaults(model.get(key), valueType);
}
}
}

private static void readNestedDefaults(ModelNode model, ObjectTypeAttributeDefinition attribute) {
for (AttributeDefinition subAttribute : attribute.getValueTypes()) {
ModelNode defaultValue = subAttribute.getDefaultValue();
String subAttrName = subAttribute.getName();
if (defaultValue != null && !model.hasDefined(subAttrName)) {
model.get(subAttrName).set(defaultValue);
}

if (model.hasDefined(subAttrName)) {
handleObjectAttributes(model.get(subAttrName), subAttribute);
}
}
}
}

0 comments on commit 69a375f

Please sign in to comment.