Project

General

Profile

Actions

DeltaProcessor

Основная задача DeltaProcessor'а — преобразование дельты, генерируемой эклипсом в последовательность событий, обрабатываемую в TreeDB.
Взаимодействие между DeltaProcessor'ом и TreeDB происходит через интерфейс IStorageDeltaListener. Все события об изменении базы делятся на два класса: внешние и внутренние события. Внешние события генерирует DeltaProcessor. Внутренние события создаются в ResourceStorage во время выполнения изменения базы. Во время создания внутренних событий DeltaProcessor не работает.

Структура дельты

Дельта, генерируемая эклипсом представляет собой дерево, узлы которого — описание изменений узла дерева ресурсов. Фактически дельта является изменённым поддеревом дерева ресурсов. Описание храниться в объекте, с реализацией интерфейса IRresourceDelta. Для получения ссылки на изменённый класс используется метод getResource(). Список дочерних узлов получается методом getAffectedChildren(). Тип изменения определяется вызовом метода getKind() и может быть следующих типов: IResourceDelta.ADDED, IResourceDelta.CHANGED и IResourceDelta.REMOVED.

Изменение узла

Узел считается изменённым, если ресурс (эклипсовский IResource), в котором хранится узел или любой из ресурсов (дополнительные файлов) узла содержался в дереве дельты.

Добавление узла

В дереве дельты есть узел, описывающий добавление ресурса, в котором содержится описание узла TreeNode. Добавление должно обрабатываться от родителя к потомкам в дереве TreeDB. Событие генерируется только если не было обнаружено перемещение узла.

Удаление узла

Узел дельты, который является описанием узла TreeDB был удалён. В этом случае генерируется событие удаления узла. События удаления узлов должны обрабатываться в порядке от потомков к родителям в дереве TreeDB. Событие генерируется только если не было обнаружено перемещение узла.

Перемещение узла

Если в дельте обнаружены события добавления и удаления узлов, UUID которых совпадают. В этом случае события добавления и удаления не создаются. Вместо их создается событие перемещения узла. В случае переноса поддерева событие перемещения узла создаётся только для родительского узла.

Updated by Anastasia Tugaenko over 9 years ago · 2 revisions