Hi Sarthak, > On 25 Oct 2017, at 09:16, Sarthak Gupta <[email protected]> wrote: > > 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.
Yes, you should never commit something that’s not been tested and that’s not working. > 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? I really recommend writing the unit test to validate if it works. That’s the simplest and fastest by far (and makes it easy to debug your code). You’ll need a bit of time maybe to write a proper test the first time but it’ll pay on the long run. If you want to deploy it, yes, you should read this: http://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/Tutorials/WritingComponents/#HDeployingtheComponent Don’t forget to change your xwiki.properties as I mentioned in my previous mail. Thanks -Vincent > > 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

