Hi all, I just created a maven project, used Oak version 1.30.0 and tested the problem I reported on OAK-8961 <https://issues.apache.org/jira/browse/OAK-8961>. It still happens. I will see if I am able to delete the duplicate jcr:propertyDefinition nodes, any ideas are welcome :)
Regards. Jorge El mié., 18 mar. 2020 a las 11:19, jorgeeflorez . (< [email protected]>) escribió: > 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 > (<[email protected]>) 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 . <[email protected]> >> Sent: Wednesday, March 18, 2020 3:57 PM >> To: [email protected] <[email protected]> >> 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 >> >
