Re: [xwiki-users] AJAX and Macro

2011-08-26 Thread Grüner Heinrich
Hi Sergiu,
is there a way
1) to programmatically generate the mentioned wiki document that 
generates the data
2) hide this document from the user?

Maybe I should write a servlet instead and register it in xwikis web.xml ?

Thanks,
Stefan.
Am 26.08.2011 06:05, schrieb Sergiu Dumitriu:
 On 08/25/2011 09:50 AM, Grüner Heinrich wrote:
 Hi,
 I am very new to xwiki.
 I've written a java-macro (implementing the
 org.xwiki.rendering.macro.Macro interface), which is generating some
 base content.
 now, this content should be able to query data from the macro-bean via
 ajax-request.
 Is that possible? How should the ajax call look like?
 Well, a java bean isn't exactly ready to respond to HTTP requests by
 itself, so you need to make an intermediary that lies somewhere in the
 way of HTTP requests and exposes this data.

 There are several ways to do this, depending on how complex you want to
 make this interaction.

 The best approach I'd advise is to write a scriptable service component
 that offers some specific methods you need, and use it inside a wiki
 document. Here's a short plan:

 1. Write another class that implements
 org.xwiki.script.service.ScriptService as a component. See
 http://platform.xwiki.org/xwiki/bin/DevGuide/WritingComponents for more
 details about writing components (don't forget to declare it in
 components.txt). The hint of the component is the name of the service,
 so chose something descriptive. Being in Java, you'll find a way to get
 hold of your data and manipulate it as you wish. Build and put the jar
 in WEB-INF/lib, just like your macro (they can be both in the same jar).

 2. Write a wiki document that calls your new scriptable service like:
 $service.myServiceName.getMyData() and outputs the data in the desired
 format. Don't forget to set the correct content type, so if you're
 outputting json put something like this:
 $response.setContentType('application/json')
 Of course, don't forget to wrap your code inside a {{velocity}} macro.

 3. From Javascript make calls to this page using /get/ as the action and
 outputSyntax=plain as the query string. Don't hardcode the URL, use
 $xwiki.getURL('Service.DocumentName', 'get', 'outputSyntax=plain') to
 let the platform give you the correct URL.

 Speaking of javascript, for the best practice you should read
 http://platform.xwiki.org/xwiki/bin/DevGuide/SkinExtensionsTutorial

 Thanks,
 Stefan.


___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] AJAX and Macro

2011-08-26 Thread Sergiu Dumitriu
On 08/26/2011 03:00 AM, Grüner Heinrich wrote:
 Hi Sergiu,
 is there a way
 1) to programmatically generate the mentioned wiki document that
 generates the data

Yes, you can automatically generate it using 
org.xwiki.bridge.DocumentAccessBridge.setDocumentContent (check first if 
it exists using .exists from the same component).

You can do that in an observation listener that listens to the 
ApplicationStartedEvent to do that at startup.

 2) hide this document from the user?

Yes, there are two ways of doing that.

1 is to put it in the XWiki space, which is blacklisted (hidden from 
normal searches) for simple users. Admins and users that specified in 
their profile that they want to be advanced users will still see it 
listed in search results and the index.

2 is to mark it as hidden, but that requires calling the oldcore method 
com.xpn.xwiki.doc.XWikiDocument.setHidden (and save the document after 
that). This will make it really hard to find the document.

 Maybe I should write a servlet instead and register it in xwikis web.xml ?

Yes, this is one of the other more complicated ways of doing this. I say 
complicated because the first solution requires just putting a jar in 
the classpath, while this also requires changes to the web.xml file. The 
most recent version of the servlet specification allows servlets to be 
declared outside the main web.xml file, making it much easier to extend 
the application, but we're still on an older version to support a wider 
range of containers.

 Thanks,
 Stefan.
 Am 26.08.2011 06:05, schrieb Sergiu Dumitriu:
 On 08/25/2011 09:50 AM, Grüner Heinrich wrote:
 Hi,
 I am very new to xwiki.
 I've written a java-macro (implementing the
 org.xwiki.rendering.macro.Macro interface), which is generating some
 base content.
 now, this content should be able to query data from the macro-bean via
 ajax-request.
 Is that possible? How should the ajax call look like?
 Well, a java bean isn't exactly ready to respond to HTTP requests by
 itself, so you need to make an intermediary that lies somewhere in the
 way of HTTP requests and exposes this data.

 There are several ways to do this, depending on how complex you want to
 make this interaction.

 The best approach I'd advise is to write a scriptable service component
 that offers some specific methods you need, and use it inside a wiki
 document. Here's a short plan:

 1. Write another class that implements
 org.xwiki.script.service.ScriptService as a component. See
 http://platform.xwiki.org/xwiki/bin/DevGuide/WritingComponents for more
 details about writing components (don't forget to declare it in
 components.txt). The hint of the component is the name of the service,
 so chose something descriptive. Being in Java, you'll find a way to get
 hold of your data and manipulate it as you wish. Build and put the jar
 in WEB-INF/lib, just like your macro (they can be both in the same jar).

 2. Write a wiki document that calls your new scriptable service like:
 $service.myServiceName.getMyData() and outputs the data in the desired
 format. Don't forget to set the correct content type, so if you're
 outputting json put something like this:
 $response.setContentType('application/json')
 Of course, don't forget to wrap your code inside a {{velocity}} macro.

 3. From Javascript make calls to this page using /get/ as the action and
 outputSyntax=plain as the query string. Don't hardcode the URL, use
 $xwiki.getURL('Service.DocumentName', 'get', 'outputSyntax=plain') to
 let the platform give you the correct URL.

 Speaking of javascript, for the best practice you should read
 http://platform.xwiki.org/xwiki/bin/DevGuide/SkinExtensionsTutorial

 Thanks,
 Stefan.


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users


Re: [xwiki-users] AJAX and Macro

2011-08-25 Thread Sergiu Dumitriu
On 08/25/2011 09:50 AM, Grüner Heinrich wrote:
 Hi,
 I am very new to xwiki.
 I've written a java-macro (implementing the
 org.xwiki.rendering.macro.Macro interface), which is generating some
 base content.
 now, this content should be able to query data from the macro-bean via
 ajax-request.
 Is that possible? How should the ajax call look like?

Well, a java bean isn't exactly ready to respond to HTTP requests by 
itself, so you need to make an intermediary that lies somewhere in the 
way of HTTP requests and exposes this data.

There are several ways to do this, depending on how complex you want to 
make this interaction.

The best approach I'd advise is to write a scriptable service component 
that offers some specific methods you need, and use it inside a wiki 
document. Here's a short plan:

1. Write another class that implements 
org.xwiki.script.service.ScriptService as a component. See 
http://platform.xwiki.org/xwiki/bin/DevGuide/WritingComponents for more 
details about writing components (don't forget to declare it in 
components.txt). The hint of the component is the name of the service, 
so chose something descriptive. Being in Java, you'll find a way to get 
hold of your data and manipulate it as you wish. Build and put the jar 
in WEB-INF/lib, just like your macro (they can be both in the same jar).

2. Write a wiki document that calls your new scriptable service like: 
$service.myServiceName.getMyData() and outputs the data in the desired 
format. Don't forget to set the correct content type, so if you're 
outputting json put something like this:
$response.setContentType('application/json')
Of course, don't forget to wrap your code inside a {{velocity}} macro.

3. From Javascript make calls to this page using /get/ as the action and 
outputSyntax=plain as the query string. Don't hardcode the URL, use 
$xwiki.getURL('Service.DocumentName', 'get', 'outputSyntax=plain') to 
let the platform give you the correct URL.

Speaking of javascript, for the best practice you should read 
http://platform.xwiki.org/xwiki/bin/DevGuide/SkinExtensionsTutorial

 Thanks,
 Stefan.


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
___
users mailing list
users@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users