package org.arquillian.cube.docker.impl.util; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class AbstractCliInternetAddressResolver { public static final String DOCKERHOST_TAG = "dockerHost"; private static final Logger log = Logger.getLogger(AbstractCliInternetAddressResolver.class.getName()); protected CommandLineExecutor commandLineExecutor; private String cachedIp = null; public AbstractCliInternetAddressResolver(final CommandLineExecutor commandLineExecutor) { this.commandLineExecutor = commandLineExecutor; } public String ip(String cliPathExec, boolean force) { if (cachedIp == null || force) { cachedIp = getIp(cliPathExec); } return cachedIp; } private String getIp(String cliPathExec) { String output = commandLineExecutor.execCommand(getCommandArguments(cliPathExec)); Matcher m = getIpPattern().matcher(output); if (m.find()) { String ip = m.group(); return ip; } else { String errorMessage = String.format( "Cli Internet address resolver executed %s command and does not return a valid ip. It returned %s.", Arrays.toString(getCommandArguments(cliPathExec)), output); log.log(Level.SEVERE, errorMessage); throw new IllegalArgumentException(errorMessage); } } protected abstract String[] getCommandArguments(String cliPathExec); protected abstract Pattern getIpPattern(); }