<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 09:17:55 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-4566] Polish datasource observation mechanism in content apps</title>
                <link>https://jira.magnolia-cms.com/browse/MGNLUI-4566</link>
                <project id="10625" key="MGNLUI">Magnolia UI</project>
                    <description>&lt;p&gt;&lt;b&gt;primary goal&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;get away from the inevitable need of content changed events. In the new incarnation of the content app we try to stay away from the &lt;tt&gt;ContentChangedEvent&lt;/tt&gt; since it is an error-prone and cumbersome way to communicate the changes. Instead we try to utilise the native datasource observation capabilities relief the app developer from having to send notifications manually.&lt;/li&gt;
	&lt;li&gt;browser views should not have any imperative logic re: refreshing the views. Instead e.g. the table should use Vaadin DataProvider API and data providers should optionally subscribe to the backend events&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;b&gt;possible solution&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;JCR - use the wrapper around observation mechanism
	&lt;ul&gt;
		&lt;li&gt;do not want to have too many listeners at once. Maybe create a singleton pool of the listeners, which would broadcast the changes to the data providers?&lt;/li&gt;
		&lt;li&gt;non-JCR: depends on the capabilities of the backend
		&lt;ul&gt;
			&lt;li&gt;there could be no capabilities (like REST)&lt;/li&gt;
			&lt;li&gt;we could provide e.g. smth like localised CCE: specific action injects the specific DS observation and pushes the event&lt;br/&gt;
&lt;b&gt;additional complications&lt;/b&gt;&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;we have some relying on the CCE in other places. E.g. details sub-apps catch them and automatically close once it is received.&lt;/li&gt;
		&lt;li&gt;how do we leverage that situation?&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="68064">MGNLUI-4566</key>
            <summary>Polish datasource observation mechanism in content apps</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="1">Fixed</resolution>
                                        <assignee username="apchelintcev">Aleksandr Pchelintcev</assignee>
                                    <reporter username="apchelintcev">Aleksandr Pchelintcev</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Jul 2018 08:33:28 +0200</created>
                <updated>Mon, 21 Oct 2019 08:38:25 +0200</updated>
                            <resolved>Mon, 7 Oct 2019 22:01:50 +0200</resolved>
                                                    <fixVersion>6.2</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                    <progress percentage="74">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="74" backgroundColor="#51a825"/>
                                                    <row percentage="26" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </progress>
                                    <aggregateprogress percentage="74">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="74" backgroundColor="#51a825"/>
                                                    <row percentage="26" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </aggregateprogress>
                                            <timeestimate seconds="3600">1h</timeestimate>
                            <timespent seconds="10440">2.9h</timespent>
                                <comments>
                            <comment id="164782" author="rkovarik" created="Tue, 17 Jul 2018 14:11:30 +0200"  >&lt;p&gt;&lt;tt&gt;Other usages of CCE:&lt;/tt&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;info.magnolia.ui.api.event.ContentChangedEvent.Handler#onContentChanged&lt;/tt&gt;
	&lt;ul&gt;
		&lt;li&gt;closing subapp when item was deleted&lt;/li&gt;
		&lt;li&gt;changing location when item was e.g. renamed&#160;&lt;/li&gt;
		&lt;li&gt;seems like both cases are not working since&#160;&lt;a href=&quot;https://jira.magnolia-cms.com/browse/MGNLUI-2761&quot; title=&quot;Make ContentApp and related sub-apps and components JCR agnostic.&quot; class=&quot;issue-link&quot; data-issue-key=&quot;MGNLUI-2761&quot;&gt;&lt;del&gt;MGNLUI-2761&lt;/del&gt;&lt;/a&gt; (contentConnector.canHandleItem() added at the begging so a deleted/cahnged item is never handled anyway). Not reported so we probably don&apos;t need a replacement for special content change event handling.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;tt&gt;info.magnolia.ui.contentapp.field.WorkbenchFieldFactory#createFieldComponent&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;info.magnolia.contentapp.app.ui.context.ValueContext&lt;/tt&gt; seems to be the replacement (used in AddFolder action)
	&lt;ul&gt;
		&lt;li&gt;select an item e.g. after an edit action&lt;/li&gt;
		&lt;li&gt;&lt;tt&gt;info.magnolia.contentapp.app.ui.context.ValueContext&lt;/tt&gt; seems to be the replacement (used in AddFolder action)
		&lt;ul&gt;
			&lt;li&gt;only disadvantage is that is has to be called explicitly in every action&lt;/li&gt;
			&lt;li&gt;other solution would be a user scoped observation&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;
	&lt;ul&gt;
		&lt;li&gt;observation mechanism can&apos;t replace this
		&lt;ul&gt;
			&lt;li&gt;since the change could be done by a completely different user&lt;/li&gt;
			&lt;li&gt;refreshing whole view is easy, send an item specific data change event is cumbersome since the JCR data provides need to work with nodes (convert item &amp;lt;-&amp;gt; UUID) but it doesn&apos;t have an opened JCR session&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;info.magnolia.ui.contentapp.browser.BrowserPresenter#bindHandlers
	&lt;ul&gt;
		&lt;li&gt;CCE is used to select and expand e.g. nodes which were just added&lt;/li&gt;
		&lt;li&gt;similar problem as in the previous case which raises question if the observation shouldn&apos;t be really user scoped (this shouldn&apos;t be hard to change as JCR event keeps track of the user)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="164860" author="apchelintcev" created="Wed, 18 Jul 2018 12:16:50 +0200"  >&lt;p&gt;Thanks for further investigation &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=rkovarik&quot; class=&quot;user-hover&quot; rel=&quot;rkovarik&quot;&gt;rkovarik&lt;/a&gt;,&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;re: detail sub-app case - indeed it seems like there&apos;s a bug in 5.x impl. However, I&apos;d still try to give a shot to a thought about how to maybe gracefully restore that functionality, cause it was kinda useful.&lt;/li&gt;
	&lt;li&gt;WorkbenchFieldFactory doesn&apos;t matter too much (it&apos;s gonna be re-worked anyway)&lt;/li&gt;
	&lt;li&gt;re: having to update the ValueContext in actions - I thought it would be a reasonable measure, cause it is not so magical (I update the context aka state of UI and I can expect that the UI will react), coding-wise it is not much harder to do than to send a CCE.&lt;/li&gt;
	&lt;li&gt;re: selection/expansion logic - it is kinda covered by subscribing to value ctx changes (already UI scoped)&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="199150" author="apchelintcev" created="Mon, 7 Oct 2019 22:01:50 +0200"  >&lt;p&gt;The resulting solution involves substantial overhaul of DS observatioin mechanism:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;tt&gt;DSObbservation&lt;/tt&gt; interface extracted.&lt;/li&gt;
	&lt;li&gt;Default, manually triggered implementation provided (for the domains that unlike JCR don&apos;t have provided automatic observation layer).&lt;/li&gt;
	&lt;li&gt;Observation is automatically wired to content views.&lt;/li&gt;
	&lt;li&gt;Additional tweaks for the background thread notifications also provided.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10030">
                    <name>Cloners</name>
                                            <outwardlinks description="clones">
                                        <issuelink>
            <issuekey id="67244">MGNLUI-4545</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="67242">MGNLUI-4531</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, 17 Jul 2018 14:11:30 +0200</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_10246" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>MGNLUI-4958</customfieldvalue>
                        </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>apchelintcev</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            4 years, 18 weeks, 6 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>3.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>apchelintcev</customfieldvalue>
            <customfieldvalue>rkovarik</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|y00a34:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10245" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="772">Kromeriz 156</customfieldvalue>
    <customfieldvalue id="1029">UI Framework 7</customfieldvalue>
    <customfieldvalue id="1037">UI Framework 8</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8.0</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>