/**
* 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;
/**
*
*/
/* package */ class PropertyFilter implements BeanVisitorDecorator {
/** The properties this will be filtered out. */
private final Set<MetaProperty<?>> _properties;
/* package */ PropertyFilter(MetaProperty<?>... properties) {
ArgumentChecker.notNull(properties, "properties");
_properties = Sets.newHashSet(Arrays.asList(properties));
}
@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 (!_properties.contains(property)) {
visitor.visitBeanProperty(property, traverser);
}
}
public void visitCollectionProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_properties.contains(property)) {
visitor.visitCollectionProperty(property, traverser);
}
}
public void visitSetProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_properties.contains(property)) {
visitor.visitSetProperty(property, traverser);
}
}
public void visitListProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_properties.contains(property)) {
visitor.visitListProperty(property, traverser);
}
}
public void visitMapProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_properties.contains(property)) {
visitor.visitMapProperty(property, traverser);
}
}
public void visitProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (!_properties.contains(property)) {
visitor.visitProperty(property, traverser);
}
}
public Object finish() {
return visitor.finish();
}
};
}
}