Skip to content
Merged

Variants #42853

Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,29 @@
// Licensed under the MIT License.
package com.azure.spring.cloud.feature.management;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;

import com.azure.spring.cloud.feature.management.implementation.FeatureManagementConfigProperties;
import com.azure.spring.cloud.feature.management.implementation.FeatureManagementProperties;
import com.azure.spring.cloud.feature.management.targeting.ContextualTargetingContextAccessor;
import com.azure.spring.cloud.feature.management.targeting.TargetingContextAccessor;
import com.azure.spring.cloud.feature.management.targeting.TargetingEvaluationOptions;

/**
* Configuration for setting up FeatureManager
*/
@Configuration
@EnableConfigurationProperties({ FeatureManagementConfigProperties.class, FeatureManagementProperties.class })
class FeatureManagementConfiguration {
class FeatureManagementConfiguration implements ApplicationContextAware {

private ApplicationContext appContext;

/**
* Creates Feature Manager
Expand All @@ -26,8 +35,24 @@ class FeatureManagementConfiguration {
* @return FeatureManager
*/
@Bean
FeatureManager featureManager(ApplicationContext context,
FeatureManagementProperties featureManagementConfigurations, FeatureManagementConfigProperties properties) {
return new FeatureManager(context, featureManagementConfigurations, properties);
FeatureManager featureManager(FeatureManagementProperties featureManagementConfigurations,
FeatureManagementConfigProperties properties,
ObjectProvider<TargetingContextAccessor> contextAccessorProvider,
ObjectProvider<ContextualTargetingContextAccessor> contextualAccessorProvider,
ObjectProvider<TargetingEvaluationOptions> evaluationOptionsProvider) {

TargetingContextAccessor contextAccessor = contextAccessorProvider.getIfAvailable();
ContextualTargetingContextAccessor contextualTargetingContextAccessor = contextualAccessorProvider
.getIfAvailable();
TargetingEvaluationOptions evaluationOptions = evaluationOptionsProvider
.getIfAvailable(() -> new TargetingEvaluationOptions());

return new FeatureManager(appContext, featureManagementConfigurations, properties, contextAccessor,
contextualTargetingContextAccessor, evaluationOptions);
}

@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
this.appContext = applicationContext;
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.cloud.feature.management.filters;

import com.azure.spring.cloud.feature.management.models.FeatureFilterEvaluationContext;

/**
* A Filter for Feature Management that is attached to Features. The filter needs to have @Component set to be found by
* feature management.
*/
Comment thread
mrm9084 marked this conversation as resolved.
@FunctionalInterface
public interface ContextualFeatureFilter {

/**
* Evaluates if the filter is on or off. Returning true results in Feature evaluation ending and returning true.
* Returning false results in the next Feature evaluation to continue.
*
* @param context The context for whether or not the filter is passed.
* @param appContext The internal app context
* @return True if the feature is enabled, false otherwise.
*/
boolean evaluate(FeatureFilterEvaluationContext context, Object appContext);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.cloud.feature.management.filters;

import com.azure.spring.cloud.feature.management.models.FeatureFilterEvaluationContext;

import reactor.core.publisher.Mono;

/**
* A Filter for Feature Management that is attached to Features. The filter needs to have @Component set to be found by
* feature management.
*/
@FunctionalInterface
public interface ContextualFeatureFilterAsync {

/**
* Evaluates if the filter is on or off. Returning true results in Feature evaluation ending and returning true.
* Returning false results in the next Feature evaluation to continue.
*
* @param context The context for whether or not the filter is passed.
* @param appContext The internal app context
* @return true if the feature is enabled, false otherwise.
*/
Mono<Boolean> evaluateAsync(FeatureFilterEvaluationContext context, Object appContext);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.cloud.feature.management.filters;

import com.azure.spring.cloud.feature.management.models.FeatureFilterEvaluationContext;

import reactor.core.publisher.Mono;

/**
* A Filter for Feature Management that is attached to Features. The filter needs to have @Component set to be found by
* feature management.
*/
@FunctionalInterface
public interface FeatureFilterAsync {

/**
* Evaluates if the filter is on or off. Returning true results in Feature evaluation ending and returning true.
* Returning false results in the next Feature evaluation to continue.
*
* @param context The context for whether or not the filter is passed.
* @return True if the feature is enabled, false otherwise.
*/
Mono<Boolean> evaluateAsync(FeatureFilterEvaluationContext context);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
// Licensed under the MIT License.
package com.azure.spring.cloud.feature.management.filters;

import com.azure.spring.cloud.feature.management.models.FeatureFilterEvaluationContext;
import static com.azure.spring.cloud.feature.management.models.FilterParameters.PERCENTAGE_FILTER_SETTING;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.azure.spring.cloud.feature.management.models.FilterParameters.PERCENTAGE_FILTER_SETTING;
import com.azure.spring.cloud.feature.management.models.FeatureFilterEvaluationContext;

/**
* A feature filter that can be used to activate a feature based on a random percentage.
Expand Down
Loading