Hi Angela, thank you for your help. I created https://issues.apache.org/jira/browse/OAK-8961.
Regards. Jorge El mié., 18 mar. 2020 a las 10:09, Angela Schreiber (<anch...@adobe.com.invalid>) escribió: > Hi Jorge > > That sounds like a bug to me... after all you will not be able to set > multiple properties that have exactly the same PropertyDefinition and as > far as I remember it should not even be possible to create multiple > properties with the same name. > > Can you create a bug for this in JIRA? As usual detailed steps to > reproduce, test cases or even a patch are very much welcome. > > Kind regards > Angela > ________________________________ > From: jorgeeflorez . <jorgeeduardoflo...@gmail.com> > Sent: Wednesday, March 18, 2020 3:57 PM > To: oak-dev@jackrabbit.apache.org <oak-dev@jackrabbit.apache.org> > Subject: Multiple property definition for same property > > Hi all, > using the following code, I am able to update an existing node type by > inserting a new property: > > NodeTypeManager nodeTypeManager = > session.getWorkspace().getNodeTypeManager(); > > NodeType repositoryType = nodeTypeManager.getNodeType("testType"); > NodeTypeTemplate repositoryTypeTemplate = > nodeTypeManager.createNodeTypeTemplate(repositoryType); > PropertyDefinitionTemplate testProperty = > nodeTypeManager.createPropertyDefinitionTemplate(); > testProperty.setName("testProperty"); > testProperty.setRequiredType(PropertyType.STRING); > testProperty.setMandatory(false); > testProperty.setMultiple(false); > testProperty.setDefaultValues(new Value[0]); > testProperty.setValueConstraints(new String[0]); > repositoryTypeTemplate.getPropertyDefinitionTemplates().add(testProperty); > > nodeTypeManager.registerNodeType(repositoryTypeTemplate, true); > session.save(); > > I prefer this way, instead using CND > <https://jackrabbit.apache.org/jcr/node-type-notation.html> because I > understand it better and is cleaner, compared to having everything inside a > String (am I doing it correctly?). > > Because of a bug I was tracking, I found out that, if you invoke this code > several times, it will insert a new property definition each time, so in > the repository you could end up with this (I removed a lot of stuff to keep > it small): > { > "node": "testType", > "path": "/jcr:system/jcr:nodeTypes/testType", > "children": [ > { > "node": "jcr:propertyDefinition", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition", > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[10]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[10]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[2]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[2]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[3]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[3]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[4]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[4]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[5]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[5]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[6]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[6]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[7]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[7]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[8]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[8]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "jcr:propertyDefinition[9]", > "path": > "/jcr:system/jcr:nodeTypes/testType/jcr:propertyDefinition[9]", > "mixins": [], > "children": [], > "properties": [ > *"jcr:name = testProperty"* > ] > }, > { > "node": "rep:namedPropertyDefinitions", > "path": > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions", > "children": [ > { > "node": "jcr:created", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions/jcr:created", > }, > { > "node": "jcr:createdBy", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions/jcr:createdBy", > }, > { > "node": "rep:mixinTypes", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions/rep:mixinTypes", > }, > { > "node": "rep:primaryType", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions/rep:primaryType", > }, > { > "node": "testProperty", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:namedPropertyDefinitions/testProperty", > "properties": [ > *"jcr:name = testProperty"* > ] > }], > "properties": ["jcr:primaryType = > rep:PropertyDefinitions"] > } > ], > "properties": ["jcr:primaryType = > rep:NamedPropertyDefinitions"] > }, > { > "node": "rep:residualChildNodeDefinitions", > "path": > "/jcr:system/jcr:nodeTypes/testType/rep:residualChildNodeDefinitions", > "children": [{ > "node": "nt:hierarchyNode", > "path": > > "/jcr:system/jcr:nodeTypes/testType/rep:residualChildNodeDefinitions/nt:hierarchyNode", > }], > "properties": ["jcr:primaryType = rep:ChildNodeDefinitions"] > } > ], > "properties": [ > "jcr:nodeTypeName = testType", > "rep:hasProtectedResidualChildNodes = false", > "jcr:isAbstract = false", > "jcr:hasOrderableChildNodes = false", > "rep:supertypes = nt:folder,nt:hierarchyNode,nt:base,mix:created", > "jcr:isMixin = false", > "rep:hasProtectedResidualProperties = false", > "rep:primarySubtypes = ", > "jcr:isQueryable = true", > "rep:mandatoryProperties = jcr:primaryType", > "rep:protectedChildNodes = ", > "jcr:supertypes = nt:folder", > "rep:mandatoryChildNodes = ", > "rep:protectedProperties = > jcr:primaryType,jcr:mixinTypes,jcr:created,jcr:createdBy", > "jcr:primaryType = rep:NodeType", > "rep:namedSingleValuedProperties = > testProperty,jcr:primaryType,jcr:created,jcr:createdBy" > ] > } > > I am not sure if I am doing something wrong, or whether there should be a > validation when inserting property definitions having a name that already > exists... > > Any comment is appreciated as always :) > > Jorge >