Package org.dellroad.stuff.vaadin7
Annotation Type ProvidesProperty
-
@Retention(RUNTIME) @Target({METHOD,FIELD}) @Documented public @interface ProvidesProperty
Declares that a Java method provides a read-only VaadinPropertyvalue in a Java class whose instances back the items in aContainer.@ProvidesPropertyand@ProvidesPropertySortmethod annotations can be used to automatically generate a list ofPropertyDefs and aPropertyExtractorusing aProvidesPropertyScanner. This happens automatically when using the appropriate constructors of the variousContainerclasses in this package.This annotation indicates that a read-only Vaadin
Propertyhaving the specified name and type derived from the method's return value is accessible by reading that method. Annotated methods must have zero parameters.For example:
// Container backing object class public class User { public static final String USERNAME_PROPERTY = "username"; public static final String REAL_NAME_PROPERTY = "realName"; private String username; private String realName; public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } @ProvidesProperty // property name "realName" is implied by method name public String getRealName() { return this.realName; } public void setRealName(String realName) { this.realName = realName; } @ProvidesProperty(USERNAME_PROPERTY) // display usernames in fixed-width font private Label usernameProperty() { return new Label("<code>" + StringUtil.escapeHtml(this.username) + "</code>", ContentMode.HTML); } } // User container class public class UserContainer extends SimpleKeyedContainer<String, User> { public UserContainer() { super(User.class); } @Override public String getKeyFor(User user) { return user.getUsername(); } } // Create container holding all users UserContainer container = new UserContainer(); container.load(this.userDAO.getAllUsers()); // Build table showing users Table table = new Table(); table.setColumnHeader(User.USERNAME_PROPERTY, "User"); table.setColumnHeader(User.REAL_NAME_PROPERTY, "Name"); table.setVisibleColumns(User.USERNAME_PROPERTY, User.REAL_NAME_PROPERTY); // Select user "jsmith" in the table table.setValue("jsmith"); ...Some details regarding
@ProvidesPropertyannotations on methods:- Only non-void methods taking zero parameters are supported;
@ProvidesPropertyannotations on other methods are ignored - Protected, package private, and private methods are supported.
@ProvidesPropertyannotations on interface methods are supported- If a method and the superclass or superinterface method it overrides are both annotated with
@ProvidesProperty, then the overridding method's annotation takes precedence. - If two methods with different names are annotated with
@ProvidesPropertyfor the same property name, then the declaration in the class which is a sub-type of the other wins (if the two methods are delcared in the same class, an exception is thrown). This allows subclasses to "override" which method supplies a given property.
To control how properties are sorted (e.g., in tables), see
@ProvidesPropertySort.- See Also:
ProvidesPropertySort,ProvidesPropertyScanner
- Only non-void methods taking zero parameters are supported;
-
-
Element Detail
-
value
String value
Get the name of the Vaadin property. If this is left unset (empty string), then the bean property name of the annotated bean property "getter" method is used.- Returns:
- property name
- Default:
- ""
-
-