/* * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javafx.beans.property.adapter; import com.sun.javafx.property.adapter.JavaBeanPropertyBuilderHelper; import com.sun.javafx.property.adapter.PropertyDescriptor; import java.lang.reflect.Method; /** * A {@code JavaBeanDoublePropertyBuilder} can be used to create * {@link JavaBeanDoubleProperty JavaBeanDoubleProperties}. To create * a {@code JavaBeanDoubleProperty} one first has to call {@link #create()} * to generate a builder, set the required properties, and then one can * call {@link #build()} to generate the property. *
* Not all properties of a builder have to specified, there are several * combinations possible. As a minimum the {@link #name(java.lang.String)} of * the property and the {@link #bean(java.lang.Object)} have to be specified. * If the names of the getter and setter follow the conventions, this is sufficient. * Otherwise it is possible to specify an alternative name for the getter and setter * ({@link #getter(java.lang.String)} and {@link #setter(java.lang.String)}) or * the getter and setter {@code Methods} directly ({@link #getter(java.lang.reflect.Method)} * and {@link #setter(java.lang.reflect.Method)}). *
* All methods to change properties return a reference to this builder, to enable * method chaining. *
* If you have to generate adapters for the same property of several instances * of the same class, you can reuse a {@code JavaBeanDoublePropertyBuilder}. * by switching the Java Bean instance (with {@link #bean(java.lang.Object)} and * calling {@link #build()}. * * @see JavaBeanDoubleProperty * @since JavaFX 2.1 */ public final class JavaBeanDoublePropertyBuilder { private final JavaBeanPropertyBuilderHelper helper = new JavaBeanPropertyBuilderHelper(); /** * Create a new instance of {@code JavaBeanDoublePropertyBuilder} * * @return the new {@code JavaBeanDoublePropertyBuilder} */ public static JavaBeanDoublePropertyBuilder create() { return new JavaBeanDoublePropertyBuilder(); } /** * Generate a new {@link JavaBeanDoubleProperty} with the current settings. * * @return the new {@code JavaBeanDoubleProperty} * @throws NoSuchMethodException if the settings were not sufficient to find * the getter and the setter of the Java Bean property * @throws IllegalArgumentException if the Java Bean property is not of type * {@code double} or {@code Double} */ public JavaBeanDoubleProperty build() throws NoSuchMethodException { final PropertyDescriptor descriptor = helper.getDescriptor(); if (!double.class.equals(descriptor.getType()) && !Number.class.isAssignableFrom(descriptor.getType())) { throw new IllegalArgumentException("Not a double property"); } return new JavaBeanDoubleProperty(descriptor, helper.getBean()); } /** * Set the name of the property * * @param name the name of the property * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder name(String name) { helper.name(name); return this; } /** * Set the Java Bean instance the adapter should connect to * * @param bean the Java Bean instance * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder bean(Object bean) { helper.bean(bean); return this; } /** * Set the Java Bean class in which the getter and setter should be searched. * This can be useful, if the builder should generate adapters for several * Java Beans of different types. * * @param beanClass the Java Bean class * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder beanClass(Class> beanClass) { helper.beanClass(beanClass); return this; } /** * Set an alternative name for the getter. This can be omitted, if the * name of the getter follows Java Bean naming conventions. * * @param getter the alternative name of the getter * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder getter(String getter) { helper.getterName(getter); return this; } /** * Set an alternative name for the setter. This can be omitted, if the * name of the setter follows Java Bean naming conventions. * * @param setter the alternative name of the setter * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder setter(String setter) { helper.setterName(setter); return this; } /** * Set the getter method directly. This can be omitted, if the * name of the getter follows Java Bean naming conventions. * * @param getter the getter * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder getter(Method getter) { helper.getter(getter); return this; } /** * Set the setter method directly. This can be omitted, if the * name of the setter follows Java Bean naming conventions. * * @param setter the setter * @return a reference to this builder to enable method chaining */ public JavaBeanDoublePropertyBuilder setter(Method setter) { helper.setter(setter); return this; } }