Provides the API for accessing the screen elements wrapping the content and EMF model data.

The content data are considered as screens if they provide {@link IScreenAdapter} service. The {@link IScreenProvider} is used for building the screen UI tree in the target VM. Each screen element holds a reference (JEM object) to the live widgets and it also registers as the EMF adapter for receiving change notifications. When notified, the screen element performs update to the underlying model through the content interfaces.

Usage:

	// UI creation
	
	// screen data is provided by the IContent
	IContentData screenData = xxx;
	// screen context defines the current screen resolution and provides the EMF resourceset used for creating new JEM objects
	IScreenContext screenContext = new ScreenContext(); 
	IScreenAdapter adapter = (IScreenAdapter) screenData.getAdapter(IScreenAdapter.class);
	// builds the screen live widget, this may or may not initialize the child elements
	IScreenElement rootElement = adapter.buildScreen(screenContext);
	// dynamically adds child to the screen
	IScreenElement childElement = new ScreenElement();
	rootElement.addChild(childElement);
	// creates the live widget
	childElement.adaptToScreen(screenContext);
	// adds the widget to the parent by using the containment feature
	childElement.addToParent(rootElement);
		
	// Notification and model updates
	
	// screen element typically wraps the content data and updates data upon change notifications
	void handleNotification(Notification notification) {
		// wrapped content data
		IContentData contentData = getData();
		
		if (Notification.ADD == notification.getType()) {
			// a child is added
			Object childWidget = notification.getNewValue();
			// updates the content
			contentData.addChild(...);
		} else if (Notification.SET == notification.getType()) {
			// property changes
			// new property value
			Object newValue = notification.getNewValue();
			// old property value
			Object oldValue = notification.getOldValue();
			// affected property
			EStructuralFeature feature = (EStructuralFeature) notification.getFeature();
			// finds the registered property handler
			IMyPropertyHandler handler = (IMyPropertyHandler) contentData.getAdapter(IMyPropertyHandler.class);
			// updates the model
			handler.propertyChanged(new PropertyChangeEvent(feature, oldValue, newValue));
		}
	}