The Bootstrap client module :
=============================
init :
------
The Bootstrap module must intercep the click on the "online edit" link.
For that, the Bootstrap module will be registred as protocol handler for the "nxedit" protocol.
Then the "online edit" link will be something like :
nxedit://127.0.0.1:8080/nuxeo/nxliveedit.faces?ref=default/59ff6431-e674-474f-ba6a-34ffd299db43/file/content/testMe.doc&conversationId=0NXMAIN
NB : for now the link is a restful link, but in the future it may change.
The protocol handler will be called by the OS/Browser and receive the url.
It will then call the URL :
http://127.0.0.1:8080/nuxeo/nxliveedit.faces?ref=default/59ff6431-e674-474f-ba6a-34ffd299db43/file/content/testMe.doc&conversationId=0NXMAIN
Bootstrap data download :
-------------------------
The http://127.0.0.1:8080/nuxeo/nxliveedit.faces?ref=default/59ff6431-e674-474f-ba6a-34ffd299db43/file/content/testMe.doc&conversationId=0NXMAIN
calls returns a bootstrap file.
Here is an example XML file.
59ff6431-e674-474f-ba6a-34ffd299db43
/default-domain/workspaces/wstest/testme
default
content
testMe.doc
File
false
false
application/msword
0A66F957861426A171D8DA10C023DABA
127.0.0.1:8080
...
http://127.0.0.1:8080/nuxeo/
Administrator
fr
5.1
The http headers will probably be removed.
The Password field will never be filed by the server.
If necessary we could add some WS related information like the WSDL url.
Authentication management during bootstrap :
--------------------------------------------
The Bootstrap client will need to do an http call to get the xml file from the server.
This call must be authenticated.
So the protocol handler must reuse the browser session.
This could be done by 2 ways :
- the protocol handler is more than a simple executable
- the GET url contains the JSESSIONID (hacky but works)
The first solution is clearly better, but will need better browser integration of the protocol handler.
On Firefox this looks totally doable, even if a bit undocumented.
Andrey, can you confirm me if this is doable on IE.
Authentication management :
---------------------------
Bootstarp client may need to authenticate, even if the session has expired : this may be the case in the browser session expired or if the user bookmarked the EditOnline link.
The Bootstrap client needs then to store a user/password and be able to handle http BasicAuthentication.
Storing UserName/Password in the Bootstrap client config (file or registry) seems like a good option.
Editor launch :
---------------
Based on a configuration file containing mime-type/editor mapping, the bootstrap module will launch an editor.
This configuration file should look like that :
.net
application/msword
...
exec
application/vnd.oasis.opendocument
...
...
This is very important that bootstrap client can be separated from the editors plugins, because there will plugins contributed for specific editors.
The most simplier and neutral way of launching an editor plugin is just executing the editor plugin passing it a copy of the bootstrap file.
This file will be the same as the one returned by Nuxeo5 server with additionnal authentication information : JSESSIONID and Login/Password.
The Bootstrap client will :
- select the good plugin according to mime type
- create a new thread
- copy the xml bootstrap file and add authentication information
- execute the editor process with the bootstrap file as first argument
- wait for the bootstrap file to be released by the editor process
For the Win32/.Net implementation it may have sens to have a closer integration between the bootstrap client and the MSOffice editor.
So, Andrey, you may consider making COM or .Net calls to let the bootstrap client drive the editor.
But, please, keep the posibility to have plugins that are simple executable.
Please also try to make the MSOffice Editor runnable as an executable (my be usefull for Firefox if we need to use separated protocol handlers).
The Editor :
============
The editor process will :
- receive and read the bootstrap file
- start the client editor (MSOffice via COM interop interface, OOffice via ??? ...)
- call WS to get list of pre-edit actions
- display a dialog for letting user select action
- call WS to download the file
- call WS to get list of post-edit actions
- display a dialog for letting user select action
- save and upload the file to Nuxeo Server
- terminate
For MSOffice editor plugin, since we would like to have a nuxeo assistant within msoffice, the plugin could be separated in 2 parts :
- Driver part : 2 first steps (mainly start MSO via COM)
- A MSOffice addon : all other steps (Nuxeo 5 communication)