jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pete" <trashmai...@att.net>
Subject OCM: Collection updates - path not consistent with inserts (id field)
Date Sat, 26 Sep 2009 21:41:47 GMT
When an update is done on a collection, in my case adding  new elements, the path naming is
not consistent with inserts of new
elements. The element path name should be the id field.

 

I created a parent and added 2 children named 'child1' and 'child2' which have a property
called 'name' annotated with '@Field(id
= true)'.

When inserted the children paths are:

  child1  path=/parent/children/child1

  child2  path=/parent/children/child2

 

I then add 2 more children named 'child3' and 'child4' and do an update. 

Their paths are:

  child3 path=/parent/children/collection-element

  child4 path=/parent/children/collection-element[2]

 

I believe the error is in the org.apache.jackrabbit.ocm.manager.collectionconverter.impl.DefaultCollectionConverterImpl.
updateManagableCollection method. The code to determine the path name is different then what's
used for inserts.

 

Update code:

elementJcrName = collectionDescriptor.getJcrElementName();

elementJcrName = (elementJcrName == null) ? COLLECTION_ELEMENT_NAME : elementJcrName;

 

Insert code:

// If the element object has a unique id => the element jcr node name = the id value

if (elementClassDescriptor.hasIdField()){

  String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();

  elementJcrName = ReflectionUtils.getNestedProperty(item, idFieldName).toString();

}else{

  elementJcrName = collectionDescriptor.getJcrElementName();

  if (elementJcrName == null){ // use PathFormat.checkFormat() here?

      elementJcrName = COLLECTION_ELEMENT_NAME;

  }

}

 

I have tested the change and it works properly. The path name for inserts and updates of newly
created elements is consistent with
the id field. 

I have never supplied a fix before but of course would be willing. I have a test case and
the fix. I did attach my test and fix,
but I'm not sure if attachments are allowed, if not I can send them to the appropriate persons.

 

BTW I really like the OCM! Keep up the GREAT work!

Peter Harootunian

------------------------------------------------------------------------------------------

Print out of the parent node and children:

 

|---node, name=parent :  path=/parent

|---|---property, name=jcr:predecessors :  value=} :  path=/parent/jcr:predecessors

|---|---property, name=jcr:uuid :  value=[STRING   ] - 2cb85e68-b49b-479f-8fec-006f4dc8c3ab
:  path=/parent/jcr:uuid

|---|---property, name=jcr:mixinTypes :  value=} :  path=/parent/jcr:mixinTypes

|---|---property, name=jcr:versionHistory :  value=[REFERENCE] - a8abf6bf-46d2-43ff-b1dc-9f37b1ca8348
:
path=/parent/jcr:versionHistory

|---|---property, name=jcr:baseVersion :  value=[REFERENCE] - 2da0279c-6478-499d-a004-b7d7a367b199
:  path=/parent/jcr:baseVersion

|---|---property, name=jcr:isCheckedOut :  value=[BOOLEAN  ] - true :  path=/parent/jcr:isCheckedOut

|---|---property, name=ocm_classname :  value=[STRING   ] - com.srcp.domain.model.OcmCollectionsTest$Parent
:
path=/parent/ocm_classname

|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :  path=/parent/jcr:primaryType

|---|---node, name=children :  path=/parent/children

|---|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :  path=/parent/children/jcr:primaryType

|---|---|---node, name=child1 :  path=/parent/children/child1

|---|---|---|---property, name=jcr:predecessors :  value=} :  path=/parent/children/child1/jcr:predecessors

|---|---|---|---property, name=name :  value=[STRING   ] - child1 :  path=/parent/children/child1/name

|---|---|---|---property, name=jcr:uuid :  value=[STRING   ] - e49f8b4c-375a-4d06-b686-028520172ff6
:
path=/parent/children/child1/jcr:uuid

|---|---|---|---property, name=jcr:mixinTypes :  value=} :  path=/parent/children/child1/jcr:mixinTypes

|---|---|---|---property, name=jcr:versionHistory :  value=[REFERENCE] - 5beceaf0-b0af-4902-8942-32a9f66e5ba6
:
path=/parent/children/child1/jcr:versionHistory

|---|---|---|---property, name=jcr:baseVersion :  value=[REFERENCE] - 310bdfd8-81e6-4a93-9a6f-f272f49c3aaf
:
path=/parent/children/child1/jcr:baseVersion

|---|---|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :
path=/parent/children/child1/jcr:primaryType

|---|---|---|---property, name=jcr:isCheckedOut :  value=[BOOLEAN  ] - true :  path=/parent/children/child1/jcr:isCheckedOut

|---|---|---|---property, name=ocm_classname :  value=[STRING   ] - com.srcp.domain.model.OcmCollectionsTest$Child
:
path=/parent/children/child1/ocm_classname

|---|---|---node, name=child2 :  path=/parent/children/child2

|---|---|---|---property, name=jcr:predecessors :  value=} :  path=/parent/children/child2/jcr:predecessors

|---|---|---|---property, name=name :  value=[STRING   ] - child2 :  path=/parent/children/child2/name

|---|---|---|---property, name=jcr:uuid :  value=[STRING   ] - 2f11d28e-35f1-4936-bbd0-e3fa61956800
:
path=/parent/children/child2/jcr:uuid

|---|---|---|---property, name=jcr:mixinTypes :  value=} :  path=/parent/children/child2/jcr:mixinTypes

|---|---|---|---property, name=jcr:versionHistory :  value=[REFERENCE] - a61e266b-fcf3-4071-b666-ca4db4083142
:
path=/parent/children/child2/jcr:versionHistory

|---|---|---|---property, name=jcr:baseVersion :  value=[REFERENCE] - c12db6cc-b3aa-4091-b134-c6ca32902ddd
:
path=/parent/children/child2/jcr:baseVersion

|---|---|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :
path=/parent/children/child2/jcr:primaryType

|---|---|---|---property, name=ocm_classname :  value=[STRING   ] - com.srcp.domain.model.OcmCollectionsTest$Child
:
path=/parent/children/child2/ocm_classname

|---|---|---|---property, name=jcr:isCheckedOut :  value=[BOOLEAN  ] - true :  path=/parent/children/child2/jcr:isCheckedOut

|---|---|---node, name=collection-element :  path=/parent/children/collection-element

|---|---|---|---property, name=jcr:predecessors :  value=} :  path=/parent/children/collection-element/jcr:predecessors

|---|---|---|---property, name=name :  value=[STRING   ] - child3 :  path=/parent/children/collection-element/name

|---|---|---|---property, name=jcr:uuid :  value=[STRING   ] - 62f4c459-355f-4103-8236-5cc300d85b45
:
path=/parent/children/collection-element/jcr:uuid

|---|---|---|---property, name=jcr:mixinTypes :  value=} :  path=/parent/children/collection-element/jcr:mixinTypes

|---|---|---|---property, name=jcr:versionHistory :  value=[REFERENCE] - 41ad9638-f517-4a08-812b-048d7555a3f5
:
path=/parent/children/collection-element/jcr:versionHistory

|---|---|---|---property, name=jcr:baseVersion :  value=[REFERENCE] - 74628c94-cd5e-4e19-a83b-b22d33cec5e4
:
path=/parent/children/collection-element/jcr:baseVersion

|---|---|---|---property, name=ocm_classname :  value=[STRING   ] - com.srcp.domain.model.OcmCollectionsTest$Child
:
path=/parent/children/collection-element/ocm_classname

|---|---|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :
path=/parent/children/collection-element/jcr:primaryType

|---|---|---|---property, name=jcr:isCheckedOut :  value=[BOOLEAN  ] - true :
path=/parent/children/collection-element/jcr:isCheckedOut

|---|---|---node, name=collection-element :  path=/parent/children/collection-element[2]

|---|---|---|---property, name=jcr:predecessors :  value=} :  path=/parent/children/collection-element[2]/jcr:predecessors

|---|---|---|---property, name=name :  value=[STRING   ] - child4 :  path=/parent/children/collection-element[2]/name

|---|---|---|---property, name=jcr:uuid :  value=[STRING   ] - 6dea91f2-a8e5-410f-8a9e-60f10328b16e
:
path=/parent/children/collection-element[2]/jcr:uuid

|---|---|---|---property, name=jcr:mixinTypes :  value=} :  path=/parent/children/collection-element[2]/jcr:mixinTypes

|---|---|---|---property, name=jcr:versionHistory :  value=[REFERENCE] - af8d82da-234a-4bd5-b864-bef2032f9529
:
path=/parent/children/collection-element[2]/jcr:versionHistory

|---|---|---|---property, name=jcr:baseVersion :  value=[REFERENCE] - 05c6a9f2-11ce-4319-a4a6-769efcee5806
:
path=/parent/children/collection-element[2]/jcr:baseVersion

|---|---|---|---property, name=ocm_classname :  value=[STRING   ] - com.srcp.domain.model.OcmCollectionsTest$Child
:
path=/parent/children/collection-element[2]/ocm_classname

|---|---|---|---property, name=jcr:primaryType :  value=[NAME     ] - nt:unstructured :
path=/parent/children/collection-element[2]/jcr:primaryType

|---|---|---|---property, name=jcr:isCheckedOut :  value=[BOOLEAN  ] - true :
path=/parent/children/collection-element[2]/jcr:isCheckedOut


Mime
View raw message