Hi, how to extends base behaviour of versioning ?
I need two more properties on Version :

comment (String) - simple description of something interesting with version
authorId (String) - id of user witch performed checkin.

With normal Node it's simple - custom node type. Is there any way to do something like that:

<nodeType name="type:version" isMixin="false" hasOrderableChildNodes="false" >
<supertypes>
<supertype>nt:version</supertype>
</supertypes>
<propertyDefinition name="ext:comment" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" /> <propertyDefinition name="ext:authorId" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
</nodeType>

Thanks,

Martin

Martin Koci wrote:
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






--
Mgr. Martin Kočí
---------------------------------
AURA, s.r.o.
Úvoz 499/56; 602 00 Brno
ISO 9001 certifikovaná společnost
tel./fax: +420 5 43 24 51 11
e-mail:  [EMAIL PROTECTED]
internet: http://www.aura.cz
        http://www.j2ee.cz
---------------------------------

Reply via email to