Como se mencionó en this thread, echar un vistazo a finales del ResourceNavigator
, del paquete org.eclipse.ui.views.navigator
.
("tarde" porque esa clase ya no se usa directamente, vea Eclipse Wiki).
(como se ve en la eclipse Java Model)
Se utiliza un TreeViewer
, y guarda los elementos expandido y elementos seleccionados, entre otro estado.
Los elementos del modelo son objetos IResource
, que se conservan utilizando el mecanismo IPersistableElement
/IElementFactory
.
El adaptador IPersistableElement
está registrado contra IResource
en la clase WorkbenchAdapter
, pero en su lugar podría obtenerse mediante el elemento de modelo que implementa IPersistableElement
directamente.
El correspondiente IElementFactory
se declara en una extensión elementFactory
en org.eclipse.ui.ide
's plugin.xml
.
Los recursos restaurados saben cómo obtener sus propios hijos (y sus padres), a través del proveedor de contenido del árbol, por lo que no es necesario que persistan todos los elementos del árbol.
Se podría utilizar un enfoque similar para guardar el recurso de entrada del espectador.
Para ResourceNavigator
, hay un nivel de indirección aquí a través del marco actual de FrameList
, pero si lo revisa en el depurador, verá que básicamente está haciendo lo mismo.
extraer pequeñas (pero el resto del código guardar también otras muchas cosas, incluyendo la selección)
if (frameList.getCurrentIndex() > 0) {
//save frame, it's not the "home"/workspace frame
TreeFrame currentFrame = (TreeFrame) frameList.getCurrentFrame();
IMemento frameMemento = memento.createChild(TAG_CURRENT_FRAME);
currentFrame.saveState(frameMemento);
} else {
//save visible expanded elements
Object JavaDoc expandedElements[] = viewer.getVisibleExpandedElements();
if (expandedElements.length > 0) {
IMemento expandedMem = memento.createChild(TAG_EXPANDED);
for (int i = 0; i < expandedElements.length; i++) {
if (expandedElements[i] instanceof IResource) {
IMemento elementMem = expandedMem
.createChild(TAG_ELEMENT);
elementMem.putString(TAG_PATH,
((IResource) expandedElements[i]).getFullPath()
.toString());
}
}
}
[...]
}
Gracias, funciona después de implementar los métodos equals y hashset .. – penguru