Project

General

Profile

Actions

DeltaProcessor » History » Revision 1

Revision 1/2 | Next »
Yuriy Shekochihin, 07/23/2012 10:13 AM


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 Yuriy Shekochihin over 12 years ago · 2 revisions