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
>>
>

Reply via email to