[
https://issues.apache.org/jira/browse/JCR-1119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12526726
]
Felix Meschberger commented on JCR-1119:
----------------------------------------
> Right now, I don't see a use case
Thinking about it, I am even at unease to do such a check on retrieve ....
Thus, I did not implement it.
What I did implement is the following algorithm:
If the property exists, get its value
else if the field descriptor has a default value, use that value
else if there exists a PropertyDescriptor and that PropertyDescriptor has a
default value, use that value
else set the field to null
At the same time I modified the SimpleFieldsHelper as follows.
(1) retrieveSimpleField
If the initializedBean is null, it would only be created if the field value is
not null. In case of a null value, the bean is not created but it is tried to
set the field value null on that null bean. The fix is to just return null
immediately if the field value turns out to be null and the bean has not been
initialized
(2) getPropertyDescriptor
I added two getPropertyDescriptor methods, which require the property
definition to be single-valued and also take residual property definitions
(where getName() returns null) into account. The main method used is the
getProperyDescriptor(Node, String) while the other method
getPropertyDescriptor(NodeType, String) is used internally by the former.
(3) isProtectedProperty
Now first checks, whether a property of the given name happens to exist. If so,
the isProtected setting of that property is returned. Otherwise, the new
getPropertyDescriptor(Node, String) method is called to find a
PropertyDescriptor to ask about the isProperty setting.
(4) checkProperty
This method only does work if the value is null (previously it always looked up
a PropertyDescriptor (with potential NPE if stumbled upon a residual property
descriptor) and checked its mandatory state together with the value's value).
If the value is null, then the new getPropertyDescriptor(Node, String) method
is called to find the property descriptor. Then an exception is raised if the
property is mandatory and is not automatically created.
Finally I also added a simple Test Case for this new default value handling.
> SimpleFieldsHelper emits a lot warnings
> ---------------------------------------
>
> Key: JCR-1119
> URL: https://issues.apache.org/jira/browse/JCR-1119
> Project: Jackrabbit
> Issue Type: Improvement
> Components: jcr-mapping
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: 1.4
>
>
> The SimpleFieldsHelper.retrieveSimpleField method is used to load JCR
> properties into simple Java object fields according to the mapping
> descriptor. If the node does not have the named property, a WARN message is
> emited.
> If the missing property is defined as optional in the node type definition,
> it is quite normal, that it may be missing. Therefore emitting a WARN message
> does not seem appropriate. It would be better, to do the following (in order):
> If the missing property is declared to be required in the descriptor,
> throw an exception
> else if the descriptor has a default value for the missing property, use
> that value
> else if the property is defined with a default value in the node type
> definition, use that value
> else emit a DEBUG message and leave the field undefined
> Not sure, whether it makes absolute sense to define a property as mandatory
> in the descriptor but not in the node type definition. Are there any opinions
> on that ?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.