Lewis Denizen wrote:
Hi xwiki-users,
I'm trying to create a plugin to dynamically create a download link
for a SH or BAT file, and am wondering if I could get some ideas from
people on the list. What I'm trying to do is the following:
{{shell-script name="fixed_income.sh" display="true"
type="sh"}}
#!/bin/sh # Startup the bond server ${APP_DIR}/fi/ust/bond_server
-conf=fi_ust_prod.xml&
# Startup the pricing server ${APP_DIR}/fi/ust/pricing_server
-conf=fi_ust_prod.xml -region=ny&
# Startup the risk analysis tool ${APP_DIR}/fi/ust/risk_analysis
-days=365& {{/shell-script}}
I don't want the server to actually "execute" this (that's easy to
do), but rather to dynamically create an output stream and pipe it to
the user's browser. The user will then be able to save the
fixed_income.sh file in his/her own local directory to execute it.
I know this can be easily done with attachments, but I want to be
able to display the contents of this file on the wiki (possibly in a
<div> that's initially hidden), and also be able to edit this file
"on the fly" without having to create locally/save locally/upload
every time (kind of like a temporary attachment which disappears
together with the {{shell-script /}} tag). I could also just create
another servlet that takes in a single base64 encoded parameter to
reconstruct the shell script, but that's not a clean solution imho.
Any other way (perhaps via Javascript) of doing this cleanly within
Xwiki space? Thanks in advance (and also for another successful
release :-D)!
Quick plan:
1. Create a vm file (for example shbat.vm) in your <xwiki directory>/templates/
folder, which contains this:
$response.setContentType('text/plain')
#set($filename = "${doc.name}.sh") ## or some other way of retrieving the target
filename, like $doc.display('scriptTitle') if it is in an object.
$response.setHeader('Content-Disposition', attachment; filename=$filename")
$doc.getRenderedContent ## if you have the script content in a wiki document, or
$doc.use('XWiki.YourScriptClassname')
$doc.display('scriptContentProperty')
## if the content is placed in an object of the XWiki.YourScriptClassname type attached to
your document, and the script content is placed in a TextArea property named
scriptContentProperty.
2. Create links to your document like:
[Download this script>${doc.fullName}?xpage=shbat]
--
Sergiu Dumitriu
http://purl.org/net/sergiu/