package com.ibm.nmon.data.matcher;
import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import com.ibm.nmon.data.DataSet;
/**
* Matches a set of {@link DataSet} hostnames based on a regular expression.
*/
public final class RegexHostMatcher implements HostMatcher {
private final Matcher matcher;
public RegexHostMatcher(String regex) {
matcher = Pattern.compile(regex).matcher("");
}
@Override
public boolean matchesHost(DataSet data) {
return matcher.reset(data.getHostname()).matches();
}
@Override
public List<DataSet> getMatchingHosts(Collection<DataSet> toMatch) {
if ((toMatch == null) || toMatch.isEmpty()) {
return java.util.Collections.emptyList();
}
else {
List<DataSet> toReturn = new java.util.ArrayList<DataSet>(toMatch.size());
for (DataSet data : toMatch) {
if (matcher.reset(data.getHostname()).matches()) {
toReturn.add(data);
}
}
return toReturn;
}
}
@Override
public String toString() {
return matcher.pattern().pattern();
}
@Override
public int hashCode() {
return matcher.pattern().pattern().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
else if (obj instanceof RegexHostMatcher) {
RegexHostMatcher matcher = (RegexHostMatcher) obj;
return this.matcher.pattern().pattern().equals(matcher.matcher.pattern().pattern());
}
else {
return false;
}
}
}