| | 567 | <section> |
|---|
| | 568 | <title>The bootstrap client module (part 2)</title> |
|---|
| | 569 | |
|---|
| | 570 | <para> |
|---|
| | 571 | The bootstrap module receives and parses the content of the |
|---|
| | 572 | XML bootstrap file. According to a set of configurable rules |
|---|
| | 573 | the bootstrap module launch the right editor with bootstrap |
|---|
| | 574 | file as command line parameter. |
|---|
| | 575 | </para> |
|---|
| | 576 | |
|---|
| | 577 | </section> |
|---|
| | 578 | |
|---|
| | 579 | <section> |
|---|
| | 580 | <title>Authentication management during bootstrap</title> |
|---|
| | 581 | |
|---|
| | 582 | <para> |
|---|
| | 583 | The Bootstrap client will need to do an http call to get the |
|---|
| | 584 | xml file from the server. This call must be authenticated. So |
|---|
| | 585 | the protocol handler must reuse the browser session. |
|---|
| | 586 | </para> |
|---|
| | 587 | |
|---|
| | 588 | </section> |
|---|
| | 589 | |
|---|
| | 590 | <section> |
|---|
| | 591 | <title>The client editor and its plugin</title> |
|---|
| | 592 | |
|---|
| | 593 | <para> |
|---|
| | 594 | In case of document editing (use case #1): |
|---|
| | 595 | <itemizedlist> |
|---|
| | 596 | <listitem>call WS to get list of pre-edit actions</listitem> |
|---|
| | 597 | <listitem> |
|---|
| | 598 | display a dialog for letting user select action |
|---|
| | 599 | </listitem> |
|---|
| | 600 | <listitem>call WS to download the file</listitem> |
|---|
| | 601 | <listitem> |
|---|
| | 602 | call WS to get list of post-edit actions |
|---|
| | 603 | </listitem> |
|---|
| | 604 | <listitem> |
|---|
| | 605 | display a dialog for letting user select action |
|---|
| | 606 | </listitem> |
|---|
| | 607 | <listitem> |
|---|
| | 608 | save and upload the file to Nuxeo Server |
|---|
| | 609 | </listitem> |
|---|
| | 610 | <listitem>terminate (close the WS session)</listitem> |
|---|
| | 611 | </itemizedlist> |
|---|
| | 612 | </para> |
|---|
| | 613 | |
|---|
| | 614 | <para> |
|---|
| | 615 | In case of document creation (use case #2 and #3): |
|---|
| | 616 | <itemizedlist> |
|---|
| | 617 | <listitem>call WS to get list of pre-edit actions</listitem> |
|---|
| | 618 | <listitem> |
|---|
| | 619 | display a dialog for letting user select action |
|---|
| | 620 | </listitem> |
|---|
| | 621 | <listitem> |
|---|
| | 622 | call WS to download the template file (use case #3) |
|---|
| | 623 | </listitem> |
|---|
| | 624 | <listitem> |
|---|
| | 625 | call WS to get list of post-edit actions (e.g. choose |
|---|
| | 626 | title) |
|---|
| | 627 | </listitem> |
|---|
| | 628 | <listitem> |
|---|
| | 629 | call WS for the list of candidate server locations |
|---|
| | 630 | </listitem> |
|---|
| | 631 | <listitem> |
|---|
| | 632 | display a dialog with actions and dropdown list of |
|---|
| | 633 | candidate locations |
|---|
| | 634 | </listitem> |
|---|
| | 635 | <listitem> |
|---|
| | 636 | create new document and upload the file to Nuxeo Server |
|---|
| | 637 | </listitem> |
|---|
| | 638 | <listitem>terminate (close the WS session)</listitem> |
|---|
| | 639 | </itemizedlist> |
|---|
| | 640 | </para> |
|---|
| | 641 | </section> |
|---|
| | 642 | |
|---|
| | 643 | <section> |
|---|
| | 644 | <title>Authentication of the client editor</title> |
|---|
| | 645 | </section> |
|---|
| | 646 | |
|---|
| | 647 | <para> |
|---|
| | 648 | All WS requests (SOAP and RESTful) from the editor plugin back |
|---|
| | 649 | to the WS server should reuse all the HTTP cookies along with |
|---|
| | 650 | any basic auth parameters to ensure the request will pass |
|---|
| | 651 | through any authenticating reverse proxies (e.g. CAS, mod_sso, |
|---|
| | 652 | ...) as if they were the original browser. |
|---|
| | 653 | </para> |
|---|
| | 656 | <section> |
|---|
| | 657 | <title>The Web Service component</title> |
|---|
| | 658 | |
|---|
| | 659 | <para> |
|---|
| | 660 | It is responsible to answer the WS calls of the editor client. |
|---|
| | 661 | Most of its business logics should be defined has an overridable |
|---|
| | 662 | extension point so that customer project can change most of the |
|---|
| | 663 | LiveEdit global behavior without having to re-compile / |
|---|
| | 664 | re-package the client part. |
|---|
| | 665 | </para> |
|---|
| | 666 | |
|---|
| | 667 | <para> |
|---|
| | 668 | In particular the list of candidate locations to 'save as new |
|---|
| | 669 | document' is provided by the WS server-side API to the LiveEdit |
|---|
| | 670 | client. The list should default to the list of Workspaces the |
|---|
| | 671 | user currently has the "AddChildren" permission. The WS server |
|---|
| | 672 | should dynamically compute that list according to an extensible |
|---|
| | 673 | service (i.e. overridable by a extension point) so that customer |
|---|
| | 674 | project can register a custom Java class that is responsible to |
|---|
| | 675 | implement the custom business logics in case the list of |
|---|
| | 676 | workspaces is not enough. |
|---|
| | 677 | </para> |
|---|
| | 678 | |
|---|
| | 679 | <para> |
|---|
| | 680 | The location selected by default should also be defined on the |
|---|
| | 681 | server side and overridable by the same extension point. |
|---|
| | 682 | </para> |
|---|
| | 683 | </section> |
|---|
| | 684 | |
|---|
| | 685 | <section> |
|---|
| | 686 | <title>More on editor launch</title> |
|---|
| | 687 | |
|---|
| | 688 | <para> |
|---|
| | 689 | Based on a configuration file containing mimetype/editor |
|---|
| | 690 | mapping, the bootstrap module will launch an editor. This |
|---|
| | 691 | configuration file should look like that: |
|---|
| | 692 | |
|---|
| | 693 | <programlisting> |
|---|
| | 694 | <editors> <editor name="MSOOfficePlugin"> |
|---|
| | 695 | <pluginType>.net<pluginType> <mime-types> |
|---|
| | 696 | <mime-type>application/msword</mime-type> ... |
|---|
| | 697 | </mime-types> </editor> <editor |
|---|
| | 698 | name="OOfficePlugin"> |
|---|
| | 699 | <pluginType>exec<pluginType> <mime-types> |
|---|
| | 700 | <mime-type>application/vnd.oasis.opendocument</mime-type> |
|---|
| | 701 | ... </mime-types> </editor> ... </editors> |
|---|
| | 702 | </programlisting> |
|---|
| | 703 | </para> |
|---|
| | 704 | |
|---|
| | 705 | <para> |
|---|
| | 706 | This is very important that bootstrap client can be separated |
|---|
| | 707 | from the editors plugins, because there will plugins contributed |
|---|
| | 708 | for specific editors. The simplest and most neutral way of |
|---|
| | 709 | launching an editor plugin is just executing the editor plugin |
|---|
| | 710 | passing it a copy of the bootstrap file. This file will be the |
|---|
| | 711 | same as the one returned by Nuxeo server with additional |
|---|
| | 712 | authentication information : cookies and Login/Password. |
|---|
| | 713 | </para> |
|---|
| | 714 | </section> |
|---|
| | 715 | |
|---|
| | 716 | <section> |
|---|
| | 717 | <title>More on pre- and post-editing actions</title> |
|---|
| | 718 | |
|---|
| | 719 | <para> |
|---|
| | 720 | Actions available on the document may depend on the custom |
|---|
| | 721 | project specifications, and it is important that it is totally |
|---|
| | 722 | transparent for the client plugin UI: we don't want to build a |
|---|
| | 723 | version of the client plugins for each project. |
|---|
| | 724 | </para> |
|---|
| | 725 | |
|---|
| | 726 | <para> |
|---|
| | 727 | So the idea is that the WebService will provide the client |
|---|
| | 728 | editor plugin a simple list of actions, the client will simply |
|---|
| | 729 | display available actions, and eventually ask the server to |
|---|
| | 730 | execute them without knowing the underlying logic. |
|---|
| | 731 | </para> |
|---|
| | 732 | |
|---|
| | 733 | <para> |
|---|
| | 734 | This "action logic" is somehow close to what we already do in |
|---|
| | 735 | the web layer, an action defines an action id and a label. |
|---|
| | 736 | </para> |
|---|
| | 737 | |
|---|
| | 738 | <para> |
|---|
| | 739 | If several actions can be done (like checkout + lock), then they |
|---|
| | 740 | will be combined as compound actions: chekout, lock, |
|---|
| | 741 | checkout_and_lock. This way we won't have to handle associations |
|---|
| | 742 | conditions on the client side: the user can always select at |
|---|
| | 743 | most one action: none / lock / checkout / chekout_and_lock |
|---|
| | 744 | </para> |
|---|
| | 745 | |
|---|
| | 746 | </section> |
|---|