Search in sources :

Example 1 with OrderedCollectionChangeSet

use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.

the class RealmObservableFactory method changesetsFrom.

@Override
public <E> Observable<CollectionChange<RealmResults<E>>> changesetsFrom(DynamicRealm realm, final RealmResults<E> results) {
    if (realm.isFrozen()) {
        return Observable.just(new CollectionChange<RealmResults<E>>(results, null));
    }
    final RealmConfiguration realmConfig = realm.getConfiguration();
    Scheduler scheduler = getScheduler();
    return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmResults<E>>>() {

        @Override
        public void subscribe(final ObservableEmitter<CollectionChange<RealmResults<E>>> emitter) {
            // If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
            if (!results.isValid())
                return;
            // Gets instance to make sure that the Realm is open for as long as the
            // Observable is subscribed to it.
            final DynamicRealm observableRealm = DynamicRealm.getInstance(realmConfig);
            resultsRefs.get().acquireReference(results);
            final OrderedRealmCollectionChangeListener<RealmResults<E>> listener = new OrderedRealmCollectionChangeListener<RealmResults<E>>() {

                @Override
                public void onChange(RealmResults<E> results, OrderedCollectionChangeSet changeSet) {
                    if (!emitter.isDisposed()) {
                        emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, changeSet));
                    }
                }
            };
            results.addChangeListener(listener);
            // Cleanup when stream is disposed
            emitter.setDisposable(Disposables.fromRunnable(new Runnable() {

                @Override
                public void run() {
                    if (!observableRealm.isClosed()) {
                        results.removeChangeListener(listener);
                        observableRealm.close();
                    }
                    resultsRefs.get().releaseReference(results);
                }
            }));
            // Emit current value immediately
            emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, null));
        }
    }).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
Also used : OrderedCollectionChangeSet(io.realm.OrderedCollectionChangeSet) Scheduler(io.reactivex.Scheduler) DynamicRealm(io.realm.DynamicRealm) RealmConfiguration(io.realm.RealmConfiguration) OrderedRealmCollectionChangeListener(io.realm.OrderedRealmCollectionChangeListener) RealmResults(io.realm.RealmResults)

Example 2 with OrderedCollectionChangeSet

use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.

the class RealmObservableFactory method changesetsFrom.

@Override
public <E> Observable<CollectionChange<RealmList<E>>> changesetsFrom(DynamicRealm realm, final RealmList<E> list) {
    if (realm.isFrozen()) {
        return Observable.just(new CollectionChange<RealmList<E>>(list, null));
    }
    final RealmConfiguration realmConfig = realm.getConfiguration();
    Scheduler scheduler = getScheduler();
    return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmList<E>>>() {

        @Override
        public void subscribe(final ObservableEmitter<CollectionChange<RealmList<E>>> emitter) {
            // If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
            if (!list.isValid())
                return;
            // Gets instance to make sure that the Realm is open for as long as the
            // Observable is subscribed to it.
            final DynamicRealm observableRealm = DynamicRealm.getInstance(realmConfig);
            listRefs.get().acquireReference(list);
            final OrderedRealmCollectionChangeListener<RealmList<E>> listener = new OrderedRealmCollectionChangeListener<RealmList<E>>() {

                @Override
                public void onChange(RealmList<E> list, OrderedCollectionChangeSet changeSet) {
                    if (!list.isValid()) {
                        // Terminate stream if list is no longer valid. This indicates
                        // the parent object has been deleted, so no further updates
                        // will be coming.
                        emitter.onComplete();
                        return;
                    }
                    if (!emitter.isDisposed()) {
                        emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, changeSet));
                    }
                }
            };
            list.addChangeListener(listener);
            // Cleanup when stream is disposed
            emitter.setDisposable(Disposables.fromRunnable(new Runnable() {

                @Override
                public void run() {
                    if (!observableRealm.isClosed()) {
                        list.removeChangeListener(listener);
                        observableRealm.close();
                    }
                    listRefs.get().releaseReference(list);
                }
            }));
            // Emit current value immediately
            emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, null));
        }
    }).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
Also used : RealmList(io.realm.RealmList) OrderedCollectionChangeSet(io.realm.OrderedCollectionChangeSet) Scheduler(io.reactivex.Scheduler) DynamicRealm(io.realm.DynamicRealm) RealmConfiguration(io.realm.RealmConfiguration) OrderedRealmCollectionChangeListener(io.realm.OrderedRealmCollectionChangeListener)

Example 3 with OrderedCollectionChangeSet

use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.

the class RealmObservableFactory method changesetsFrom.

@Override
public <E> Observable<CollectionChange<RealmList<E>>> changesetsFrom(Realm realm, final RealmList<E> list) {
    if (realm.isFrozen()) {
        return Observable.just(new CollectionChange<RealmList<E>>(list, null));
    }
    final RealmConfiguration realmConfig = realm.getConfiguration();
    Scheduler scheduler = getScheduler();
    return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmList<E>>>() {

        @Override
        public void subscribe(final ObservableEmitter<CollectionChange<RealmList<E>>> emitter) {
            // If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
            if (!list.isValid())
                return;
            // Gets instance to make sure that the Realm is open for as long as the
            // Observable is subscribed to it.
            final Realm observableRealm = Realm.getInstance(realmConfig);
            listRefs.get().acquireReference(list);
            final OrderedRealmCollectionChangeListener<RealmList<E>> listener = new OrderedRealmCollectionChangeListener<RealmList<E>>() {

                @Override
                public void onChange(RealmList<E> list, OrderedCollectionChangeSet changeSet) {
                    if (!list.isValid()) {
                        // Terminate stream if list is no longer valid. This indicates
                        // the parent object has been deleted, so no further updates
                        // will be coming.
                        emitter.onComplete();
                        return;
                    }
                    if (!emitter.isDisposed()) {
                        emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, changeSet));
                    }
                }
            };
            list.addChangeListener(listener);
            // Cleanup when stream is disposed
            emitter.setDisposable(Disposables.fromRunnable(new Runnable() {

                @Override
                public void run() {
                    if (!observableRealm.isClosed()) {
                        list.removeChangeListener(listener);
                        observableRealm.close();
                    }
                    listRefs.get().releaseReference(list);
                }
            }));
            // Emit current value immediately
            emitter.onNext(new CollectionChange<>(returnFrozenObjects ? list.freeze() : list, null));
        }
    }).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
Also used : RealmList(io.realm.RealmList) OrderedCollectionChangeSet(io.realm.OrderedCollectionChangeSet) Scheduler(io.reactivex.Scheduler) RealmConfiguration(io.realm.RealmConfiguration) OrderedRealmCollectionChangeListener(io.realm.OrderedRealmCollectionChangeListener) Realm(io.realm.Realm) DynamicRealm(io.realm.DynamicRealm)

Example 4 with OrderedCollectionChangeSet

use of io.realm.OrderedCollectionChangeSet in project realm-java by realm.

the class RealmObservableFactory method changesetsFrom.

@Override
public <E> Observable<CollectionChange<RealmResults<E>>> changesetsFrom(Realm realm, final RealmResults<E> results) {
    if (realm.isFrozen()) {
        return Observable.just(new CollectionChange<RealmResults<E>>(results, null));
    }
    final RealmConfiguration realmConfig = realm.getConfiguration();
    Scheduler scheduler = getScheduler();
    return Observable.create(new ObservableOnSubscribe<CollectionChange<RealmResults<E>>>() {

        @Override
        public void subscribe(final ObservableEmitter<CollectionChange<RealmResults<E>>> emitter) {
            // If the Realm has been closed, just create an empty Observable because we assume it is going to be disposed shortly.
            if (!results.isValid())
                return;
            // Gets instance to make sure that the Realm is open for as long as the
            // Observable is subscribed to it.
            final Realm observableRealm = Realm.getInstance(realmConfig);
            resultsRefs.get().acquireReference(results);
            final OrderedRealmCollectionChangeListener<RealmResults<E>> listener = new OrderedRealmCollectionChangeListener<RealmResults<E>>() {

                @Override
                public void onChange(RealmResults<E> e, OrderedCollectionChangeSet changeSet) {
                    if (!emitter.isDisposed()) {
                        emitter.onNext(new CollectionChange<RealmResults<E>>(returnFrozenObjects ? results.freeze() : results, changeSet));
                    }
                }
            };
            results.addChangeListener(listener);
            // Cleanup when stream is disposed
            emitter.setDisposable(Disposables.fromRunnable(new Runnable() {

                @Override
                public void run() {
                    if (!observableRealm.isClosed()) {
                        results.removeChangeListener(listener);
                        observableRealm.close();
                    }
                    resultsRefs.get().releaseReference(results);
                }
            }));
            // Emit current value immediately
            emitter.onNext(new CollectionChange<>(returnFrozenObjects ? results.freeze() : results, null));
        }
    }).subscribeOn(scheduler).unsubscribeOn(scheduler);
}
Also used : OrderedCollectionChangeSet(io.realm.OrderedCollectionChangeSet) Scheduler(io.reactivex.Scheduler) RealmConfiguration(io.realm.RealmConfiguration) OrderedRealmCollectionChangeListener(io.realm.OrderedRealmCollectionChangeListener) Realm(io.realm.Realm) DynamicRealm(io.realm.DynamicRealm) RealmResults(io.realm.RealmResults)

Aggregations

Scheduler (io.reactivex.Scheduler)4 DynamicRealm (io.realm.DynamicRealm)4 OrderedCollectionChangeSet (io.realm.OrderedCollectionChangeSet)4 OrderedRealmCollectionChangeListener (io.realm.OrderedRealmCollectionChangeListener)4 RealmConfiguration (io.realm.RealmConfiguration)4 Realm (io.realm.Realm)2 RealmList (io.realm.RealmList)2 RealmResults (io.realm.RealmResults)2