in component-dsl/src/main/java/org/apache/aries/component/dsl/internal/BaseOSGiImpl.java [228:300]
public OSGi<T> effects(
Consumer<? super T> onAddedBefore, Consumer<? super T> onAddedAfter,
Consumer<? super T> onRemovedBefore,
Consumer<? super T> onRemovedAfter,
Consumer<? super T> onUpdate) {
return transform(op -> t -> {
onAddedBefore.accept(t);
try {
OSGiResult terminator = op.publish(t);
OSGiResult result = new OSGiResultImpl(() -> {
try {
onRemovedBefore.accept(t);
}
catch (Exception e) {
//TODO: logging
}
try {
terminator.run();
}
catch (Exception e) {
//TODO: logging
}
try {
onRemovedAfter.accept(t);
}
catch (Exception e) {
//TODO: logging
}
},
() -> {
AtomicBoolean atomicBoolean = new AtomicBoolean();
UpdateSupport.deferPublication(() -> {
if (!atomicBoolean.get()) {
onUpdate.accept(t);
}
});
atomicBoolean.set(terminator.update());
return atomicBoolean.get();
}
);
try {
onAddedAfter.accept(t);
}
catch (Exception e) {
result.run();
throw e;
}
return result;
}
catch (Exception e) {
try {
onRemovedAfter.accept(t);
}
catch (Exception e1) {
//TODO: logging
}
throw e;
}
}
);
}