On 2 Feb 2016 at 14:56:42, Thomas Mortagne 
(thomas.morta...@xwiki.com(mailto:thomas.morta...@xwiki.com)) wrote:

> On Tue, Feb 2, 2016 at 2:06 PM, vinc...@massol.net wrote:
> > Hi Edy,
> >
> > On 2 Feb 2016 at 13:34:49, Eduard Moraru 
> > (enygma2...@gmail.com(mailto:enygma2...@gmail.com)) wrote:
> >
> >> Hi,
> >>
> >> So after an initial implementation we realized there are some issues with
> >> the original approach.
> >>
> >> Basically, it is not such a good idea to handle the resolving of untyped
> >> links at the parser level because this is not compatible with the XDOM
> >> caching that we have for XWikiDocuments, i.e. it`s not OK to cache a
> >> document's XDOM that was resolved with links in the context of the *first*
> >> document that resolved them and then to reuse that cached XDOM later or
> >> from a different calling document when/where those links no longer make
> >> sense. We would need to remove the XDOM caching and parse the XDOM every
> >> time we need it in order to make sure that the links are resolved in the
> >> context of the current calling document and that they are the correct
> >> links. Obviously, we don`t want that and we want to keep the XDOM cache
> >> which is vital for performance.
> >>
> >> In order to address this issue and to still be able to do the fallback
> >> mechanism (the one that allows us to be backwards compatible at the syntax
> >> level when resolving an untyped link), Thomas suggested that we always
> >> produce a static (cacheable/reusable) parsing result (i.e. URL or DOCUMENT
> >> types, with the DOCUMENT ResourceReference having the isTyped flag set to
> >> false) for untyped links and that the we introduce a new set of
> >> EntityReferenceResolver API to be used on the client
> >> side (i.e. when consuming the XDOM) to get the actual XWiki entities. This
> >> would be used, for example, by the XWikiWikiModel when producing the URLs
> >> and any other places that use DOCUMENT type ResourceReferences. So we pass
> >> the resolving responsibility to this new API and expect the client to use
> >> it.
> >>
> >> This second proposal resolves the caching issue but introduces new
> >> requirements on the clients of the rendering result, so in terms of
> >> backwards compatibility, if the clients don`t use this new resolvers API,
> >> some links might be interpreted incorrectly (i.e. assuming it's a document
> >> instead of a space reference). This adds to the backwards compatibility
> >> issues caused by the addition of the new SPACE link type, but there is not
> >> much way around it.
> >
> > I agree that the XDOM returned by XWikiDocument.getXDOM() should contain 
> > exactly what’s been parsed from the syntax without any interpretation.
> >
> > We could imagine caching the XDOM along with the Context but it doesn’t 
> > make much sense IMO. I find it better that it’s evaluated at the time it’s 
> > needed with the context at that time.
> >
> > You propose to provide an Entity Reference Resolver to allow users of 
> > getXDOM() to parse references. So I guess the users would check if the 
> > ResourceReference is of type Attachment, Document or Space and then use 
> > that resolver to convert the String into an EntityResourceReference.
>  
> No need to check the resource reference type. The user would use the
> EntityReferenceResolver which return the right type
> of entity reference based on what is found in the passed
> ResourceReference. The the user can check the ResourceReference type
> (if it cares about it, in some cases you will just call
> XWiki#getDocument(EntityReference)).

I don’t see how it’s possible since you can have Resource Reference that have 
no meaning as EntityResourcReference…

For example “mailto:…”.

Thanks
-Vincent

> > Another idea (don’t know if you thought about it) would be to implement a 
> > Transformation that would take that XDOM and generate a XDOM’ that is 
> > resolved against the current Context (with all the links resolved). I guess 
> > there could be use cases for both needs but having the fine-grained 
> > solution is better to start with.
> >
> >> I`d also like to mention that we are already doing something similar to
> >> this when resolving attachment/image references (i.e. the caller needs to
> >> resolve the reference since the rendering does not distinguish between
> >> "space attachments" or "document attachments") so this new resolver API is
> >> a good/needed addition anyway and expanding this approach to links makes
> >> sense, IMO.
> >
> > I don’t understand "since the rendering does not distinguish between "space 
> > attachments" or "document attachments””, could you provide some example in 
> > wiki syntax?
> >
> >> Additional note: typed links ([[doc:Doc]], [[space:Space]] etc.) are still
> >> supported and not affected by this change of direction, since this is only
> >> about (untyped [[Doc]]) links.
> >>
> >> We`re starting work on this direction.
> >>
> >> Please let us know what you think about this new approach and if you see
> >> any use cases where it creates problems.
> >
> > Sounds good to me.
> >
> > Of course we’ll need to document this in the release notes.
> >
> > I’ve done a quick check of usages of LinkBlock.getReference() since this is 
> > where the problem could happen. I’ve found the following places to check:
> > - XWikiDocument.getUniqueLinkedPages()
> > - DefaultLinkedResourceHelper
> > - PlainTextBlockFilter
> >
> > Note that the LinkCheckerTransformation is not affected since it only 
> > checks URL-type links.
> >
> > There are also some matches in xwiki-contrib to check:
> > https://github.com/search?q=LinkBlock+user%3Axwiki-contrib&ref=searchresults&type=Code&utf8=%E2%9C%93
> >
> > Thanks!
> > -Vincent
> >
> > PS: Good catch Thomas about this!
> >
> >
> >> Thanks,
> >> Eduard
> >>
> >> On Thu, Jan 7, 2016 at 2:03 PM, Eduard Moraru wrote:
> >>
> >> > Hi Thomas,
> >> >
> >> > On Wed, Jan 6, 2016 at 7:42 PM, Thomas Mortagne > > > wrote:
> >> >
> >> >> On Wed, Jan 6, 2016 at 5:57 PM, Eduard Moraru
> >> >> wrote:
> >> >> > Hi devs,
> >> >> >
> >> >> > As XWIKI-12920 [1] mentions, we need to hide "WebHome" references in 
> >> >> > the
> >> >> > wiki syntax for links and images (for now) in order to be consistent
> >> >> with
> >> >> > what we did in the UI.
> >> >> >
> >> >> > What this means is that [[label>>Page.WebHome]] should be equivalent 
> >> >> > to
> >> >> > [[label>>Page]].
> >> >> >
> >> >> > The plan is to apply the same logic as we did for URLs and detailed by
> >> >> > Vincent in "Solution 2" in his comment on the issue [2].
> >> >> >
> >> >> > In order to achieve this, Vincent proposed to introduce a new "space:"
> >> >> > resource type and make this new type the default instead of "doc:"
> >> >> which is
> >> >> > the current default.
> >> >> >
> >> >> > Before:
> >> >> > [[label>>Page]] => [[label>>doc:Page]]
> >> >> > After:
> >> >> > [[label>>Page]] => [[label>>space:Page]] if "Page.WebHome" exists,
> >> >> > or => [[label>>doc:Page]] if
> >> >> ".Page"
> >> >> > exists,
> >> >> > or => wanted link to create "Page.WebHome" when
> >> >> > clicked.
> >> >> >
> >> >> > Using either the "doc:" or the "space:" versions manually will resolve
> >> >> the
> >> >> > requested resource, without doing any fallback resolution (which is
> >> >> applied
> >> >> > only for the no-prefix version).
> >> >> >
> >> >> >
> >> >> > For the same consistency reason, we need to apply the same fallback to
> >> >> the
> >> >> > "attach:" resource type, e.g:
> >> >> > [[attach:p...@file.ext]] => [[label>>attach:space:p...@file.ext]] ||
> >> >> > [[label>>attach:doc:p...@file.ext]]
> >> >> >
> >> >> > However, a resource is defined as ((type:) resource) so for 
> >> >> > attachments
> >> >> we
> >> >> > would need to extend the type's definition to allow it to contain ":" 
> >> >> > in
> >> >> > the type name (i.e. "attach:doc" and "attach:space") so that more
> >> >> > variations are tested when resolving a link reference before treating
> >> >> it as
> >> >> > a generic/untyped reference (this is where the fallback mechanism 
> >> >> > kicks
> >> >> in).
> >> >> >
> >> >> >
> >> >> > There is also the image syntax that needs to be extended to support 
> >> >> > the
> >> >> > same fallback logic, so something like:
> >> >> > image:Page => image:space:Page || image:doc:Page
> >> >> >
> >> >> >
> >> >> > In all these cases:
> >> >> > * link space: prefix,
> >> >> > * link attach:doc and attach:space prefixes and
> >> >> > * image space: and doc: prefix
> >> >> > ... we would be breaking backwards compatibility in the sense that if 
> >> >> > a
> >> >> > wiki with the name "space" (and/or "doc", depending on which case of 
> >> >> > the
> >> >> > above you are) already existed in the wiki farm, any links pointing to
> >> >> > documents in that wiki from other wikis will be broken, because, for
> >> >> > example [[label>>space:Page]] no longer points to the document
> >> >> > "space:Page.WebHome" (from wiki "space"), but to the document
> >> >> > "Page.WebHome" from the current wiki (where the link is made). To fix
> >> >> this,
> >> >> > one would have to write [[label>>space:space:Page]] instead.
> >> >>
> >> >> "[[label>>space:Page]]" does not mean "space:Page.WebHome" right now
> >> >> but ":.space:Page"
> >> >>
> >> >
> >> > You are right. Bad example (though I find that behavior a bit odd). It
> >> > should have been:
> >> >
> >> > [[label>>space:Space.Page]] no longer points to the document
> >> > "space:Space.Page" (from wiki "space"), but to the document
> >> > "Space.Page.WebHome" from the current wiki (where the link is made). To 
> >> > fix
> >> > this, one would have to write [[label>>space:space:Space.Page]] instead.
> >> >
> >> > Thanks,
> >> > Eduard
> >> >
> >> >
> >> >> >
> >> >> > I guess we could/should write a migrator to try to fix most of these
> >> >> cases
> >> >> > automatically (like we fix links to a document that was renamed), but 
> >> >> > a
> >> >> > couple of links will be unfixable if they are built programatically
> >> >> (e.g.
> >> >> > by velocity scripts) and the process could prove to be extremely 
> >> >> > lengthy
> >> >> > one (due to the parsing, processing, serialization and resaving of 
> >> >> > each
> >> >> > document).
> >> >> >
> >> >> >
> >> >> > Please feel free to comment on the above described approach.
> >> >> >
> >> >> > Thanks,
> >> >> > Eduard
> >> >> >
> >> >> > P.S.: I did not mention macro parameter references which would also
> >> >> need a
> >> >> > solution for hiding the "WebHome" part, but I`d prefer it if we handle
> >> >> that
> >> >> > another time / in another thread.
> >> >> >
> >> >> > ----------
> >> >> > [1] http://jira.xwiki.org/browse/XWIKI-12920
> >> >> > [2]
> >> >> >
> >> >> http://jira.xwiki.org/browse/XWIKI-12920?focusedCommentId=89129&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-89129
> > _________
_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to