<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 08:38:29 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MGNLUI-606] info.magnolia.ui.vaadin.integration.jcr whole package need review</title>
                <link>https://jira.magnolia-cms.com/browse/MGNLUI-606</link>
                <project id="10625" key="MGNLUI">Magnolia UI</project>
                    <description>&lt;p&gt;It&apos;s an abstract mess in general grown over time. This could be simplified a lot by simple refactorings, documentation and probably get rid of some classes.&lt;/p&gt;

&lt;p&gt;all those methods in there take a node or an Id to perform actions, but the the classes are wrapping/adapting a single property or node, so you could theoretically create an adapter and pass a not relating node into it. Why pass those references around?&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.JcrPropertyAdapter&lt;br/&gt;
is using the same lists as the node adapters to keep track of changed properties. The properties beeing used inside a property are:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;ModelConstants.JCR_NAME&lt;/li&gt;
	&lt;li&gt;JcrPropertyAdapter#VALUE_PROPERTY&lt;/li&gt;
	&lt;li&gt;JcrPropertyAdapter#TYPE_PROPERTY&lt;br/&gt;
It&apos;s very confusing. There are properties inside properties. They override the same abstract functions, but do different things.&lt;br/&gt;
The constants are locally stored, but also using ModelConstants.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter#changedProperties&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter#removedProperties&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
methods doing almost the same but not really, confusing:&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter#updateProperty&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.JcrPropertyAdapter#updateProperty&lt;/p&gt;

&lt;p&gt;info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter#getItemProperty&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.JcrPropertyAdapter#updateProperty&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
property and nodes using getJcrItem, which is not a good idea from a performance perpective. And we do know on which type of item we are working on, so change it to getProperty and getNode. We end up casting every time we get a property or node from the repo.&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter#getJcrItem&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter#getNode&lt;br/&gt;
contains these lines of code:&lt;br/&gt;
            // get Node from repository&lt;br/&gt;
            node = (Node) getJcrItem();&lt;br/&gt;
50 lines earlier, we have a method:&lt;br/&gt;
info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter#getNodeFromRepository() {&lt;br/&gt;
        return (Node) getJcrItem();&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
DefaultProperty is used for creating an actual default property based on some default value but mostly it&apos;s used to create properties with non-default values. The term default may be misleading. same goes for DefaultPropertyUtil.&lt;br/&gt;
As we&apos;re using generics in DefaultProperty now, maybe introducing generics in Adapters would make sense?&lt;br/&gt;
&amp;#8212;&lt;br/&gt;
DefaultPropertyUtil vs info.magnolia.jcr.util.PropertyUtil&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
From code &lt;a href=&quot;https://jira.magnolia-cms.com/browse/MGNLUI-568&quot; title=&quot;Field: when resetting a already set field it won&amp;#39;t propagate to jcr&quot; class=&quot;issue-link&quot; data-issue-key=&quot;MGNLUI-568&quot;&gt;&lt;del&gt;MGNLUI-568&lt;/del&gt;&lt;/a&gt; review:&lt;br/&gt;
The putting/removal of a property from the changedProperties and removedProperties HashMap in &lt;tt&gt;info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter&lt;/tt&gt; should be synchronized or a synchronized map could be used instead.&lt;/p&gt;

&lt;p&gt;A marginal remark&lt;br/&gt;
the while loop at &lt;tt&gt;info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter.updateProperties(Item)&lt;/tt&gt; could be rewritten as a for loop&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (Entry&amp;lt;&lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt;, Property&amp;gt; entry : changedProperties.entrySet()) {
...
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ATM, removing properties will clear removedProperties HashMap, however, applying changes to (saving) properties doesn&apos;t remove properties from the changedProperties HashMap.&lt;/p&gt;</description>
                <environment></environment>
        <key id="27453">MGNLUI-606</key>
            <summary>info.magnolia.ui.vaadin.integration.jcr whole package need review</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="9">Obsolete</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="ejervidalo">Espen Jervidalo</reporter>
                        <labels>
                            <label>adapters</label>
                    </labels>
                <created>Thu, 24 Jan 2013 11:48:57 +0100</created>
                <updated>Wed, 10 Mar 2021 08:16:58 +0100</updated>
                            <resolved>Wed, 10 Mar 2021 08:16:58 +0100</resolved>
                                    <version>5.0</version>
                                                    <component>framework</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="57143" author="dlipp" created="Tue, 5 Feb 2013 13:59:59 +0100"  >&lt;p&gt;re &quot;From code &lt;a href=&quot;https://jira.magnolia-cms.com/browse/MGNLUI-568&quot; title=&quot;Field: when resetting a already set field it won&amp;#39;t propagate to jcr&quot; class=&quot;issue-link&quot; data-issue-key=&quot;MGNLUI-568&quot;&gt;&lt;del&gt;MGNLUI-568&lt;/del&gt;&lt;/a&gt; review:&lt;br/&gt;
The putting/removal of a property from the changedProperties and removedProperties HashMap in &lt;tt&gt;info.magnolia.ui.vaadin.integration.jcr.AbstractJcrAdapter&lt;/tt&gt; should be synchronized or a synchronized map could be used instead.&quot;&lt;/p&gt;

&lt;p&gt;I actually think it&apos;s safe to not synchronize there. Those adapters are pretty transient and basically created on the fly so IMHO the only situation where an instance is used twice is, when editing an item of a table in a Dialog. As dialogs are modal to the table this should still be safe. I cannot think of any situation where different users would end up with the same instance of such an adapter.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10160">
                    <name>Relates</name>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="31611">MGNLUI-1790</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Tue, 5 Feb 2013 13:59:59 +0100</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>rkovarik</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            11 years, 2 weeks, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>dlipp</customfieldvalue>
            <customfieldvalue>ejervidalo</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i008nb:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1437</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>