package discovery.computername; import java.util.List; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Mark */ public final class OtagoComputerNameResolver implements ComputerNameResolver { private final String computerName; private String labName; private String machineId; private List<String> regexes = new ArrayList<String>(); /** * <p> * Otago University lab machines usually have a COMPUTERNAME environment * variable in the form "labname-machineId", eg SB316-23.</p> * * <p> * If the name parameter is set then use that, otherwise use the envVar * parameter to get the name from an environment variable.</p> * * @param name the computer name to use (or null). * @param envVar the environment variable to use if name is not set. * */ public OtagoComputerNameResolver(final String name, final String envVar) { super(); if (name == null) { computerName = System.getenv(envVar); } else { computerName = name; } regexes.add("(SB\\d\\d\\d)-(\\d\\d)"); // SoB old style regexes.add("(SB\\d\\d\\d)(\\d\\d)"); // SoB incompetent-tech style regexes.add("(TF\\d\\d)(\\d\\d)"); // Teaching facilities 4 digit style regexes.add("(TF\\d\\d\\d)(\\d\\d)"); // Teaching facilities 5 digit style } @Override public void resolve() { if (computerName == null) { throw new InvalidComputerNameException("The computer name has not been provided via a recognisable method.\nTry setting the CLIENTNAME environment variable, or passing the name as an argument when starting the application."); } for (String labRegex : regexes) { Matcher matcher = Pattern.compile(labRegex).matcher(computerName); if(matcher.matches()) { this.labName = matcher.group(1); this.machineId = matcher.group(2); return; } } throw new InvalidComputerNameException("The computer name '" + computerName + "' does not match a recognised lab!"); // this.labName = nameBits[0]; // this.machineId = nameBits[1]; } @Override public String getComputerName() { return this.computerName; } @Override public String getLabName() { return this.labName; } @Override public String getMachineId() { return this.machineId; } @Override public String toString() { return "OtagoComputerNameResolver{" + "computerName=" + computerName + ", labName=" + labName + ", machineId=" + machineId + '}'; } }