Class SmartPropertyChangeListener

java.lang.Object
com.nomagic.uml2.ext.jmi.smartlistener.SmartPropertyChangeListener
All Implemented Interfaces:
com.dassault_systemes.modeler.foundation.events.NonMaskedPropertyChangeListener, com.nomagic.uml2.ext.jmi.NonMaskedPropertyChangeListener, PropertyChangeListener, EventListener

@OpenApiAll public class SmartPropertyChangeListener extends 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:
  • Field Details

    • SMART_LISTENER_PROPAGATION_ID

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

    • SmartPropertyChangeListener

      protected SmartPropertyChangeListener(com.nomagic.uml2.ext.jmi.reflect.AbstractRefObject target, 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 Details

    • mergeConfigurations

      @Deprecated public static SmartListenerConfig mergeConfigurations(SmartListenerConfig c1, SmartListenerConfig c2)
      Merges two configurations into a single configuration.
      Parameters:
      c1 - first configuration to merge
      c2 - second configuration to merge
      Returns:
      merged configuration
    • mergeConfigurations

      @Deprecated public static SmartListenerConfig mergeConfigurations(Collection<SmartListenerConfig> configurations)
      Merges given configurations into a single configuration.
      Parameters:
      configurations - configurations to merge
      Returns:
      merged configuration
    • propertyChange

      public void propertyChange(PropertyChangeEvent e)
      Specified by:
      propertyChange in interface PropertyChangeListener
    • dispose

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

      public static SmartPropertyChangeListener createSmartPropertyListener(Element target, PropertyChangeListener listener, 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, PropertyChangeListener listener, 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, 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, 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.
    • getConfig

      public SmartListenerConfig getConfig()
    • getTarget

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

      public PropertyChangeListener getListener()
    • toString

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

      public void eventDeliveryStopped()
      Description copied from interface: com.dassault_systemes.modeler.foundation.events.NonMaskedPropertyChangeListener
      Notifies the listener that event delivery has been stopped temporarily. Changes may take place before event delivery is restored but events will not be delivered for these changes
      Specified by:
      eventDeliveryStopped in interface com.dassault_systemes.modeler.foundation.events.NonMaskedPropertyChangeListener
    • eventDeliveryRestored

      public void eventDeliveryRestored()
      Description copied from interface: com.dassault_systemes.modeler.foundation.events.NonMaskedPropertyChangeListener
      Notifies the listener that event delivery has been restored
      Specified by:
      eventDeliveryRestored in interface com.dassault_systemes.modeler.foundation.events.NonMaskedPropertyChangeListener