package com.ibm.nmon.data.matcher; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.ibm.nmon.data.DataType; /** * Matches a set of fields based on a regular expression. */ public final class RegexFieldMatcher implements FieldMatcher { private final Matcher matcher; public RegexFieldMatcher(String regex) { matcher = Pattern.compile(regex).matcher(""); } @Override public List<String> getMatchingFields(DataType type) { if (type == null) { return java.util.Collections.emptyList(); } else { List<String> toReturn = new java.util.ArrayList<String>(type.getFieldCount()); for (String field : type.getFields()) { if (matcher.reset(field).matches()) { toReturn.add(field); } } 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 RegexFieldMatcher) { RegexFieldMatcher matcher = (RegexFieldMatcher) obj; return this.matcher.pattern().pattern().equals(matcher.matcher.pattern().pattern()); } else { return false; } } }