Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-dev] Databinding Labelprovider + Chaining
  • From: Jens Lideström <jens@xxxxxxxxxxxx>
  • Date: Wed, 21 Apr 2021 15:38:21 +0200
  • Autocrypt: addr=jens@xxxxxxxxxxxx; prefer-encrypt=mutual; keydata= xsBNBFM3R1gBCADKS+OHlSpEmXiVEvq+JdjOwaNT9M4udDAWvHOOL0UQBzdHc9aw3IEah7m6 pKxVNMkgafALaRKAUzpZawxtmFqzBVU8ytOiFPu7uBsgQeoVVQj4BX5qAcE4K6PeN4jzzEec Q1CFsci781hSS3lXoQg3a+5FVrtqvqUGqlwyuPwTJbGmh5Z41SmjKWNV8+H2gAOwqI5vZMwq xZ/hiWwgTh/ZC25dhXHgFNfvYo0HcBa2SIxMzjnuY0kI1lTI8hJ+SH5fIYlWAX5v2sCPlZPn 9xlxsoM5hrDy8WYjSikB9mEpl2a1sK3G9SYygTkxzSXhQfX5W7ffFyrevxAtTPGvSWbdABEB AAHNI0plbnMgTGlkZXN0csO2bSA8amVuc0BsaWRlc3Ryb20uc2U+wsB+BBMBAgAoBQJTN0dY AhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCHLK7pu7tB1hXVB/9QFmkY o8N+fqGHVPY74T0SgbtK/aspKE53lvyIjEJ4dB5kEXn5X4yjrAHCMWi6DP8qs6d7/4pW3Er5 lWh1ERnbGfBVe+jZQZ+UtwyMM6rjVw8VXC3n9l4j5+aqWI2bpst2bRKff1Hzi5/V+kEgySSQ osp+iuoIARIJj4ztydg8Y7JKpY2MMujEezrQ06MmPHD3Pgmw47aRuaMxA1eBsDW48nBtLzz1 NrR6Ze67DSVgXf7waTsVG13g6lM6ktNvlYPHg/9blr2HVknPtibxvmpUODaX8Yn9MkIayq7/ 4LDtFl0iXcPQViTbscOLEjCBCFE5ZbumIffRD2XL6K/wVCwGzsBNBFM3R1gBCAC0VvtL3Cgt Fg0zC5/89FXhC3a3UHe7lgFIaQX0SLJluC/hJitdUTP4ak6toim+N2AkVJk7KX74ZUEef1em i3UPv/yAUaAOoeNcsJYd9dUx7c54SA3sxk0btTsnXL7Ibb9ada7p8ur2rzEtqFdGqPsinHZU Qyr0PXxFXc7HbnAery9AzdzUdsAVURKFiJBvZiDzUChhQl3oCfh8giXVhYWVLrxzNYj24+CL CzUr5E75bJj96JArrDgPxCX3KdqHmZdMqOScgl09x0Homoia8AS9o54IqO9PIkFXWGaPOlQa to12ZXtFQ6K8dpaRsiQmxz+26Kl6mn398f8gY/o+LMnZABEBAAHCwGUEGAECAA8FAlM3R1gC GwwFCRLMAwAACgkQhyyu6bu7QdYsjAgAvDtqMbhH8TFfZzJDLM5JLv/H6gVATvggzOQOuiNq lcTe0AIGgM3upJlRFZbcpH1jojwnPqMue1RHvcDmiWDV0gho0zqYkTx41GdmaIYM4pC28Fa9 FR4Z2q1HF8T+Y9VyKNG2eOwyyNkT+Zc3bMkkz5psavcATFjDK2Z+2/rOSIJvQv5xIUGxCW9y bDMjq8O1efTeUVM+d5NKs1b2cgkkjLt3D5usFQeB3Yj0b/xZ4aqde+B0tD969AO0AJv1EI4N L3TdgYa3ooMupNGgo4WEKDjGh7OKKqrf2Qvan+7Uyf0SMnxEe5hTA7DMq7fmxkA6mlSo1VD8 r77Q+SIwfF6P9A==
  • Delivered-to: platform-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/platform-dev/>
  • List-help: <mailto:platform-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/platform-dev>, <mailto:platform-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/platform-dev>, <mailto:platform-dev-request@eclipse.org?subject=unsubscribe>
  • User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

Hello Christoph,

Working with string-based properties got slightly more fiddly after the
addition of type parameters to the databinding classes. But it also got a
bit more clear and got more static type checking!

The Vogella tutorial is apparently not updated to use new versions of the
databinding framework.

The best way to solve your problem is to use the versions of
BeanProperties#value that also specify the return type.

Like this:

import org.eclipse.core.databinding.beans.typed.BeanProperties;

ObservableListContentProvider<Person> contentProvider =
    new ObservableListContentProvider<>();

IObservableSet<Person> knownElements = contentProvider.getKnownElements();

IObservableMap<Person, String> streetName =
BeanProperties.value(Person.class, "address", Address.class)
    .value(BeanProperties.value(Address.class, "street", String.class))
    .observeDetail(knownElements);

The above code type-checks fine.

The other alternative is to specify Object as the type argument of
ObservableListContentProvider. In that case you throw type information
away and you have to work with Object all the way:

ObservableListContentProvider<Object> contentProvider = new
    ObservableListContentProvider<>();

IObservableSet<Object> knownElements = contentProvider.getKnownElements();

IObservableMap<Object, Object> streetName = BeanProperties.value("address")
    .value(BeanProperties.value("street"))
    .observeDetail(knownElements);

BR,
Jens Lideström

On 2021-04-21 10:04, Christoph Läubrich wrote:
> [1] shows how to observe a property of an object to have a label updating,
> that works as long as it is a direct property of the (person) object.
> 
> [2] shows how to chain properties to access "sub-objects" (lets say
> persons address)
> 
> But how do I combine both?
> 
> IObservableMap streetName = BeanProperties.value(Person.class,
>     "adress").value(BeanProperties.value(Address.class,
>     "street")).observeDetail(knownElements);
> 
> obviously won't work as the "knownElements" are of type
> IObservableSet<Person> ...
> 
> 
> [1]
> https://www.vogella.com/tutorials/EclipseDataBinding/article.html#observing-list-details
> 
> [2]
> https://www.vogella.com/tutorials/EclipseDataBinding/article.html#chaining-properties
> 
> _______________________________________________
> platform-dev mailing list
> platform-dev@xxxxxxxxxxx
> To unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/platform-dev


Back to the top