Package com.smartgwt.client.bean
Class BeanFactory<BeanClass>
java.lang.Object
com.smartgwt.client.bean.BeanFactory<BeanClass>
- Direct Known Subclasses:
BeanFactoryForBaseClass
,BeanFactoryForBaseWidget
,BeanFactoryForDataClass
Utility class for creating objects and setting properties at run-time via
reflection-like mechanisms.
Subclasses must be generated for each Class
you want to use. To trigger
the generation of subclasses, see the documentation on
registering classes for reflection
.
Once the appropriate subclass has been created, you can use the class via the static methods.
For the moment, this class only works with subclasses of
BaseWidget
or
FormItem
.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
static interface
Interface used to trigger the generation and registration of reflection metadata forCanvas
and all its subclasses found in the classpath (including your custom subclasses).static interface
Interface used to trigger the generation and registration of reflection metadata forFormItem
and all its subclasses found in the classpath (including your custom subclasses).static @interface
static @interface
Annotation which will trigger the generation of BeanFactories.static interface
An interface which you can extend in order to register classes with theBeanFactory
reflection mechanism.static @interface
-
Field Summary
Modifier and TypeFieldDescriptionprotected Map<String,
BeanProperty<BeanClass>> protected JavaScriptObject
protected BeanFactory
-
Constructor Summary
ModifierConstructorDescriptionprotected
The constructor is protected because you should not create BeanFactory instances directly. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract void
static void
protected BeanFactory<?>
abstract JavaScriptObject
doGetOrCreateJsObj
(Object bean) doGetProperty
(Object bean, String propertyName) doGetPropertyAsString
(Object bean, String propertyName) protected abstract BeanClass
abstract void
doSetJsObj
(Object bean, JavaScriptObject jsObj) void
doSetProperties
(Object bean, Map<String, Object> properties) void
doSetProperty
(Object bean, String propertyName, Object value) String[]
static String[]
getAttributes
(Class<?> beanClass) Gets an array of the names of the properties of a class.static String[]
getAttributes
(String beanClassName) Gets an array of the names of the properties of a class.static String
getDefaultScClassName
(Class<?> beanClass) Gets the default scClassName for the class.static BeanFactory<?>
getFactory
(Class<?> klass) static BeanFactory<?>
getFactory
(Object object) static BeanFactory<?>
getFactory
(String className) static Class<?>
protected abstract Object
getJavascriptProperty
(BeanClass bean, String propertyName) protected abstract JsArray<JavaScriptObject>
static JavaScriptObject
getOrCreateJsObj
(Object bean) protected abstract BeanProperty<BeanClass>[]
getProperties
(JsArray<JavaScriptObject> methods) static Object
getProperty
(Object bean, String property) Gets a property of a bean.static String
getPropertyAsString
(Object bean, String property) Gets a property of a bean as a String.static JavaScriptObject
protected Class
abstract boolean
isFactoryCreated
(BeanClass bean) boolean
static boolean
isFrameworkClass
(Class<?> beanClass) Indicates whether the class is defined by the SmartGWT framework.newInstance
(JavaScriptObject properties) static Object
newInstance
(Class<?> klass) Create an instance based on the provided class object.static Object
newInstance
(Class<?> klass, JavaScriptObject properties) Create an instance based on the provided class object, and apply the provided properties to it.static Object
newInstance
(Class<?> klass, Map<String, Object> properties) Create an instance based on the provided class object, and apply the provided properties to it.static Object
newInstance
(String className) Create an instance based on the provided class name.static Object
newInstance
(String className, JavaScriptObject properties) Create an instance based on the provided class name, and apply the provided properties to it.static Object
newInstance
(String className, Map<String, Object> properties) Create an instance based on the provided class name, and apply the provided properties to it.newInstance
(Map<String, Object> properties) protected static IllegalStateException
noFactoryException
(Class<?> klass) protected static IllegalStateException
noFactoryException
(String name) void
protected static void
registerFactory
(BeanFactory<?> factory) protected abstract void
protected abstract void
setJavascriptProperty
(BeanClass bean, String propertyName, Object value) static void
setJsObj
(Object bean, JavaScriptObject jsObj) static void
setProperties
(Object bean, Map<String, Object> properties) Applies a Map of property names and values to a bean.static void
setProperty
(Object bean, String property, Object value) Sets a property of a bean to a value.protected void
-
Field Details
-
superclassFactory
-
properties
-
sgwtFactory
-
-
Constructor Details
-
BeanFactory
protected BeanFactory()The constructor is protected because you should not create BeanFactory instances directly. Instead, useBeanFactory.MetaFactory
,BeanFactory.CanvasMetaFactory
orBeanFactory.FormItemMetaFactory
to create bean factories, and then use the static methods on BeanFactory.
-
-
Method Details
-
getSGWTModule
-
getFactoryProperties
-
clearFactoryProperties
public static void clearFactoryProperties() -
getFactoryPropertiesClass
-
getFactory
-
getFactory
-
getFactory
-
registerFactory
-
noFactoryException
-
noFactoryException
-
newInstance
Create an instance based on the provided class name.- Parameters:
className
- the class name- Returns:
- a new instance of the class
- Throws:
IllegalStateException
- If no factory has been generated for the className
-
newInstance
Create an instance based on the provided class object.- Parameters:
klass
- the class object- Returns:
- a new instance of the class
- Throws:
IllegalStateException
- If no factory has been generated for the klass
-
newInstance
Create an instance based on the provided class name, and apply the provided properties to it. The properties are applied after the instance is constructed with its no-arg constructor, unless the constructor triggers a call to getOrCreateJsObj(). In that case, the properties are applied before calling getOrCreateJsObj(), to ensure that the jsObj gets all the intended properties when it is constructed.- Parameters:
className
- the class nameproperties
- a JavaScriptObject whose key/value pairs represent property names and values- Returns:
- a new instance of the class, with the properties applied
- Throws:
IllegalStateException
- If no factory has been generated for the className
-
newInstance
Create an instance based on the provided class object, and apply the provided properties to it. The properties are applied after the instance is constructed with its no-arg constructor, unless the constructor triggers a call to getOrCreateJsObj(). In that case, the properties are applied before calling getOrCreateJsObj(), to ensure that the jsObj gets all the intended properties when it is constructed.- Parameters:
klass
- the class objectproperties
- a JavaScriptObject whose key/value pairs represent property names and values- Returns:
- a new instance of the class, with the properties applied
- Throws:
IllegalStateException
- If no factory has been generated for the class
-
newInstance
Create an instance based on the provided class name, and apply the provided properties to it. The properties are applied after the instance is constructed with its no-arg constructor, unless the constructor triggers a call to getOrCreateJsObj(). In that case, the properties are applied before calling getOrCreateJsObj(), to ensure that the jsObj gets all the intended properties when it is constructed.- Parameters:
className
- the class nameproperties
- a Map whose key/value pairs represent property names and values- Returns:
- a new instance of the class, with the properties applied
- Throws:
IllegalStateException
- If no factory has been generated for the className
-
newInstance
Create an instance based on the provided class object, and apply the provided properties to it. The properties are applied after the instance is constructed with its no-arg constructor, unless the constructor triggers a call to getOrCreateJsObj(). In that case, the properties are applied before calling getOrCreateJsObj(), to ensure that the jsObj gets all the intended properties when it is constructed.- Parameters:
klass
- the class objectproperties
- a Map whose key/value pairs represent property names and values- Returns:
- a new instance of the class, with the properties applied
- Throws:
IllegalStateException
- If no factory has been generated for the class
-
setProperty
Sets a property of a bean to a value.- Parameters:
bean
- The object whose property is to be setproperty
- The name of the propertyvalue
- The value to set- Throws:
IllegalStateException
- If no factory has been generated for the bean's classIllegalArgumentException
- If there is no appropriate setter for the value
-
setProperties
Applies a Map of property names and values to a bean.- Parameters:
bean
- The object whose properties are to be setproperties
- A Map whose key/value pairs represent property names and values- Throws:
IllegalStateException
- If no factory has been generated for the bean's classIllegalArgumentException
- If there is no appropriate setter for a value
-
getProperty
Gets a property of a bean.- Parameters:
bean
- The object whose property to getproperty
- The name of the property- Throws:
IllegalStateException
- If no factory has been generated for the bean's class
-
getPropertyAsString
Gets a property of a bean as a String. In simple cases, this will be equivalent to getProperty().toString(). However, if there are multiple getters available, it will prefer getters that actually return strings (e.g. getWidthAsString() would be preferred to getWidth().toString()).- Parameters:
bean
- The object whose property to getproperty
- The name of the property- Throws:
IllegalStateException
- If no factory has been generated for the bean's class
-
getAttributes
Gets an array of the names of the properties of a class.- Parameters:
beanClassName
- The name of the class- Throws:
IllegalStateException
- If no factory has been generated for the class
-
getAttributes
Gets an array of the names of the properties of a class.- Parameters:
beanClass
- The klass object- Throws:
IllegalStateException
- If no factory has been generated for the class
-
getOrCreateJsObj
-
setJsObj
-
isFrameworkClass
Indicates whether the class is defined by the SmartGWT framework.- Parameters:
beanClass
- The Class object- Throws:
IllegalStateException
- If no factory has been generated for the class
-
getDefaultScClassName
Gets the default scClassName for the class.- Parameters:
beanClass
- The Class object- Throws:
IllegalStateException
- If no factory has been generated for the class
-
getSuperclass
-
createSuperclassFactory
-
registerValueTypes
protected abstract void registerValueTypes() -
getMethods
-
getProperties
-
registerClassNameWithSGWTFactory
public void registerClassNameWithSGWTFactory() -
getBeanClass
-
getBeanClassName
-
doNewInstance
-
newInstance
-
newInstance
-
newInstance
-
triggerStaticInitializers
protected void triggerStaticInitializers() -
doSetProperty
-
doSetProperties
-
getAttributes
-
doGetProperty
-
doGetPropertyAsString
-
setJavascriptProperty
-
getJavascriptProperty
-
doGetOrCreateJsObj
-
doSetJsObj
-
isFactoryCreated
-
applyFactoryProperties
-
isFrameworkClass
public boolean isFrameworkClass() -
getDefaultScClassName
-