Class DefaultListSelectModel<V>

java.lang.Object
com.globalmentor.beans.BoundPropertyObject
io.guise.framework.model.AbstractModel
io.guise.framework.model.AbstractValueModel<V>
io.guise.framework.model.DefaultListSelectModel<V>
Type Parameters:
V - The type of values contained in the model.
All Implemented Interfaces:
com.globalmentor.beans.PropertyBindable, com.globalmentor.beans.PropertyConstrainable, com.globalmentor.model.MutableValued<V>, com.globalmentor.model.Valued<V>, ListListenable<V>, ListSelectModel<V>, Model, SelectModel<V>, ValueModel<V>, Iterable<V>, Collection<V>, List<V>
Direct Known Subclasses:
AbstractListSelectTableModel

public class DefaultListSelectModel<V> extends AbstractValueModel<V> implements ListSelectModel<V>
The default implementation of a model for selecting one or more values from a list. The model is thread-safe, synchronized on itself. Any iteration over values should include synchronization on the instance of this class. This implementation has a default value of null.
Author:
Garret Wilson
  • Constructor Details

    • DefaultListSelectModel

      public DefaultListSelectModel(Class<V> valueClass)
      Constructs a list select model indicating the type of values it can hold, using a default multiple selection strategy.
      Parameters:
      valueClass - The class indicating the type of values held in the model.
      Throws:
      NullPointerException - if the given value class is null.
    • DefaultListSelectModel

      public DefaultListSelectModel(Class<V> valueClass, ListSelectionPolicy<V> listSelectionStrategy)
      Constructs a list select model indicating the type of values it can hold. The selection strategy is not added as a listener to this model but is rather notified manually so that the event won't be delayed and/or sent out of order
      Parameters:
      valueClass - The class indicating the type of values held in the model.
      listSelectionStrategy - The strategy for selecting values in the model.
      Throws:
      NullPointerException - if the given value class and/or selection strategy is null.
  • Method Details

    • getDefaultValue

      public V getDefaultValue()
      Specified by:
      getDefaultValue in interface ValueModel<V>
      Returns:
      The default value.
    • getValue

      public V getValue()
      Specified by:
      getValue in interface com.globalmentor.model.Valued<V>
      Specified by:
      getValue in interface ValueModel<V>
      Returns:
      The input value, or null if there is no input value.
    • setValue

      public void setValue(V newValue) throws PropertyVetoException
      Description copied from interface: ValueModel
      Sets the new value. This is a bound property that only fires a change event when the new value is different via the equals() method. If a validator is installed, the value will first be validated before the current value is changed. Validation always occurs if a validator is installed, even if the value is not changing. If the value change is vetoed by the installed validator, the validation exception will be accessible via Throwable.getCause().
      Specified by:
      setValue in interface com.globalmentor.model.MutableValued<V>
      Specified by:
      setValue in interface ValueModel<V>
      Parameters:
      newValue - The new value.
      Throws:
      PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
      See Also:
    • clearValue

      public void clearValue()
      Description copied from interface: ValueModel
      Clears the value by setting the value to null, which may be invalid according to any installed validators. No validation occurs.
      Specified by:
      clearValue in interface ValueModel<V>
      See Also:
    • resetValue

      public void resetValue()
      Resets the value to a default value, which may be invalid according to any installed validators. No validation occurs.

      This implementation calls clearValue().

      Specified by:
      resetValue in interface ValueModel<V>
      See Also:
    • size

      public int size()
      The list of value states, all access to which will be synchronized on this.
      Specified by:
      size in interface Collection<V>
      Specified by:
      size in interface List<V>
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface Collection<V>
      Specified by:
      isEmpty in interface List<V>
    • contains

      public boolean contains(Object value)
      Specified by:
      contains in interface Collection<V>
      Specified by:
      contains in interface List<V>
    • iterator

      public Iterator<V> iterator()
      Specified by:
      iterator in interface Collection<V>
      Specified by:
      iterator in interface Iterable<V>
      Specified by:
      iterator in interface List<V>
      Returns:
      A read-only iterator over the values in this model.
    • toArray

      public Object[] toArray()
      Specified by:
      toArray in interface Collection<V>
      Specified by:
      toArray in interface List<V>
    • toArray

      public <T> T[] toArray(T[] array)
      Specified by:
      toArray in interface Collection<V>
      Specified by:
      toArray in interface List<V>
    • add

      public boolean add(V value)

      This version delegates to add(int, Object).

      Specified by:
      add in interface Collection<V>
      Specified by:
      add in interface List<V>
    • remove

      public boolean remove(Object value)

      This version delegates to remove(int).

      Specified by:
      remove in interface Collection<V>
      Specified by:
      remove in interface List<V>
    • containsAll

      public boolean containsAll(Collection<?> collection)
      Specified by:
      containsAll in interface Collection<V>
      Specified by:
      containsAll in interface List<V>
    • addAll

      public boolean addAll(Collection<? extends V> collection)
      Specified by:
      addAll in interface Collection<V>
      Specified by:
      addAll in interface List<V>
    • addAll

      public boolean addAll(int index, Collection<? extends V> collection)
      Specified by:
      addAll in interface List<V>
    • removeAll

      public boolean removeAll(Collection<?> collection)
      Specified by:
      removeAll in interface Collection<V>
      Specified by:
      removeAll in interface List<V>
    • retainAll

      public boolean retainAll(Collection<?> collection)
      Specified by:
      retainAll in interface Collection<V>
      Specified by:
      retainAll in interface List<V>
    • clear

      public void clear()
      Specified by:
      clear in interface Collection<V>
      Specified by:
      clear in interface List<V>
    • get

      public V get(int index)
      Specified by:
      get in interface List<V>
    • set

      public V set(int index, V value)
      Specified by:
      set in interface List<V>
    • add

      public void add(int index, V value)
      Specified by:
      add in interface List<V>
    • remove

      public V remove(int index)
      Specified by:
      remove in interface List<V>
    • indexOf

      public int indexOf(Object value)
      Specified by:
      indexOf in interface List<V>
    • lastIndexOf

      public int lastIndexOf(Object value)
      Specified by:
      lastIndexOf in interface List<V>
    • listIterator

      public ListIterator<V> listIterator()
      Specified by:
      listIterator in interface List<V>
    • listIterator

      public ListIterator<V> listIterator(int index)
      Specified by:
      listIterator in interface List<V>
    • subList

      public List<V> subList(int fromIndex, int toIndex)
      Specified by:
      subList in interface List<V>
    • replace

      public boolean replace(V oldValue, V newValue)
      Description copied from interface: SelectModel
      Replaces the first occurrence in the of the given value with its replacement. This method ensures that another thread does not change the model while the search and replace operation occurs.
      Specified by:
      replace in interface SelectModel<V>
      Parameters:
      oldValue - The value for which to search.
      newValue - The replacement value.
      Returns:
      Whether the operation resulted in a modification of the model.
    • getSelectionPolicy

      public ListSelectionPolicy<V> getSelectionPolicy()
      Specified by:
      getSelectionPolicy in interface ListSelectModel<V>
      Returns:
      The selection policy for this model.
    • getSelectedIndex

      public int getSelectedIndex()
      Description copied from interface: ListSelectModel
      Determines the selected index. If more than one index is selected, the lead selected index will be returned.
      Specified by:
      getSelectedIndex in interface ListSelectModel<V>
      Returns:
      The index currently selected, or -1 if no index is selected.
      See Also:
    • getSelectedIndexes

      public int[] getSelectedIndexes()
      Description copied from interface: ListSelectModel
      Determines the selected indices.
      Specified by:
      getSelectedIndexes in interface ListSelectModel<V>
      Returns:
      The indices currently selected.
      See Also:
    • setSelectedIndexes

      public void setSelectedIndexes(int... indexes) throws PropertyVetoException
      Description copied from interface: ListSelectModel
      Sets the selected indices. Invalid and duplicate indices will be ignored. If the value change is vetoed by the installed validator, the validation exception will be accessible via Throwable.getCause().
      Specified by:
      setSelectedIndexes in interface ListSelectModel<V>
      Parameters:
      indexes - The indices to select.
      Throws:
      PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
      See Also:
    • addSelectedIndexes

      public void addSelectedIndexes(int... indexes) throws PropertyVetoException
      Description copied from interface: ListSelectModel
      Adds a selection at the given indices. Any invalid indices will be ignored. If the value change is vetoed by the installed validator, the validation exception will be accessible via Throwable.getCause().
      Specified by:
      addSelectedIndexes in interface ListSelectModel<V>
      Parameters:
      indexes - The indices to add to the selection.
      Throws:
      PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
      See Also:
    • removeSelectedIndexes

      public void removeSelectedIndexes(int... indexes) throws PropertyVetoException
      Description copied from interface: ListSelectModel
      Removes a selection at the given indices. Any invalid indices will be ignored. If the value change is vetoed by the installed validator, the validation exception will be accessible via Throwable.getCause().
      Specified by:
      removeSelectedIndexes in interface ListSelectModel<V>
      Parameters:
      indexes - The indices to remove from the selection.
      Throws:
      PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
      See Also:
    • getSelectedValue

      public V getSelectedValue()
      Description copied from interface: SelectModel
      Determines the selected value. This method delegates to the selection strategy. If more than one value is selected, the lead selected value will be returned.
      Specified by:
      getSelectedValue in interface SelectModel<V>
      Returns:
      The value currently selected, or null if no value is currently selected.
    • getSelectedValues

      public V[] getSelectedValues()
      Description copied from interface: SelectModel
      Determines the selected values. This method delegates to the selection strategy.
      Specified by:
      getSelectedValues in interface SelectModel<V>
      Returns:
      The values currently selected.
    • setSelectedValues

      public void setSelectedValues(V... values) throws PropertyVetoException
      Sets the selected values. If a value occurs more than one time in the model, all occurrences of the value will be selected. Values that do not occur in the select model will be ignored. If the value change is vetoed by the installed validator, the validation exception will be accessible via Throwable.getCause().
      Specified by:
      setSelectedValues in interface SelectModel<V>
      Parameters:
      values - The values to select.
      Throws:
      PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
      See Also:
    • isValueDisplayed

      public boolean isValueDisplayed(V value)
      Description copied from interface: ListSelectModel
      Determines the displayed status of the first occurrence of a given value.
      Specified by:
      isValueDisplayed in interface ListSelectModel<V>
      Parameters:
      value - The value for which the displayed status is to be determined.
      Returns:
      true if the value is displayed, else false.
    • setValueDisplayed

      public void setValueDisplayed(V value, boolean newDisplayed)
      Sets the displayed status of the first occurrence of a given value. This is a bound value state property.
      Specified by:
      setValueDisplayed in interface ListSelectModel<V>
      Parameters:
      value - The value to display.
      newDisplayed - Whether the value should be displayed.
      See Also:
    • isIndexDisplayed

      public boolean isIndexDisplayed(int index)
      Description copied from interface: ListSelectModel
      Determines the displayed status of a given index.
      Specified by:
      isIndexDisplayed in interface ListSelectModel<V>
      Parameters:
      index - The index of the value for which the displayed status is to be determined.
      Returns:
      true if the value at the given index is displayed, else false.
    • setIndexDisplayed

      public void setIndexDisplayed(int index, boolean newDisplayed)
      Sets the displayed status of a given index. This is a bound value state property.
      Specified by:
      setIndexDisplayed in interface ListSelectModel<V>
      Parameters:
      index - The index of the value to display.
      newDisplayed - Whether the value at the given index should be displayed.
      Throws:
      IndexOutOfBoundsException - if the given index is not within the range of the list.
      See Also:
    • isValueEnabled

      public boolean isValueEnabled(V value)
      Description copied from interface: ListSelectModel
      Determines the enabled status of the first occurrence of a given value.
      Specified by:
      isValueEnabled in interface ListSelectModel<V>
      Parameters:
      value - The value for which the enabled status is to be determined.
      Returns:
      true if the value is enabled, else false.
    • setValueEnabled

      public void setValueEnabled(V value, boolean newEnabled)
      Sets the enabled status of the first occurrence of a given value. This is a bound value state property.
      Specified by:
      setValueEnabled in interface ListSelectModel<V>
      Parameters:
      value - The value to enable or disable.
      newEnabled - Whether the value should be enabled.
      See Also:
    • isIndexEnabled

      public boolean isIndexEnabled(int index)
      Description copied from interface: ListSelectModel
      Determines the enabled status of a given index.
      Specified by:
      isIndexEnabled in interface ListSelectModel<V>
      Parameters:
      index - The index of the value for which the enabled status is to be determined.
      Returns:
      true if the value at the given index is enabled, else false.
    • setIndexEnabled

      public void setIndexEnabled(int index, boolean newEnabled)
      Sets the enabled status of a given index. This is a bound value state property.
      Specified by:
      setIndexEnabled in interface ListSelectModel<V>
      Parameters:
      index - The index of the value to enable or disable.
      newEnabled - Whether the value at the given index should be enabled.
      Throws:
      IndexOutOfBoundsException - if the given index is not within the range of the list.
      See Also:
    • addListListener

      public void addListListener(ListListener<V> listListener)
      Description copied from interface: ListSelectModel
      Adds a list listener.
      Specified by:
      addListListener in interface ListListenable<V>
      Specified by:
      addListListener in interface ListSelectModel<V>
      Parameters:
      listListener - The list listener to add.
    • removeListListener

      public void removeListListener(ListListener<V> listListener)
      Description copied from interface: ListSelectModel
      Removes a list listener.
      Specified by:
      removeListListener in interface ListListenable<V>
      Specified by:
      removeListListener in interface ListSelectModel<V>
      Parameters:
      listListener - The list listener to remove.
    • addListSelectionListener

      public void addListSelectionListener(ListSelectionListener<V> selectionListener)
      Description copied from interface: ListSelectModel
      Adds a list selection listener.
      Specified by:
      addListSelectionListener in interface ListSelectModel<V>
      Parameters:
      selectionListener - The selection listener to add.
    • removeListSelectionListener

      public void removeListSelectionListener(ListSelectionListener<V> selectionListener)
      Description copied from interface: ListSelectModel
      Removes a list selection listener.
      Specified by:
      removeListSelectionListener in interface ListSelectModel<V>
      Parameters:
      selectionListener - The selection listener to remove.
    • listModified

      protected void listModified(int index, V addedElement, V removedElement)
      Called when the list is modified. This method calls the method for notifying listeners that the list was modified.
      Parameters:
      index - The index at which an element was added and/or removed, or -1 if the index is unknown.
      addedElement - The element that was added to the list, or null if no element was added or it is unknown whether or which elements were added.
      removedElement - The element that was removed from the list, or null if no element was removed or it is unknown whether or which elements were removed.
      See Also:
    • fireListModified

      protected void fireListModified(int index, V addedElement, V removedElement)
      Fires an event to all registered list listeners indicating the list was modified.
      Parameters:
      index - The index at which an element was added and/or removed, or -1 if the index is unknown.
      addedElement - The element that was added to the list, or null if no element was added or it is unknown whether or which elements were added.
      removedElement - The element that was removed from the list, or null if no element was removed or it is unknown whether or which elements were removed.
      See Also:
    • fireSelectionChanged

      protected void fireSelectionChanged(Integer addedIndex, Integer removedIndex)
      Fires an event to all registered selection listeners indicating the selection changed.
      Parameters:
      addedIndex - The index that was added to the selection, or null if no index was added or it is unknown whether or which indices were added.
      removedIndex - The index that was removed from the list, or null if no index was removed or it is unknown whether or which indices were removed.
      See Also: