Bug 126839 [DataBinding] IObservable refactoring
bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/TreeBinding.java
/**
	 * Update the collection from the event.
	 * 
	 * @param needsUpdate
	 *            IUpdatable to be updated
	 * @param event
	 */
	private void update(IUpdatableTree needsUpdate, IUpdatableTree source, ChangeEvent event) {
		int index = event.getPosition();
		Object parent = event.getParent();
			try {
				updating ++;
				int copyType = BindingEvent.EVENT_COPY_TO_MODEL;
				if (needsUpdate == target) {
					copyType = BindingEvent.EVENT_COPY_TO_TARGET;
				}
				BindingEvent bindingEvent = new BindingEvent(event, copyType, BindingEvent.PIPELINE_AFTER_GET);
				bindingEvent.originalValue = event.getNewValue();
				
				switch (event.getChangeType()) {
					case ChangeEvent.VIRTUAL:
						bindingEvent.originalValue = needsUpdate.getElements(parent);
						source.setElements(parent, (Object[])bindingEvent.originalValue);
						break;
						
					case ChangeEvent.CHANGE:
						needsUpdate.setElement(parent, index, event.getNewValue());
						break;
						
					case ChangeEvent.ADD: