private void processCapabilityRequirement( OperationContext context, String attributeName, boolean remove, String... attributeValues) { String dependentName; if (dynamicDependent) { dependentName = RuntimeCapability.buildDynamicCapabilityName( baseDependentName, getDynamicDependentName(context.getCurrentAddress())); } else { dependentName = baseDependentName; } for (String attributeValue : attributeValues) { String requirementName = RuntimeCapability.buildDynamicCapabilityName(baseRequirementName, attributeValue); if (remove) { context.deregisterCapabilityRequirement(requirementName, dependentName); } else { context.registerAdditionalCapabilityRequirement( requirementName, dependentName, attributeName); } } }
@Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { ServiceTarget serviceTarget = context.getServiceTarget(); RuntimeCapability<Void> runtimeCapability = REALM_MAPPER_RUNTIME_CAPABILITY.fromBaseCapability(context.getCurrentAddressValue()); ServiceName realmMapperName = runtimeCapability.getCapabilityServiceName(RealmMapper.class); final String pattern = PATTERN.resolveModelAttribute(context, model).asString(); ModelNode realmMapList = REALM_REALM_MAP.resolveModelAttribute(context, model); Set<String> names = realmMapList.keys(); final Map<String, String> realmRealmMap = new HashMap<String, String>(names.size()); names.forEach((String s) -> realmRealmMap.put(s, realmMapList.require(s).asString())); String delegateRealmMapper = asStringIfDefined(context, DELEGATE_REALM_MAPPER, model); final InjectedValue<RealmMapper> delegateRealmMapperInjector = new InjectedValue<RealmMapper>(); TrivialService<RealmMapper> realmMapperService = new TrivialService<RealmMapper>( () -> { RealmMapper delegate = delegateRealmMapperInjector.getOptionalValue(); Pattern compiledPattern = Pattern.compile(pattern); if (delegate == null) { return new MappedRegexRealmMapper(compiledPattern, realmRealmMap); } else { return new MappedRegexRealmMapper(compiledPattern, delegate, realmRealmMap); } }); ServiceBuilder<RealmMapper> realmMapperBuilder = serviceTarget.addService(realmMapperName, realmMapperService); if (delegateRealmMapper != null) { String delegateCapabilityName = RuntimeCapability.buildDynamicCapabilityName( REALM_MAPPER_CAPABILITY, delegateRealmMapper); ServiceName delegateServiceName = context.getCapabilityServiceName(delegateCapabilityName, RealmMapper.class); realmMapperBuilder.addDependency( delegateServiceName, RealmMapper.class, delegateRealmMapperInjector); } commonDependencies(realmMapperBuilder).setInitialMode(Mode.LAZY).install(); }
@Override protected void recordCapabilitiesAndRequirements( OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException { super.recordCapabilitiesAndRequirements(context, operation, resource); ModelNode model = resource.getModel(); if (CommonAttributes.JGROUPS_CHANNEL.resolveModelAttribute(context, model).isDefined() && !BroadcastGroupDefinition.JGROUPS_STACK .resolveModelAttribute(context, model) .isDefined()) { context.registerAdditionalCapabilityRequirement( JGroupsDefaultRequirement.CHANNEL_FACTORY.getName(), RuntimeCapability.buildDynamicCapabilityName( BroadcastGroupDefinition.CHANNEL_FACTORY_CAPABILITY.getName(), context.getCurrentAddressValue()), BroadcastGroupDefinition.JGROUPS_STACK.getName()); } }
@Override protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { ServiceTarget serviceTarget = context.getServiceTarget(); RuntimeCapability<Void> runtimeCapability = SECURITY_REALM_RUNTIME_CAPABILITY.fromBaseCapability(context.getCurrentAddressValue()); ServiceName realmName = runtimeCapability.getCapabilityServiceName(SecurityRealm.class); KeyStoreRealmService keyStoreRealmService = new KeyStoreRealmService(); ServiceBuilder<SecurityRealm> serviceBuilder = serviceTarget.addService(realmName, keyStoreRealmService); String keyStoreCapabilityName = RuntimeCapability.buildDynamicCapabilityName( KEYSTORE_CAPABILITY, KEYSTORE.resolveModelAttribute(context, model).asString()); ServiceName keyStoreServiceName = context.getCapabilityServiceName(keyStoreCapabilityName, KeyStore.class); KEY_STORE_UTIL.addInjection( serviceBuilder, keyStoreRealmService.getKeyStoreInjector(), keyStoreServiceName); commonDependencies(serviceBuilder).setInitialMode(Mode.ACTIVE).install(); }