mirror of
https://github.com/RatzzFatzz/MKVAudioSubtitleChanger.git
synced 2026-02-12 02:25:59 +01:00
Add config validators & tests
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator;
|
||||
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
|
||||
import at.pcgamingfreaks.yaml.YAML;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isLanguageValid;
|
||||
|
||||
public class AttributeConfigValidator extends ConfigValidator<List<AttributeConfig>> {
|
||||
|
||||
public AttributeConfigValidator() {
|
||||
super(ConfigProperty.ATTRIBUTE_CONFIG, true, null);
|
||||
}
|
||||
|
||||
public ValidationResult validate(YAML yaml, CommandLine cmd) {
|
||||
System.out.printf("%s: ", property.prop());
|
||||
List<AttributeConfig> result;
|
||||
|
||||
Function<String, String> audio = key -> yaml.getString(key + ".audio", null);
|
||||
Function<String, String> subtitle = key -> yaml.getString(key + ".subtitle", null);
|
||||
|
||||
if (yaml.getKeysFiltered(property.prop() + ".*").size() > 0) {
|
||||
result = yaml.getKeysFiltered(".*audio.*").stream()
|
||||
.sorted()
|
||||
.map(key -> key.replace(".audio", ""))
|
||||
.map(key -> new AttributeConfig(audio.apply(key), subtitle.apply(key)))
|
||||
.collect(Collectors.toList());
|
||||
} else if (required) {
|
||||
System.out.println("missing");
|
||||
return ValidationResult.MISSING;
|
||||
} else {
|
||||
System.out.println("ok");
|
||||
return ValidationResult.NOT_PRESENT;
|
||||
}
|
||||
|
||||
if (!isValid(result) || !setValue(result)) {
|
||||
System.out.println("invalid");
|
||||
return ValidationResult.INVALID;
|
||||
}
|
||||
|
||||
System.out.println("ok");
|
||||
return ValidationResult.VALID;
|
||||
}
|
||||
|
||||
@Override
|
||||
List<AttributeConfig> parse(String value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isValid(List<AttributeConfig> result) {
|
||||
if (result.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
boolean isValid = true;
|
||||
for (AttributeConfig attributeConfig : result) {
|
||||
isValid = isLanguageValid(attributeConfig.getAudioLanguage())
|
||||
&& isLanguageValid(attributeConfig.getSubtitleLanguage());
|
||||
if (!isValid) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,12 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ValidationResult;
|
||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
|
||||
import at.pcgamingfreaks.yaml.YAML;
|
||||
import at.pcgamingfreaks.yaml.YamlKeyNotFoundException;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.ARGUMENTS;
|
||||
|
||||
@@ -15,30 +18,23 @@ public class BooleanValidator extends ConfigValidator<Boolean> {
|
||||
super(property, required, null);
|
||||
}
|
||||
|
||||
public ValidationResult validate(YAML yaml, CommandLine cmd) {
|
||||
System.out.printf("Checking %s... ", property.prop());
|
||||
boolean result;
|
||||
protected BiFunction<YAML, ConfigProperty, Optional<Boolean>> provideDataYaml() {
|
||||
return (yaml, property) -> {
|
||||
if (yaml.isSet(ARGUMENTS.prop())
|
||||
&& yaml.getStringList(ARGUMENTS.prop(), List.of()).contains(property.prop())) {
|
||||
return Optional.of(true);
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
result = true;
|
||||
} else if (yaml.isSet(ARGUMENTS.prop())
|
||||
&& yaml.getStringList(ARGUMENTS.prop(), List.of()).contains(property.prop())) {
|
||||
result = true;
|
||||
} else if (required) {
|
||||
System.out.println("missing");
|
||||
return ValidationResult.MISSING;
|
||||
} else {
|
||||
System.out.println("ok");
|
||||
return ValidationResult.NOT_PRESENT;
|
||||
}
|
||||
|
||||
if (!isValid(result) || !setValue(result)) {
|
||||
System.out.println("invalid");
|
||||
return ValidationResult.INVALID;
|
||||
}
|
||||
|
||||
System.out.println("ok");
|
||||
return ValidationResult.VALID;
|
||||
protected BiFunction<CommandLine, ConfigProperty, Optional<Boolean>> provideDataCmd() {
|
||||
return (cmd, property) -> {
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
return Optional.of(true);
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,6 +13,9 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -23,25 +26,35 @@ public abstract class ConfigValidator<FieldType> {
|
||||
protected final FieldType defaultValue;
|
||||
|
||||
public ValidationResult validate(YAML yaml, CommandLine cmd) {
|
||||
System.out.printf("Checking %s... ", property.prop());
|
||||
String resultString = null;
|
||||
System.out.printf("%s: ", property.prop());
|
||||
FieldType result;
|
||||
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
resultString = cmd.getOptionValue(property.prop());
|
||||
} else if (yaml.isSet(property.prop())) {
|
||||
try {
|
||||
resultString = yaml.getString(property.prop());
|
||||
} catch (YamlKeyNotFoundException ignored) {}
|
||||
} else if (required) {
|
||||
System.out.println("missing");
|
||||
return ValidationResult.MISSING;
|
||||
Optional<FieldType> cmdResult = provideDataCmd().apply(cmd, property);
|
||||
Optional<FieldType> yamlResult = provideDataYaml().apply(yaml, property);
|
||||
|
||||
if (cmdResult.isPresent()) {
|
||||
result = cmdResult.get();
|
||||
} else if (yamlResult.isPresent()) {
|
||||
result = yamlResult.get();
|
||||
} else {
|
||||
System.out.println("ok");
|
||||
return ValidationResult.NOT_PRESENT;
|
||||
if (defaultValue != null) {
|
||||
if (setValue(defaultValue)) {
|
||||
System.out.println("default");
|
||||
return ValidationResult.DEFAULT;
|
||||
} else {
|
||||
System.out.println("invalid");
|
||||
return ValidationResult.INVALID;
|
||||
}
|
||||
}
|
||||
if (required) {
|
||||
System.out.println("missing");
|
||||
return ValidationResult.MISSING;
|
||||
} else {
|
||||
System.out.println("ok");
|
||||
return ValidationResult.NOT_PRESENT;
|
||||
}
|
||||
}
|
||||
|
||||
FieldType result = parse(resultString);
|
||||
|
||||
if (!isValid(result) || !setValue(result)) {
|
||||
System.out.println("invalid");
|
||||
return ValidationResult.INVALID;
|
||||
@@ -51,6 +64,28 @@ public abstract class ConfigValidator<FieldType> {
|
||||
return ValidationResult.VALID;
|
||||
}
|
||||
|
||||
protected BiFunction<YAML, ConfigProperty, Optional<FieldType>> provideDataYaml() {
|
||||
return (yaml, property) -> {
|
||||
if (yaml.isSet(property.prop())) {
|
||||
try {
|
||||
return Optional.of(parse(yaml.getString(property.prop())));
|
||||
} catch (YamlKeyNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
protected BiFunction<CommandLine, ConfigProperty, Optional<FieldType>> provideDataCmd() {
|
||||
return (cmd, property) -> {
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
return Optional.of(parse(cmd.getOptionValue(property.prop())));
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
abstract FieldType parse(String value);
|
||||
|
||||
abstract boolean isValid(FieldType result);
|
||||
|
||||
@@ -14,7 +14,7 @@ public class OperatingSystemValidator extends BooleanValidator {
|
||||
|
||||
@Override
|
||||
public ValidationResult validate(YAML yaml, CommandLine cmd) {
|
||||
System.out.printf("Checking %s... ", property.prop());
|
||||
System.out.printf("%s: ", property.prop());
|
||||
Boolean result = StringUtils.containsIgnoreCase(System.getProperty("os.name"), "windows");
|
||||
|
||||
if (!isValid(result) || !setValue(result)) {
|
||||
|
||||
@@ -13,7 +13,7 @@ public class PathValidator extends ConfigValidator<File> {
|
||||
|
||||
@Override
|
||||
protected File parse(String value) {
|
||||
return value != null ? Path.of(value).toFile() : defaultValue;
|
||||
return Path.of(value).toFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,10 +9,8 @@ import org.apache.commons.cli.CommandLine;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SetValidator extends ConfigValidator<Set<String>> {
|
||||
@@ -24,7 +22,7 @@ public class SetValidator extends ConfigValidator<Set<String>> {
|
||||
}
|
||||
|
||||
public ValidationResult validate(YAML yaml, CommandLine cmd) {
|
||||
System.out.printf("Checking %s... ", property.prop());
|
||||
System.out.printf("%s: ", property.prop());
|
||||
List<String> resultList = null;
|
||||
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
@@ -51,6 +49,27 @@ public class SetValidator extends ConfigValidator<Set<String>> {
|
||||
System.out.println("ok");
|
||||
return ValidationResult.VALID;
|
||||
}
|
||||
|
||||
protected BiFunction<YAML, ConfigProperty, Optional<Set<String>>> provideDataYaml() {
|
||||
return (yaml, property) -> {
|
||||
if (yaml.isSet(property.prop())) {
|
||||
try {
|
||||
return Optional.of(parse(yaml.getStringList(property.prop())));
|
||||
} catch (YamlKeyNotFoundException ignored) {
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
|
||||
protected BiFunction<CommandLine, ConfigProperty, Optional<Set<String>>> provideDataCmd() {
|
||||
return (cmd, property) -> {
|
||||
if (cmd.hasOption(property.prop())) {
|
||||
return Optional.of(parse(List.of(cmd.getOptionValues(property.prop()))));
|
||||
}
|
||||
return Optional.empty();
|
||||
};
|
||||
}
|
||||
@Override
|
||||
Set<String> parse(String value) {
|
||||
throw new RuntimeException("This should not be called");
|
||||
|
||||
Reference in New Issue
Block a user