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 которых совпадают. В этом случае события добавления и удаления не создаются. Вместо их создается событие перемещения узла. В случае переноса поддерева событие перемещения узла создаётся только для родительского узла. |