Class FlexiBean

  • All Implemented Interfaces:
    java.io.Serializable, Bean, DynamicBean

    public final class FlexiBean
    extends java.lang.Object
    implements DynamicBean, java.io.Serializable
    Implementation of a fully dynamic Bean.

    Properties are dynamic, and can be added and removed at will from the map. The internal storage is created lazily to allow a flexi-bean to be used as a lightweight extension to another bean.

    Each flexi-bean has a different set of properties. As such, there is one instance of meta-bean for each flexi-bean.

    The keys of a flexi-bean must be simple identifiers as per '[a-zA-z_][a-zA-z0-9_]*'.

    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      FlexiBean()
      Constructor.
      FlexiBean​(FlexiBean copyFrom)
      Constructor that copies all the data entries from the specified bean.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      FlexiBean append​(java.lang.String propertyName, java.lang.Object newValue)
      Sets a property in this bean to the specified value.
      void clear()
      Removes all properties.
      FlexiBean clone()
      Clones this bean, returning an independent copy.
      boolean contains​(java.lang.String propertyName)
      Checks if the bean contains a specific property.
      boolean equals​(java.lang.Object obj)
      Compares this bean to another based on the property names and content.
      java.lang.Object get​(java.lang.String propertyName)
      Gets the value of the property.
      <T> T get​(java.lang.String propertyName, java.lang.Class<T> type)
      Gets the value of the property cast to a specific type.
      boolean getBoolean​(java.lang.String propertyName)
      Gets the value of the property as a boolean.
      double getDouble​(java.lang.String propertyName)
      Gets the value of the property as a double.
      double getDouble​(java.lang.String propertyName, double defaultValue)
      Gets the value of the property as a double using a default value.
      int getInt​(java.lang.String propertyName)
      Gets the value of the property as a int.
      int getInt​(java.lang.String propertyName, int defaultValue)
      Gets the value of the property as a int using a default value.
      long getLong​(java.lang.String propertyName)
      Gets the value of the property as a long.
      long getLong​(java.lang.String propertyName, long defaultValue)
      Gets the value of the property as a long using a default value.
      java.lang.String getString​(java.lang.String propertyName)
      Gets the value of the property as a String.
      int hashCode()
      Returns a suitable hash code.
      static DynamicMetaBean meta()
      Creates a standalone meta-bean.
      DynamicMetaBean metaBean()
      Gets the meta-bean representing the parts of the bean that are common across all instances, such as the set of meta-properties.
      Property<java.lang.Object> property​(java.lang.String name)
      Gets a property by name.
      void propertyDefine​(java.lang.String propertyName, java.lang.Class<?> propertyType)
      Adds a property to those allowed to be stored in the bean.
      boolean propertyExists​(java.lang.String propertyName)
      Checks if the property exists.
      java.lang.Object propertyGet​(java.lang.String propertyName)
      Gets the value of the property.
      java.util.Set<java.lang.String> propertyNames()
      Gets the set of property names.
      void propertyRemove​(java.lang.String propertyName)
      Removes a property by name.
      void propertySet​(java.lang.String propertyName, java.lang.Object newValue)
      Sets the value of the property.
      java.lang.Object put​(java.lang.String propertyName, java.lang.Object newValue)
      Sets a property in this bean to the specified value.
      void putAll​(java.util.Map<java.lang.String,​? extends java.lang.Object> map)
      Puts the properties in the specified map into this bean.
      void putAll​(FlexiBean other)
      Puts the properties in the specified bean into this bean.
      void remove​(java.lang.String propertyName)
      Removes a property.
      void set​(java.lang.String propertyName, java.lang.Object newValue)
      Sets a property in this bean to the specified value.
      int size()
      Gets the number of properties.
      java.util.Map<java.lang.String,​java.lang.Object> toMap()
      Returns a map representing the contents of the bean.
      java.lang.String toString()
      Returns a string that summarises the bean.
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • FlexiBean

        public FlexiBean()
        Constructor.
      • FlexiBean

        public FlexiBean​(FlexiBean copyFrom)
        Constructor that copies all the data entries from the specified bean.
        Parameters:
        copyFrom - the bean to copy from, not null
    • Method Detail

      • meta

        public static DynamicMetaBean meta()
        Creates a standalone meta-bean.

        This creates a new instance each time in line with dynamic bean principles.

        Returns:
        the meta-bean, not null
      • size

        public int size()
        Gets the number of properties.
        Returns:
        the number of properties
      • contains

        public boolean contains​(java.lang.String propertyName)
        Checks if the bean contains a specific property.
        Parameters:
        propertyName - the property name, null returns false
        Returns:
        true if the bean contains the property
      • get

        public java.lang.Object get​(java.lang.String propertyName)
        Gets the value of the property.

        This returns null if the property does not exist.

        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property, may be null
      • get

        public <T> T get​(java.lang.String propertyName,
                         java.lang.Class<T> type)
        Gets the value of the property cast to a specific type.

        This returns null if the property does not exist.

        Type Parameters:
        T - the value type
        Parameters:
        propertyName - the property name, not empty
        type - the type to cast to, not null
        Returns:
        the value of the property, may be null
        Throws:
        java.lang.ClassCastException - if the type is incorrect
      • getString

        public java.lang.String getString​(java.lang.String propertyName)
        Gets the value of the property as a String. This will use Object.toString().

        This returns null if the property does not exist.

        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property, may be null
      • getBoolean

        public boolean getBoolean​(java.lang.String propertyName)
        Gets the value of the property as a boolean.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
        java.lang.NullPointerException - if the property does not exist or is null
      • getInt

        public int getInt​(java.lang.String propertyName)
        Gets the value of the property as a int.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
        java.lang.NullPointerException - if the property does not exist or is null
      • getInt

        public int getInt​(java.lang.String propertyName,
                          int defaultValue)
        Gets the value of the property as a int using a default value.
        Parameters:
        propertyName - the property name, not empty
        defaultValue - the default value for null or invalid property
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
      • getLong

        public long getLong​(java.lang.String propertyName)
        Gets the value of the property as a long.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
        java.lang.NullPointerException - if the property does not exist or is null
      • getLong

        public long getLong​(java.lang.String propertyName,
                            long defaultValue)
        Gets the value of the property as a long using a default value.
        Parameters:
        propertyName - the property name, not empty
        defaultValue - the default value for null or invalid property
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
      • getDouble

        public double getDouble​(java.lang.String propertyName)
        Gets the value of the property as a double.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
        java.lang.NullPointerException - if the property does not exist or is null
      • getDouble

        public double getDouble​(java.lang.String propertyName,
                                double defaultValue)
        Gets the value of the property as a double using a default value.
        Parameters:
        propertyName - the property name, not empty
        defaultValue - the default value for null or invalid property
        Returns:
        the value of the property
        Throws:
        java.lang.ClassCastException - if the value is not compatible
      • append

        public FlexiBean append​(java.lang.String propertyName,
                                java.lang.Object newValue)
        Sets a property in this bean to the specified value.

        This creates a property if one does not exist.

        Parameters:
        propertyName - the property name, not empty
        newValue - the new value, may be null
        Returns:
        this for chaining, not null
      • set

        public void set​(java.lang.String propertyName,
                        java.lang.Object newValue)
        Sets a property in this bean to the specified value.

        This creates a property if one does not exist.

        Parameters:
        propertyName - the property name, not empty
        newValue - the new value, may be null
      • put

        public java.lang.Object put​(java.lang.String propertyName,
                                    java.lang.Object newValue)
        Sets a property in this bean to the specified value.

        This creates a property if one does not exist.

        Parameters:
        propertyName - the property name, not empty
        newValue - the new value, may be null
        Returns:
        the old value of the property, may be null
      • putAll

        public void putAll​(java.util.Map<java.lang.String,​? extends java.lang.Object> map)
        Puts the properties in the specified map into this bean.

        This creates properties if they do not exist.

        Parameters:
        map - the map of properties to add, not null
      • putAll

        public void putAll​(FlexiBean other)
        Puts the properties in the specified bean into this bean.

        This creates properties if they do not exist.

        Parameters:
        other - the map of properties to add, not null
      • remove

        public void remove​(java.lang.String propertyName)
        Removes a property.

        No error occurs if the property does not exist.

        Parameters:
        propertyName - the property name, not empty
      • clear

        public void clear()
        Removes all properties.
      • propertyExists

        public boolean propertyExists​(java.lang.String propertyName)
        Checks if the property exists.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        true if the property exists
      • propertyGet

        public java.lang.Object propertyGet​(java.lang.String propertyName)
        Gets the value of the property.
        Parameters:
        propertyName - the property name, not empty
        Returns:
        the value of the property, may be null
      • propertySet

        public void propertySet​(java.lang.String propertyName,
                                java.lang.Object newValue)
        Sets the value of the property.
        Parameters:
        propertyName - the property name, not empty
        newValue - the new value of the property, may be null
      • metaBean

        public DynamicMetaBean metaBean()
        Description copied from interface: DynamicBean
        Gets the meta-bean representing the parts of the bean that are common across all instances, such as the set of meta-properties.
        Specified by:
        metaBean in interface Bean
        Specified by:
        metaBean in interface DynamicBean
        Returns:
        the meta-bean, not null
      • property

        public Property<java.lang.Object> property​(java.lang.String name)
        Description copied from interface: DynamicBean
        Gets a property by name.

        This will not throw an exception if the property name does not exist. Whether a property is immediately created or not is implementation dependent.

        Specified by:
        property in interface Bean
        Specified by:
        property in interface DynamicBean
        Parameters:
        name - the property name to retrieve, not null
        Returns:
        the property, not null
      • propertyNames

        public java.util.Set<java.lang.String> propertyNames()
        Description copied from interface: Bean
        Gets the set of property names.

        Each bean consists of a known set of properties. This method returns the known property names.

        Specified by:
        propertyNames in interface Bean
        Returns:
        the unmodifiable set of property names, not null
      • propertyDefine

        public void propertyDefine​(java.lang.String propertyName,
                                   java.lang.Class<?> propertyType)
        Description copied from interface: DynamicBean
        Adds a property to those allowed to be stored in the bean.

        Some implementations will automatically add properties, in which case this method will have no effect.

        Specified by:
        propertyDefine in interface DynamicBean
        Parameters:
        propertyName - the property name to check, not empty, not null
        propertyType - the property type, not null
      • propertyRemove

        public void propertyRemove​(java.lang.String propertyName)
        Description copied from interface: DynamicBean
        Removes a property by name.
        Specified by:
        propertyRemove in interface DynamicBean
        Parameters:
        propertyName - the property name to remove, null ignored
      • toMap

        public java.util.Map<java.lang.String,​java.lang.Object> toMap()
        Returns a map representing the contents of the bean.
        Returns:
        a map representing the contents of the bean, not null
      • clone

        public FlexiBean clone()
        Clones this bean, returning an independent copy.
        Overrides:
        clone in class java.lang.Object
        Returns:
        the clone, not null
      • equals

        public boolean equals​(java.lang.Object obj)
        Compares this bean to another based on the property names and content.
        Overrides:
        equals in class java.lang.Object
        Parameters:
        obj - the object to compare to, null returns false
        Returns:
        true if equal
      • hashCode

        public int hashCode()
        Returns a suitable hash code.
        Overrides:
        hashCode in class java.lang.Object
        Returns:
        a hash code
      • toString

        public java.lang.String toString()
        Returns a string that summarises the bean.

        The string contains the class name and properties.

        Overrides:
        toString in class java.lang.Object
        Returns:
        a summary string, not null