Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Incubator/Platform/UFacekit

Revision as of 03:27, 17 September 2008 by Tom.schindl.bestsolution.at (Talk | contribs) (Scope)

Introduction

UFacekit is a proposed open source component under the Eclipse Incubator project. UFacekit's purpose is to:

  • improve adoption of Eclipse Core technologies (like Eclipse-Databinding) outside RCP and SWT (e.g. Swing, GWT, QT)
  • improve usability of Eclipse-Databinding by providing a high-level Widget-API

This proposal is in the Project Proposal Phase and and is written to declare its intent and scope. This proposal is written to solicit additional participation and input from the Eclipse community. You are invited to comment on and/or join the effort.

Background

Since the 3.3 release, Eclipse ships an actively developed and extended databinding framework (Eclipse Data Binding) that eases the development of UI applications backed by a model. At the time of the 3.4 release of Eclipse, the Eclipse Data Binding framework had been adopted by many RCP applications and new libraries supporting model implementations (EMF) besides JavaBeans(tm). So far, we have not seen support for other widget toolkits (such as for example Swing, GWT, etc.) although the main framework is designed to make this possible. This means that the Eclipse Data Binding framework cannot currently be used in applications which are not using SWT and JFace, although there is 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 Eclipse Data Binding within GWT and Swing communities by providing Eclipse Data Binding Observable implementations for them.
  • Make new applications stacks accessible to EMF (e.g. Swing).
  • Simplify rich UI development by providing simpler facades and powerful binding.

Scope

UFacekits scope is to develop highlevel API and framework modules to develop datacentric applications with different widget-toolkit which are small and easy to extend (e.g. create an implementation for other widget-toolkits, use different widget types, Nebula-Grid instead of SWT-Table). Besides the widget-toolkit neutral API UFacekit will provide established eclipse technologies/modules for currently not support platforms/runtimes (EMF for GWT, Databinding for GWT) and implementation of Databinding-Observables for currently not support model-technologies and widget-toolkits.

Initial objectives

  • 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
    • JFace-Viewers for Structured-Swing-Controls (List, Table, Tree)
  • 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 objectives considered for later

  • 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 (EMF-Model/CSS)

UFacekit Design

UFacekit is designed in a modular way as OSGi-Bundles to use its subcomponents with a minimal set of dependencies. For example, if 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, ...).

UFaceKitUML.png

The above design keeps the UI code free from the toolkit Code and holds as few information as possible about the modeling technology (maybe this could be removed completely in the future).

An UBean-Example:

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);
}

An EMF-Example:

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);
}

Examples

The following screenshots are based on the exact same code base, the only difference being the initial composite (the Shell used as a root).

SWT/JFace

UFaceSWT.png

Swing

UFaceSwing.png

MyGWT (ancient and has to be rewritten)

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) )
  • Riena where some of the targets overlap (e.g. highlevel Databinding API)

Organization

Initial Committers

  • Tom Schindl - BestSolution Systemhaus Gmbh - tom.schindl@bestsolution.at (component lead)
  • James Strachan
  • Angelo Zerr
  • Kenneth Westelinck

Initial Code Contribution

UFacekit-Project

Interested Parties

Anyware Technologies

Tentative Plan

Q4 - 2008: Milestone 1 (not all features implemented)

Q1 - 2009: Milestone 2 (all objectives for an initial version implemented)

Back to the top