package com.ibm.nmon.data.matcher; import java.util.List; import com.ibm.nmon.data.DataType; /** * Matches a defined set of fields. When matching a number of fields, this class is more efficient * than using a set of {@link ExactFieldMatcher ExactFieldMatchers}. */ public final class SetFieldMatcher implements FieldMatcher { private final List<String> fields; public SetFieldMatcher(String... fields) { if ((fields == null) || (fields.length == 0)) { throw new IllegalArgumentException("fields cannot be empty"); } List<String> temp = new java.util.ArrayList<String>(java.util.Arrays.asList(fields)); this.fields = java.util.Collections.unmodifiableList(temp); } @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 : fields) { if (type.hasField(field)) { toReturn.add(field); } } return toReturn; } } @Override public String toString() { return fields.toString(); } @Override public int hashCode() { return fields.hashCode(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof SetFieldMatcher) { SetFieldMatcher matcher = (SetFieldMatcher) obj; return this.fields.equals(matcher.fields); } else { return false; } } }