All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aksw.commons.collection.observable.ObservableCollectionBase Maven / Gradle / Ivy

There is a newer version: 0.9.9
Show newest version
package org.aksw.commons.collection.observable;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
import java.util.Collection;

import org.aksw.commons.collections.ConvertingCollection;

import com.google.common.base.Converter;

public abstract class ObservableCollectionBase>
    extends ForwardingDeltaCollectionBase
    implements ObservableCollection
{
    protected VetoableChangeSupport vcs = new VetoableChangeSupport(this);
    protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);

    public ObservableCollectionBase(C backend) {
        super(backend);
    }

    protected static  Collection convert(Collection set, Converter converter) {
        return set == null ? null : ConvertingCollection.createSafe(set, converter);
    }


    @Override
    public Runnable addVetoableChangeListener(VetoableChangeListener listener) {
        vcs.addVetoableChangeListener(listener);
        return () -> vcs.removeVetoableChangeListener(listener);
    }

    /*
    @Override
    public Registration addPropertyChangeListener(PropertyChangeListener listener) {
        pcs.addPropertyChangeListener(listener);
        // return () -> pcs.removePropertyChangeListener(listener);

        return Registration.from(
            () -> listener.propertyChange(null)
    }
*/
}






//  boolean duplicateAware = isDuplicateAwareBackend();
//
//  @SuppressWarnings("unchecked")
//  Collection removals = rawRemovals == this
//      ? StreamOps.collect(duplicateAware, rawRemovals.stream().map(x -> (T)x))
//      : StreamOps.collect(duplicateAware, rawRemovals.stream().filter(backend::contains).map(x -> (T)x));
//  Collection additions = ObservableCollectionOps.collect(duplicateAware, rawAdditions.stream().filter(x -> !backend.contains(x) || removals.contains(x)));
//
//  boolean result = false;
//
//  {
//      Collection oldValue = this;
//      Collection newValue = rawRemovals == this
//              ? additions
//              : CollectionOps.smartUnion(CollectionOps.smartDifference(backend, removals), additions);
//
//      try {
//          vcs.fireVetoableChange(new CollectionChangedEventImpl<>(
//                  this, oldValue, newValue,
//                  additions, removals, Collections.emptySet()));
//      } catch (PropertyVetoException e) {
//          throw new RuntimeException(e);
//      }
//  }
//
//  boolean changeByRemoval;
//  if (rawRemovals == this) {
//      changeByRemoval = !backend.isEmpty();
//      if (changeByRemoval) {
//          // Only invoke clear if we have to; prevent triggering anything
//          backend.clear();
//      }
//  } else {
//      changeByRemoval = backend.removeAll(removals);
//  }
//
//  boolean changeByAddition = backend.addAll(additions);
//  result = changeByRemoval || changeByAddition;
//
//  {
//      Collection oldValue = rawRemovals == this
//              ? removals
//              : CollectionOps.smartUnion(CollectionOps.smartDifference(backend, additions), removals);
//      Collection newValue = this;
//
//      pcs.firePropertyChange(new CollectionChangedEventImpl<>(
//              this, oldValue, newValue,
//              additions, removals, Collections.emptySet()));
//  }
//
//  return result;
//    @Override
//    public boolean replace(Collection newValues) {
//
//        boolean result = !this.equals(newValues);
//
//        Collection oldValueCopy = new LinkedHashSet<>(this);
//
//        if (result) {
//            {
//                Collection oldValue = this;
//                Collection newValue = new LinkedHashSet<>(newValues);
//
//                try {
//                    vcs.fireVetoableChange(new CollectionChangedEventImpl<>(
//                            this, oldValue, newValue,
//                            CollectionOps.smartDifference(newValue, oldValue),
//                            CollectionOps.smartDifference(oldValue, newValue),
//                            Collections.emptySet()));
//                } catch (PropertyVetoException e) {
//                    throw new RuntimeException(e);
//                }
//            }
//
//            backend.clear();
//            backend.addAll(newValues);
//
//            {
//                // Set newItem = Collections.singleton(value);
//                Collection oldValue = oldValueCopy;
//                Collection newValue = this;
//
//                pcs.firePropertyChange(new CollectionChangedEventImpl<>(
//                        this, oldValue, newValue,
//                        CollectionOps.smartDifference(newValue, oldValue),
//                        CollectionOps.smartDifference(oldValue, newValue),
//                        Collections.emptySet()));
//            }
//
//        }
//
//        return result;
//    }

//    boolean result = false;
//
//    Set newItems = null;
//
//    if (isDuplicateAwareBackend() || !backend.containsAll(addedItems)) {
//        {
//            newItems = new LinkedHashSet<>(addedItems);
//            newItems.removeAll(backend);
//            // Set newItem = Collections.singleton(value);
//
//            Collection oldValue = this;
//            Collection newValue = CollectionOps.smartUnion(backend, newItems);
//
//            try {
//                vcs.fireVetoableChange(new CollectionChangedEventImpl<>(
//                        this, oldValue, newValue,
//                        newItems, Collections.emptySet(), Collections.emptySet()));
//            } catch (PropertyVetoException e) {
//                throw new RuntimeException(e);
//            }
//        }
//
//        result = backend.addAll(newItems);
//
//        {
//            // Set newItem = Collections.singleton(value);
//            Collection oldValue = CollectionOps.smartDifference(backend, newItems);
//            Collection newValue = this;
//
//            pcs.firePropertyChange(new CollectionChangedEventImpl<>(
//                    this, oldValue, newValue,
//                    newItems, Collections.emptySet(), Collections.emptySet()));
//        }
//
//    }
//
//    return result;


//Set removedItems = c.stream().filter(backend::contains).map(x -> (T)x)
//      .collect(Collectors.toCollection(LinkedHashSet::new));
//
//boolean result = false;
//if (isDuplicateAwareBackend() || !removedItems.isEmpty()) {
//  {
//      Collection oldValue = backend;
//      Collection newValue = CollectionOps.smartDifference(backend, removedItems);
//
//      try {
//          vcs.fireVetoableChange(new CollectionChangedEventImpl<>(
//                  this, oldValue, newValue,
//                  Collections.emptySet(), removedItems, Collections.emptySet()));
//      } catch (PropertyVetoException e) {
//          throw new RuntimeException(e);
//      }
//  }
//
//  result = backend.removeAll(removedItems);
//
//  {
//      Collection oldValue = CollectionOps.smartUnion(backend, removedItems);
//      Collection newValue = backend;
//
//      pcs.firePropertyChange(new CollectionChangedEventImpl<>(
//              this, oldValue, newValue,
//              Collections.emptySet(), removedItems, Collections.emptySet()));
//  }
//
//
//}
//
//return result;


//if (!isEmpty()) {
//  {
//      Collection oldValue = this;
//      Collection removedItems = this;
//      Collection newValue = Collections.emptySet();
//
//      try {
//          vcs.fireVetoableChange(new CollectionChangedEventImpl<>(
//                  this, oldValue, newValue,
//                  Collections.emptySet(), removedItems, Collections.emptySet()));
//      } catch (PropertyVetoException e) {
//          throw new RuntimeException(e);
//      }
//  }
//
//  backend.clear();
//
//  {
//      Collection oldValue = CollectionOps.smartUnion(backend, removedItems);
//      Collection newValue = backend;
//
//      pcs.firePropertyChange(new CollectionChangedEventImpl<>(
//              this, oldValue, newValue,
//              Collections.emptySet(), removedItems, Collections.emptySet()));
//  }
//}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy