/*******************************************************************************
* Copyright (c) 2016 vogella GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
******************************************************************************/
package org.eclipse.core.internal.databinding.observable.sideeffect;
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.sideeffect.ISideEffect;
import org.eclipse.core.databinding.observable.sideeffect.ISideEffectFactory;
/**
* A factory to create {@link ISideEffect} objects, which are applied to the
* given {@link Consumer} in {@link ISideEffectFactory#createFactory(Consumer)}.
*
* @since 3.3
*/
public final class SideEffectFactory implements ISideEffectFactory {
private Consumer<ISideEffect> sideEffectConsumer;
/**
* Creates a new factory which will pass all created side-effects to the
* given {@link Consumer}.
*
* @param sideEffectConsumer
* {@link Consumer}, where the {@link ISideEffect} objects, which
* are created by this factory are passed to.
*/
public SideEffectFactory(Consumer<ISideEffect> sideEffectConsumer) {
this.sideEffectConsumer = sideEffectConsumer;
}
@Override
public ISideEffect createPaused(Runnable runnable) {
ISideEffect sideEffect = ISideEffect.createPaused(runnable);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
@Override
public ISideEffect createPaused(Realm realm, Runnable runnable) {
ISideEffect sideEffect = ISideEffect.createPaused(realm, runnable);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
@Override
public ISideEffect create(Runnable runnable) {
ISideEffect sideEffect = ISideEffect.create(runnable);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
@Override
public <T> ISideEffect create(Supplier<T> supplier, Consumer<T> consumer) {
ISideEffect sideEffect = ISideEffect.create(supplier, consumer);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
@Override
public <T> ISideEffect createResumed(Supplier<T> supplier, Consumer<T> consumer) {
ISideEffect sideEffect = ISideEffect.createResumed(supplier, consumer);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
@Override
public <T> ISideEffect consumeOnceAsync(Supplier<T> supplier, Consumer<T> consumer) {
ISideEffect sideEffect = ISideEffect.consumeOnceAsync(supplier, consumer);
sideEffectConsumer.accept(sideEffect);
return sideEffect;
}
}