package com.ibm.nmon.data.matcher; import java.util.Collection; import java.util.List; import com.ibm.nmon.data.DataSet; /** * Matches a {@link DataSet} based on the operating system. This class relies on the correct * metadata being set by the parser. */ public final class OSMatcher extends SimpleHostMatcher { private final HostMatcher matcher; public OSMatcher(String operatingSystem) { super("os"); if ((operatingSystem == null) || "".equals(operatingSystem)) { throw new IllegalArgumentException("operatingSystem cannot be null"); } operatingSystem = operatingSystem.toLowerCase(); if (operatingSystem.contains("linux")) { matcher = LINUX; } else if (operatingSystem.contains("aix")) { matcher = AIX; } else if (operatingSystem.contains("vios")) { matcher = VIOS; } else if (operatingSystem.contains("unix")) { matcher = UNIX; } else if (operatingSystem.contains("perfmon")) { matcher = PERFMON; } else { matcher = UNKNOWN; } } @Override public boolean matchesHost(DataSet data) { return matcher.matchesHost(data); } @Override public String toString() { return matcher.toString(); } @Override public int hashCode() { return matcher.hashCode(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof OSMatcher) { OSMatcher matcher = (OSMatcher) obj; return this.matcher == matcher.matcher; } else { return false; } } private static final HostMatcher LINUX = new SimpleHostMatcher("linux") { @Override public boolean matchesHost(DataSet data) { return getMetadata(data, "OS").contains("linux"); } }; private static final HostMatcher AIX = new SimpleHostMatcher("aix") { @Override public boolean matchesHost(DataSet data) { return !getMetadata(data, "AIX").equals(""); } }; private static final HostMatcher VIOS = new SimpleHostMatcher("vios") { @Override public boolean matchesHost(DataSet data) { return !getMetadata(data, "VIOS").equals(""); } }; private static final HostMatcher UNIX = new SimpleHostMatcher("unix") { @Override public boolean matchesHost(DataSet data) { return LINUX.matchesHost(data) || AIX.matchesHost(data) || VIOS.matchesHost(data); } }; private static final HostMatcher PERFMON = new SimpleHostMatcher("perfmon") { @Override public boolean matchesHost(DataSet data) { return getMetadata(data, "OS").equals("perfmon"); } }; private static final HostMatcher UNKNOWN = new HostMatcher() { @Override public boolean matchesHost(DataSet data) { return false; } @Override public List<DataSet> getMatchingHosts(Collection<DataSet> toMatch) { return java.util.Collections.emptyList(); } public String toString() { return "unknown"; }; }; }