Hi,
suggested API:
void checkin(String absPath, Object versionableEntity, String[] newVersionNumbers) throws LockedException; void checkout(String absPath, Object versionableEntity) throws LockedException;
   String[] getVersionLabels(String absPath, Object cmsObject);
void addVersionLabel(String absPath, Object entity, String versionLabel);

and (maybe) working implementation:

public void checkin(final String absPath, final Object versionableEntity, final String[] newVersionNumbers) throws LockedException {
       try {
           Node node = getNode(absPath);
           checkIfNodeLocked(absPath);
           Version newVersion = node.checkin();
           VersionHistory versionHistory = node.getVersionHistory();

           if (newVersionNumbers != null) {
               for (int i = 0; i < newVersionNumbers.length; i++) {
                   String versionLabel = newVersionNumbers[i];
versionHistory.addVersionLabel(newVersion.getName(), versionLabel, false);
               }
           }
       } catch (UnsupportedRepositoryOperationException e) {
// This catch UnsupportedRepositoryOperationException potentionally throwed with Node.checkout() // indicates that node is not versionable - it means coding bug in jcrmapping.xml/custom_nodes_types.xml throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Node is not mix:versionable. Path: " + absPath, e);
       } catch (RepositoryException e) {
           // This typically 'If another error occurs'.
throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Unknown error on checkin: ", e);
       }

   }

public void checkout(final String absPath, final Object versionableEntity) throws LockedException {
       Node node;
       try {
           checkIfNodeLocked(absPath);
           node = getNode(absPath);
           node.checkout();
       } catch (UnsupportedRepositoryOperationException e) {
// This catch UnsupportedRepositoryOperationException potentionally throwed with Node.checkout() // indicates that node is not versionable - it means coding bug in jcrmapping.xml throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Node is not mix:versionable. Path: " + absPath, e);
       } catch (RepositoryException e) {
           // This eventually catch LockException e, but
           // this colud never happen - see upper code
throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Unknown error on checkout: ", e);
       }
   }


public String[] getVersionLabels(final String absPath, final Object cmsObject) {
       try {
           Node node = getNode(absPath);
           VersionHistory vh = node.getVersionHistory();
           VersionIterator versionIterator = vh.getAllVersions();
           versionIterator.skip(1);
           vh.getBaseVersion();
           Version version = versionIterator.nextVersion();
           String[] versionLabels = vh.getVersionLabels(version);
           return versionLabels;
       } catch (UnsupportedRepositoryOperationException e) {
// node.getVersionHistory() throws UnsupportedRepositoryOperationException if this node is not versionable. throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Node is not versionable: " + absPath);
       } catch (RepositoryException e) {
throw new org.apache.portals.graffito.jcr.exception.RepositoryException(e.getMessage(), e);
       }

   }

public void addVersionLabel(final String absPath, final Object entity, final String versionLabel) {
       try {
           final Node node = getNode(absPath);
           final VersionHistory versionHistory = node.getVersionHistory();
           final boolean moveLabel = false;
versionHistory.addVersionLabel(node.getBaseVersion().getName(), versionLabel, moveLabel);
       } catch (UnsupportedRepositoryOperationException e) {
// node.getVersionHistory() throws UnsupportedRepositoryOperationException if this node is not versionable. throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Node is not versionable: " + absPath);
       } catch (RepositoryException e) {
throw new org.apache.portals.graffito.jcr.exception.RepositoryException("Unknown error on addVersionLabel: ", e);
       }
   }


Christophe Lombart wrote:
Hi all,

I'm still working on the JCR integration and I'm wondering what are our
needs in point of view content versionning ?
I would like to start with simple use cases but I want to know if someone
has specific requirements.

Furthermore, how do you see the versionning API in the JCR-mapping
subproject ?
Do we create a new component (like the QueryManager) or add new methods in
the PersistenceManager ?

All ideas, comments, thoughts are welcome.

kind regards,
Christophe


Reply via email to