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

