jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mephisto29 <eng...@collide.info>
Subject Versioning
Date Fri, 29 Jan 2010 14:41:57 GMT

Hi,

first of all: Thanks for the good support via this list. Lots of my problems
has been solved just by reading your mails. But now I have a problem with
versioning and I don't know where to start :-)

I have created a cnd definition which looks like that:

<ns = 'http://http://www.example.com/jcr-ns/myproj'>
// Namespace declaration -base
<mix = 'http://www.jcp.org/jcr/mix/1.0'> 
<nt = 'http://www.jcp.org/jcr/nt/1.0'> 
// Name
[ns:myNode]

// Supertypes
>  ns:base, mix:versionable
- myNode:defaultLanguage (string) mandatory 
+ myNode:metadata
+ myNode:languages
+ myNode:content
 
[ns:metadata]
> mix:versionable
mixin
+ ns:metadataEntry
   mandatory
   multiple

[ns:metadataEntry]
> mix:versionable
mixin
+ ns:key
   mandatory
   multiple
+ ns:value
   mandatory
   multiple 
 
[ns:key]
> mix:versionable
mixin
- ns:id (string) mandatory 
- ns:xPath (string) mandatory 
- ns:class (string) mandatory
- ns:i18nType (string) mandatory 
- ns:metadataTokenisation(string) mandatory 
- ns:metadataValueCount(string) mandatory 
- ns:validator(string) mandatory 

Now I can store all my stuff in the right location inside Jackrabbit, but:
How does the versioning stuff work? What I did was:
-checkout a (previously stored) node of type myNode
-call this snippet (where childnode is the (checked out) myNode-Node):
Node metadataNode = childnode.addNode("ns:metadata", "ns:metadata");
        IMetadata metadata = myObject.getMetadata();
        Set metadataKeys = metadata.getAllMetadataKeys();
        for (MetadataKey metadataKey : metadataKeys) {
            Node metadataSubNode =
metadataNode.addNode("ns:metadataEntry","ns:metadataEntry");
            Node keyNode = metadataSubNode.addNode("ns:key","ns:key");
            keyNode.setProperty("ns:id", metadataKey .getId());
            keyNode.setProperty("ns:xPath", metadataKey .getXPath());
            keyNode.setProperty("ns:class", metadataKey
.getClass().getCanonicalName());
            keyNode.setProperty("ns:i18nType", metadataKey
.getI18nType().name());
            keyNode.setProperty("ns:metadataTokenisation",     
metadataKey.getMetadataTokenization().name());
            keyNode.setProperty("ns:metadataValueCount", metadataKey
.getMetadataValueCount().name());
            keyNode.setProperty("ns:validator",
iMetadataKey.getValidator().getClass().getCanonicalName());
            Node valueNode = metadataSubNode.addNode("ns:value",
"ns:value");
            ValueContainer valueContainer =
metadata.getMetadataValueContainer(metadataKey);
            String classNameForValue =
valueContainer.getValue().getClass().getCanonicalName();
            valueNode.setProperty("ns:class", classNameForValue);
[...]
            valueNode.setProperty("scy:value",
Base64.encodeToString(baos.toByteArray(), true));
        }

Then I call checkin() on childNode and what I want to have is a new Version.
What I get is different:
Either there are duplicate entries of "metadata" (if I add multiple to the
cnd in 'myNode' for metadata) or there is an javax.jcr.ItemExistsException
for the metadata node. 

What I want to have is that all the childnodes of myNode are somehow
replaced by the new values, so that I get a complete new version of
myNode...

As I am new to JCR/Jackrabbit it could be that I did some mistakes in the
cnd and/or the java code, so please be patient :-)

Cheers and (again) thx for your help,

 Jan




 
-- 
View this message in context: http://n4.nabble.com/Versioning-tp1415533p1415533.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Mime
View raw message