diff options
Diffstat (limited to 'server/src/com/vaadin/data/util/NestedPropertyDescriptor.java')
-rw-r--r-- | server/src/com/vaadin/data/util/NestedPropertyDescriptor.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/server/src/com/vaadin/data/util/NestedPropertyDescriptor.java b/server/src/com/vaadin/data/util/NestedPropertyDescriptor.java new file mode 100644 index 0000000000..b67b425d1d --- /dev/null +++ b/server/src/com/vaadin/data/util/NestedPropertyDescriptor.java @@ -0,0 +1,60 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.data.util; + +import com.vaadin.data.Property; + +/** + * Property descriptor that is able to create nested property instances for a + * bean. + * + * The property is specified in the dotted notation, e.g. "address.street", and + * can contain multiple levels of nesting. + * + * @param <BT> + * bean type + * + * @since 6.6 + */ +public class NestedPropertyDescriptor<BT> implements + VaadinPropertyDescriptor<BT> { + + private final String name; + private final Class<?> propertyType; + + /** + * Creates a property descriptor that can create MethodProperty instances to + * access the underlying bean property. + * + * @param name + * of the property in a dotted path format, e.g. "address.street" + * @param beanType + * type (class) of the top-level bean + * @throws IllegalArgumentException + * if the property name is invalid + */ + public NestedPropertyDescriptor(String name, Class<BT> beanType) + throws IllegalArgumentException { + this.name = name; + NestedMethodProperty<?> property = new NestedMethodProperty<Object>( + beanType, name); + this.propertyType = property.getType(); + } + + @Override + public String getName() { + return name; + } + + @Override + public Class<?> getPropertyType() { + return propertyType; + } + + @Override + public Property<?> createProperty(BT bean) { + return new NestedMethodProperty<Object>(bean, name); + } + +} |