added setMode to documentation, added error handling with templated exception for set mode and refactored some feature config related methods (changed the equal to be case insensitive)

This commit is contained in:
Sheldan
2020-05-16 21:46:10 +02:00
parent d2264937b2
commit b0ab88d143
15 changed files with 84 additions and 29 deletions

View File

@@ -13,6 +13,7 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureModeService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -34,20 +35,15 @@ public class SetMode extends AbstractConditionableCommand {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
@Autowired
private TemplateService templateService;
@Override
public CommandResult execute(CommandContext commandContext) {
String featureName = (String) commandContext.getParameters().getParameters().get(0);
String modeName = (String) commandContext.getParameters().getParameters().get(1);
if(featureConfigService.doesFeatureExist(featureName)) {
if(featureConfigService.isModeValid(featureName, modeName)) {
featureModeService.setModeForFeatureTo(featureName, commandContext.getUserInitiatedContext().getServer(), modeName);
} else {
return CommandResult.fromError("Mode not available");
}
} else {
return CommandResult.fromError("Feature does not exist");
}
featureModeService.setModeForFeatureTo(featureName, commandContext.getUserInitiatedContext().getServer(), modeName);
return CommandResult.fromSuccess();
}

View File

@@ -5,6 +5,8 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureMode;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.exception.FeatureModeNotFoundException;
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
import dev.sheldan.abstracto.core.models.FeatureValidationResult;
import dev.sheldan.abstracto.core.models.database.AServer;
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,7 +45,7 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
if(any.isPresent()) {
return any.get();
}
throw new AbstractoRunTimeException(String.format("Feature %s not found in configuration", featureEnum.getKey()));
throw new FeatureNotFoundException("", featureEnum.getKey(), getFeaturesAsList());
}
@Override
@@ -64,23 +66,29 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
.collect(Collectors.toList());
}
@Override
public List<String> getFeatureModesFromFeatureAsString(String featureName) {
FeatureConfig featureConfig = getFeatureDisplayForFeature(featureName);
return featureConfig.getAvailableModes().stream().map(FeatureMode::getKey).collect(Collectors.toList());
}
@Override
public boolean doesFeatureExist(String name) {
return availableFeatures.stream().anyMatch(featureDisplay -> featureDisplay.getFeature().getKey().equals(name));
return availableFeatures.stream().anyMatch(featureDisplay -> featureDisplay.getFeature().getKey().equalsIgnoreCase(name));
}
@Override
public FeatureEnum getFeatureEnum(String key) {
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getFeature().getKey().equals(key)).findAny();
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getFeature().getKey().equalsIgnoreCase(key)).findAny();
if(foundFeature.isPresent()) {
return foundFeature.get().getFeature();
}
throw new AbstractoRunTimeException(String.format("Feature %s not found.", key));
throw new FeatureNotFoundException("", key, getFeaturesAsList());
}
@Override
public PostTargetEnum getPostTargetEnumByKey(String key) {
Predicate<PostTargetEnum> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equals(key);
Predicate<PostTargetEnum> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equalsIgnoreCase(key);
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getRequiredPostTargets().stream().anyMatch(postTargetComparison)).findAny();
if(foundFeature.isPresent()) {
return foundFeature.get().getRequiredPostTargets().stream().filter(postTargetComparison).findAny().get();
@@ -107,24 +115,23 @@ public class FeatureConfigServiceBean implements FeatureConfigService {
}
@Override
public FeatureMode getFeatureModeByKey(String key) {
Predicate<FeatureMode> postTargetComparison = postTargetEnum -> postTargetEnum.getKey().equals(key);
Optional<FeatureConfig> foundFeature = availableFeatures.stream().filter(featureDisplay -> featureDisplay.getAvailableModes().stream().anyMatch(postTargetComparison)).findAny();
public FeatureMode getFeatureModeByKey(FeatureConfig featureConfig, String key) {
Optional<FeatureMode> foundFeature = featureConfig.getAvailableModes().stream().filter(featureMode -> featureMode.getKey().equalsIgnoreCase(key)).findAny();
if(foundFeature.isPresent()) {
return foundFeature.get().getAvailableModes().stream().filter(postTargetComparison).findAny().get();
return foundFeature.get();
}
throw new AbstractoRunTimeException(String.format("Feature mode %s not found.", key));
throw new FeatureModeNotFoundException("", key, getFeatureModesFromFeatureAsString(featureConfig.getFeature().getKey()));
}
@Override
public boolean isModeValid(String featureName, String modeName) {
return availableFeatures
.stream()
.filter(featureConfig -> featureConfig.getFeature().getKey().equals(featureName))
.filter(featureConfig -> featureConfig.getFeature().getKey().equalsIgnoreCase(featureName))
.map(FeatureConfig::getAvailableModes)
.anyMatch(featureModes -> featureModes
.stream()
.anyMatch(featureMode -> featureMode.getKey().equals(modeName))
.anyMatch(featureMode -> featureMode.getKey().equalsIgnoreCase(modeName))
);
}
}

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.config.FeatureMode;
import dev.sheldan.abstracto.core.models.database.AFeature;
@@ -35,19 +36,22 @@ public class FeatureModeServiceBean implements FeatureModeService {
@Override
public AFeatureMode setModeForFeatureTo(AFeatureFlag flag, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(flag.getFeature().getKey());
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return setModeForFeatureTo(flag, featureMode);
}
@Override
public AFeatureMode setModeForFeatureTo(FeatureEnum featureEnum, AServer server, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(featureEnum);
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return setModeForFeatureTo(featureEnum, server, featureMode);
}
@Override
public AFeatureMode setModeForFeatureTo(AFeature feature, AServer server, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(feature.getKey());
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return setModeForFeatureTo(feature, server, featureMode);
}
@@ -77,19 +81,22 @@ public class FeatureModeServiceBean implements FeatureModeService {
@Override
public AFeatureMode createMode(AFeatureFlag flag, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(flag.getFeature().getKey());
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return createMode(flag, featureMode);
}
@Override
public AFeatureMode createMode(FeatureEnum featureEnum, AServer server, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(featureEnum);
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return createMode(featureEnum, server, featureMode);
}
@Override
public AFeatureMode createMode(AFeature feature, AServer server, String newMode) {
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(newMode);
FeatureConfig featureConfig = featureConfigService.getFeatureDisplayForFeature(feature.getKey());
FeatureMode featureMode = featureConfigService.getFeatureModeByKey(featureConfig, newMode);
return createMode(feature, server, featureMode);
}

View File

@@ -0,0 +1 @@
<#assign availableModes>${availableModes?join(", ")}</#assign><#include "feature_mode_not_found_text">