mirror of
https://github.com/RatzzFatzz/MKVAudioSubtitleChanger.git
synced 2026-02-11 02:05:56 +01:00
Improve attribute config converter
This commit is contained in:
@@ -1,13 +1,11 @@
|
|||||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
|
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
|
||||||
|
|
||||||
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.converter.AttributeConfigConverter;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validation.ValidFile;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validation.ValidFile;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validation.ValidMkvToolNix;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validation.ValidMkvToolNix;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.FileUtils;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.FileUtils;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ValidationUtil;
|
|
||||||
import jakarta.validation.ConstraintViolation;
|
|
||||||
import jakarta.validation.Validator;
|
|
||||||
import jakarta.validation.constraints.Min;
|
import jakarta.validation.constraints.Min;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
|
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.converter;
|
||||||
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
||||||
import picocli.CommandLine;
|
import picocli.CommandLine;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isLanguageValid;
|
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isLanguageValid;
|
||||||
|
|
||||||
public class AttributeConfigConverter implements CommandLine.ITypeConverter<AttributeConfig> {
|
public class AttributeConfigConverter implements CommandLine.ITypeConverter<AttributeConfig> {
|
||||||
private static final String SEPARATOR = ":";
|
private static final String AUDIO_GROUP = "audio";
|
||||||
private static final Pattern PATTERN = Pattern.compile("^.{3}:.{3}$");
|
private static final String SUB_GROUP = "sub";
|
||||||
|
private static final Pattern PATTERN = Pattern.compile(String.format("^(?<%s>.{3}):(?<%s>.{3})$", AUDIO_GROUP, SUB_GROUP));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts the input string into an AttributeConfig object.
|
* Converts the input string into an AttributeConfig object.
|
||||||
@@ -20,38 +22,26 @@ public class AttributeConfigConverter implements CommandLine.ITypeConverter<Attr
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public AttributeConfig convert(String s) {
|
public AttributeConfig convert(String s) {
|
||||||
validateInput(s);
|
Matcher matcher = PATTERN.matcher(s);
|
||||||
|
|
||||||
String[] split = s.split(SEPARATOR);
|
if (!matcher.find()) throw new CommandLine.TypeConversionException("Invalid Attribute config: " + s);
|
||||||
AttributeConfig attr = new AttributeConfig(split[0], split[1]);
|
|
||||||
|
|
||||||
validateResult(attr);
|
return validateResult(new AttributeConfig(matcher.group("audio"), matcher.group("sub")));
|
||||||
|
|
||||||
return attr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates that the input string matches the expected pattern.
|
* Validates that both language codes in the {@link AttributeConfig} object are valid.
|
||||||
*
|
*
|
||||||
* @param s String to validate
|
* @param attr {@link AttributeConfig} object to validate
|
||||||
* @throws CommandLine.TypeConversionException if the value doesn't match the expected pattern
|
|
||||||
*/
|
|
||||||
private static void validateInput(String s) {
|
|
||||||
if (!PATTERN.matcher(s).matches()) {
|
|
||||||
throw new CommandLine.TypeConversionException("Invalid Attribute config: " + s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates that both language codes in the AttributeConfig object are valid.
|
|
||||||
*
|
|
||||||
* @param attr AttributeConfig object to validate
|
|
||||||
* @throws CommandLine.TypeConversionException if either language code is invalid
|
* @throws CommandLine.TypeConversionException if either language code is invalid
|
||||||
|
* @return valid {@link AttributeConfig}
|
||||||
*/
|
*/
|
||||||
private static void validateResult(AttributeConfig attr) {
|
private static AttributeConfig validateResult(AttributeConfig attr) {
|
||||||
if (!isLanguageValid(attr.getAudioLanguage()))
|
if (!isLanguageValid(attr.getAudioLanguage()))
|
||||||
throw new CommandLine.TypeConversionException("Audio language invalid: " + attr.getAudioLanguage());
|
throw new CommandLine.TypeConversionException("Audio language invalid: " + attr.getAudioLanguage());
|
||||||
if (!isLanguageValid(attr.getSubtitleLanguage()))
|
if (!isLanguageValid(attr.getSubtitleLanguage()))
|
||||||
throw new CommandLine.TypeConversionException("Subtitle language invalid: " + attr.getSubtitleLanguage());
|
throw new CommandLine.TypeConversionException("Subtitle language invalid: " + attr.getSubtitleLanguage());
|
||||||
|
|
||||||
|
return attr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
|
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.converter;
|
||||||
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
Reference in New Issue
Block a user