Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WFCORE-805 Add capabilty information to ResourceDefinition / MRR #909

Merged
merged 1 commit into from
Jul 22, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ public void registerNotifications(ManagementResourceRegistration resourceRegistr
delegate.registerNotifications(resourceRegistration);
}

@Override
public void registerCapabilities(ManagementResourceRegistration resourceRegistration) {
delegate.registerCapabilities(resourceRegistration);
}

@Override
public PathElement getPathElement() {
return delegate.getPathElement();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ public interface ResourceDefinition {
*/
void registerChildren(final ManagementResourceRegistration resourceRegistration);

/**
* Register capabilities associated with this resource.
*
* @param resourceRegistration a {@link ManagementResourceRegistration} created from this definition
*/
default void registerCapabilities(final ManagementResourceRegistration resourceRegistration){
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just heads up, this is default method just so wildfly full code wont get angry.

// no op
}

/**
* Get the definition of any access constraints associated with the resource.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,11 @@ public void registerChildren(ManagementResourceRegistration resourceRegistration
// no-op
}

@Override
public void registerCapabilities(ManagementResourceRegistration resourceRegistration) {
// no-op
}

/**
* Gets the {@link ResourceDescriptionResolver} used by this resource definition, or {@code null}
* if a {@code ResourceDescriptionResolver} is not used.
Expand Down Expand Up @@ -564,6 +569,22 @@ public Parameters setDeprecationData(DeprecationData deprecationData) {
return this;
}

/**
* Call to deprecate the resource
*
* @param deprecatedSince version in which model was deprecated
* @return this Parameters object
* @throws IllegalStateException if the {@code deprecationData} is null
*/
public Parameters setDeprecatedSince(ModelVersion deprecatedSince) {
if (deprecationData == null) {
throw ControllerLogger.ROOT_LOGGER.nullVar("addRestartLevel");
}

this.deprecationData = new DeprecationData(deprecatedSince);
return this;
}

/**
* Call to indicate that a resource is of a type where ordering matters amongst the siblings of the same type.
* If not called, the default is {@code false}.
Expand All @@ -575,5 +596,6 @@ public Parameters setOrderedChild() {
this.orderedChildResource = true;
return this;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
*
* @author Brian Stansberry (c) 2014 Red Hat Inc.
*/
public abstract class AbstractCapability {
public abstract class AbstractCapability implements Capability {

private final String name;
private final boolean dynamic;
Expand Down Expand Up @@ -89,6 +89,7 @@ private static Set<String> establishRequirements(Set<String> input) {
*
* @see #getDynamicName(String)
*/
@Override
public String getName() {
return name;
}
Expand All @@ -99,6 +100,7 @@ public String getName() {
*
* @return the capability names. Will not be {@code null} but may be empty.
*/
@Override
public Set<String> getRequirements() {
return requirements;
}
Expand All @@ -110,6 +112,7 @@ public Set<String> getRequirements() {
*
* @return the capability names. Will not be {@code null} but may be empty.
*/
@Override
public Set<String> getOptionalRequirements() {
return optionalRequirements;
}
Expand All @@ -125,6 +128,7 @@ public Set<String> getOptionalRequirements() {
*
* @return the capability names. Will not be {@code null} but may be empty.
*/
@Override
public Set<String> getRuntimeOnlyRequirements() {
return runtimeOnlyRequirements;
}
Expand All @@ -137,6 +141,7 @@ public Set<String> getRuntimeOnlyRequirements() {
*
* @return the capability names. Will not be {@code null} but may be empty.
*/
@Override
public Set<String> getDynamicRequirements() {
return dynamicRequirements;
}
Expand All @@ -149,6 +154,7 @@ public Set<String> getDynamicRequirements() {
*
* @return the capability names. Will not be {@code null} but may be empty.
*/
@Override
public Set<String> getDynamicOptionalRequirements() {
return dynamicOptionalRequirements;
}
Expand All @@ -159,6 +165,7 @@ public Set<String> getDynamicOptionalRequirements() {
*
* @return {@code true} if this capability is dynamically named
*/
@Override
public boolean isDynamicallyNamed() {
return dynamic;
}
Expand All @@ -170,6 +177,7 @@ public boolean isDynamicallyNamed() {
*
* @throws IllegalStateException if {@link #isDynamicallyNamed()} returns {@code false}
*/
@Override
public String getDynamicName(String dynamicNameElement) {
if (!dynamic) {
throw new IllegalStateException();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2015, Red Hat, Inc., and individual contributors as indicated
* by the @authors tag.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.jboss.as.controller.capability;

import java.util.Set;

/**
* @author Tomaz Cerar (c) 2015 Red Hat Inc.
*/
public interface Capability {
String getName();

Set<String> getRequirements();

Set<String> getOptionalRequirements();

Set<String> getRuntimeOnlyRequirements();

Set<String> getDynamicRequirements();

Set<String> getDynamicOptionalRequirements();

boolean isDynamicallyNamed();

String getDynamicName(String dynamicNameElement);
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ATTRIBUTES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CHILDREN;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.DESCRIPTION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.DYNAMIC;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MODEL_DESCRIPTION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NAME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NOTIFICATIONS;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OPERATIONS;

Expand All @@ -41,6 +43,7 @@
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.access.management.AccessConstraintDescriptionProviderUtil;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ImmutableManagementResourceRegistration;
import org.jboss.dmr.ModelNode;
Expand Down Expand Up @@ -76,6 +79,15 @@ public ModelNode getModelDescription(Locale locale) {
final ResourceBundle bundle = descriptionResolver.getResourceBundle(locale);
result.get(DESCRIPTION).set(descriptionResolver.getResourceDescription(locale, bundle));

Set<Capability> capabilities = registration.getCapabilities();
if (capabilities!=null&&!capabilities.isEmpty()){
for (Capability capability: capabilities) {
ModelNode cap = result.get(ModelDescriptionConstants.CAPABILITIES).add();
cap.get(NAME).set(capability.getName());
cap.get(DYNAMIC).set(capability.isDynamicallyNamed());
}
}

if (deprecationData != null) {
ModelNode deprecated = addDeprecatedInfo(result);
deprecated.get(ModelDescriptionConstants.REASON).set(descriptionResolver.getResourceDeprecatedDescription(locale, bundle));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public class ModelDescriptionConstants {
public static final String CALLER_THREAD = "caller-thread";
public static final String CALLER_TYPE = "caller-type";
public static final String CANCELLED = "cancelled";
public static final String CAPABILITIES = " capabilities";
public static final String CAPABILITY_REFERENCE = "capability-reference";
public static final String CHILD_TYPE = "child-type";
public static final String CHILDREN = "children";
Expand Down Expand Up @@ -140,6 +141,7 @@ public class ModelDescriptionConstants {
public static final String DOMAIN_MODEL = "domain-model";
public static final String DOMAIN_RESULTS = "domain-results";
public static final String DOMAIN_UUID = "domain-uuid";
public static final String DYNAMIC = "capability";
public static final String DUMP_SERVICES = "dump-services";
public static final String ENABLE = "enable";
public static final String ENABLED = "enabled";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import org.jboss.as.controller.access.management.JmxAuthorizer;
import org.jboss.as.controller.audit.AuditLogger;
import org.jboss.as.controller.audit.ManagedAuditLogger;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.descriptions.DescriptionProvider;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.descriptions.NonResolvingResourceDescriptionResolver;
Expand Down Expand Up @@ -1018,6 +1019,12 @@ public void unregisterAlias(PathElement address) {
subdeployments.unregisterAlias(address);
}

@Override
public void registerCapability(Capability capability) {
deployments.registerCapability(capability);
subdeployments.registerCapability(capability);
}

@Override
public AliasEntry getAliasEntry() {
return deployments.getAliasEntry();
Expand All @@ -1027,6 +1034,11 @@ public AliasEntry getAliasEntry() {
public boolean isAlias() {
return deployments.isAlias();
}

@Override
public Set<Capability> getCapabilities() {
return deployments.getCapabilities();
}
}

private static final JmxAuthorizer NO_OP_AUTHORIZER = new JmxAuthorizer() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.jboss.as.controller.ProxyController;
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.access.management.AccessConstraintDefinition;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.descriptions.DescriptionProvider;
import org.jboss.as.controller.descriptions.OverrideDescriptionProvider;
import org.jboss.as.controller.logging.ControllerLogger;
Expand Down Expand Up @@ -200,6 +201,11 @@ public void unregisterNotification(String notificationType) {
throw alreadyRegistered();
}

@Override
public void registerCapability(Capability capability) {
throw alreadyRegistered();
}

@Override
void getOperationDescriptions(final ListIterator<PathElement> iterator, final Map<String, OperationEntry> providers, final boolean inherited) {
Map<String, OperationEntry> temp = new HashMap<String, OperationEntry>();
Expand Down Expand Up @@ -308,4 +314,9 @@ public Set<String> getOrderedChildTypes() {
public void setOrderedChild(String key) {
throw alreadyRegistered();
}

@Override
public Set<Capability> getCapabilities() {
return target.getCapabilities();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

Expand All @@ -45,6 +46,7 @@
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.access.management.AccessConstraintDefinition;
import org.jboss.as.controller.access.management.AccessConstraintUtilizationRegistry;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.descriptions.DescriptionProvider;
import org.jboss.as.controller.logging.ControllerLogger;
import org.jboss.as.controller.registry.AttributeAccess.AccessType;
Expand Down Expand Up @@ -82,6 +84,8 @@ final class ConcreteResourceRegistration extends AbstractResourceRegistration {
private static final AtomicMapFieldUpdater<ConcreteResourceRegistration, String, AttributeAccess> attributesUpdater = AtomicMapFieldUpdater.newMapUpdater(AtomicReferenceFieldUpdater.newUpdater(ConcreteResourceRegistration.class, Map.class, "attributes"));
private static final AtomicMapFieldUpdater<ConcreteResourceRegistration, String, Empty> orderedChildUpdater = AtomicMapFieldUpdater.newMapUpdater(AtomicReferenceFieldUpdater.newUpdater(ConcreteResourceRegistration.class, Map.class, "orderedChildTypes"));

private final Set<Capability> capabilities = new CopyOnWriteArraySet<>();

ConcreteResourceRegistration(final String valueString, final NodeSubregistry parent, final ResourceDefinition definition,
final AccessConstraintUtilizationRegistry constraintUtilizationRegistry,
final boolean runtimeOnly, final boolean ordered) {
Expand Down Expand Up @@ -182,6 +186,7 @@ public ManagementResourceRegistration registerSubModel(final ResourceDefinition
resourceDefinition.registerOperations(resourceRegistration);
resourceDefinition.registerNotifications(resourceRegistration);
resourceDefinition.registerChildren(resourceRegistration);
resourceDefinition.registerCapabilities(resourceRegistration);
if (constraintUtilizationRegistry != null) {
PathAddress childAddress = getPathAddress().append(address);
List<AccessConstraintDefinition> constraintDefinitions = resourceDefinition.getAccessConstraints();
Expand Down Expand Up @@ -449,6 +454,11 @@ public void unregisterAlias(PathElement address) {
}
}

@Override
public void registerCapability(Capability capability){
capabilities.add(capability);
}

NodeSubregistry getOrCreateSubregistry(final String key) {
for (;;) {
final Map<String, NodeSubregistry> snapshot = childrenUpdater.get(this);
Expand Down Expand Up @@ -640,6 +650,11 @@ protected void setOrderedChild(String type) {

}

@Override
public Set<Capability> getCapabilities() {
return Collections.unmodifiableSet(capabilities);
}

private static class Empty {
static final Empty INSTANCE = new Empty();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ProxyController;
import org.jboss.as.controller.access.management.AccessConstraintDefinition;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.descriptions.DescriptionProvider;

/**
Expand Down Expand Up @@ -163,4 +164,9 @@ public boolean isOrderedChildResource() {
public Set<String> getOrderedChildTypes() {
return delegate.getOrderedChildTypes();
}

@Override
public Set<Capability> getCapabilities() {
return delegate.getCapabilities();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.jboss.as.controller.ProxyController;
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.access.management.AccessConstraintDefinition;
import org.jboss.as.controller.capability.Capability;
import org.jboss.as.controller.descriptions.DescriptionProvider;
import org.jboss.as.controller.descriptions.OverrideDescriptionProvider;

Expand Down Expand Up @@ -330,6 +331,16 @@ public boolean isOrderedChildResource() {
return getDelegate().isOrderedChildResource();
}

@Override
public void registerCapability(Capability capability) {
getDelegate().registerCapability(capability);
}

@Override
public Set<Capability> getCapabilities() {
return getDelegate().getCapabilities();
}

private ManagementResourceRegistration getDelegate() {
return delegateProvider.getDelegateRegistration();
}
Expand Down