2010-07-16 4 views

Répondre

3

Je ne sais pas comment parcourir l'arborescence de la version correctement - devrait être possible, je pense, en allant plus /jcr:system/jcr:versionStorage, voir JCR 1.0 section 8.2.2.1 et JCR 2.0 section 15.10 - mais vous pouvez interroger l'arborescence de version avec une requête comme

SELECT * FROM nt:frozenNode WHERE prop = 'value' 

(s'il y a un index de recherche configuré pour l'espace de travail de version dans Jackrabbit, qui devrait être par défaut).

Les noeuds retournés seront les noeuds congelés, obtenir le nœud parent pour récupérer la version:

NodeIterator iter = res.getNodes(); 
while (iter.hasNext()) { 
    Node frozenNode = iter.nextNode(); 
    Version v = (Version) frozenNode.getParent(); 
    // ... 
} 

Il est logique de stocker le chemin (parent) du nœud en tant que propriété chaque fois que vous créez une version en la première place, de sorte que vous pouvez demander pour cela et aussi savoir où le restaurer plus tard (voir ci-dessous).

Vous savez qu'il est supprimé lorsque le jcr:frozenUuid du frozenNode ne peut être trouvée dans la session:

boolean deleted = false; 
try { 
    session.getNodeByUUID(
     frozenNode.getProperty(JcrConstants.JCR_FROZENUUID).getString() 
    ); 
} catch (ItemNotFoundException e) { 
    deleted = true; 
} catch (RepositoryException e) { 
    continue; 
} 

Pour restaurer, prendre la version et le transmettre au gestionnaire de version, ainsi que la chemin absolu pour la restaurer à (ce qui pourrait provenir de la propriété enregistrée sur le noeud congelé de la version):

VersionManager vMgr = session.getWorkspace().getVersionManager(); 
vMgr.restore(path, v, true); 

Si vous connaissez une certaine façon sans avoir besoin de chercher, vous pouvez également obtenir la version par son UUID:

Version v = (Version) session.getNodeByUUID(versionUUID); 
Questions connexes