Android Open Source - sres Observable Array List






From Project

Back to project page sres.

License

The source code is released under:

Apache License

If you think the Android project sres listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package me.tatarka.sres;
/*from  ww  w . ja  v  a  2s  . com*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * Created by evan on 3/9/14.
 */
public class ObservableArrayList<T> extends ArrayList<T> implements ObservableList<T> {
    private List<Listener<T>> listeners = new ArrayList<>();

    public ObservableArrayList(int initialCapacity) {
        super(initialCapacity);
    }

    public ObservableArrayList() {
        super();
    }

    public ObservableArrayList(Collection<? extends T> c) {
        super(c);
    }

    @Override
    public boolean add(T element) {
        boolean result = super.add(element);
        for (Listener<T> listener : listeners) {
            listener.onChange(ChangeType.ADD, Collections.singletonList(new Change<>(size()-1, element)));
        }
        return result;
    }

    @Override
    public void add(int index, T element) {
        super.add(index, element);
        for (Listener<T> listener : listeners) {
            listener.onChange(ChangeType.ADD, Collections.singletonList(new Change<>(index, element)));
        }
    }

    @Override
    public T set(int index, T element) {
        T result =  super.set(index, element);
        for (Listener<T> listener : listeners) {
            listener.onChange(ChangeType.UPDATE, Collections.singletonList(new Change<>(index, element)));
        }
        return result;
    }

    @Override
    public T remove(int index) {
        T result = super.remove(index);
        for (Listener<T> listener : listeners) {
           listener.onChange(ChangeType.REMOVE, Collections.singletonList(new Change<>(index, result)));
        }
        return result;
    }

    @Override
    public boolean remove(Object o) {
        int index = indexOf(o);
        boolean result = super.remove(o);
        if (result) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.REMOVE, Collections.singletonList(new Change<>(index, (T) o)));
            }
        }
        return result;
    }

    @Override
    public void clear() {
        List<Change<T>> changes = new ArrayList<>();
        for (int i = 0; i < size(); i++) {
            changes.add(new Change<>(i, get(i)));
        }
        if (!changes.isEmpty()) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.REMOVE, Collections.unmodifiableList(changes));
            }
        }
        super.clear();
    }

    @Override
    public boolean addAll(Collection<? extends T> c) {
        int startIndex = size();
        boolean result = super.addAll(c);
        List<Change<T>> changes = new ArrayList<>();
        for (int i = startIndex; i < size(); i++) {
            changes.add(new Change<>(i, get(i)));
        }
        if (!changes.isEmpty()) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.ADD, Collections.unmodifiableList(changes));
            }
        }
        return result;
    }

    @Override
    public boolean addAll(int index, Collection<? extends T> c) {
        boolean result = super.addAll(index, c);
        List<Change<T>> changes = new ArrayList<>();
        for (int i = index; i < size(); i++) {
            changes.add(new Change<>(i, get(i)));
        }
        if (!changes.isEmpty()) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.ADD, Collections.unmodifiableList(changes));
            }
        }
        return result;
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        List<Change<T>> changes = new ArrayList<>();
        for (int i = size() - 1; i >= 0; i--) {
            if (contains(get(i))) changes.add(new Change<>(i, get(i)));
        }
        boolean result = super.removeAll(c);
        if (result) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.REMOVE, Collections.unmodifiableList(changes));
            }
        }
        return result;
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        List<Change<T>> changes = new ArrayList<>();
        for (int i = size() - 1; i >= 0; i--) {
            if (!contains(get(i))) changes.add(new Change<>(i, get(i)));
        }
        boolean result = super.retainAll(c);
        if (result) {
            for (Listener<T> listener : listeners) {
                listener.onChange(ChangeType.REMOVE, Collections.unmodifiableList(changes));
            }
        }
        return result;
    }

    @Override
    public void addListener(Listener<T> listener) {
        listeners.add(listener);
    }

    @Override
    public void removeListener(Listener<T> listener) {
        listeners.remove(listener);
    }
}




Java Source Code List

me.tatarka.sres.AbstractTrackable.java
me.tatarka.sres.Bindable.java
me.tatarka.sres.ChangeTracker.java
me.tatarka.sres.FileFilter.java
me.tatarka.sres.LayoutGenerator.java
me.tatarka.sres.LayoutParser.java
me.tatarka.sres.LayoutSelectorHelper.java
me.tatarka.sres.LayoutSelector.java
me.tatarka.sres.ListView.java
me.tatarka.sres.Main.java
me.tatarka.sres.ObservableAdapter.java
me.tatarka.sres.ObservableArrayList.java
me.tatarka.sres.ObservableListViewHelper.java
me.tatarka.sres.ObservableList.java
me.tatarka.sres.ObservablePagerAdapter.java
me.tatarka.sres.SResBaseVisitor.java
me.tatarka.sres.SResLexer.java
me.tatarka.sres.SResOutput.java
me.tatarka.sres.SResParser.java
me.tatarka.sres.SResVisitor.java
me.tatarka.sres.SRes.java
me.tatarka.sres.SourceInfo.java
me.tatarka.sres.ThreadHandlerImpl.java
me.tatarka.sres.ThreadHandlerProvider.java
me.tatarka.sres.ThreadHandler.java
me.tatarka.sres.Trackable.java
me.tatarka.sres.ViewPager.java
me.tatarka.sres.ast.Attribute.java
me.tatarka.sres.ast.Binding.java
me.tatarka.sres.ast.Child.java
me.tatarka.sres.ast.Converter.java
me.tatarka.sres.ast.Include.java
me.tatarka.sres.ast.RootView.java
me.tatarka.sres.ast.View.java
me.tatarka.sres.idea.SResFileTypeFactory.java
me.tatarka.sres.idea.SResFileType.java
me.tatarka.sres.idea.SResFile.java
me.tatarka.sres.idea.SResIcons.java
me.tatarka.sres.idea.SResLanguage.java
me.tatarka.sres.idea.SResLexer.java
me.tatarka.sres.idea.SResParserDefinition.java
me.tatarka.sres.idea._SResLexer.java
me.tatarka.sres.idea.psi.SResElementType.java
me.tatarka.sres.idea.psi.SResTokenType.java
me.tatarka.sres.impl.SResCodeLayoutGenerator.java
me.tatarka.sres.impl.SResLayoutParser.java
me.tatarka.sres.impl.SResVisitor.java
me.tatarka.sres.impl.SResXmlLayoutGenerator.java
me.tatarka.sres.impl.WriterCodeWriter.java
me.tatarka.sres.property.BooleanProperty.java
me.tatarka.sres.property.ByteProperty.java
me.tatarka.sres.property.CharProperty.java
me.tatarka.sres.property.DoubleProperty.java
me.tatarka.sres.property.FloatProperty.java
me.tatarka.sres.property.IntProperty.java
me.tatarka.sres.property.LongProperty.java
me.tatarka.sres.property.Property.java
me.tatarka.sres.property.ShortProperty.java
me.tatarka.sres.sample.MainActivity.java
me.tatarka.sres.sample.MyListItemView.java
me.tatarka.sres.sample.MyListItem.java
me.tatarka.sres.sample.MyMainView.java
me.tatarka.sres.sample.MyModel.java
me.tatarka.sres.sample.MyView.java
me.tatarka.sres.util.PathTransformer.java