PathElement element = aliasAddress.getElement(i); if (i == target.size() - 1) { final ModelNode operation = aliasContext.getOperation(); final String stackName; if (ModelDescriptionConstants.ADD.equals(Operations.getName(operation)) && operation.hasDefined("type")) { Resource root = null; try { root = aliasContext.readResourceFromRoot(PathAddress.pathAddress(result)); } catch (Resource.NoSuchResourceException ignored) {
if (aliasEntry != null) { PathAddress childAddr = addr.append(path); PathAddress target = aliasEntry.convertToTargetAddress(childAddr, AliasContext.create(childAddr, context)); assert !childAddr.equals(target) : "Alias was not translated"; PathAddress targetParent = target.getParent();
if (aliasEntry != null) { PathAddress childAddr = addr.append(path); PathAddress target = aliasEntry.convertToTargetAddress(childAddr, AliasContext.create(childAddr, context)); assert !childAddr.equals(target) : "Alias was not translated"; PathAddress targetParent = target.getParent();
PathElement element = aliasAddress.getElement(i); if (i == target.size() - 1) { final ModelNode operation = aliasContext.getOperation(); final String stackName; if (ModelDescriptionConstants.ADD.equals(Operations.getName(operation)) && operation.hasDefined("type")) { Resource root = null; try { root = aliasContext.readResourceFromRoot(PathAddress.pathAddress(result)); } catch (Resource.NoSuchResourceException ignored) {
final AliasContext aliasContext = AliasContext.create(operation, context); final PathAddress mapped = aliasEntry.convertToTargetAddress(addr, aliasContext); assert !addr.equals(mapped) : "Alias was not translated";
final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(stepAddress, AliasEntry.AliasContext.create(step, context)); } else { useAddress = stepAddress;
final AliasContext aliasContext = AliasContext.create(operation, context); final PathAddress mapped = aliasEntry.convertToTargetAddress(addr, aliasContext); assert !addr.equals(mapped) : "Alias was not translated";
final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(stepAddress, AliasEntry.AliasContext.create(step, context)); } else { useAddress = stepAddress;
@Override public OperationTransformer.TransformedOperation transformOperation(final TransformationInputs transformationInputs, final ModelNode operation) throws OperationFailedException { final PathAddress original = PathAddress.pathAddress(operation.require(OP_ADDR)); //If this is an alias, get the real address before transforming ImmutableManagementResourceRegistration reg = transformationInputs.getRootRegistration().getSubModel(original); final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(original, AliasEntry.AliasContext.create(operation, transformationInputs)); } else { useAddress = original; } final String operationName = operation.require(OP).asString(); // Transform the path address final PathAddress transformed = transformAddress(useAddress, target); // Update the operation using the new path address operation.get(OP_ADDR).set(transformed.toModelNode()); // TODO should this happen by default? final TransformationContext context = ResourceTransformationContextImpl.create(transformationInputs, target, transformed, original, Transformers.DEFAULT); final OperationTransformer transformer = target.resolveTransformer(context, useAddress, operationName); if (transformer == null) { ControllerLogger.ROOT_LOGGER.tracef("operation %s does not need transformation", operation); return new OperationTransformer.TransformedOperation(operation, OperationResultTransformer.ORIGINAL_RESULT); } final OperationTransformer.TransformedOperation op = transformer.transformOperation(context, transformed, operation); context.getLogger().flushLogQueue(); return op; }
@Override public OperationTransformer.TransformedOperation transformOperation(final TransformationContext context, final ModelNode operation) throws OperationFailedException { final PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR)); //If this is an alias, get the real address before transforming ImmutableManagementResourceRegistration reg = context.getResourceRegistration(address); final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(address, AliasEntry.AliasContext.create(operation, context)); } else { useAddress = address; } final String operationName = operation.require(OP).asString(); TransformationContext opCtx = ResourceTransformationContextImpl.wrapForOperation(context, operation); final OperationTransformer transformer = target.resolveTransformer(opCtx, useAddress, operationName); if (transformer == null) { ControllerLogger.ROOT_LOGGER.tracef("operation %s does not need transformation", operation); return new OperationTransformer.TransformedOperation(operation, OperationResultTransformer.ORIGINAL_RESULT); } // Transform the path address final PathAddress transformed = transformAddress(useAddress, target); // Update the operation using the new path address operation.get(OP_ADDR).set(transformed.toModelNode()); // TODO should this happen by default? OperationTransformer.TransformedOperation res = transformer.transformOperation(opCtx, transformed, operation); context.getLogger().flushLogQueue(); return res; }
@Override public OperationTransformer.TransformedOperation transformOperation(final TransformationInputs transformationInputs, final ModelNode operation) throws OperationFailedException { final PathAddress original = PathAddress.pathAddress(operation.require(OP_ADDR)); //If this is an alias, get the real address before transforming ImmutableManagementResourceRegistration reg = transformationInputs.getRootRegistration().getSubModel(original); final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(original, AliasEntry.AliasContext.create(operation, transformationInputs)); } else { useAddress = original; } final String operationName = operation.require(OP).asString(); // Transform the path address final PathAddress transformed = transformAddress(useAddress, target); // Update the operation using the new path address operation.get(OP_ADDR).set(transformed.toModelNode()); // TODO should this happen by default? final TransformationContext context = ResourceTransformationContextImpl.create(transformationInputs, target, transformed, original, Transformers.DEFAULT); final OperationTransformer transformer = target.resolveTransformer(context, useAddress, operationName); if (transformer == null) { ControllerLogger.ROOT_LOGGER.tracef("operation %s does not need transformation", operation); return new OperationTransformer.TransformedOperation(operation, OperationResultTransformer.ORIGINAL_RESULT); } final OperationTransformer.TransformedOperation op = transformer.transformOperation(context, transformed, operation); context.getLogger().flushLogQueue(); return op; }
@Override public OperationTransformer.TransformedOperation transformOperation(final TransformationContext context, final ModelNode operation) throws OperationFailedException { final PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR)); //If this is an alias, get the real address before transforming ImmutableManagementResourceRegistration reg = context.getResourceRegistration(address); final PathAddress useAddress; if (reg != null && reg.isAlias()) { useAddress = reg.getAliasEntry().convertToTargetAddress(address, AliasEntry.AliasContext.create(operation, context)); } else { useAddress = address; } final String operationName = operation.require(OP).asString(); TransformationContext opCtx = ResourceTransformationContextImpl.wrapForOperation(context, operation); final OperationTransformer transformer = target.resolveTransformer(opCtx, useAddress, operationName); if (transformer == null) { ControllerLogger.ROOT_LOGGER.tracef("operation %s does not need transformation", operation); return new OperationTransformer.TransformedOperation(operation, OperationResultTransformer.ORIGINAL_RESULT); } // Transform the path address final PathAddress transformed = transformAddress(useAddress, target); // Update the operation using the new path address operation.get(OP_ADDR).set(transformed.toModelNode()); // TODO should this happen by default? OperationTransformer.TransformedOperation res = transformer.transformOperation(opCtx, transformed, operation); context.getLogger().flushLogQueue(); return res; }
@Override public PathAddress convertToTargetAddress(PathAddress aliasAddress, AliasContext aliasContext) { PathAddress rebuiltAddress = PathAddress.EMPTY_ADDRESS; for (PathElement pathElement : aliasAddress) { if (pathElement.equals(LEGACY_PATH)) { try { if (aliasContext.readResourceFromRoot(rebuiltAddress, false).hasChildren(ProxyConfigurationResourceDefinition.WILDCARD_PATH.getKey())) { Set<Resource.ResourceEntry> children = aliasContext.readResourceFromRoot(rebuiltAddress, false).getChildren(ProxyConfigurationResourceDefinition.WILDCARD_PATH.getKey()); if (children.size() > 1 && !Operations.getOperationName(aliasContext.getOperation()).equals(AliasContext.RECURSIVE_GLOBAL_OP)) { throw new IllegalStateException(ModClusterLogger.ROOT_LOGGER.legacyOperationsWithMultipleProxies()); } PathAddress proxyPath = PathAddress.pathAddress(ProxyConfigurationResourceDefinition.pathElement(children.iterator().next().getName())); rebuiltAddress = rebuiltAddress.append(proxyPath); } else { // handle :add rebuiltAddress = rebuiltAddress.append(ProxyConfigurationResourceDefinition.pathElement("default")); } } catch (Resource.NoSuchResourceException ignore) { // handle recursive-global-op rebuiltAddress = rebuiltAddress.append(ProxyConfigurationResourceDefinition.WILDCARD_PATH); } } else { rebuiltAddress = rebuiltAddress.append(pathElement); } } return rebuiltAddress; } });
public static AliasContext create(ModelNode operation, Transformers.TransformationInputs transformationInputs) { return new AliasContext(operation, new ResourceProvider() { @Override public Resource readResourceFromRoot(PathAddress address) { return readResourceFromRoot(address, false); } @Override public Resource readResourceFromRoot(PathAddress address, boolean recursive) { Resource resource = transformationInputs.getRootResource().navigate(address); if (resource == null) { return resource; } if (recursive) { return resource.clone(); } final Resource copy = Resource.Factory.create(); copy.writeModel(resource.getModel()); for(final String childType : resource.getChildTypes()) { for(final Resource.ResourceEntry child : resource.getChildren(childType)) { copy.registerChild(child.getPathElement(), PlaceholderResource.INSTANCE); } } return copy; } }); }
public static AliasContext create(ModelNode operation, Transformers.TransformationInputs transformationInputs) { return new AliasContext(operation, new ResourceProvider() { @Override public Resource readResourceFromRoot(PathAddress address) { return readResourceFromRoot(address, false); } @Override public Resource readResourceFromRoot(PathAddress address, boolean recursive) { Resource resource = transformationInputs.getRootResource().navigate(address); if (resource == null) { return resource; } if (recursive) { return resource.clone(); } final Resource copy = Resource.Factory.create(); copy.writeModel(resource.getModel()); for(final String childType : resource.getChildTypes()) { for(final Resource.ResourceEntry child : resource.getChildren(childType)) { copy.registerChild(child.getPathElement(), PlaceholderResource.INSTANCE); } } return copy; } }); }
@Override public PathAddress convertToTargetAddress(PathAddress address, AliasEntry.AliasContext aliasContext) { PathAddress target = this.getTargetAddress(); List<PathElement> result = new ArrayList<>(address.size()); for (int i = 0; i < address.size(); ++i) { PathElement element = address.getElement(i); if (i < target.size()) { PathElement targetElement = target.getElement(i); result.add(targetElement.isWildcard() ? PathElement.pathElement(targetElement.getKey(), element.getValue()) : targetElement); } else { result.add(element); } } PathElement store = PathAddress.pathAddress(aliasContext.getOperation().get(ModelDescriptionConstants.ADDRESS)).getLastElement(); return PathAddress.pathAddress(result).append(store); } }
public static AliasContext create(final PathAddress address, final OperationContext delegate) { return create(Util.createEmptyOperation(RECURSIVE_GLOBAL_OP, address), delegate); }
public static AliasContext create(final PathAddress address, final OperationContext delegate) { return create(Util.createEmptyOperation(RECURSIVE_GLOBAL_OP, address), delegate); }
private ImmutableManagementResourceRegistration getResourceRegistrationCheckForAlias(OperationContext context, PathAddress opAddr) { //The direct root registration is only needed if we are doing access-control=true final ImmutableManagementResourceRegistration root = context.getRootResourceRegistration(); final ImmutableManagementResourceRegistration registry = root.getSubModel(opAddr); AliasEntry aliasEntry = registry.getAliasEntry(); if (aliasEntry == null) { return registry; } //Get hold of the real registry if it was an alias PathAddress realAddress = aliasEntry.convertToTargetAddress(opAddr, AliasEntry.AliasContext.create(opAddr, context)); assert !realAddress.equals(opAddr) : "Alias was not translated"; return root.getSubModel(realAddress); }
private ImmutableManagementResourceRegistration getResourceRegistrationCheckForAlias(OperationContext context, PathAddress opAddr, ReadResourceDescriptionAccessControlContext accessControlContext) { //The direct root registration is only needed if we are doing access-control=true final ImmutableManagementResourceRegistration root = context.getRootResourceRegistration(); final ImmutableManagementResourceRegistration registry = root.getSubModel(opAddr); AliasEntry aliasEntry = registry.getAliasEntry(); if (aliasEntry == null) { return registry; } //Get hold of the real registry if it was an alias PathAddress realAddress = aliasEntry.convertToTargetAddress(opAddr, AliasEntry.AliasContext.create(opAddr, context)); assert !realAddress.equals(opAddr) : "Alias was not translated"; return root.getSubModel(realAddress); }