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