All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.mike10004.containment.lifecycle.AutoCloseableDecommissioner Maven / Gradle / Ivy

There is a newer version: 0.6
Show newest version
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 transform) {
        return byTransform(transform, DEFAULT_EXCEPTION_REACTION);
    }

    public static  DecoupledLifecycleStage.Decommissioner byTransform(Function 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