Class SmartPropertyChangeListener

  • All Implemented Interfaces:
    com.nomagic.uml2.ext.jmi.NonMaskedPropertyChangeListener, java.beans.PropertyChangeListener, java.util.EventListener

    @OpenApiAll
    public class SmartPropertyChangeListener
    extends java.lang.Object
    implements com.nomagic.uml2.ext.jmi.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
      • target

        private final com.nomagic.uml2.ext.jmi.reflect.AbstractRefObject target
        Target to which smart listener is attached.
      • listener

        private final java.beans.PropertyChangeListener listener
        Wrapped property change listener to which events are delegated.
      • smartListenerConfigurator

        private final com.nomagic.uml2.ext.jmi.smartlistener.SmartListenerConfigurator smartListenerConfigurator
        Configures smart listeners.
      • config

        private final SmartListenerConfig config
        Smart listener configuration used to configure this smart listener.
    • Constructor Detail

      • SmartPropertyChangeListener

        protected SmartPropertyChangeListener​(com.nomagic.uml2.ext.jmi.reflect.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

      • createSmartListenerConfigurator

        com.nomagic.uml2.ext.jmi.smartlistener.SmartListenerConfigurator createSmartListenerConfigurator​(com.nomagic.uml2.ext.jmi.reflect.AbstractRefObject target,
                                                                                                         SmartListenerConfig config)
      • propertyChange

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

        private void notifyListener​(java.beans.PropertyChangeEvent e)
        Delegates the event to the wrapped listener.
        Parameters:
        e - event to delegate.
      • 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​(com.nomagic.uml2.ext.jmi.reflect.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​(com.nomagic.uml2.ext.jmi.reflect.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.
      • getTarget

        public com.nomagic.uml2.ext.jmi.reflect.AbstractRefObject getTarget()
      • getListener

        public java.beans.PropertyChangeListener getListener()
      • toString

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

        public void eventDeliveryStopped()
        Specified by:
        eventDeliveryStopped in interface com.nomagic.uml2.ext.jmi.NonMaskedPropertyChangeListener
      • eventDeliveryRestored

        public void eventDeliveryRestored()
        Specified by:
        eventDeliveryRestored in interface com.nomagic.uml2.ext.jmi.NonMaskedPropertyChangeListener