Class SmartPropertyChangeListener

  • All Implemented Interfaces:
    NonMaskedPropertyChangeListener, java.beans.PropertyChangeListener, java.util.EventListener

    @OpenApiAll
    public class SmartPropertyChangeListener
    extends java.lang.Object
    implements NonMaskedPropertyChangeListener

    SmartPropertyChangeListener is "smarter" than standard PropertyChangeListener, because it allows to listen not only to properties of a single model element, but also to related model element properties in the model. Given a model element, it is possible to listen to changes in the model which occur outside the element. These changes are related through a chain of element properties.

    General idea: to create a smart listener for an element, you have to pass in a collection of smart listener configurations which describe how to reach the changes in the model which are of interest to you.

    A single configuration contains the element's class and references to other elements which are of interest to us (a reference in this case is a property name).

    Remark: if you want to listen for a specific property of a single model element without listening to properties outside the model element, use BaseElement.addPropertyChangeListener(java.beans.PropertyChangeListener).

    Example 1: listen to element owner's name

     Element element = ...; // some element
    
     SmartListenerConfig config = new SmartListenerConfig();
     config.listenTo(PropertyNames.NAME); // listen to element's name
     config.listenToNested(PropertyNames.OWNER).listenTo(PropertyNames.NAME); // listen to element owner's name
    
     // create the listener
     SmartPropertyChangeListener.createSmartPropertyListener(element, new PropertyChangeListener()
     {
         public void propertyChange(PropertyChangeEvent evt)
         {
             // change event comes here
         }
     }, config);
     

    Example 2: listen recursively to owner's name and "Is Abstract" property

     Element element = ...; // some element
    
     SmartListenerConfig config = new SmartListenerConfig();
     config.listenTo(PropertyNames.NAME);
     config.listenTo(PropertyNames.IS_ABSTRACT);
     config.listenTo(PropertyNames.OWNER, config);
    
     SmartPropertyChangeListener.createSmartPropertyListener(element, new PropertyChangeListener()
     {
         public void propertyChange(PropertyChangeEvent evt)
         {
             // change event comes here
         }
     }, config);
     
    See Also:
    SmartListenerConfig, BaseElement.addPropertyChangeListener(java.beans.PropertyChangeListener)
    • Field Detail

      • SMART_LISTENER_PROPAGATION_ID

        public static final java.lang.String SMART_LISTENER_PROPAGATION_ID
        Constant ID of the property which is used in property names for smart listener events.
        See Also:
        Constant Field Values
    • Constructor Detail

      • SmartPropertyChangeListener

        protected SmartPropertyChangeListener​(AbstractRefObject target,
                                              java.beans.PropertyChangeListener listener,
                                              SmartListenerConfig configuration)
        Constructs the smart property change listener.
        Parameters:
        target - target to which smart listener is attached.
        listener - listener to which elements are being delegated.
        configuration - configuration to apply to the given element.
    • Method Detail

      • propertyChange

        public void propertyChange​(java.beans.PropertyChangeEvent e)
        Specified by:
        propertyChange in interface java.beans.PropertyChangeListener
      • dispose

        public void dispose()
        Disposes and cleans up.
      • createSmartPropertyListener

        public static SmartPropertyChangeListener createSmartPropertyListener​(Element target,
                                                                              java.beans.PropertyChangeListener listener,
                                                                              java.util.Collection<SmartListenerConfig> configurations)
        Factory method for creating a smart property change listener.
        Parameters:
        target - element to which to attach the listener.
        listener - wrapped listener to which events should be delegated.
        configurations - configurations with which to configure the smart listener.
        Returns:
        created smart property change listener.
      • createSmartPropertyListener

        public static SmartPropertyChangeListener createSmartPropertyListener​(AbstractRefObject target,
                                                                              java.beans.PropertyChangeListener listener,
                                                                              java.util.Collection<SmartListenerConfig> configurations)
        Factory method for creating a smart property change listener.
        Parameters:
        target - target to which to attach the listener.
        listener - wrapped listener to which events should be delegated.
        configurations - configurations with which to configure the smart listener.
        Returns:
        created smart property change listener.
      • createSmartPropertyListener

        public static SmartPropertyChangeListener createSmartPropertyListener​(Element target,
                                                                              java.beans.PropertyChangeListener listener,
                                                                              SmartListenerConfig config)
        Factory method for creating a smart property change listener.
        Parameters:
        target - target to which to attach the listener.
        listener - wrapped listener to which events should be delegated.
        config - configuration with which to configure the smart listener.
        Returns:
        created smart property change listener.
      • createSmartPropertyListener

        public static SmartPropertyChangeListener createSmartPropertyListener​(AbstractRefObject target,
                                                                              java.beans.PropertyChangeListener listener,
                                                                              SmartListenerConfig config)
        Factory method for creating a smart property change listener.
        Parameters:
        target - target to which to attach the listener.
        listener - wrapped listener to which events should be delegated.
        config - configuration with which to configure the smart listener.
        Returns:
        created smart property change listener.
      • getListener

        public java.beans.PropertyChangeListener getListener()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object