Bug 140644 [DataBinding] Binding to ValidationError of DataBindingContext is broken
Hello, I wanted to bind the ValidationError Observable to a Widget, and it doesn't seem to work. I tested with Jface Databinding sample and in TestMasterDetails.java example, instead of binding the simple date error to a label, I bound the ValidationError of DBC to the Label (with a simple converter). dbc.bind(validationError, dbc.getValidationError(), new BindSpec().setUpdateModel(false).setModelToTargetConverter(new IConverter() { public Object convert(Object fromObject) { // TODO Auto-generated method stub if (fromObject == null) return null; return ((ValidationError) fromObject).message; } public Object getFromType() { // TODO Auto-generated method stub return Object.class; } public Object getToType() { // TODO Auto-generated method stub return String.class; } })); After investigating, I saw the ValidationError is a computed value (very interesting concept and useful) on the ValidationErrorList. 1. The ComputedValue mechanism seems to use the StateListener to the Object, but I don't see any management of staleness in ValidationErrorList (or ObservableList). 2. When one of the field gets an error, I debug and saw the ChangedListener on my binding was null (whereas the ValidationErrorList registers listeners on them). At the beginning, it's registered, the removed and not added again when needed. I have not enough time to go deeper in the mechanism, could you help me to understand what I'm doing wrong with this simple binding (With previous releases I was already binding with that mechanism and it worked). Is there an other way to do this? (My workaround is a listener on DBC, but I would prefer to use ValidationError Computed value). Thanks in advance
bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/DataBindingContext.java
}
	/**
	 * @param modelType
	 * @return an IValidator, or null if unsuccessful
	 */
	public IDomainValidator createDomainValidator(Object modelType) {
		for (int i = bindSupportFactories.size() - 1; i >= 0; i--) {
			BindSupportFactory bindSupportFactory = (BindSupportFactory) bindSupportFactories
					.get(i);
			IDomainValidator validator = bindSupportFactory
					.createDomainValidator(modelType);
			if (validator != null) {
				return validator;
			}
		}
		if (parent != null) {
			return parent.createDomainValidator(modelType);
		}
		return null;
	}
	/**
	 * Tries to create a validator that can validate values of type fromType.
	 * Returns <code>null</code> if no validator could be created. Either
	 * toType or modelDescription can be <code>null</code>, but not both. The
	 * implementation of this method will iterate over the registered bind
	 * support factories in reverse order, passing the given arguments to
	 * {@link BindSupportFactory#createValidator(Class, Class, Object)}. The
	 * first non-null validator will be returned.
	 * 
	 * @param fromType