PriorityDirectoryConverter.java

package emissary.command.converter;

import emissary.pickup.Priority;
import emissary.pickup.PriorityDirectory;

import org.apache.commons.lang3.StringUtils;
import picocli.CommandLine.ITypeConverter;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PriorityDirectoryConverter implements ITypeConverter<PriorityDirectory> {

    public PriorityDirectoryConverter() {
        super();
    }

    public static final String PRIORITY_DIR_REGEX = ".*:\\d+$";
    private static final Pattern priorityDirRegex = Pattern.compile(PRIORITY_DIR_REGEX);

    @Override
    public PriorityDirectory convert(String value) {
        final String dirName;
        final int priority;
        Matcher matcher = priorityDirRegex.matcher(value);
        if (matcher.matches()) {
            dirName = StringUtils.substringBeforeLast(value, ":");
            priority = Integer.parseInt(StringUtils.substringAfterLast(value, ":"));
        } else {
            dirName = value;
            priority = Priority.DEFAULT;
        }
        return new PriorityDirectory(StringUtils.appendIfMissing(dirName, "/"), priority);
    }
}