Class DataTable

java.lang.Object
xyz.cofe.data.table.DataTable
All Implemented Interfaces:
xyz.cofe.ecolls.GetReadLock, xyz.cofe.ecolls.GetWriteLock, xyz.cofe.ecolls.ReadWriteLockSupport

public class DataTable
extends java.lang.Object
implements xyz.cofe.ecolls.ReadWriteLockSupport
Таблица с данными.

Каждая строка таблицы может находится в нескольких состояниях:
Fixed, Updated - содержится в коллекции рабочих строк (getWorkedRows())
Inserted - содержится в коллекции рабочих строк и коллекции новых строк (getWorkedRows())

Author:
Kamnev Georgiy
See Also:
DataRow
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static interface  DataTable.InternalRun
    Выполенеие внутреннего кода
    class  DataTable.NullRowsDisabler
    Запрещает вставлять null ссылки в качестве строк
    class  DataTable.ReadonlyColumnsConstraint
    Ограничение на операции с колонками.
    class  DataTable.WorkedRowsOnDeletedTacking
    Слушает изменения рабочего набора и при добавлении новой строки в WorkedRows отмечает ее как новую (getInsertedRows().add())
    class  DataTable.WorkedRowsOnUpdateInsertTracking
    Слушает изменения рабочего набора и при добавлении новой строки в WorkedRows отмечает ее как новую (getInsertedRows().add())
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.util.concurrent.atomic.AtomicInteger dropCallLevel  
    protected java.util.concurrent.atomic.AtomicInteger eventLockLevel  
    protected java.util.concurrent.LinkedBlockingQueue<DataEvent> eventQueue  
    protected DataEventSupport listeners  
  • Constructor Summary

    Constructors 
    Constructor Description
    DataTable()
    Конструктор по умолчанию
    DataTable​(DataColumn[] columns)
    Конструктор
    DataTable​(DataColumn[] columns, java.lang.Iterable<java.lang.Object[]> initialData)
    Конструктор
    DataTable​(DataColumn[] columns, java.lang.Iterable<DataRow> rows, java.lang.Iterable<DataRow> inserted, java.lang.Iterable<DataRow> deleted)
    Конструктор де сериализации
  • Method Summary

    Modifier and Type Method Description
    void addColumn​(DataColumn dc)
    Добавляет колонку к таблице
    void addDataEvent​(DataEvent ev)
    Добавляет событие в очередь
    java.lang.AutoCloseable addDataEventListener​(DataEventListener ls)
    Добавляет подписчика на события
    java.lang.AutoCloseable addDataEventListener​(DataEventListener ls, boolean weak)
    Добавляет подписчика на события
    protected DataTable.InternalRun createInternalRun()
    Создаение объекта для доступа к внутренним объектам
    void delete​(DataRow row)
    Удаляет строку
    void drop()
    Удаление всех данны, включая изменения и удаление структуры
    void dropColumns()
    Удаляет все колонки
    void fireEvent​(DataEvent event)
    Уведомляет подписчиков о событии
    void fireEventQueue()
    Рассылает события из очереди подписчикам
    void fixed()
    Зафиксировать все строки.
    void fixed​(DataRow row)
    Фиксация изменений
    void fixed​(DataRow row, boolean addEvents)
    Фиксация изменений
    DataColumn getColumn​(int cidx)
    Возвращает колонку по ее индексу
    DataColumn[] getColumns()
    Возвращает массив колонок
    int getColumnsCount()
    Возвращает кол-во колонок в таблице
    DataEventListener[] getDataEventListeners()
    Возвращает список подписчиков
    java.util.concurrent.locks.Lock getReadLock()  
    java.util.concurrent.locks.ReentrantReadWriteLock getReadWriteLock()  
    DataRow getRow​(int row)
    Возвращает строку по индексу из рабочего набора
    int getRowsCount()
    Возвращает кол-во строк в рабочем наборе
    xyz.cofe.iter.Eterable<DataRow> getRowsIterable()
    Итератор по рабочему набору строк
    xyz.cofe.iter.Eterable<DataRow> getRowsIterable​(DataRowState... states)
    Итератор по строкам
    xyz.cofe.iter.Eterable<DataRow> getRowsIterableAll()
    Возвращает все строки включая удаленные
    java.util.Iterator<DataRow> getRowsIterator()
    Итератор по рабочему набору строк
    long getScn()
    Возвращает еткущий номер изенений
    java.util.concurrent.locks.Lock getWriteLock()  
    boolean hasDataEventListener​(DataEventListener ls)
    Проверка наличия подписчика
    int indexOf​(DataRow mrow)
    Возвращает индекст строки в таблице
    DataTableInserting insert​(java.lang.Object... values)
    Производит вставку строки
    void insert​(DataRow row)
    Производит вставку строки
    boolean isDeleted​(DataRow row)
    Возвращает true если строка отмечена как удаленная
    boolean isInserted​(DataRow row)
    Возвращает true если строка отмечена как новая (inserted)
    boolean isTrackChanges()
    Указывает отслеживать изменения
    boolean isUpdated​(DataRow row)
    Возвращает true если строка быда обновлена, но не фиксированна
    <T extends DataEvent>
    java.lang.AutoCloseable
    listen​(java.lang.Class<T> evnType, boolean weakRef, java.util.function.Consumer<T> listener)
    Подписка на события определенного типа
    <T extends DataEvent>
    java.lang.AutoCloseable
    listen​(java.lang.Class<T> evnType, java.util.function.Consumer<T> listener)
    Подписка на события определенного типа
    protected java.lang.Object lockRunInternal​(xyz.cofe.fn.Fn1<DataTable.InternalRun,​java.lang.Object> run)
    Выполнение внутреннего кода
    protected long nextScn()
    Указывает текущий номер изменений
    java.lang.AutoCloseable onColumnAdded​(boolean weak, java.util.function.Consumer<DataColumnAdded> listener)
    Добавление на событие добавления колонки
    java.lang.AutoCloseable onColumnAdded​(java.util.function.Consumer<DataColumnAdded> listener)
    Добавление на событие добавления колонки
    java.lang.AutoCloseable onColumnRemoved​(boolean weak, java.util.function.Consumer<DataColumnAdded> listener)
    Добавление на событие - колонка удалена
    java.lang.AutoCloseable onColumnRemoved​(java.util.function.Consumer<DataColumnRemoved> listener)
    Добавление на событие - колонка удалена
    java.lang.AutoCloseable onDataTableDropped​(boolean weak, java.util.function.Consumer<DataTableDropped> listener)
    Добавление на событие полного удаления таблицы, включая структуры
    java.lang.AutoCloseable onDataTableDropped​(java.util.function.Consumer<DataTableDropped> listener)
    Добавление на событие полного удаления таблицы, включая структуры
    java.lang.AutoCloseable onRowDeleted​(boolean weak, java.util.function.Consumer<DataRowDeleted> listener)
    Добавление на событие: строка почена под удаление
    java.lang.AutoCloseable onRowDeleted​(java.util.function.Consumer<DataRowDeleted> listener)
    Добавление на событие: строка почена под удаление
    java.lang.AutoCloseable onRowErased​(boolean weak, java.util.function.Consumer<DataRowErased> listener)
    Добавление на событие окончательного удаляения строки
    java.lang.AutoCloseable onRowErased​(java.util.function.Consumer<DataRowErased> listener)
    Добавление на событие окончательного удаляения строки
    java.lang.AutoCloseable onRowUndeleted​(boolean weak, java.util.function.Consumer<DataRowUndeleted> listener)
    Добавление на событие отката удаляения строки
    java.lang.AutoCloseable onRowUndeleted​(java.util.function.Consumer<DataRowUndeleted> listener)
    Добавление на событие отката удаляения строки
    void removeColumn​(DataColumn dc)
    Удаляет колонку из таблицы
    void removeColumnByIndex​(int colIdx)
    Удаляет колонку по ее индексу
    void removeDataEventListener​(DataEventListener ls)
    Удаляет подписчика
    void rollback()
    Откат изменений таблицы
    void rollback​(boolean addEvents)
    Откат изменений таблицы
    void rollback​(DataRow row)
    Откат изменений строки
    void rollback​(DataRow row, boolean addEvents)
    Откат изменений строки
    java.util.List<DataRow> rowsList​(DataRowState... states)
    Возвращает строки ввиде списка
    void setTrackChanges​(boolean track)
    Указывает отслеживать изменения
    DataRowState stateOf​(DataRow row)
    Возвращает состояние строки

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface xyz.cofe.ecolls.ReadWriteLockSupport

    readLock, readLock, writeLock, writeLock
  • Field Details

    • listeners

      protected final transient DataEventSupport listeners
    • eventQueue

      protected final java.util.concurrent.LinkedBlockingQueue<DataEvent> eventQueue
    • eventLockLevel

      protected final transient java.util.concurrent.atomic.AtomicInteger eventLockLevel
    • dropCallLevel

      protected final transient java.util.concurrent.atomic.AtomicInteger dropCallLevel
  • Constructor Details

    • DataTable

      public DataTable()
      Конструктор по умолчанию
    • DataTable

      public DataTable​(DataColumn[] columns)
      Конструктор
      Parameters:
      columns - Описания колонок таблицы
    • DataTable

      public DataTable​(DataColumn[] columns, java.lang.Iterable<java.lang.Object[]> initialData)
      Конструктор
      Parameters:
      columns - Описания колонок таблицы
      initialData - Начальные данные
    • DataTable

      public DataTable​(DataColumn[] columns, java.lang.Iterable<DataRow> rows, java.lang.Iterable<DataRow> inserted, java.lang.Iterable<DataRow> deleted)
      Конструктор де сериализации
      Parameters:
      columns - Набор колонок
      rows - Фиксированные/Модифицированные строки
      inserted - Добавленные, но не фиксированные строки
      deleted - Удаленные, но не фиксированные строки
  • Method Details

    • getReadWriteLock

      public java.util.concurrent.locks.ReentrantReadWriteLock getReadWriteLock()
    • getReadLock

      public java.util.concurrent.locks.Lock getReadLock()
      Specified by:
      getReadLock in interface xyz.cofe.ecolls.GetReadLock
      Specified by:
      getReadLock in interface xyz.cofe.ecolls.ReadWriteLockSupport
    • getWriteLock

      public java.util.concurrent.locks.Lock getWriteLock()
      Specified by:
      getWriteLock in interface xyz.cofe.ecolls.GetWriteLock
      Specified by:
      getWriteLock in interface xyz.cofe.ecolls.ReadWriteLockSupport
    • addDataEventListener

      public java.lang.AutoCloseable addDataEventListener​(DataEventListener ls, boolean weak)
      Добавляет подписчика на события
      Parameters:
      ls - Подписчик
      weak - true - добавить как weak ссылку
      Returns:
      Отписка
    • addDataEventListener

      public java.lang.AutoCloseable addDataEventListener​(DataEventListener ls)
      Добавляет подписчика на события
      Parameters:
      ls - Подписчик
      Returns:
      Отписка
    • removeDataEventListener

      public void removeDataEventListener​(DataEventListener ls)
      Удаляет подписчика
      Parameters:
      ls - подписчик
    • hasDataEventListener

      public boolean hasDataEventListener​(DataEventListener ls)
      Проверка наличия подписчика
      Parameters:
      ls - подписчик
      Returns:
      true подписан
    • getDataEventListeners

      public DataEventListener[] getDataEventListeners()
      Возвращает список подписчиков
      Returns:
      подписчики
    • fireEvent

      public void fireEvent​(DataEvent event)
      Уведомляет подписчиков о событии
      Parameters:
      event - событие
    • addDataEvent

      public void addDataEvent​(DataEvent ev)
      Добавляет событие в очередь
      Parameters:
      ev - событие
    • fireEventQueue

      public void fireEventQueue()
      Рассылает события из очереди подписчикам
    • createInternalRun

      protected DataTable.InternalRun createInternalRun()
      Создаение объекта для доступа к внутренним объектам
      Returns:
      доступ к внутренним объектам
    • lockRunInternal

      protected java.lang.Object lockRunInternal​(xyz.cofe.fn.Fn1<DataTable.InternalRun,​java.lang.Object> run)
      Выполнение внутреннего кода
      Parameters:
      run - внутренний код
      Returns:
      Результат выполнения
    • listen

      public <T extends DataEvent> java.lang.AutoCloseable listen​(java.lang.Class<T> evnType, boolean weakRef, java.util.function.Consumer<T> listener)
      Подписка на события определенного типа
      Type Parameters:
      T - Тип события
      Parameters:
      evnType - Тип события
      weakRef - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от события
    • listen

      public <T extends DataEvent> java.lang.AutoCloseable listen​(java.lang.Class<T> evnType, java.util.function.Consumer<T> listener)
      Подписка на события определенного типа
      Type Parameters:
      T - Тип события
      Parameters:
      evnType - Тип события
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onColumnAdded

      public java.lang.AutoCloseable onColumnAdded​(boolean weak, java.util.function.Consumer<DataColumnAdded> listener)
      Добавление на событие добавления колонки
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onColumnAdded

      public java.lang.AutoCloseable onColumnAdded​(java.util.function.Consumer<DataColumnAdded> listener)
      Добавление на событие добавления колонки
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onColumnRemoved

      public java.lang.AutoCloseable onColumnRemoved​(boolean weak, java.util.function.Consumer<DataColumnAdded> listener)
      Добавление на событие - колонка удалена
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onColumnRemoved

      public java.lang.AutoCloseable onColumnRemoved​(java.util.function.Consumer<DataColumnRemoved> listener)
      Добавление на событие - колонка удалена
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowDeleted

      public java.lang.AutoCloseable onRowDeleted​(boolean weak, java.util.function.Consumer<DataRowDeleted> listener)
      Добавление на событие: строка почена под удаление
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowDeleted

      public java.lang.AutoCloseable onRowDeleted​(java.util.function.Consumer<DataRowDeleted> listener)
      Добавление на событие: строка почена под удаление
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowUndeleted

      public java.lang.AutoCloseable onRowUndeleted​(boolean weak, java.util.function.Consumer<DataRowUndeleted> listener)
      Добавление на событие отката удаляения строки
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowUndeleted

      public java.lang.AutoCloseable onRowUndeleted​(java.util.function.Consumer<DataRowUndeleted> listener)
      Добавление на событие отката удаляения строки
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowErased

      public java.lang.AutoCloseable onRowErased​(boolean weak, java.util.function.Consumer<DataRowErased> listener)
      Добавление на событие окончательного удаляения строки
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onRowErased

      public java.lang.AutoCloseable onRowErased​(java.util.function.Consumer<DataRowErased> listener)
      Добавление на событие окончательного удаляения строки
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onDataTableDropped

      public java.lang.AutoCloseable onDataTableDropped​(boolean weak, java.util.function.Consumer<DataTableDropped> listener)
      Добавление на событие полного удаления таблицы, включая структуры
      Parameters:
      weak - Добавить подписчика как weak ссылку
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • onDataTableDropped

      public java.lang.AutoCloseable onDataTableDropped​(java.util.function.Consumer<DataTableDropped> listener)
      Добавление на событие полного удаления таблицы, включая структуры
      Parameters:
      listener - Подписчик
      Returns:
      Отписка от получения событий
    • isTrackChanges

      public boolean isTrackChanges()
      Указывает отслеживать изменения
      Returns:
      true - отслеживание включенно
    • setTrackChanges

      public void setTrackChanges​(boolean track)
      Указывает отслеживать изменения
      Parameters:
      track - true - Отслеживать
    • getScn

      public long getScn()
      Возвращает еткущий номер изенений
      Returns:
      текущий номер изменений
    • nextScn

      protected long nextScn()
      Указывает текущий номер изменений
      Returns:
      текущий номер изменений
    • getColumns

      public DataColumn[] getColumns()
      Возвращает массив колонок
      Returns:
      колонки таблицы
    • getColumnsCount

      public int getColumnsCount()
      Возвращает кол-во колонок в таблице
      Returns:
      кол-во колонок
    • getColumn

      public DataColumn getColumn​(int cidx)
      Возвращает колонку по ее индексу
      Parameters:
      cidx - индекс
      Returns:
      колонка
    • addColumn

      public void addColumn​(DataColumn dc)
      Добавляет колонку к таблице
      Parameters:
      dc - колонка
    • removeColumn

      public void removeColumn​(DataColumn dc)
      Удаляет колонку из таблицы
      Parameters:
      dc - колонка
    • removeColumnByIndex

      public void removeColumnByIndex​(int colIdx)
      Удаляет колонку по ее индексу
      Parameters:
      colIdx - индекс колонки
    • dropColumns

      public void dropColumns()
      Удаляет все колонки
    • getRowsCount

      public int getRowsCount()
      Возвращает кол-во строк в рабочем наборе
      Returns:
      кол-во строк в рабочем наборе
    • getRow

      public DataRow getRow​(int row)
      Возвращает строку по индексу из рабочего набора
      Parameters:
      row - индекс строки
      Returns:
      строка
    • indexOf

      public int indexOf​(DataRow mrow)
      Возвращает индекст строки в таблице
      Parameters:
      mrow - строка
      Returns:
      индекс или -1
    • getRowsIterator

      public java.util.Iterator<DataRow> getRowsIterator()
      Итератор по рабочему набору строк
      Returns:
      итератор
    • getRowsIterable

      public xyz.cofe.iter.Eterable<DataRow> getRowsIterable()
      Итератор по рабочему набору строк
      Returns:
      итератор
    • getRowsIterable

      public xyz.cofe.iter.Eterable<DataRow> getRowsIterable​(DataRowState... states)
      Итератор по строкам
      Parameters:
      states - Указывает по строкам с каким состоянием производить поиск
      Returns:
      Итератор
    • rowsList

      public java.util.List<DataRow> rowsList​(DataRowState... states)
      Возвращает строки ввиде списка
      Parameters:
      states - строки с указаным состоянием будут возвращены
      Returns:
      состояние строк
    • getRowsIterableAll

      public xyz.cofe.iter.Eterable<DataRow> getRowsIterableAll()
      Возвращает все строки включая удаленные
      Returns:
      строки
    • fixed

      public void fixed()
      Зафиксировать все строки.
      Строки отмесенные как удаленные, удаляются из этой таблицы. Строки отмеченные как добавленные, переводятся в статус обычных. Строки отмеченные как измененные - переводятся в статус обычных с текущим состоянием данных.
    • fixed

      public void fixed​(DataRow row)
      Фиксация изменений
      Parameters:
      row - Строка которую требуется зафиксировать
    • fixed

      public void fixed​(DataRow row, boolean addEvents)
      Фиксация изменений
      Parameters:
      row - Строка которую требуется зафиксировать
      addEvents - true - добавить события в очередь
    • rollback

      public void rollback()
      Откат изменений таблицы
    • rollback

      public void rollback​(boolean addEvents)
      Откат изменений таблицы
      Parameters:
      addEvents - Добавлять события в очередь
    • rollback

      public void rollback​(DataRow row)
      Откат изменений строки
      Parameters:
      row - Строка
    • rollback

      public void rollback​(DataRow row, boolean addEvents)
      Откат изменений строки
      Parameters:
      row - Строка
      addEvents - Добавлять события в очередь
    • drop

      public void drop()
      Удаление всех данны, включая изменения и удаление структуры
    • isDeleted

      public boolean isDeleted​(DataRow row)
      Возвращает true если строка отмечена как удаленная
      Parameters:
      row - строка
      Returns:
      true - отмечена под удаление
    • isInserted

      public boolean isInserted​(DataRow row)
      Возвращает true если строка отмечена как новая (inserted)
      Parameters:
      row - стока
      Returns:
      true - строка добавлена но не фиксирована
    • isUpdated

      public boolean isUpdated​(DataRow row)
      Возвращает true если строка быда обновлена, но не фиксированна
      Parameters:
      row - строка
      Returns:
      true - строка была обновлена, но не фиксированна
    • stateOf

      public DataRowState stateOf​(DataRow row)
      Возвращает состояние строки
      Parameters:
      row - строка
      Returns:
      состояние строки
    • insert

      public DataTableInserting insert​(java.lang.Object... values)
      Производит вставку строки
      Parameters:
      values - значния
      Returns:
      интерфейс вставки
    • insert

      public void insert​(DataRow row)
      Производит вставку строки
      Parameters:
      row - строка
    • delete

      public void delete​(DataRow row)
      Удаляет строку
      Parameters:
      row - строка