/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.blotter;
import java.util.Arrays;
import java.util.Set;
import org.joda.beans.MetaBean;
import org.joda.beans.MetaProperty;
import com.google.common.collect.Sets;
import com.opengamma.util.ArgumentChecker;
/**
* TODO I don't know if I'll need this after all
*/
/* package */ class PropertyNameFilter implements BeanVisitorDecorator {
/** Names of the properties that will be filtered out. */
private final Set<String> _propertyNames;
/* package */ PropertyNameFilter(String... propertyNames) {
ArgumentChecker.notNull(propertyNames, "propertyNames");
_propertyNames = Sets.newHashSet(Arrays.asList(propertyNames));
}
@Override
public BeanVisitor<?> decorate(final BeanVisitor<?> visitor) {
return new BeanVisitor<Object>() {
public void visitMetaBean(MetaBean metaBean) {
visitor.visitMetaBean(metaBean);
}
public void visitBeanProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitBeanProperty(property, traverser);
}
}
public void visitCollectionProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitCollectionProperty(property, traverser);
}
}
public void visitSetProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitSetProperty(property, traverser);
}
}
public void visitListProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitListProperty(property, traverser);
}
}
public void visitMapProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitMapProperty(property, traverser);
}
}
public void visitProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_propertyNames.contains(property.name())) {
visitor.visitProperty(property, traverser);
}
}
public Object finish() {
return visitor.finish();
}
};
}
}