Hello Vincent, On Wed, Oct 25, 2017 at 1:32 PM, Vincent Massol <[email protected]> wrote:
> 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. > > I am not able to find out mistakes in my code. So I am starting to write some unit tests, so that I may be able to find the errors in the code. > If you want to deploy it, yes, you should read this: > http://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/ > Tutorials/WritingComponents/#HDeployingtheComponent > > The transformation is not working, that means there is some error in my code. So, I'll commit the new code, once it works. > 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 > >

