On Tue, Feb 2, 2016 at 3:32 PM, vinc...@massol.net <vinc...@massol.net> wrote:
>
>
> 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:…”.

Sure but in that case you will just get nothing. Just need to be
prepare that it's possible you get no result.

>
> 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



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to