On Wed, May 21, 2014 at 7:25 PM, walid yaich <[email protected]> wrote:
>>>As I said in the preview mail data is the XWikiContext.
> I'm sorry, i didn't understand exactly what you mean by "data is the
> XWikiContext."

You are in the following method:

void onEvent(Event event, Object source, Object data)

the second parameter is called data in your code and it's already a
XWikiContext object you don't have to do a hack to get it.

>
> Thomas, i wouldn't be able to do it alone, i think i should add you as
> author in the snippet, can i ?

It's OK, as long as you understood what you did in the end you are the author :)

>
>
> 2014-05-21 18:17 GMT+01:00 Thomas Mortagne <[email protected]>:
>
>> On Wed, May 21, 2014 at 6:42 PM, walid yaich <[email protected]>
>> wrote:
>> > I finally got it ! Thanks guys :)
>> >
>> > This is my listener, it may help someone :
>> >
>> > {{velocity}}
>> > {{html}}
>> > #if ($request.confirm != "1")
>> > <form method="get">
>> >   <input type="hidden" name="confirm" value="1"/>
>> >   <input type="submit" class="button" value="Register Event Listener"/>
>> > </form>
>> > #end
>> > {{/html}}
>> > {{/velocity}}
>> >
>> > {{groovy}}
>> > import org.xwiki.observation.*
>> > import org.xwiki.observation.event.*
>> > import com.xpn.xwiki.web.*
>> > import org.xwiki.bridge.event.DocumentCreatingEvent
>> > import org.xwiki.model.reference.LocalDocumentReference
>> > import org.xwiki.context.*
>> > import groovy.util.logging.*
>> >
>> > @Log
>> > class OnDocumentCreationEventListener implements EventListener
>> > {
>> >     OnDocumentCreationEventListener()
>> >     {
>> >     }
>> >
>> >     String getName()
>> >     {
>> >         return "OnDocumentCreationEventListener"
>> >     }
>> >
>> >     List<Event> getEvents()
>> >     {
>> >         return Arrays.asList(new DocumentCreatingEvent())
>> >     }
>> >
>> >     void onEvent(Event event, Object source, Object data)
>> >     {
>> >        log.info('onEvent begin')
>> >
>> >        // Current context
>> >        def crtContext =
>> >
>> > Utils.getComponent(Execution.class).getContext().getProperty('xwikicontext')
>>
>> As I said in the preview mail data is the XWikiContext.
>>
>> >
>> >
>> >        // A Document Reference pointing to the space.page document in an
>> > undefined wiki (i.e. without the wiki part)
>> >        LocalDocumentReference reference = new
>> > LocalDocumentReference("RevisionSpace", "RevisionClass")
>> >
>> >        source.createXObject(reference, crtContext)
>> >        source.setComment("An XObject of RevisionClass was succesfully
>> > added
>> > !")
>> >
>> >        log.info('onEvent end')
>> >     }
>> > }
>> >
>> > // Only register the listener if the user has passed confirm=1 in the
>> > URL.
>> > This is to prevent
>> > // from unintentially re-registering the listener against the
>> > observation
>> > manager.
>> > if (request.confirm == "1") {
>> >     // Register against the Observation Manager
>> >     def observation = Utils.getComponent(ObservationManager.class)
>> >     observation.removeListener("OnDocumentCreationEventListener")
>> >     def listener = new OnDocumentCreationEventListener()
>> >     observation.addListener(listener)
>> >     println "{{info}}Listener is now registered {{/info}}"
>> > }
>> > {{/groovy}}
>> >
>> >
>> > It's just doesn't log to my console ("log.info" doesn't work) but
>> > probably
>> > it'll work for others ... but if you try to create any new document
>> > you'll
>> > find your object added
>> >
>> >
>> >
>> >
>> > 2014-05-21 15:54 GMT+01:00 Thomas Mortagne <[email protected]>:
>> >
>> >> On Wed, May 21, 2014 at 4:31 PM, walid yaich <[email protected]>
>> >> wrote:
>> >> > I'm sorry, i'm new to xwiki API but i'm really trying to get better
>> >> > ;)
>> >> >
>> >> > I looked at the API and i find out that i should use this method:
>> >> >
>> >> > public int *createXObject*(EntityReference
>> >> > <
>> >>
>> >> http://extensions.xwiki.org/?id=org.xwiki.platform:xwiki-platform-model:::/xwiki-commons-pom/xwiki-platform/xwiki-platform-core/xwiki-platform-model/apidocs/org/xwiki/model/reference/EntityReference.html?is-external=true
>> >> >
>> >> > classReference,
>> >> >                          XWikiContext
>> >> > <
>> >>
>> >> http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/org/xwiki/platform/xwiki-platform-oldcore/5.4.4/xwiki-platform-oldcore-5.4.4-javadoc.jar/%21/com/xpn/xwiki/XWikiContext.html
>> >> >
>> >> > context)
>> >> >
>> >> > But i can't figure out how can i create an EntityReference object and
>> >>
>> >> Usually for a class the easiest is something like:
>> >>
>> >> def reference = new
>> >> org.xwiki.model.reference.LocalDocumentReference("xclassspace",
>> >> "xclasspage")
>> >>
>> >> See http://extensions.xwiki.org/xwiki/bin/view/Extension/Model+Module
>> >> for more about entity references.
>> >>
>> >> > How can i get the context from the actual event caller ?
>> >>
>> >> The event send it as second parameter (like most events actually).
>> >>
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > 2014-05-21 13:09 GMT+01:00 Thomas Mortagne
>> >> > <[email protected]>:
>> >> >
>> >> >> On Wed, May 21, 2014 at 1:36 PM, walid yaich <[email protected]>
>> >> >> wrote:
>> >> >> > Thank you,
>> >> >> >
>> >> >> > But i really cannot get it work,
>> >> >> >>>As I said, you need to modiy the document comming with the event
>> >> >> >>> (the
>> >> >> >>>fist parameter). That's the one that is going to be saved right
>> >> >> >>> after
>> >> >> > is it right like that ? :
>> >> >> >     void onEvent(Event event, Object source, Object data)
>> >> >> >     {
>> >> >> >         def currentDocument = xwiki.getDocument(source.fullName)
>> >> >>
>> >> >> Why are you calling getDocument ? source is already a XWikiDocument
>> >> >> instance. I will say it again: you need to modify source itself
>> >> >> because that's what is going to be saved, not some instance you kept
>> >> >> from when you registered the listener, not a new instance, source.
>> >> >>
>> >> >> If you don't know the API of XWikiDocument you can look at
>> >> >>
>> >> >>
>> >>
>> >> http://nexus.xwiki.org/nexus/service/local/repositories/releases/archive/org/xwiki/platform/xwiki-platform-oldcore/5.4.4/xwiki-platform-oldcore-5.4.4-javadoc.jar/!/index.html
>> >> >> (modify the link according to your version).
>> >> >>
>> >> >> >         currentDocument.newObject("RevisionSpace.RevisionClass")
>> >> >> >         //currentDocument.save() //When saving, i got a
>> >> >> > stackoverflow
>> >> >> >         //XWikiDocument currentDocument = (XWikiDocument) source
>> >> >> > //Cannot cast from XWikiDocument to Document
>> >> >> >     }
>> >> >> > This code does not save the object, something wrong with it ?
>> >> >> >
>> >> >> > I tried just this :
>> >> >> > {{groovy}}
>> >> >> >     doc.newObject("RevisionSpace.RevisionClass")
>> >> >> >     doc.save()
>> >> >> >     println "{{info}} Object added {{/info}}"
>> >> >> > {{/groovy}}
>> >> >> > it creates two objects in the current page, any explanation ?
>> >> >> >
>> >> >> > I'm using Admin/admin and XWIKI entreprise 6.0, some way to debug
>> >> >> > to
>> >> know
>> >> >> > why it doesn't save ?
>> >> >> >
>> >> >> > Thanks in advance
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > 2014-05-21 8:39 GMT+01:00 Thomas Mortagne
>> >> >> > <[email protected]
>> >> >:
>> >> >> >
>> >> >> >> On Tue, May 20, 2014 at 9:21 PM, walid yaich
>> >> >> >> <[email protected]>
>> >> >> >> wrote:
>> >> >> >> > Good morning :)
>> >> >> >> >
>> >> >> >> > I added a listener on DocumentCreatingEvent, this listener will
>> >> add an
>> >> >> >> > object of type RevisionClass to every new document.
>> >> >> >> > (RevisionClass
>> >> is
>> >> >> >> under
>> >> >> >> > RevisionSpace)
>> >> >> >> > In onEvent i have doc.newObject("XWiki.RevisionClass"), i'm
>> >> >> >> > sure
>> >> >> onEvent
>> >> >> >> is
>> >> >> >>
>> >> >> >> As I said, you need to modiy the document comming with the event
>> >> >> >> (the
>> >> >> >> fist parameter). That's the one that is going to be saved right
>> >> >> >> after
>> >> >> >> the event (so just add the object and don't save it yourself),
>> >> >> >> whatever you save in your code is going to be overwritten after
>> >> >> >> it.
>> >> >> >>
>> >> >> >> > executed but when creating a new document, i can't find the
>> >> >> >> > object
>> >> >> >> created
>> >> >> >> > when doing edit-->object,  in addition
>> >> >> >> > doc.newObject("blablabla")
>> >> is
>> >> >> >> > accepted and doesn't throw any exception.
>> >> >> >> >
>> >> >> >> > I'm using the default Admin/admin user, should i execute the
>> >> >> >> > script
>> >> >> in a
>> >> >> >> > specific space or with specific rights ?
>> >> >> >> > Nothing is displayed in my console, How can i make XWIKI tell
>> >> >> >> > me
>> >> more
>> >> >> >> about
>> >> >> >> > what it is doing ?
>> >> >> >> >
>> >> >> >> > I'm using Entreprise 6.0, would you please take a look at the
>> >> attached
>> >> >> >> > script ?
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > Best Regards,
>> >> >> >> > Walid YAICH
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > 2014-05-20 13:24 GMT+01:00 Jeremie BOUSQUET <
>> >> >> [email protected]
>> >> >> >> >:
>> >> >> >> >
>> >> >> >> >> 2014-05-20 13:38 GMT+02:00 walid yaich
>> >> >> >> >> <[email protected]>:
>> >> >> >> >>
>> >> >> >> >> > Thanks,
>> >> >> >> >> >
>> >> >> >> >> > I prefer the listener, because i don't want the user to edit
>> >> >> >> >> > the
>> >> >> >> object,
>> >> >> >> >> > the object revision will be set by admin when he/she push
>> >> >> "approve" to
>> >> >> >> >> set
>> >> >> >> >> > the revision to show by default.
>> >> >> >> >> >
>> >> >> >> >> > The listener works fine now, but i can't find how to add an
>> >> object
>> >> >> to
>> >> >> >> a
>> >> >> >> >> > page in groovy, i want to this in groovy : #set($obj =
>> >> >> $doc.newObject(
>> >> >> >> >> > "XWiki.SomeClass")) , a helpful link as always please ?
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> Hi,
>> >> >> >> >> Groovy has the same default bindings as velocity, so you could
>> >> write:
>> >> >> >> >>
>> >> >> >> >> def obj = doc.newObject("XWiki.SomeClass")
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> > 2014-05-20 10:44 GMT+01:00 [email protected] <
>> >> [email protected]
>> >> >> >:
>> >> >> >> >> >
>> >> >> >> >> > > Hi Walid,
>> >> >> >> >> > >
>> >> >> >> >> > > Maybe this could help:
>> >> >> >> >> > >
>> >> >> >> >> > >
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >>
>> >> >>
>> >>
>> >> http://www.xwiki.org/xwiki/bin/view/FAQ/How+can+I+create+a+new+page+based+on+a+form
>> >> >> >> >> > >
>> >> >> >> >> > > If your users use this form to create pages, the pages
>> >> >> >> >> > > they
>> >> >> create
>> >> >> >> will
>> >> >> >> >> > > automatically have the proper XObjects added to them and
>> >> they’ll
>> >> >> >> >> directed
>> >> >> >> >> > > in inline mode when creating the page, allowing them to
>> >> >> >> >> > > fill
>> >> the
>> >> >> >> >> XObject
>> >> >> >> >> > > data.
>> >> >> >> >> > >
>> >> >> >> >> > > Thanks
>> >> >> >> >> > > -Vincent
>> >> >> >> >> > >
>> >> >> >> >> > > On 19 May 2014 at 22:16:01, walid yaich (
>> >> [email protected])
>> >> >> >> wrote:
>> >> >> >> >> > >
>> >> >> >> >> > > Hello,
>> >> >> >> >> > >
>> >> >> >> >> > > First of all, Merci bcp Vincent for this How to implement
>> >> >> "Approved
>> >> >> >> >> > > Revisions"?<
>> >> >> >> >> > >
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >>
>> >> >>
>> >>
>> >> http://www.xwiki.org/xwiki/bin/view/FAQ/How+to+implement+%22Approved+Revisions%22
>> >> >> >> >> > >
>> >> >> >> >> > >
>> >> >> >> >> > >
>> >> >> >> >> > >
>> >> >> >> >> > > I was able to choose which revision to display by
>> >> >> >> >> > > following
>> >> the
>> >> >> "how
>> >> >> >> >> to",
>> >> >> >> >> > > now i need to add the object automatically to any page in
>> >> >> >> >> > > my
>> >> wiki
>> >> >> >> or at
>> >> >> >> >> > > least any page in a given space
>> >> >> >> >> > >
>> >> >> >> >> > > Thanks in advance :)
>> >> >> >> >> > >
>> >> >> >> >> > >
>> >> >> >> >> > _______________________________________________
>> >> >> >> >> > devs mailing list
>> >> >> >> >> > [email protected]
>> >> >> >> >> > http://lists.xwiki.org/mailman/listinfo/devs
>> >> >> >> >> >
>> >> >> >> >> _______________________________________________
>> >> >> >> >> devs mailing list
>> >> >> >> >> [email protected]
>> >> >> >> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >> >> >> >>
>> >> >> >> >
>> >> >> >> > _______________________________________________
>> >> >> >> > devs mailing list
>> >> >> >> > [email protected]
>> >> >> >> > http://lists.xwiki.org/mailman/listinfo/devs
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> --
>> >> >> >> Thomas Mortagne
>> >> >> >> _______________________________________________
>> >> >> >> devs mailing list
>> >> >> >> [email protected]
>> >> >> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >> >> >>
>> >> >> > _______________________________________________
>> >> >> > devs mailing list
>> >> >> > [email protected]
>> >> >> > http://lists.xwiki.org/mailman/listinfo/devs
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Thomas Mortagne
>> >> >> _______________________________________________
>> >> >> devs mailing list
>> >> >> [email protected]
>> >> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >> >>
>> >> > _______________________________________________
>> >> > devs mailing list
>> >> > [email protected]
>> >> > http://lists.xwiki.org/mailman/listinfo/devs
>> >>
>> >>
>> >>
>> >> --
>> >> Thomas Mortagne
>> >> _______________________________________________
>> >> devs mailing list
>> >> [email protected]
>> >> http://lists.xwiki.org/mailman/listinfo/devs
>> >>
>> > _______________________________________________
>> > devs mailing list
>> > [email protected]
>> > http://lists.xwiki.org/mailman/listinfo/devs
>>
>>
>>
>> --
>> Thomas Mortagne
>> _______________________________________________
>> devs mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/devs
>
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to