This document discusses integrating external products built using different technologies into the Eclipse IDE. It covers the need for integration, challenges in integration like communication between technologies and attaching to the Eclipse UI. Integration points in Eclipse like editors, views, menus and preferences are described. Examples provided include integrating a web application, Win32 application, and Swing application into Eclipse. The key is to leverage Eclipse facilities, address challenges through techniques like inter-process communication, and make optimal use of Eclipse's usability.
2. Agenda Need for Integration Challenges in Integration Eclipse Integration Points Discussing different scenarios: Web Services Testing Tool Win32 Applications Swing Applications
3. Leverage Eclipse’s predefined facilities and usability Enforce company standards Multiple tools under ONE application (e.g., IDE) Improved usage of the screen real estate Increased functionality thereby increased productivity Retaining Legacy Applications Huge customer base Huge effort for full migration Need for Integration
4. Challenges in Integration Communication Between different technologies Between different languages Attaching to Eclipse UI Hosting foreign technology inside Eclipse UI Event Handling, and Wiring between views, menus etc
6. Agenda… Need for Integration Challenges in Integration Discussing different scenarios Web apps Win32 apps Swing apps
7. Integrating Web Applications Need a web server Eclipse ships Jetty Server Configure any server using WTP Launching application Toolbar/Menu actions Needs Artifacts – Use Wizards Links to different pages Views SWT Trees Communicate between Web app & Eclipse controls Eclipse Web App (change URLs) Web App Eclipse (???)
8. Example: Progress Actional Diagnostics Progress Actional Diagnostics Progress Web Application with comprehensive Web Services testing capabilities having using browser front end Rich functionality Extensive support for various bindings Pseudo code™ view, no XML required Raw view Pseudo code view
9. Example: Progress Actional Diagnostics (contd.) Integration with Eclipse IDE General Wizards to create a Web Service Test Allow user to begin testing immediately sans wizards using Untitled WS Test File(a la Untitled Text File) Editor Persist/load changes from custom file on Left pane Left pane and right pane need to be kept in synch Maintain state- mark as dirty when messages sent/received
10. Example: Progress Actional Diagnostics (contd.) Web Application Root Contract Binding Operation Messages Right Pane: Browser Component Left Pane: Tree for intuitive navigation
11. Example: Progress Actional Diagnostics (contd.) Changes to the tree should reflect in the browser and vice-versa SWT Tree Browser Component
12. Example: Progress Actional Diagnostics (contd.) Synching between the Tree and the Browser Tree Browser Straightforward - Just need to change the URL set on the browser component Browser Tree Complicated - ???
13. Example: Progress Actional Diagnostics (contd.) Producer Consumer Communication Model The design pattern for sending messages between two or more clients. Consumer/subscriber Producer/publisher Eclipse Editor WS Web Application Send Messages Listens Messages
14. Example: Progress Actional Diagnostics (contd.) Consumer/subscriber On receiving Message Eclipse Editor Parses the message Listens to Messages Updates the artifact file with test’s current state Updates and refreshes the tree
15. Agenda… Need for Integration Challenges in Integration Discussing different scenarios Web apps Win32 apps Swing apps
16. Integrating Win32 Applications Use case: Hosting and Integrating a win32 application inside a Eclipse IDE. Hosting:Bringing a win32 app to open inside an Eclipse UI Integrating: The win32 app needs to Respond to Eclipse’s menu actions (Open, Save, Exit) Respond to resizing, minimizing, closing Fire events to other Eclipse views
17. Desktop Integrating Win32 Applications (contd.) Hosting:Opening a win32 app to open inside an Eclipse Solution: Each window has a handle (hWnd) property i.e., a UID Win32 API offers a SetParent function. An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window. org.eclipse.swt.widgets.Controlhas a handle property which is the hWnd i.e., this control’s unique identification ID Window1 Window 2 Child Window 1 Window 3
21. Shared memory IPCIntegrating Win32 Applications (contd.) Integrating: This involves the win32 app to Responds to Eclipse’s menu actions Responds to resizing, minimizing, closing Is capable to firing events to other Eclipse views Process2 Process1
41. Example: Progress OpenEdgeAppBuilder (contd.) AppBuilder IDE Open File Open File openLinkedEditor openABFile File Changes syncFromAB Editor gets Focus File Changes Editor loses Focus syncFromIDE Save File syncFromAB Save File saveLinkedEditor syncFromAB Close File unlinkEditor Close Editor closeABFile
42. Example: DOTNET Designer & controls Inter process communication Socket Communication Eclipse IDE IPC Editor CLR Common Language Runtime Java runtime Prowin32 runtime Designer
44. Agenda… Need for Integration Challenges in Integration Discussing different scenarios Web apps Win32 apps Swing apps
45. Swing – Need for integration Technology convergence - Eclipse platform as IDE Eclipse is SWT based (Editors, Views etc) Swing and SWT are parallel technologies 2 Options Convert Swing code to SWT Tedious and Costly migration Increases development and testing effort Integrate Swing with SWT – “Swing-SWT Bridge” Swing component dwells in SWT containers Write only bridge code Most preferred option
46. Swing - Eclipse Integration points Editor/View integration Embed the main panel of Swing inside a composite. Trap and delegate Key binding actions Outline/Properties View integration Listen for selection - Update Swing/SWT Problems View Integration Validation markers Double click on problem - select Swing control
47. Swing - Eclipse Integration points (contd.) Toolbar/menu actions Placeholder for Swing Editor specific actions. Preferences Migrate the app preferences to eclipse preferences Project level preferences as relevant Reverse integration – Swing to Eclipse Drive eclipse code from swing actions (For ex: new File wizard) Modal Swing dialogs
48. Swing - Eclipse Integration points (contd.) Use effective code-bridge mechanisms Wrap and Delegate to Swing code/actions. Clean separation between SWT and Swing code. Interface dependencies
49. SWT/AWT Bridge SWT/AWT bridge (Eclipse plugin) – part of SWT Embedding Swing application made easy. has API for creation of Swing Frame from SWT composite. Embeds the Swing frame in to the Bridge
51. Example - Integrated Swing App in Eclipse Editor Existing Swing based graphical editors have been integrated tightly into Eclipse views.
52. UI Threads – SWT & Swing have there own UI threads. Prevent/Pre-empt Deadlocks. Look and Feel – SWT has native look and feel. Swing look and feel has to be configured. Modal dialogs of SWT & Swing are independent Tab traversal, popup menus etc., have to be handled Clubbing various Swing entities in to one eclipse Issues
53. Solutions Issues can be addressed as per their merit. For instance when Swing opens a model dialog it can block SWT SWT code should be written in such a way to delegate the events to the frame composite too
54. Summary Integrated environment – Good for the user Its possible to integrate External products built on foreign technologies inside Eclipse Things to take care Optimal technique to communicate between different environments Try to make full use of Eclipse offered usability
Need to provide a WSDL/WADL URLCreates a .mrp file for storing state/data of testingWizards to create a Web Service TestINPUT – WSDL/WADL URLOUTPUT – .mrp fileEditor support to open .mrp fileShow the stored tests state (.mrp file)Show the web-application as part of Editor
File System Sender writes to a file Receiver reads from it But when does the receiver do the read? Often synchronized with file locking or lock files Special types of files can make file-based IPC easierMessage-Based IPC Sender formats data into a formal message With some form of address for receiver OS delivers message to receiver’s message input queue (might signal too) Receiver (when ready) reads a message from the queue Sender might or might not blockProcedure Call IPCInterprocess communication uses same procedure call interface as intraprocess Data passed as parameters Information returned via return values Complicated since destination procedure is in a different address space Generally, calling procedure blocks till call returnsShared Memory IPC Different processes share a common piece of memory Either physically or virtually Communications via normal reads/writes May need semaphores or locks In or associated with the shared memory
AppBuilder: show, hide, delete : proxies for IDE viewgetViewHwnd: get window handlesetEmbeddedWindow: Sets the given view as the parent for the given windowHandleaddWindow: With this API multiple windows can be attached to a view. (add palette and )
Description:1. A .w file can be opened from the IDE by double-clicking the file in the Project Explorer view, or by dragging the file from the the Project Explorer view onto the AppBuilder window. Alternatively, a .w file can be opened from theAppBuilder. In either case, the openLinkedEditor method is called in the IDE to link an OEIDE Editor instance to the AppBuilder. The actual file is opened in the editor and a copy via a temporary file, is opened in the AppBuilder. The editor and the AppBuilder have the same content.2. Using the Edit Code option (Section Editor) in the AppBuilder causes the AppBuilder to synchronize the changes to the temporary file (syncFromAB), and then it invokes the selectSection method to reposition the code to the trigger section for the selected widget. If there are no triggers defined for the selected widget, a default trigger is created when synchronizing. The editor gets updated from the AppBuilder.3. Any of the AppBuilder dialogs and windows can be used to modify the instance of the .w file in the AppBuilder.4. When the OEIDE Editor gets focus, the syncFromAB method is called in the AppBuilder to synchronize the file. The editor gets updated from the AppBuilder.5. Any of the OEIDE functionality, in particular templates, can be used to modify the instance of the .w file in the OEIDE Editor.6. When the editor loses focus, the syncFromIDE method is called in the AppBuilder to synchronize the file. The AppBuilder gets updated from the OEIDE Editor.7. When the file is saved in the IDE, the syncFromAB method is called in the AppBuilder to synchronize the file. The editor gets updated from the AppBuilder.8. When the file is saved in the AppBuilder, the file is synchronized (syncFromAB), and then the saveLinkedEditor method is used to save the file on the IDE side. The editor and the AppBuilder have the same content.9. When the file is closed in the AppBuilder, the unlinkEditor method is called in the IDE so the editor does not try to synchronize with the AppBuilder.10. When the file is closed in the IDE, the instance of the .w file in the AppBuilder is closed.
.NET presentation container is used for users looking for a modern UI with very rich functionality that can be used to present their Progress applications. These customers want to be able to make use of the .NET presentation container with little or no knowledge of any of the .NET languages. SerializationDeserializationCodeDOMASTABL language