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/