package org.jboss.as.controller.operations.common; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.as.controller.registry.Resource; /** * We currently only care about ordered child resources when describing the model for the use of the sync handlers. * We don't care about all that when describing the model for the server boot operations. This attachment is used * to collect the information if present. * * @author <a href="mailto:kabir.khan@jboss.com">Kabir Khan</a> */ public class OrderedChildTypesAttachment { public static final OperationContext.AttachmentKey<OrderedChildTypesAttachment> KEY = OperationContext.AttachmentKey.create(OrderedChildTypesAttachment.class); private final Map<PathAddress, Set<String>> orderedChildren = new HashMap<>(); /** * If the resource has ordered child types, those child types will be stored in the attachment. If there are no * ordered child types, this method is a no-op. * * @param resourceAddress the address of the resource * @param resource the resource which may or may not have ordered children. */ public void addOrderedChildResourceTypes(PathAddress resourceAddress, Resource resource) { Set<String> orderedChildTypes = resource.getOrderedChildTypes(); if (orderedChildTypes.size() > 0) { orderedChildren.put(resourceAddress, resource.getOrderedChildTypes()); } } /** * */ public Set<String> getOrderedChildTypes(PathAddress resourceAddress) { //The describe handlers don't append the profile element at the stage when the addOrderedChildResourceTypes() //method gets called, so strip it off here. final PathAddress lookupAddress = resourceAddress.size() > 0 && resourceAddress.getElement(0).getKey().equals(ModelDescriptionConstants.PROFILE) ? resourceAddress.subAddress(1) : resourceAddress; return orderedChildren.get(lookupAddress); } }