Skip to content

Commit

Permalink
Split DynamicCapabilityNameResolver into separate classes for unary v…
Browse files Browse the repository at this point in the history
…s binary names.
  • Loading branch information
pferraro committed Apr 25, 2018
1 parent 1e1a05d commit cd160b4
Show file tree
Hide file tree
Showing 17 changed files with 100 additions and 85 deletions.
Expand Up @@ -27,28 +27,10 @@
import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PathAddress;


/** /**
* Dynamic name mapper implementations. * Dynamic name mapper implementations for binary capability names.
* @author Paul Ferraro * @author Paul Ferraro
*/ */
public enum DynamicCapabilityNameResolver implements Function<PathAddress, String[]> { public enum BinaryCapabilityNameResolver implements Function<PathAddress, String[]> {
DEFAULT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getLastElement().getValue() };
}
},
PARENT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getParent().getLastElement().getValue() };
}
},
GRANDPARENT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getParent().getParent().getLastElement().getValue() };
}
},
PARENT_CHILD() { PARENT_CHILD() {
@Override @Override
public String[] apply(PathAddress address) { public String[] apply(PathAddress address) {
Expand Down
Expand Up @@ -22,9 +22,6 @@


package org.jboss.as.clustering.controller; package org.jboss.as.clustering.controller;



import java.util.function.UnaryOperator;

import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.capability.RuntimeCapability;
import org.wildfly.clustering.service.BinaryRequirement; import org.wildfly.clustering.service.BinaryRequirement;


Expand All @@ -41,20 +38,19 @@ public class BinaryRequirementCapability implements Capability {
* @param requirement the requirement basis * @param requirement the requirement basis
*/ */
public BinaryRequirementCapability(BinaryRequirement requirement) { public BinaryRequirementCapability(BinaryRequirement requirement) {
this(requirement, UnaryOperator.identity()); this(requirement, BinaryCapabilityNameResolver.PARENT_CHILD);
} }


/** /**
* Creates a new capability based on the specified requirement * Creates a new capability based on the specified requirement
* @param requirement the requirement basis * @param requirement the requirement basis
* @param configurator configures the capability * @param configurator configures the capability
*/ */
public BinaryRequirementCapability(final BinaryRequirement requirement, UnaryOperator<RuntimeCapability.Builder<Void>> configurator) { public BinaryRequirementCapability(BinaryRequirement requirement, BinaryCapabilityNameResolver resolver) {
RuntimeCapability.Builder<Void> builder = RuntimeCapability.Builder.of(requirement.getName(), true) this.definition = RuntimeCapability.Builder.of(requirement.getName(), true)
.setServiceType(requirement.getType()) .setServiceType(requirement.getType())
.setDynamicNameMapper(DynamicCapabilityNameResolver.PARENT_CHILD) .setDynamicNameMapper(resolver)
; .build();
this.definition = configurator.apply(builder).build();
} }


@Override @Override
Expand Down
Expand Up @@ -57,7 +57,7 @@ public ResourceCapabilityReference(Capability capability, Requirement requiremen
* @param requirement the requirement of the specified capability * @param requirement the requirement of the specified capability
* @param requirementNameResolver function for resolving the dynamic elements of the requirement name * @param requirementNameResolver function for resolving the dynamic elements of the requirement name
*/ */
public ResourceCapabilityReference(Capability capability, UnaryRequirement requirement, Function<PathAddress, String[]> requirementNameResolver) { public ResourceCapabilityReference(Capability capability, UnaryRequirement requirement, UnaryCapabilityNameResolver requirementNameResolver) {
this(capability, (Requirement) requirement, requirementNameResolver); this(capability, (Requirement) requirement, requirementNameResolver);
} }


Expand All @@ -67,7 +67,7 @@ public ResourceCapabilityReference(Capability capability, UnaryRequirement requi
* @param requirement the requirement of the specified capability * @param requirement the requirement of the specified capability
* @param requirementNameResolver function for resolving the dynamic elements of the requirement name * @param requirementNameResolver function for resolving the dynamic elements of the requirement name
*/ */
public ResourceCapabilityReference(Capability capability, BinaryRequirement requirement, Function<PathAddress, String[]> requirementNameResolver) { public ResourceCapabilityReference(Capability capability, BinaryRequirement requirement, BinaryCapabilityNameResolver requirementNameResolver) {
this(capability, (Requirement) requirement, requirementNameResolver); this(capability, (Requirement) requirement, requirementNameResolver);
} }


Expand Down
@@ -0,0 +1,59 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2018, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.clustering.controller;

import java.util.function.Function;

import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;

/**
* Dynamic name mapper implementations for unary capability names.
* @author Paul Ferraro
*/
public enum UnaryCapabilityNameResolver implements Function<PathAddress, String[]> {
DEFAULT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getLastElement().getValue() };
}
},
PARENT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getParent().getLastElement().getValue() };
}
},
GRANDPARENT() {
@Override
public String[] apply(PathAddress address) {
return new String[] { address.getParent().getParent().getLastElement().getValue() };
}
},
LOCAL() {
@Override
public String[] apply(PathAddress address) {
return new String[] { ModelDescriptionConstants.LOCAL };
}
},
}
Expand Up @@ -22,8 +22,6 @@


package org.jboss.as.clustering.controller; package org.jboss.as.clustering.controller;


import java.util.function.UnaryOperator;

import org.jboss.as.controller.capability.RuntimeCapability; import org.jboss.as.controller.capability.RuntimeCapability;
import org.wildfly.clustering.service.UnaryRequirement; import org.wildfly.clustering.service.UnaryRequirement;


Expand All @@ -40,20 +38,18 @@ public class UnaryRequirementCapability implements Capability {
* @param requirement the unary requirement basis * @param requirement the unary requirement basis
*/ */
public UnaryRequirementCapability(UnaryRequirement requirement) { public UnaryRequirementCapability(UnaryRequirement requirement) {
this(requirement, UnaryOperator.identity()); this(requirement, UnaryCapabilityNameResolver.DEFAULT);
} }


/** /**
* Creates a new capability based on the specified unary requirement * Creates a new capability based on the specified unary requirement
* @param requirement the unary requirement basis * @param requirement the unary requirement basis
* @param configurator configures the capability
*/ */
public UnaryRequirementCapability(UnaryRequirement requirement, UnaryOperator<RuntimeCapability.Builder<Void>> configurator) { public UnaryRequirementCapability(UnaryRequirement requirement, UnaryCapabilityNameResolver resolver) {
RuntimeCapability.Builder<Void> builder = RuntimeCapability.Builder.of(requirement.getName(), true) this.definition = RuntimeCapability.Builder.of(requirement.getName(), true)
.setServiceType(requirement.getType()) .setServiceType(requirement.getType())
.setDynamicNameMapper(DynamicCapabilityNameResolver.DEFAULT) .setDynamicNameMapper(resolver)
; .build();
this.definition = configurator.apply(builder).build();
} }


@Override @Override
Expand Down
Expand Up @@ -24,7 +24,8 @@


import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.BinaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ManagementResourceRegistration; import org.jboss.as.clustering.controller.ManagementResourceRegistration;
import org.jboss.as.clustering.controller.MetricHandler; import org.jboss.as.clustering.controller.MetricHandler;
import org.jboss.as.clustering.controller.ResourceCapabilityReference; import org.jboss.as.clustering.controller.ResourceCapabilityReference;
Expand Down Expand Up @@ -56,7 +57,7 @@ enum Capability implements org.jboss.as.clustering.controller.Capability {
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(String name) { Capability(String name) {
this.definition = RuntimeCapability.Builder.of(name, true).setDynamicNameMapper(DynamicCapabilityNameResolver.PARENT_CHILD).build(); this.definition = RuntimeCapability.Builder.of(name, true).setDynamicNameMapper(BinaryCapabilityNameResolver.PARENT_CHILD).build();
} }


@Override @Override
Expand Down Expand Up @@ -149,7 +150,7 @@ public ResourceDescriptor apply(ResourceDescriptor descriptor) {
.addAttributes(Attribute.class) .addAttributes(Attribute.class)
.addAttributes(DeprecatedAttribute.class) .addAttributes(DeprecatedAttribute.class)
.addCapabilities(Capability.class) .addCapabilities(Capability.class)
.addResourceCapabilityReference(new ResourceCapabilityReference(Capability.TRANSPORT, JGroupsTransportResourceDefinition.Requirement.CHANNEL, DynamicCapabilityNameResolver.PARENT)) .addResourceCapabilityReference(new ResourceCapabilityReference(Capability.TRANSPORT, JGroupsTransportResourceDefinition.Requirement.CHANNEL, UnaryCapabilityNameResolver.PARENT))
; ;
} }
} }
Expand Down
Expand Up @@ -34,8 +34,8 @@
import org.jboss.as.clustering.controller.RequirementCapability; import org.jboss.as.clustering.controller.RequirementCapability;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceHandler; import org.jboss.as.clustering.controller.ResourceServiceHandler;
import org.jboss.as.clustering.controller.SimpleCapabilityNameResolver;
import org.jboss.as.clustering.controller.SubsystemResourceDefinition; import org.jboss.as.clustering.controller.SubsystemResourceDefinition;
import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.UnaryRequirementCapability; import org.jboss.as.clustering.controller.UnaryRequirementCapability;
import org.jboss.as.clustering.infinispan.deployment.ClusteringDependencyProcessor; import org.jboss.as.clustering.infinispan.deployment.ClusteringDependencyProcessor;
import org.jboss.as.controller.ModelVersion; import org.jboss.as.controller.ModelVersion;
Expand All @@ -48,7 +48,6 @@
import org.jboss.as.server.DeploymentProcessorTarget; import org.jboss.as.server.DeploymentProcessorTarget;
import org.jboss.as.server.deployment.Phase; import org.jboss.as.server.deployment.Phase;
import org.wildfly.clustering.spi.ClusteringRequirement; import org.wildfly.clustering.spi.ClusteringRequirement;
import org.wildfly.clustering.spi.LocalGroupBuilderProvider;


/** /**
* The root resource of the Infinispan subsystem. * The root resource of the Infinispan subsystem.
Expand All @@ -61,14 +60,8 @@ public class InfinispanSubsystemResourceDefinition extends SubsystemResourceDefi


static final Map<ClusteringRequirement, org.jboss.as.clustering.controller.Capability> LOCAL_CLUSTERING_CAPABILITIES = new EnumMap<>(ClusteringRequirement.class); static final Map<ClusteringRequirement, org.jboss.as.clustering.controller.Capability> LOCAL_CLUSTERING_CAPABILITIES = new EnumMap<>(ClusteringRequirement.class);
static { static {
UnaryOperator<RuntimeCapability.Builder<Void>> configurator = new UnaryOperator<RuntimeCapability.Builder<Void>>() {
@Override
public RuntimeCapability.Builder<Void> apply(RuntimeCapability.Builder<Void> builder) {
return builder.setDynamicNameMapper(new SimpleCapabilityNameResolver(LocalGroupBuilderProvider.LOCAL));
}
};
for (ClusteringRequirement requirement : EnumSet.allOf(ClusteringRequirement.class)) { for (ClusteringRequirement requirement : EnumSet.allOf(ClusteringRequirement.class)) {
LOCAL_CLUSTERING_CAPABILITIES.put(requirement, new UnaryRequirementCapability(requirement, configurator)); LOCAL_CLUSTERING_CAPABILITIES.put(requirement, new UnaryRequirementCapability(requirement, UnaryCapabilityNameResolver.LOCAL));
} }
} }


Expand Down
Expand Up @@ -26,7 +26,7 @@
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.jboss.as.clustering.controller.CapabilityReference; import org.jboss.as.clustering.controller.CapabilityReference;
import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ResourceCapabilityReference; import org.jboss.as.clustering.controller.ResourceCapabilityReference;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.SimpleAliasEntry; import org.jboss.as.clustering.controller.SimpleAliasEntry;
Expand Down Expand Up @@ -91,24 +91,19 @@ public Class<?> getType() {
} }
} }


enum Capability implements org.jboss.as.clustering.controller.Capability, UnaryOperator<RuntimeCapability.Builder<Void>> { enum Capability implements org.jboss.as.clustering.controller.Capability {
TRANSPORT_CHANNEL(Requirement.CHANNEL), TRANSPORT_CHANNEL(Requirement.CHANNEL),
; ;
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(UnaryRequirement requirement) { Capability(UnaryRequirement requirement) {
this.definition = new UnaryRequirementCapability(requirement, this).getDefinition(); this.definition = new UnaryRequirementCapability(requirement, UnaryCapabilityNameResolver.PARENT).getDefinition();
} }


@Override @Override
public RuntimeCapability<Void> getDefinition() { public RuntimeCapability<Void> getDefinition() {
return this.definition; return this.definition;
} }

@Override
public RuntimeCapability.Builder<Void> apply(RuntimeCapability.Builder<Void> builder) {
return builder.setDynamicNameMapper(DynamicCapabilityNameResolver.PARENT);
}
} }


enum Attribute implements org.jboss.as.clustering.controller.Attribute, UnaryOperator<SimpleAttributeDefinitionBuilder> { enum Attribute implements org.jboss.as.clustering.controller.Attribute, UnaryOperator<SimpleAttributeDefinitionBuilder> {
Expand Down
Expand Up @@ -24,8 +24,8 @@
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.infinispan.configuration.cache.PersistenceConfiguration; import org.infinispan.configuration.cache.PersistenceConfiguration;
import org.jboss.as.clustering.controller.BinaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ChildResourceDefinition; import org.jboss.as.clustering.controller.ChildResourceDefinition;
import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver;
import org.jboss.as.clustering.controller.ManagementResourceRegistration; import org.jboss.as.clustering.controller.ManagementResourceRegistration;
import org.jboss.as.clustering.controller.MetricHandler; import org.jboss.as.clustering.controller.MetricHandler;
import org.jboss.as.clustering.controller.Operations; import org.jboss.as.clustering.controller.Operations;
Expand Down Expand Up @@ -75,7 +75,7 @@ enum Capability implements org.jboss.as.clustering.controller.Capability {
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(String name, Class<?> type) { Capability(String name, Class<?> type) {
this.definition = RuntimeCapability.Builder.of(name, true).setServiceType(type).setDynamicNameMapper(DynamicCapabilityNameResolver.GRANDPARENT_PARENT).build(); this.definition = RuntimeCapability.Builder.of(name, true).setServiceType(type).setDynamicNameMapper(BinaryCapabilityNameResolver.GRANDPARENT_PARENT).build();
} }


@Override @Override
Expand Down
Expand Up @@ -28,13 +28,12 @@
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.jboss.as.clustering.controller.ChildResourceDefinition; import org.jboss.as.clustering.controller.ChildResourceDefinition;
import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceHandler; import org.jboss.as.clustering.controller.ResourceServiceHandler;
import org.jboss.as.clustering.controller.SimpleResourceRegistration; import org.jboss.as.clustering.controller.SimpleResourceRegistration;
import org.jboss.as.clustering.controller.UnaryRequirementCapability; import org.jboss.as.clustering.controller.UnaryRequirementCapability;
import org.jboss.as.controller.PathElement; import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.wildfly.clustering.spi.ClusteringRequirement; import org.wildfly.clustering.spi.ClusteringRequirement;


Expand All @@ -50,14 +49,8 @@ static PathElement pathElement(String value) {


static final Map<ClusteringRequirement, org.jboss.as.clustering.controller.Capability> CLUSTERING_CAPABILITIES = new EnumMap<>(ClusteringRequirement.class); static final Map<ClusteringRequirement, org.jboss.as.clustering.controller.Capability> CLUSTERING_CAPABILITIES = new EnumMap<>(ClusteringRequirement.class);
static { static {
UnaryOperator<RuntimeCapability.Builder<Void>> configurator = new UnaryOperator<RuntimeCapability.Builder<Void>>() {
@Override
public RuntimeCapability.Builder<Void> apply(RuntimeCapability.Builder<Void> builder) {
return builder.setDynamicNameMapper(DynamicCapabilityNameResolver.PARENT);
}
};
for (ClusteringRequirement requirement : EnumSet.allOf(ClusteringRequirement.class)) { for (ClusteringRequirement requirement : EnumSet.allOf(ClusteringRequirement.class)) {
CLUSTERING_CAPABILITIES.put(requirement, new UnaryRequirementCapability(requirement, configurator)); CLUSTERING_CAPABILITIES.put(requirement, new UnaryRequirementCapability(requirement, UnaryCapabilityNameResolver.PARENT));
} }
} }


Expand Down
Expand Up @@ -24,7 +24,7 @@


import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ResourceCapabilityReference; import org.jboss.as.clustering.controller.ResourceCapabilityReference;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory; import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory;
Expand Down Expand Up @@ -56,7 +56,7 @@ public ResourceDescriptor apply(ResourceDescriptor descriptor) {
return this.configurator.apply(descriptor) return this.configurator.apply(descriptor)
.setAddOperationTransformation(new LegacyAddOperationTransformation("auth_class")) .setAddOperationTransformation(new LegacyAddOperationTransformation("auth_class"))
.setOperationTransformation(LEGACY_OPERATION_TRANSFORMER) .setOperationTransformation(LEGACY_OPERATION_TRANSFORMER)
.addResourceCapabilityReference(new ResourceCapabilityReference(Capability.PROTOCOL, AuthTokenResourceDefinition.Capability.AUTH_TOKEN, DynamicCapabilityNameResolver.PARENT)) .addResourceCapabilityReference(new ResourceCapabilityReference(Capability.PROTOCOL, AuthTokenResourceDefinition.Capability.AUTH_TOKEN, UnaryCapabilityNameResolver.PARENT))
; ;
} }
} }
Expand Down
Expand Up @@ -27,7 +27,7 @@
import org.jboss.as.clustering.controller.CapabilityReference; import org.jboss.as.clustering.controller.CapabilityReference;
import org.jboss.as.clustering.controller.ChildResourceDefinition; import org.jboss.as.clustering.controller.ChildResourceDefinition;
import org.jboss.as.clustering.controller.CommonUnaryRequirement; import org.jboss.as.clustering.controller.CommonUnaryRequirement;
import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.UnaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory; import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory;
import org.jboss.as.clustering.controller.SimpleResourceRegistration; import org.jboss.as.clustering.controller.SimpleResourceRegistration;
Expand Down Expand Up @@ -58,7 +58,7 @@ enum Capability implements org.jboss.as.clustering.controller.Capability, UnaryR
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(String name, Class<?> type) { Capability(String name, Class<?> type) {
this.definition = RuntimeCapability.Builder.of(name, true).setServiceType(type).setAllowMultipleRegistrations(true).setDynamicNameMapper(DynamicCapabilityNameResolver.GRANDPARENT).build(); this.definition = RuntimeCapability.Builder.of(name, true).setServiceType(type).setAllowMultipleRegistrations(true).setDynamicNameMapper(UnaryCapabilityNameResolver.GRANDPARENT).build();
} }


@Override @Override
Expand Down
Expand Up @@ -26,7 +26,7 @@
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;


import org.jboss.as.clustering.controller.DynamicCapabilityNameResolver; import org.jboss.as.clustering.controller.BinaryCapabilityNameResolver;
import org.jboss.as.clustering.controller.Operations; import org.jboss.as.clustering.controller.Operations;
import org.jboss.as.clustering.controller.ResourceDescriptor; import org.jboss.as.clustering.controller.ResourceDescriptor;
import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory; import org.jboss.as.clustering.controller.ResourceServiceBuilderFactory;
Expand Down Expand Up @@ -68,7 +68,7 @@ enum Capability implements org.jboss.as.clustering.controller.Capability {
private final RuntimeCapability<Void> definition; private final RuntimeCapability<Void> definition;


Capability(String name) { Capability(String name) {
this.definition = RuntimeCapability.Builder.of(name, true).setDynamicNameMapper(DynamicCapabilityNameResolver.PARENT_CHILD).setAllowMultipleRegistrations(true).build(); this.definition = RuntimeCapability.Builder.of(name, true).setDynamicNameMapper(BinaryCapabilityNameResolver.PARENT_CHILD).setAllowMultipleRegistrations(true).build();
} }


@Override @Override
Expand Down

0 comments on commit cd160b4

Please sign in to comment.