Project

General

Profile

DeltaProcessor » History » Version 1

Yuriy Shekochihin, 07/23/2012 10:13 AM

1 1 Yuriy Shekochihin
h1. DeltaProcessor
2
3
Основная задача DeltaProcessor''а — преобразование дельты, генерируемой эклипсом в последовательность событий, обрабатываемую в TreeDB.
4
Взаимодействие между DeltaProcessor''ом и TreeDB происходит через интерфейс IStorageDeltaListener. Все события об изменении базы делятся на два класса: внешние и внутренние события. Внешние события генерирует DeltaProcessor. Внутренние события создаются в ResourceStorage во время выполнения изменения базы. Во время создания внутренних событий DeltaProcessor не работает.
5
6
h2. Структура дельты
7
8
Дельта, генерируемая эклипсом представляет собой дерево, узлы которого — описание изменений узла дерева ресурсов. Фактически дельта является изменённым поддеревом дерева ресурсов.  Описание храниться в объекте, с реализацией интерфейса IRresourceDelta. Для получения ссылки на изменённый класс используется метод getResource(). Список  дочерних узлов получается методом getAffectedChildren(). Тип изменения определяется вызовом метода getKind() и мажет быть следующих типов: IResourceDelta.ADDED, IResourceDelta.CHANGED и IResourceDelta.REMOVED.
9
10
h3. Изменение узла
11
12
Узел считается изменённым, если ресурс (эклипсовский IResource), в котором хранится узел или любой из ресурсов (дополнительные файлов) узла содержался в дереве дельты.
13
14
h3. Добавление узла
15
16
В дереве дельты есть узел, описывающий добавление ресурса, в котором содержится описание узла TreeNode. Добавление должно обрабатываться от родителя к потомкам в дереве TreeDB. Событие генерируется только если не было обнаружено перемещение узла.
17
18
h3. Удаление узла
19
20
Узел дельты, который является описанием узла TreeDB был удалён. В этом случае генерируется событие удаления узла. События удаления узлов должны обрабатываться в порядке от потомков к родителям в дереве TreeDB. Событие генерируется только если не было обнаружено перемещение узла.
21
22
h3. Перемещение узла
23
24
Если в дельте обнаружены события добавления и удаления узлов, UUID которых совпадают. В этом случае события добавления и удаления не создаются. Вместо их создается событие перемещения узла. В случае переноса поддерева событие перемещения узла создаётся только для родительского узла.