public Map filter(String fieldId, Map m) {
if (m != null && hasntSeen(m)) {
beforeFilter(fieldId, m);
Map add = new HashMap();
for (Iterator iter = m.entrySet().iterator(); iter.hasNext();) {
Map.Entry _entry = (Map.Entry) iter.next();
Entry entry = new Entry(_entry.getKey(), _entry.getValue());
Entry result = filter(fieldId, entry);
if (null == result) {
iter.remove();
} else if (result.key != entry.key
|| result.value != entry.value) {
iter.remove();
add.put(result.key, result.value);
}
}
m.putAll(add);
afterFilter(fieldId, m);
}
return m;
}