Skip to content

Commit

Permalink
Anticipate WFCORE-1568, which defers to CapabilityReferenceRecorder f…
Browse files Browse the repository at this point in the history
…or handling undefined values.
  • Loading branch information
pferraro committed Jun 14, 2016
1 parent a1da1c5 commit 221f193
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 20 deletions.
Expand Up @@ -22,10 +22,14 @@


package org.jboss.as.clustering.controller; package org.jboss.as.clustering.controller;


import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;

import org.jboss.as.controller.CapabilityReferenceRecorder; import org.jboss.as.controller.CapabilityReferenceRecorder;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.wildfly.clustering.service.Requirement;
import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationContext;
import org.wildfly.clustering.service.Requirement;
import org.wildfly.clustering.service.UnaryRequirement;


/** /**
* {@link CapabilityReferenceRecorder} that delegates to {@link Capability#resolve(org.jboss.as.controller.PathAddress)} to generate the name of the dependent capability. * {@link CapabilityReferenceRecorder} that delegates to {@link Capability#resolve(org.jboss.as.controller.PathAddress)} to generate the name of the dependent capability.
Expand All @@ -35,33 +39,33 @@ public class CapabilityReference implements CapabilityReferenceRecorder {


private final Requirement requirement; private final Requirement requirement;
private final Capability capability; private final Capability capability;
private final Function<String, Optional<String>> requirementResolver;


/** /**
* Creates a new reference between the specified requirement and the specified capability * Creates a new reference between the specified requirement and the specified capability
* @param requirement the requirement of the specified capability * @param requirement the requirement of the specified capability
* @param capability the capability referencing the specified requirement * @param capability the capability referencing the specified requirement
*/ */
public CapabilityReference(Requirement requirement, Capability capability) { public CapabilityReference(Capability capability, UnaryRequirement requirement) {
this.requirement = requirement; this(capability, requirement, value -> (value != null) ? Optional.of(requirement.resolve(value)) : Optional.empty());
}

CapabilityReference(Capability capability, Requirement requirement, Function<String, Optional<String>> requirementResolver) {
this.capability = capability; this.capability = capability;
this.requirement = requirement;
this.requirementResolver = requirementResolver;
} }


@Override @Override
public void addCapabilityRequirements(OperationContext context, String attributeName, String... attributeValues) { public void addCapabilityRequirements(OperationContext context, String attributeName, String... values) {
String dependentName = this.capability.resolve(context.getCurrentAddress()).getName(); String dependentName = this.capability.resolve(context.getCurrentAddress()).getName();
for (String attributeValue : attributeValues) { Stream.of(values).forEach(value -> this.requirementResolver.apply(value).ifPresent(requirementName -> context.registerAdditionalCapabilityRequirement(requirementName, dependentName, attributeName)));
String requirementName = RuntimeCapability.buildDynamicCapabilityName(this.requirement.getName(), attributeValue);
context.registerAdditionalCapabilityRequirement(requirementName, dependentName, attributeName);
}
} }


@Override @Override
public void removeCapabilityRequirements(OperationContext context, String attributeName, String... attributeValues) { public void removeCapabilityRequirements(OperationContext context, String attributeName, String... values) {
String dependentName = this.capability.resolve(context.getCurrentAddress()).getName(); String dependentName = this.capability.resolve(context.getCurrentAddress()).getName();
for (String attributeValue : attributeValues) { Stream.of(values).forEach(value -> this.requirementResolver.apply(value).ifPresent(requirementName -> context.deregisterCapabilityRequirement(requirementName, dependentName)));
String requirementName = RuntimeCapability.buildDynamicCapabilityName(this.requirement.getName(), attributeValue);
context.deregisterCapabilityRequirement(requirementName, dependentName);
}
} }


@Override @Override
Expand Down
Expand Up @@ -84,7 +84,7 @@ public RuntimeCapability<Void> resolve(PathAddress address) {
} }


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
DATA_SOURCE("data-source", ModelType.STRING, new CapabilityReference(CommonUnaryRequirement.DATA_SOURCE, Capability.DATA_SOURCE)), DATA_SOURCE("data-source", ModelType.STRING, new CapabilityReference(Capability.DATA_SOURCE, CommonUnaryRequirement.DATA_SOURCE)),
DIALECT("dialect", ModelType.STRING, new EnumValidatorBuilder<>(DatabaseType.class)), DIALECT("dialect", ModelType.STRING, new EnumValidatorBuilder<>(DatabaseType.class)),
; ;
private final AttributeDefinition definition; private final AttributeDefinition definition;
Expand Down
Expand Up @@ -110,7 +110,7 @@ enum Attribute implements org.jboss.as.clustering.controller.Attribute {
Attribute(String name) { Attribute(String name) {
this.definition = new StringListAttributeDefinition.Builder(name) this.definition = new StringListAttributeDefinition.Builder(name)
.setAttributeParser(AttributeParsers.COLLECTION) .setAttributeParser(AttributeParsers.COLLECTION)
.setCapabilityReference(new CapabilityReference(CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING, Capability.OUTBOUND_SOCKET_BINDING)) .setCapabilityReference(new CapabilityReference(Capability.OUTBOUND_SOCKET_BINDING, CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING))
.setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES) .setFlags(AttributeAccess.Flag.RESTART_RESOURCE_SERVICES)
.setMinSize(1) .setMinSize(1)
.build(); .build();
Expand Down
Expand Up @@ -98,7 +98,7 @@ public RuntimeCapability<Void> resolve(PathAddress address) {
} }


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
SOCKET_BINDING(ModelDescriptionConstants.SOCKET_BINDING, ModelType.STRING, SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF, new CapabilityReference(CommonUnaryRequirement.SOCKET_BINDING, Capability.SOCKET_BINDING)), SOCKET_BINDING(ModelDescriptionConstants.SOCKET_BINDING, ModelType.STRING, SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF, new CapabilityReference(Capability.SOCKET_BINDING, CommonUnaryRequirement.SOCKET_BINDING)),
MODULE(ModelDescriptionConstants.MODULE, ModelType.STRING, new ModelNode(ProtocolConfiguration.DEFAULT_MODULE.getName()), new ModuleIdentifierValidatorBuilder()), MODULE(ModelDescriptionConstants.MODULE, ModelType.STRING, new ModelNode(ProtocolConfiguration.DEFAULT_MODULE.getName()), new ModuleIdentifierValidatorBuilder()),
PROPERTIES(ModelDescriptionConstants.PROPERTIES), PROPERTIES(ModelDescriptionConstants.PROPERTIES),
; ;
Expand Down
Expand Up @@ -117,7 +117,7 @@ public RuntimeCapability<Void> resolve(PathAddress address) {


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
@Deprecated SHARED("shared", ModelType.BOOLEAN, new ModelNode(false), JGroupsModel.VERSION_4_0_0), @Deprecated SHARED("shared", ModelType.BOOLEAN, new ModelNode(false), JGroupsModel.VERSION_4_0_0),
DIAGNOSTICS_SOCKET_BINDING("diagnostics-socket-binding", ModelType.STRING, SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF, new CapabilityReference(CommonUnaryRequirement.SOCKET_BINDING, Capability.DIAGNOSTICS_SOCKET_BINDING)), DIAGNOSTICS_SOCKET_BINDING("diagnostics-socket-binding", ModelType.STRING, SensitiveTargetAccessConstraintDefinition.SOCKET_BINDING_REF, new CapabilityReference(Capability.DIAGNOSTICS_SOCKET_BINDING, CommonUnaryRequirement.SOCKET_BINDING)),
SITE("site", ModelType.STRING), SITE("site", ModelType.STRING),
RACK("rack", ModelType.STRING), RACK("rack", ModelType.STRING),
MACHINE("machine", ModelType.STRING), MACHINE("machine", ModelType.STRING),
Expand Down
Expand Up @@ -67,7 +67,7 @@ public RuntimeCapability<Void> resolve(PathAddress address) {


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
NAME_PREFERENCES("name-preferences", "socket-binding-preferences"), NAME_PREFERENCES("name-preferences", "socket-binding-preferences"),
SOCKET_BINDING_PREFERENCES("socket-binding-preferences", "name-preferences", new CapabilityReference(CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING, Capability.SOCKET_BINDING_PREFERENCE)), SOCKET_BINDING_PREFERENCES("socket-binding-preferences", "name-preferences", new CapabilityReference(Capability.SOCKET_BINDING_PREFERENCE, CommonUnaryRequirement.OUTBOUND_SOCKET_BINDING)),
; ;
private final AttributeDefinition definition; private final AttributeDefinition definition;


Expand Down
Expand Up @@ -68,7 +68,7 @@ public org.jboss.as.clustering.controller.Capability getCapability() {
} }


enum Attribute implements org.jboss.as.clustering.controller.Attribute { enum Attribute implements org.jboss.as.clustering.controller.Attribute {
DEFAULT("default", ModelType.STRING, new CapabilityReference(SingletonRequirement.SINGLETON_POLICY, Capability.DEFAULT_POLICY)), DEFAULT("default", ModelType.STRING, new CapabilityReference(Capability.DEFAULT_POLICY, SingletonRequirement.SINGLETON_POLICY)),
; ;
private final SimpleAttributeDefinition definition; private final SimpleAttributeDefinition definition;


Expand Down

0 comments on commit 221f193

Please sign in to comment.