[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