/**
* 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 org.joda.beans.MetaBean;
import org.joda.beans.MetaProperty;
import com.opengamma.util.ArgumentChecker;
/**
* Decorator that filters out read-only properties.
* TODO is this ever going to be used?
*/
/* package */ class WritablePropertyDecorator implements BeanVisitorDecorator {
private final BeanVisitor<?> _delegate;
/* package */ WritablePropertyDecorator(BeanVisitor<?> delegate) {
ArgumentChecker.notNull(delegate, "delegate");
_delegate = delegate;
}
@Override
public BeanVisitor<?> decorate(BeanVisitor<?> visitor) {
return new BeanVisitor<Object>() {
@Override
public void visitMetaBean(MetaBean metaBean) {
_delegate.visitMetaBean(metaBean);
}
@Override
public void visitBeanProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitBeanProperty(property, traverser);
}
}
@Override
public void visitCollectionProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitCollectionProperty(property, traverser);
}
}
@Override
public void visitSetProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitSetProperty(property, traverser);
}
}
@Override
public void visitListProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitListProperty(property, traverser);
}
}
@Override
public void visitMapProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitMapProperty(property, traverser);
}
}
@Override
public void visitProperty(MetaProperty<?> property, BeanTraverser traverser) {
if (isWriteable(property)) {
_delegate.visitProperty(property, traverser);
}
}
@Override
public Object finish() {
return _delegate.finish();
}
};
}
private static boolean isWriteable(MetaProperty<?> property) {
return property.style().isWritable();
}
}