Skip to content

Commit

Permalink
Add generic support for handling capability references to requirement…
Browse files Browse the repository at this point in the history
…s provided by an ancestor resource.
  • Loading branch information
pferraro committed Feb 6, 2017
1 parent 4785052 commit ad8784a
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 0 deletions.
Expand Up @@ -173,6 +173,8 @@ protected void recordCapabilitiesAndRequirements(OperationContext context, Model
this.attributes.stream()
.filter(attribute -> attribute.hasCapabilityRequirements())
.forEach(attribute -> attribute.addCapabilityRequirements(context, model.get(attribute.getName())));

this.descriptor.getResourceCapabilityReferences().forEach((reference, resolver) -> reference.addCapabilityRequirements(context, null, resolver.apply(address)));
}

@Override
Expand Down
Expand Up @@ -114,4 +114,16 @@ public String getBaseRequirementName() {
public boolean isDynamicDependent() {
return this.capability.getDefinition().isDynamicallyNamed();
}

@Override
public int hashCode() {
return this.getBaseDependentName().hashCode();
}

@Override
public boolean equals(Object object) {
if (!(object instanceof CapabilityReferenceRecorder)) return false;
CapabilityReference reference = (CapabilityReference) object;
return this.capability.getDefinition().getName().equals(reference.capability.getDefinition().getName());
}
}
Expand Up @@ -85,6 +85,8 @@ protected void performRemove(OperationContext context, ModelNode operation, Mode
.filter(attribute -> attribute.hasCapabilityRequirements())
.forEach(attribute -> attribute.removeCapabilityRequirements(context, model.get(attribute.getName())));

this.descriptor.getResourceCapabilityReferences().forEach((reference, resolver) -> reference.removeCapabilityRequirements(context, null, resolver.apply(address)));

// Remove any runtime child resources
removeRuntimeChildren(context, PathAddress.EMPTY_ADDRESS);
}
Expand Down
Expand Up @@ -21,6 +21,12 @@
*/
package org.jboss.as.clustering.controller;

import java.util.Collections;
import java.util.Map;
import java.util.function.Function;

import org.jboss.as.controller.CapabilityReferenceRecorder;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;

/**
Expand All @@ -34,4 +40,12 @@ public interface RemoveStepHandlerDescriptor extends OperationStepHandlerDescrip
* @return a description resolver
*/
ResourceDescriptionResolver getDescriptionResolver();

/**
* Returns a mapping of capability references to an ancestor resource.
* @return a tuple of capability references and requirement resolvers.
*/
default Map<CapabilityReferenceRecorder, Function<PathAddress, String>> getResourceCapabilityReferences() {
return Collections.emptyMap();
}
}
Expand Up @@ -33,11 +33,14 @@
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.function.Predicate;

import org.jboss.as.clustering.function.Predicates;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.CapabilityReferenceRecorder;
import org.jboss.as.controller.OperationStepHandler;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
Expand Down Expand Up @@ -69,6 +72,7 @@ public class ResourceDescriptor implements AddStepHandlerDescriptor {
private final Map<AttributeDefinition, AttributeTranslation> attributeTranslations = new TreeMap<>(ATTRIBUTE_COMPARATOR);
private final List<OperationStepHandler> translators = new LinkedList<>();
private final List<OperationStepHandler> runtimeResourceRegistrations = new LinkedList<>();
private final Map<CapabilityReferenceRecorder, Function<PathAddress, String>> resourceCapabilityReferences = new HashMap<>();

public ResourceDescriptor(ResourceDescriptionResolver resolver) {
this.resolver = resolver;
Expand Down Expand Up @@ -229,4 +233,14 @@ public ResourceDescriptor addRuntimeResourceRegistration(OperationStepHandler re
this.runtimeResourceRegistrations.add(registration);
return this;
}

@Override
public Map<CapabilityReferenceRecorder, Function<PathAddress, String>> getResourceCapabilityReferences() {
return this.resourceCapabilityReferences;
}

public ResourceDescriptor addResourceCapabilityReference(CapabilityReferenceRecorder reference, Function<PathAddress, String> resolver) {
this.resourceCapabilityReferences.put(reference, resolver);
return this;
}
}

0 comments on commit ad8784a

Please sign in to comment.