Tomasz Niedźwiedź created SLING-11878:
-----------------------------------------
Summary: Clarify Javadoc on which methods allow a
ModifiableValueMap to be changed
Key: SLING-11878
URL: https://issues.apache.org/jira/browse/SLING-11878
Project: Sling
Issue Type: Improvement
Components: API
Reporter: Tomasz Niedźwiedź
Hi, one of the users of AEM Rules for SonarQube has asked a question about the
{{ModifiableValueMap}} interface and the methods through which the map is
changeable. Here's the original [GitHub
issue|https://github.com/wttech/AEM-Rules-for-SonarQube/issues/237#issuecomment-1536213675].
Whether the Sonar rule is valid or should be changed depends on the intended
way the MVM API should be used. I believe the current implementation of the
Sonar rule is based on a piece of Sling API Javadoc that I think could use some
clarification.
Looking at [the latest available version of the
Javadoc|https://sling.apache.org/apidocs/sling12/org/apache/sling/api/resource/ModifiableValueMap.html],
here's what it says about changing resources through {{ModifiableValueMap}}
instances:
{quote}The {{ModifiableValueMap}} is an extension of the
[{{ValueMap}}|https://sling.apache.org/apidocs/sling12/org/apache/sling/api/resource/ValueMap.html]
which allows to modify and persist properties. All changes to this map are
stored in the transient layer of the resource resolver or more precisely in the
transient layer of the resource provider managing this resource.
Once
[{{ResourceResolver.commit()}}|https://sling.apache.org/apidocs/sling12/org/apache/sling/api/resource/ResourceResolver.html#commit--]
is called, the changes are finally persisted.
*The modifiable value map is only changeable through one of these methods*
* *{{Map.put(Object, Object)}}*
* *{{Map.putAll(java.util.Map)}}*
* *{{Map.remove(Object)}}*
*The map is not modifiable through the collections provided by*
* *{{Map.entrySet()}}*
* *{{Map.keySet()}}*
* *{{Map.values()}}*
*And it can't be modified by these methods:*
* *{{Map.clear()}}*{quote}
Since the {{ModifiableValueMap}} interface implements {{{}java.util.Map{}}}, it
also comes with the following methods:
* {{replace}}
* {{replaceAll}}
I've done a quick test in AEM 6.5, by means of the Groovy console, and these
methods have the effect of modifying the map's underlying resource once the
session is saved/RR is committed.
Should these methods also be documented as valid? Or is there a reason they
shouldn't be called?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)