package org.arquillian.cube.docker.impl.client;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.arquillian.cube.docker.impl.client.config.DockerCompositions;
import org.arquillian.cube.docker.impl.util.AutoStartOrderUtil;
import org.arquillian.cube.spi.AutoStartParser;
import org.arquillian.cube.spi.Node;
public class RegularExpressionAutoStartParser implements AutoStartParser {
public static final String REGULAR_EXPRESSION_PREFIX = "regexp:";
private String expression;
private DockerCompositions containerDefinitions;
public RegularExpressionAutoStartParser(String expression, DockerCompositions containerDefinitions) {
if (!expression.startsWith(REGULAR_EXPRESSION_PREFIX)) {
throw new IllegalArgumentException(
"Regular Expression AutoStartParser should begin with " + REGULAR_EXPRESSION_PREFIX);
}
this.expression = expression;
this.containerDefinitions = containerDefinitions;
}
@Override
public Map<String, Node> parse() {
Map<String, Node> nodes = new HashMap<>();
String regularExpression = getRegularExpression(expression);
Pattern pattern = Pattern.compile(regularExpression);
Set<String> definedContainers = containerDefinitions.getNoneManualContainers().keySet();
for (String containerName : definedContainers) {
Matcher matcher = pattern.matcher(containerName);
if (matcher.matches()) {
nodes.put(containerName, Node.from(containerName));
}
}
return nodes;
}
private String getRegularExpression(String autoStartContainer) {
return autoStartContainer.substring(autoStartContainer.indexOf(':') + 1).trim();
}
@Override
public String toString() {
return AutoStartOrderUtil.toString(parse());
}
}