Newer
Older
democall3 / src / discovery / computername / OtagoComputerNameResolver.java
geoma48p on 20 Jul 2015 2 KB Started transition to JMS.
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 + '}';
	}
	
	
}