
io.github.mike10004.containment.lifecycle.AutoCloseableDecommissioner Maven / Gradle / Ivy
package io.github.mike10004.containment.lifecycle;
import java.util.function.Function;
import static java.util.Objects.requireNonNull;
class AutoCloseableDecommissioner implements DecoupledLifecycle.Decommissioner, DecoupledLifecycleStage.Decommissioner {
public static final ExceptionReaction DEFAULT_EXCEPTION_REACTION = ExceptionReaction.WRAP_WITH_RUNNABLE;
private final ExceptionReaction exceptionReaction;
public AutoCloseableDecommissioner() {
this(DEFAULT_EXCEPTION_REACTION);
}
public AutoCloseableDecommissioner(ExceptionReaction exceptionReaction) {
this.exceptionReaction = requireNonNull(exceptionReaction);
}
@Override
public void decommission(T resource) {
try {
resource.close();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
exceptionReaction.react(e);
}
}
public static DecoupledLifecycleStage.Decommissioner byTransform(Function super T, AutoCloseable> transform) {
return byTransform(transform, DEFAULT_EXCEPTION_REACTION);
}
public static DecoupledLifecycleStage.Decommissioner byTransform(Function super T, AutoCloseable> transform, ExceptionReaction exceptionReaction) {
return new DecoupledLifecycleStage.Decommissioner() {
private final AutoCloseableDecommissioner delegate = new AutoCloseableDecommissioner<>(exceptionReaction);
@Override
public void decommission(T resource) {
delegate.decommission(transform.apply(resource));
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy