protected void describe( final Resource resource, final ModelNode address, ModelNode result, final ImmutableManagementResourceRegistration registration) { if (registration.isRemote() || registration.isRuntimeOnly() || resource.isProxy() || resource.isRuntime()) { return; } final Set<PathElement> children = registration.getChildAddresses(PathAddress.EMPTY_ADDRESS); result.add(createAddOperation(address, resource.getModel(), children)); for (final PathElement element : children) { if (element.isMultiTarget()) { final String childType = element.getKey(); for (final Resource.ResourceEntry entry : resource.getChildren(childType)) { final ImmutableManagementResourceRegistration childRegistration = registration.getSubModel( PathAddress.pathAddress(PathElement.pathElement(childType, entry.getName()))); final ModelNode childAddress = address.clone(); childAddress.add(childType, entry.getName()); describe(entry, childAddress, result, childRegistration); } } else { final Resource child = resource.getChild(element); final ImmutableManagementResourceRegistration childRegistration = registration.getSubModel(PathAddress.pathAddress(element)); final ModelNode childAddress = address.clone(); childAddress.add(element.getKey(), element.getValue()); describe(child, childAddress, result, childRegistration); } } }
public void addResource(PathAddress relativeAddress, Resource toAdd) { Resource model = root; final Iterator<PathElement> i = relativeAddress.iterator(); while (i.hasNext()) { final PathElement element = i.next(); if (element.isMultiTarget()) { throw MESSAGES.cannotWriteTo("*"); } if (!i.hasNext()) { if (model.hasChild(element)) { throw MESSAGES.duplicateResourceAddress(relativeAddress); } else { model.registerChild(element, toAdd); model = toAdd; } } else { model = model.getChild(element); if (model == null) { PathAddress ancestor = PathAddress.EMPTY_ADDRESS; for (PathElement pe : relativeAddress) { ancestor = ancestor.append(pe); if (element.equals(pe)) { break; } } throw MESSAGES.resourceNotFound(ancestor, relativeAddress); } } } }
@Override void getProxyControllers(ListIterator<PathElement> iterator, Set<ProxyController> controllers) { if (iterator.hasNext()) { final PathElement next = iterator.next(); final NodeSubregistry subregistry = children.get(next.getKey()); if (subregistry == null) { return; } if (next.isWildcard()) { subregistry.getProxyControllers(iterator, null, controllers); } else if (next.isMultiTarget()) { for (final String value : next.getSegments()) { subregistry.getProxyControllers(iterator, value, controllers); } } else { subregistry.getProxyControllers(iterator, next.getValue(), controllers); } } else { final Map<String, NodeSubregistry> snapshot = childrenUpdater.get(this); for (NodeSubregistry subregistry : snapshot.values()) { subregistry.getProxyControllers(iterator, null, controllers); } } }