On Tue, Oct 24, 2017 at 9:34 PM, Vincent Massol <[email protected]> wrote:

> Hi Sarthak,
>
> > On 24 Oct 2017, at 17:30, Sarthak Gupta <[email protected]>
> wrote:
> >
> > Hello Vincent,
> > I have some confusion regarding transformations.
> >
> > https://github.com/xwiki-contrib/application-glossary/
> blob/master/application-glossary-api/src/main/java/
> org/xwiki/contrib/glossary/internal/GlossaryTransformation.java
> >
> > In my transformations, I am basically executing a query, which will get
> the
> > document names(say 'name') of glossary items from the glossary space
> > . And the simply passing a string reference called 'Glossary.name' as a
> > parameter to the DocumentResourceReference just like WikiWord
> > Transformation. So, I think it should create links to the respective
> > glossary pages.
> >
> > But as you commented on my recent commit
> > <https://github.com/xwiki-contrib/application-glossary/commit/
> 9b04543627c7ccec0461a5d39d2b3f53f0d2815c#comments>
> > that
> > the method instead of returning the "names", it should load the glossary
> > data from the xobjects. I suppose this will function like: when a user
> will
> > move their cursor on a particular glossary item present on a particular
> > page, then it will load the information on the spot. Am I right? I don't
> > know but I think that I am not getting it right?
>
> When a page is rendered, it’s first parsed into a XDOM object and then all
> active transformations are executed one after another. Active
> Transformations are controlled by the rendering.transformations property in
> xwiki.properties.
>
> (See architecture on http://rendering.xwiki.org/
> xwiki/bin/view/Main/WebHome for more details)
>
> When a transformation executes, it’s execute() method is called.
>
>
​Hello Vincent,
​

> The GlossaryTransformation should traverse the whole tree of Blocks inside
> the XDOM and try to find set of words that match the entries contained in
> Glossary xobjects.
>
> So in the 1st version, all you need to do is at the beginning of execute()
> you run a query to get the full list of glossary xobjects and extract the
> name from it.
>
>
​I think I am doing the same thing.​

You should ofc never run a query on each Block! That would kill the wiki :)
>
> ​I have rectified this. I am just executing the query once inside the
transform() block and storing the names in a list. And for each Block, I am
just fetching the names from the list.

Ok. wait! I should try executing this tranformation locally on my xwiki
instance first and make changes accordingly.

For running the transformation, I am placing the jar file generated in
application-glossary/application-glossary-api/target in
usr/lib/xwiki/WEB-INF/lib/ (and) importing the xar file in
application-glossary-api/target. Is this right?

Thanks
​-Sarthak Gupta​

​


> There’s nothing more, it’s very very simple.
>
> The harder part comes in the second version of the code when you improve
> the performance so that the query is only executed when a Glossary xobject
> is added/modified/deleted. You’ll implement that by using an EventListener
> to refresh the cached list of Glossary names.
>
> Is that clear? :) I thought I had explained this already several times but
> maybe I’m not clear but I don’t know how to make it more clear. So you need
> to tell me if there’s something not clear and what.
>
> > Thanks.
> > -Sarthak Gupta
> >
> > P.S Sorry for my previous commits, Instead of 'git pull -f' I did simply
> > 'git pull' so changes got merged. :P
>
> ok!! You should always check the diff (git show -p <sha1>) before pushing
> changes to avoid pushing wrong or unfinished things :)
>
> Thanks
> -Vincent
>
> > On Tue, Oct 17, 2017 at 7:31 PM, Vincent Massol <[email protected]>
> wrote:
> >
> >> Hi Sarthak,
> >>
> >>> On 15 Oct 2017, at 21:43, Sarthak Gupta <[email protected]>
> >> wrote:
> >>>
> >>>
> >>>
> >>> On Sun, Oct 15, 2017 at 7:53 PM, Vincent Massol <[email protected]>
> >> wrote:
> >>> Hi Sarthak,
> >>>
> >>>> On 14 Oct 2017, at 09:52, Sarthak Gupta <[email protected]>
> >> wrote:
> >>>>
> >>>> Hello,
> >>>> As the tests of my project application-glossary
> >>>> <https://github.com/xwiki-contrib/application-glossary> are not
> >> working
> >>>
> >>> I’ll try to have a look when I’m back from GSOC summit.
> >>>
> >>>> , in
> >>>> spite of my attempts(I will handle then later), I am moving on to
> >>>> implementing the next feature of the application i.e creating
> >>>> transformation.
> >>>> As far as I understand, the transformation requires a cache component
> >> from
> >>>> which entries shall be taken for rendering purpose. This cache should
> >> get
> >>>> updated when a glossary xobject is added, deleted or modified. For
> this
> >>>> functionality to take place, it should make use of an Event Listener.
> >>>>
> >>>> Hope I am right till now?
> >>>
> >>> Yes that’s exactly it!
> >>>
> >>>
> >>> ​Hello Vincent,
> >>> ​
> >>> What I would suggest is that you implement the Transformation without
> >> cache for the first version, you make the app work fully end to end, you
> >> release a 1.0 version that the community can try out, and then you start
> >> working on version 1.1 which adds the cache to improve performance.
> >>>
> >>> WDYT?
> >>>
> >>> ​I think for implementing the transformations, some source will be
> >> required from which the entries already present in the Glossary space
> will
> >> be taken. Here it is the cache object. So, an alternative here can be to
> >> ​use the "query module" everytime for knowing which entries are present
> in
> >> the Glossary Space. And that would slow down the Xwiki to a large
> extent I
> >> guess because for each word a query will be executed. Would using the
> >> "Query" be fine or there can be any other better approach?
> >>
> >> Some ideas:
> >>
> >> Version 1.0:
> >> * When the transformation executes (i.e. when a page is rendered), you
> do
> >> a query to get the glossary entries.
> >>
> >> Version 1.1:
> >> * You make your transformation implement Initializable and in
> initialize()
> >> you go a query to get all existing Glossary entries that you save in a
> >> cache component that you write
> >> * The cache component internally uses a Cache<> object for storing the
> >> Glossary entries
> >> * You also implement a component implementing EventListener that gets
> the
> >> cache component injected so that you can update the cache when glossary
> >> xobjects are created/modified/deleted.
> >>
> >> If you feel comfortable you can implement directly version 1.1 but my
> >> recommendation would be get a working v1.0 version ASAP and then
> iterate to
> >> improve it.
> >>
> >> Hope it helps,
> >> Thanks
> >> -Vincent
> >>
> >> PS: Please keep the discussion on the list so that anyone can help you
> and
> >> see the answers and chime in or just learn from it! :)
> >>
> >>> Thanks
> >>>
> >>> Sarthak Gupta
> >>>
> >>>
> >>>>
> >>>> I have a question in my mind.
> >>>>
> >>>> The "cache" and the "event Listener" are to be implemented as two
> >> separate
> >>>> components. right?
> >>>
> >>> Correct.
> >>>
> >>>> What I think is, that the EventListener component should be filled
> with
> >>>> appropriate methods just like this
> >>>> <https://github.com/xwiki/xwiki-platform/blob/master/
> >> xwiki-platform-core/xwiki-platform-component/xwiki-
> >> platform-component-wiki/src/main/java/org/xwiki/component/
> >> wiki/internal/bridge/DefaultWikiObjectComponentMana
> gerEventListener.java>
> >>>> and
> >>>> then in these methods, the cache should be updated.
> >>>>
> >>>> Is this implementation right?
> >>>
> >>> Correct.
> >>>
> >>>> And after this, the rendering part will come….
> >>>
> >>> Awesome.
> >>>
> >>> Thanks. Let me know if you need more of my/our help.
> >>> -Vincent
> >>>
> >>>>
> >>>> Thanks
> >>>>
> >>>> Sarthak Gupta
> >>
> >>
>
>

Reply via email to