Hi Stefan!

Yes, setting the primary item directly in the node type definition works
fine (in fact, that's the way I'm doing it now).
But an error occurs if you try to define a subtype's primary item in a CND
file and import it with CompactNodeTypeDefReader.

A CND like the following produces "ambigous property definition" exception
(EffectiveNodeType.internalMerge(), line 1051):
...
[foo:myResource] > nt:resource
  - jcr:data (binary) mandatory
...

It would be nice if it was possible to define node types like this entirely
in CND, not having to add the primary items manually.


-----Original Message-----
From: Stefan Guggisberg [mailto:[EMAIL PROTECTED] 
Sent: Thursday, July 20, 2006 3:58 PM
To: [email protected]
Subject: Re: Primary item inheritance

hi jaka

On 7/20/06, Jaka Jaksic wrote:

> We define our repository structure using a CND file. In it we override 
> several built-in node types, namely nt:file and nt:resource. The 
> problem is that the subtypes don't inherit the primary item 
> definition, so the resulting types have no primary item. And we can't 
> simply redefine the primary item property because of an "ambigous
definition" error.

strange, i quickly tested this with the following code snippet:

            NodeTypeRegistry ntReg = ((NodeTypeManagerImpl)
wsp.getNodeTypeManager()).getNodeTypeRegistry();
            NodeTypeDef ntd = new NodeTypeDef();
            ntd.setName(new QName("", "myResource"));
            ntd.setSupertypes(new QName[]{QName.NT_RESOURCE});
            ntd.setPrimaryItemName(QName.JCR_MIMETYPE);
            List ntDefs = new ArrayList();
            ntDefs.add(ntd);
            ntReg.registerNodeTypes(ntDefs);

            Node n = root.addNode("foo", "myResource");
            n.setProperty("jcr:mimeType", "application/octet-stream");
            Item pi = n.getPrimaryItem();  // -> returns /foo/jcr/mimeType

i.e. i was able to register and use a subtype of nt:resource that specifies
a custom primary item (jcr:mimeType).

please provide a simple test case that demonstrates your issue.

Reply via email to