Hi,

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

Yes, and it also increases the potential size of the cache to all possible
combinations of (caller, cached XDOM) pairs.


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

We were going directly for EntityResource and want to reuse the
EntityResourceResolver<ResourceReference> API. Do you see any issue with
that?


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

Interesting idea. Haven`t thought about it, but, as you also said, I find
the fine grained solution to be better since it also helps with
attachments, not only space/document links, since for attachments you would
still have to apply the manual/fine-grained solution.


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

Yes, I should have given some examples here. What I call "space attachment"
is "sp...@file.ext" (without "WebHome"), while a "document attachment"
would be "space....@file.ext" or even "space.webh...@file.ext". We have no
explicit syntax to differentiate between them (like we have for doc: and
space:) so a client would have to resolve the reference by himself.
Currently, XWikiWikiModel resolves it an produces the correct attachment
URL. This is where the above resolvers come very useful.


>
> > 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
>
> Cool, I`ll look there too.

Thanks,
Eduard


> 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
>
_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to