Asiri Rathnayake wrote:
Devs,
I've been brainstorming about implementing office importer functionality in
wysiwyg where the user will be able to upload a document and have it's
content imported into the current page being edited (i.e into the wysiwyg
editor). Note that we already have the copy/paste functionality implemented.
The first problem I see is that GWT doesn't have a way to upload a file with
a usual RPC call. Given the parameters, following is one possible way out of
this problem,
1. Define an OfficeImporterServlet which mapps to /xwiki/officeimporter
2. Let the office importer wysiwyg plugin make a POST request to this
servlet with a FileUpload widget (
http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/useā¦
).
You don't necessarily have to have your own servlet for this, you could attach
it to a wiki document, by posting to the "upload" action for the wiki document,
with the appropriate field names. I'm doing this in the image plugin with the
FileUploadForm.
You could even have your own action to post to, similar to the "upload" only
that it would invoke the importer plugin for the uploaded file and send back the
results, although I'm not really sure this is a good idea, as actions are quite
a core part of the wiki, and whose changing requires changes deep down (need to
write your action and have it on the server, need to map it in the actions
mapping file). Your servlet would require web.xml mapping too, so maybe it's
quite the same.
Or, in order to get the output back you can:
1. upload the file to the current document and, when the upload call returns,
make a second call to the WywisygService to import the uploaded file and send
back (x)html.
2. upload the file to an office importer special document, transform it and
return it with the upload action result (I need to digg more on this to see how
exactly would it be done). This solution would be hard to mix with the uploaded
images in the file, as they won't be attached to the correct wiki document upon
save, you'd need to move them.
Of course, you could also use solution 1. with a special OfficeImporter document
as a repository for all files uploaded which need to be imported.
In both cases, uploaded attachment could be deleted after import.
3. The servlet will import the document into
xhtml and write back the result
as the response.
4. Office importer wysiwyg plugin in turn takes the result and put it into
the wysiwyg editor.
And the second problem arises when there are non-textual content (ex.
images) in the document submitted. In this case, office importer servlet
must attach these files into the wiki page which is being edited. Now, if
the user decides to cancel the whole edit operation just after the import
operation, there must be a way to remove those attachments. How can we do
this? (For the moment I don't know how to handle this case)
You couldn't just save the document in which you import the uploaded file? This
would solve a couple of problems from the previous point, too.
Otherwise, this problem is quite the same for any editing: the user does some
edits, image uploads, inserts his / her image and then cancels. The images will
stay attached to the page even if the content that uses them won't.
One solution, not very clean and which I don't like, but would solve the
problem, would be to give them special names which would help you to have a
piece of code which could look for all unused such attachments and delete them.
Or, with the (x)html content of the imported file, you could return to the
importer plugin a list of images attached with that file which you'd delete upon
cancel.
Or you could just leave them there (could you?), as we do for all edit
situations, as I mentioned.
Happy coding,
Anca
Please let me know if you have any comments :)
Thanks.
- Asiri
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs