Sorry, the method in EMFEditObservables has to be changed to:
public IObservable createObservable(Object target)
{
if
(eStructuralFeature.getEContainingClass().isSuperTypeOf(((EObject)
target).eClass()))
{
return observeList(realm, domain, (EObject)target,
eStructuralFeature);
}
return new EmptyObservableList(realm, eStructuralFeature);
}
i.e. we must not return null here.
Michael
Michael Haeberlen wrote:
Hi,
I am using a
org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider
as content provider in my master tree view. I use a IObservableFactory
which provides a combination of two IObservableList lists like follows:
public IObservable createObservable(Object target) {
final IObservableList list1 =
EMFEditObservables.observeList(domain, target,
XYZPackage.Literals.TARGET_FEATURE1);
final IObservableList list2 =
EMFEditObservables.observeList(domain, target,
XYZPackage.Literals.TARGET_FEATURE2);
return new UnionList(new IObservableList[] {categoryList,
childList});
return new ComputedList() {
protected List calculate() {
List list = new ArrayList(list1.size()+list2.size());
list.addAll(list1);
list.addAll(list2);
return list;
}
};
}
So now I have objects in my tree which represent different features,
and so I have different details pages.
In the details pages, I have code like this:
IObservableValue selection =
ViewersObservables.observeSingleSelection(viewer); //viewer is the
master view tree viewer
EMFEditObservables.observeDetailList(realm, domain, selection,
XYZPackage.Literals.FEATURE_OF_SELECTION));
And here is my problem: EMFEditObservables uses a IObservableFactory
which assumes that the target (=selection) is always an EObject having
the specified feature:
public IObservable createObservable(Object target)
{
return observeList(realm, domain, (EObject)target,
eStructuralFeature);
}
If the above method was changed to the following:
public IObservable createObservable(Object target)
{
if
(eStructuralFeature.getEContainingClass().isSuperTypeOf(((EObject)target).eClass()))
{
return observeList(realm, domain, (EObject)target,
eStructuralFeature);
}
return null;
}
then my problem is gone.
Before opening a bug I just wanted to ask if this is the right way to
solve it or if I should have done something different?
Thanks,
Michael