[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.tools.emf] Re: Observing EList size
|
Matthew Hall schrieb:
> Pierre Francis Roy wrote:
>> In this case what I want to do is to observ the size of that EList
>> (EList.size()).
>
> If there is an EStructuralFeature for EList.size() somewhere then you
> could observe it using:
> EMFProperties.value(eListSizeStructuralFeature).observe(eList)
There isn't one :-(
>
> Otherwise you can write a custom IValueProperty:
>
> class NotifyingListSizeProperty extends SimpleValueProperty {
> protected Object doGetValue(Object source) {
> return ((NotifyingList)source).size();
> }
>
> protected void doSetValue(Object source, Object value) {
> throw new UnsupportedOperationException(
> toString() + " is unmodifiable");
> }
>
> public INativePropertyListener adaptListener(
> ISimplePropertyListener listener) {
> return new Listener(listener);
> }
>
> private class Listener extends AdapterImpl
> implements INativePropertyListener {
> ISimplePropertyListener delegate;
>
> public Listener(ISimplePropertyListener delegate) {
> this.delegate = delegate;
> }
>
> public void addTo(Object source) {
> if (source != null)
> ((Notifier) ((NotifyingList)source).getNotifier())
> .eAdapters().add(this);
> }
>
> public void removeFrom(Object source) {
> if (source != null)
> ((Notifier) ((NotifyingList)source).getNotifier())
> .eAdapters().remove(this);
> }
>
> public void notifyChanged(Notification msg) {
> delegate.handleEvent(new SimplePropertyEvent(
> SimplePropertyEvent.CHANGE,
> msg.getNotifier(),
> NotifyingListenerProperty.this,
> null);
> }
> }
>
> public String toString() { return "EList.size <int>"; }
> }
>
> With this property you can basically do the same the first example code:
>
> IObservableValue listSize =
> new NotifyingListSizeProperty().observe(eList);
Might make sense to add it to our library would you file a bug Matt and
attach your source from above?
Tom