Class CompositeMap<K,I,V>

Type Parameters:
K - the type of the keys in this map
I - the type of the intermediate values
V - the type of the values in this map
All Implemented Interfaces:
Map<K,V>, IObservable, IObservableMap<K,V>

public class CompositeMap<K,I,V> extends ObservableMap<K,V>
A read-only observable map formed by the composition of two observable maps. If map1 maps keys a:A to values b1:B, and map2 maps keys b2:B to values c:C, the composite map maps keys a:A to values c:C. For example, map1 could map Order objects to their corresponding Customer objects, and map2 could map Customer objects to their "last name" property of type String. The composite map of map1 and map2 would then map Order objects to their customers' last names.

This class is thread safe. All state accessing methods must be invoked from the current realm. Methods for adding and removing listeners may be invoked from any thread.

Since:
1.1
  • Constructor Details

    • CompositeMap

      public CompositeMap(IObservableMap<K,I> firstMap, IObservableFactory<? super IObservableSet<I>,? extends IObservableMap<I,V>> secondMapFactory)
      Creates a new composite map. Because the key set of the second map is determined by the value set of the given observable map firstMap, it cannot be passed in as an argument. Instead, the second map will be created by calling secondMapFactory.createObservable(valueSet()).
      Parameters:
      firstMap - the first map
      secondMapFactory - a factory that creates the second map when given an observable set representing the value set of firstMap.
  • Method Details

    • getKeyType

      public Object getKeyType()
      Description copied from interface: IObservableMap
      Returns the element type for the keyset of this observable map, or null if the keyset is untyped.
      Specified by:
      getKeyType in interface IObservableMap<K,I>
      Overrides:
      getKeyType in class ObservableMap<K,V>
      Returns:
      the element type for the keyset of this observable map, or null if the keyset is untyped.
      Since:
      1.2
    • getValueType

      public Object getValueType()
      Description copied from interface: IObservableMap
      Returns the element type for the values of this observable map, or null if the values collection is untyped.
      Specified by:
      getValueType in interface IObservableMap<K,I>
      Overrides:
      getValueType in class ObservableMap<K,V>
      Returns:
      the element type for the values of this observable map, or null if the values collection is untyped.
      Since:
      1.2
    • dispose

      public void dispose()
      Description copied from interface: IObservable
      Disposes of this observable object, removing all listeners registered with this object, and all listeners this object might have registered on other objects.
      Specified by:
      dispose in interface IObservable
      Overrides:
      dispose in class AbstractObservable
    • addListener

      protected void addListener(Object listenerType, IObservablesListener listener)
      Parameters:
      listenerType - arbitrary object to identify a type of the listener
      listener - the listener to add; not null
    • removeListener

      protected void removeListener(Object listenerType, IObservablesListener listener)
      Parameters:
      listenerType - arbitrary object to identify a type of the listener
      listener - the listener to remove; not null
    • hasListeners

      protected boolean hasListeners()
    • fireEvent

      protected void fireEvent(ObservableEvent event)
    • firstListenerAdded

      protected void firstListenerAdded()
    • lastListenerRemoved

      protected void lastListenerRemoved()
    • getRealm

      public Realm getRealm()
      Returns:
      Returns the realm.
    • clone

      protected Object clone() throws CloneNotSupportedException
      Overrides:
      clone in class Object
      Throws:
      CloneNotSupportedException