|
|
(34 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | ==Introduction==
| + | #REDIRECT [[Eclipse/Incubator/UFacekit]] |
− | [http://code.google.com/p/uface/ UFacekit] is a proposed open source component under the Eclipse Platform Incubator project. UFacekit's purpose is to: | + | |
− | * improve adoption of Eclipse Core technologies (like Eclipse-Databinding) outside RCP and SWT (e.g. Swing, GWT-Applications)
| + | |
− | * improve usability of Eclipse-Databinding by providing a high-level Widget-API
| + | |
− | | + | |
− | ==Background==
| + | |
− | Since the 3.3 release Eclipse ships a top-notch databinding libary (Eclipse-Databinding) to ease development of UI-Application backed with a model. In time of 3.4 we saw adoption of Eclipse-Databinding in many RCP applications and new libraries supporting model implementations (EMF) beside JavaBeans(tm) but we didn't saw support for other Widget-Toolkit (like Swing, GWT, ...) although the main libary is designed to make this possible. This means that Eclipse-Databinding is not used in applications who are not using SWT and JFace although there's no good reason not to do so.
| + | |
− | | + | |
− | UFacekit was started a year ago by James Strachan and Tom Schindl (Angelo Zerr and Kenneth Westelinck joined the project later) with the following set of targets:
| + | |
− | * promote reuse of rich UI code across Eclipse (JFace/SWT), GWT and Swing runtimes by providing a facade around different UI-Technologies
| + | |
− | * promote the use of JFace Data Binding within GWT and Swing communities by providing Eclipse-Databinding-Observable implementations for them
| + | |
− | * make accessible new applications stacks to EMF (e.g. Swing)
| + | |
− | * simplify rich UI development by providing simpler facades and powerful binding
| + | |
− | | + | |
− | ==Scope==
| + | |
− | The objectives for an initial version of UFacekit are:
| + | |
− | * a highlevel, widget-toolkit and model-indepent Widget API to easily bind widgets (including validation and decoration support)
| + | |
− | ** UI
| + | |
− | *** implementation for SWT/JFace
| + | |
− | *** implementation for Swing
| + | |
− | ** Model
| + | |
− | *** JavaBeans
| + | |
− | *** EObjects (EMF)
| + | |
− | *** UBeans
| + | |
− | * Observable implementations for Swing
| + | |
− | * Observable implementations for UBean
| + | |
− | * Observable implementations for XML-DOM
| + | |
− | * org.eclipse.core.databinding for use in GWT applications based upon current stable Eclipse release
| + | |
− | * Observable implementations for GWT-Widgets
| + | |
− | Additional functionality considered for later versions of UFacekit:
| + | |
− | * GWT support for EMF-Core-Modules
| + | |
− | * Support for Eclipse-Forms
| + | |
− | * Support to define UI and UFacekit-Applications (Upplication) using EMF
| + | |
− | * Support to design Upplications using GEF
| + | |
− | * Support for other Java-UI-Toolkits (QT-Jambi, DOJO, ...)
| + | |
− | * Declarative Styling
| + | |
− | | + | |
− | ==UFacekit Design==
| + | |
− | UFacekit is designed in a modular way as OSGi-Bundles to use its subcomponents with a minimal set of dependencies. A developer only wants to use Eclipse-Databinding in his/her project she will only use the Swing-Observables-Bundle, if he/she only wants to use a light weight model implementation he/she only takes the UBean-Bundles.
| + | |
− | | + | |
− | As already mentionned all UFacekit deliverables are packaged as OSGi-Bundles. By following the OSGi-standards it can be used with any OSGi implementation following the standards (Felix, Knopplerfish, ...).
| + | |
− | | + | |
− | [[Image:UFaceKitUML.png|1000px]]
| + | |
− | | + | |
− | The above design makes the UI-code free from the Toolkit-Code and holds as few informations about the modeling technology used as possible (maybe this could be removed completely in the future).
| + | |
− | | + | |
− | An UBean-Example:
| + | |
− | | + | |
− | <source lang="java">
| + | |
− | public void createUI(UIComposite root, UBeanForm form, IObservableValue value) {
| + | |
− | UIFactory ui = root.getFactory();
| + | |
− | | + | |
− | // The UI setup
| + | |
− | InputFieldUIInfo uiInfo = = new InputFieldUIInfo(GridLayoutData.fillHorizontalData(),InputFieldUIInfo.SIMPLE);
| + | |
− | UIInputField idField = ui.newInputField(detailComposite, uiInfo);
| + | |
− | | + | |
− | // The Binding setup
| + | |
− | InputFieldBindingInfo bindingInfo = InputFieldBindingInfo.newTextFieldInfo(form.detailValue(Person.ID, int.class));
| + | |
− | form.add(idField, bindingInfo);
| + | |
− | | + | |
− | // Bind the master value
| + | |
− | form.bind(value);
| + | |
− | }
| + | |
− | </source>
| + | |
− | | + | |
− | An EMF-Example:
| + | |
− | | + | |
− | <source lang="java">
| + | |
− | public void createUI(UIComposite root, EMFForm form, IObservableValue value) {
| + | |
− | UIFactory ui = root.getFactory();
| + | |
− | | + | |
− | // The UI setup
| + | |
− | InputFieldUIInfo uiInfo = = new InputFieldUIInfo(GridLayoutData.fillHorizontalData(),InputFieldUIInfo.SIMPLE);
| + | |
− | UIInputField idField = ui.newInputField(detailComposite, uiInfo);
| + | |
− | | + | |
− | // The Binding setup
| + | |
− | InputFieldBindingInfo bindingInfo = InputFieldBindingInfo.newTextFieldInfo(form.detailValue(PersonPackage.Literals.PERSON__ID, int.class));
| + | |
− | form.add(idField, bindingInfo);
| + | |
− | | + | |
− | // Bind the master value
| + | |
− | form.bind(value);
| + | |
− | }
| + | |
− | </source>
| + | |
− | | + | |
− | ===Examples===
| + | |
− | Those Screenshots are made up with 100% the same code base the only thing different is the initial composite (the Shell used as a root) created.
| + | |
− | | + | |
− | SWT/JFace
| + | |
− | | + | |
− | [[Image:UFaceSWT.png]]
| + | |
− | | + | |
− | Swing
| + | |
− | | + | |
− | [[Image:UFaceSwing.png]]
| + | |
− | | + | |
− | MyGWT (ancient and has to be rewritten)
| + | |
− | | + | |
− | [[Image:UFaceMyGWT.jpg]]
| + | |
− | | + | |
− | ==Relationship with other Eclipse-based Projects==
| + | |
− | UFacekit has a strong relation to the following projects:
| + | |
− | * Eclipse-Databinding (Core & JFace) providing the foundation for the high-level API
| + | |
− | * EMF (As a Databinding possibility, GWT support for EMF-Models)
| + | |
− | * E4 (SWT-Port for the web, create a class-lib for missing GWT-classes (e.g. Runnable) )
| + | |
− | | + | |
− | ==Organization==
| + | |
− | ===Initial Committers===
| + | |
− | * Tom Schindl - tom.schindl@bestsolution.at
| + | |
− | * James Strachan
| + | |
− | * Angelo Zerr
| + | |
− | * Kenneth Westelinck
| + | |
− | | + | |
− | ===Initial Code Contribution===
| + | |
− | [http://code.google.com/p/uface/ UFacekit-Project]
| + | |
− | | + | |
− | ===Interested Parties===
| + | |
− | Anyware Technologies
| + | |
− | | + | |
− | ==Tentative Plan==
| + | |
− | Q4 - 2008: A first not feature complete release
| + | |
− | | + | |
− | Q1 - 2009: First public release
| + | |