package com.ibm.nmon.data.matcher;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.DataType;
/**
* Matches a set of {@link DataType DataTypes} based on a regular expression.
*/
public final class RegexTypeMatcher implements TypeMatcher {
private final Matcher matcher;
public RegexTypeMatcher(String regex) {
matcher = Pattern.compile(regex).matcher("");
}
@Override
public List<DataType> getMatchingTypes(DataSet data) {
if ((data == null) || (data.getTypeCount() == 0)) {
return java.util.Collections.emptyList();
}
else {
List<DataType> toReturn = new java.util.ArrayList<DataType>(data.getTypeCount());
for (DataType type : data.getTypes()) {
// note matching on toString, not typeId
if (matcher.reset(type.toString()).matches()) {
toReturn.add(type);
}
}
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 RegexTypeMatcher) {
RegexTypeMatcher matcher = (RegexTypeMatcher) obj;
return this.matcher.pattern().pattern().equals(matcher.matcher.pattern().pattern());
}
else {
return false;
}
}
}