Skip to content
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.
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 @@ -15,6 +15,8 @@ public class CriteriaResponse {

private static final String DEFAULT_REASON = "Default result";

private static final String DEFAULT_SUCCESS = "Success";

private boolean result;

private String reason;
Expand Down Expand Up @@ -42,8 +44,15 @@ public CriteriaResponse buildFromSwitcher(Switcher switcher) {
}

public static CriteriaResponse buildFromDefault(Switcher switcher) {
return new CriteriaResponse(
Boolean.parseBoolean(switcher.getDefaultResult()), DEFAULT_REASON, switcher);
return new CriteriaResponse(Boolean.parseBoolean(switcher.getDefaultResult()), DEFAULT_REASON, switcher);
}

public static CriteriaResponse buildResultFail(String reason, Switcher switcher) {
return new CriteriaResponse(Boolean.FALSE, reason, switcher);
}

public static CriteriaResponse buildResultSuccess(Switcher switcher) {
return new CriteriaResponse(Boolean.TRUE, DEFAULT_SUCCESS, switcher);
}

public boolean isItOn() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,11 @@ public void registerValidator(Class<? extends Validator> validatorClass) {

public boolean execute(final Strategy strategy, final Entry switcherInput)
throws SwitcherInvalidStrategyException {
if (validators.containsKey(strategy.getStrategyValidator()))
return validators.get(strategy.getStrategyValidator()).execute(strategy, switcherInput);
if (!validators.containsKey(strategy.getStrategyValidator())) {
throw new SwitcherInvalidStrategyException(strategy.getStrategy());
}

throw new SwitcherInvalidStrategyException(strategy.getStrategy());
return validators.get(strategy.getStrategyValidator()).execute(strategy, switcherInput);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public class ClientLocalService {

private static final String STRATEGY_FAIL_PATTERN = "Strategy %s does not agree";
private static final String STRATEGY_FAIL_NO_INPUT_PATTERN = "Strategy %s did not receive any input";
private static final String CRITERIA_SUCCESS = "Success";

private final ValidatorService validatorService;

Expand All @@ -48,69 +47,64 @@ public ClientLocalService() {
public List<String> checkSwitchers(final Set<String> switchers, final Domain domain) {
List<String> notFound = new ArrayList<>();

boolean found;
for (final String switcher : switchers) {
found = false;
for (final Group group : domain.getGroup()) {
if (Arrays.stream(group.getConfig()).anyMatch(config -> config.getKey().equals(switcher))) {
found = true;
break;
}
}

if (!found)
if (Arrays.stream(domain.getGroup()).noneMatch(group ->
Arrays.stream(group.getConfig()).anyMatch(config -> config.getKey().equals(switcher)))) {
notFound.add(switcher);
}
}

return notFound;
}

/**
* Execute the criteria validation based on the configuration three. It starts
* Execute the criteria validation based on the configuration tree. It starts
* validating from the top of the node (Domain) ascending to the lower level
* (Strategy)
*
* @param switcher Configuration switcher to be validated
* @param domain Top level of the configuration three
* @param domain Top level of the configuration tree
* @return The criteria result
* @throws SwitcherException If encountered either invalid input or misconfiguration
*/
public CriteriaResponse executeCriteria(final Switcher switcher, final Domain domain) {
if (!domain.isActivated()) {
return new CriteriaResponse(false, DISABLED_DOMAIN, switcher);
return CriteriaResponse.buildResultFail(DISABLED_DOMAIN, switcher);
}

Config configFound = null;
Config config;
for (final Group group : domain.getGroup()) {
// validate in which group the switcher is configured
configFound = Arrays.stream(group.getConfig())
.filter(config -> config.getKey().equals(switcher.getSwitcherKey()))
.findFirst()
.orElse(null);

if (configFound != null) {
config = findConfigInGroup(group, switcher.getSwitcherKey());

if (!group.isActivated()) {
return new CriteriaResponse(false, DISABLED_GROUP, switcher);
}
if (config != null) {
return getCriteriaResponse(switcher, group, config);
}
}

if (!configFound.isActivated()) {
return new CriteriaResponse(false, DISABLED_CONFIG, switcher);
}
throw new SwitcherKeyNotFoundException(switcher.getSwitcherKey());
}

if (ArrayUtils.isNotEmpty(configFound.getStrategies())) {
return this.processOperation(configFound.getStrategies(), switcher.getEntry(), switcher);
}
private CriteriaResponse getCriteriaResponse(Switcher switcher, Group group, Config config) {
if (!group.isActivated()) {
return CriteriaResponse.buildResultFail(DISABLED_GROUP, switcher);
}

break;
}
if (!config.isActivated()) {
return CriteriaResponse.buildResultFail(DISABLED_CONFIG, switcher);
}

if (configFound == null) {
throw new SwitcherKeyNotFoundException(switcher.getSwitcherKey());
if (ArrayUtils.isNotEmpty(config.getStrategies())) {
return this.processOperation(config.getStrategies(), switcher.getEntry(), switcher);
}

return new CriteriaResponse(true, CRITERIA_SUCCESS, switcher);
return CriteriaResponse.buildResultSuccess(switcher);
}

private Config findConfigInGroup(final Group group, final String switcherKey) {
return Arrays.stream(group.getConfig())
.filter(c -> c.getKey().equals(switcherKey))
.findFirst()
.orElse(null);
}

/**
Expand All @@ -126,7 +120,6 @@ private CriteriaResponse processOperation(final Strategy[] configStrategies, fin
SwitcherUtils.debugSupplier(logger, "configStrategies: {}", Arrays.toString(configStrategies));
SwitcherUtils.debugSupplier(logger, "input: {}", Arrays.toString(input != null ? input.toArray() : ArrayUtils.EMPTY_STRING_ARRAY));

boolean result;
for (final Strategy strategy : configStrategies) {
if (!strategy.isActivated()) {
continue;
Expand All @@ -138,18 +131,16 @@ private CriteriaResponse processOperation(final Strategy[] configStrategies, fin
return strategyFailed(switcher, strategy, STRATEGY_FAIL_NO_INPUT_PATTERN);
}

result = validatorService.execute(strategy, switcherInput);
if (!result) {
if (!validatorService.execute(strategy, switcherInput)) {
return strategyFailed(switcher, strategy, STRATEGY_FAIL_PATTERN);
}
}

return new CriteriaResponse(true, CRITERIA_SUCCESS, switcher);
return CriteriaResponse.buildResultSuccess(switcher);
}

private CriteriaResponse strategyFailed(Switcher switcher, Strategy strategy, String pattern) {
return new CriteriaResponse(false, String.format(pattern, strategy.getStrategy()),
switcher);
return CriteriaResponse.buildResultFail(String.format(pattern, strategy.getStrategy()), switcher);
}

private Entry tryGetSwitcherInput(final List<Entry> input, Strategy strategy) {
Expand Down