package org.jtwig.render.context; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; public class Context<T> { public static <T> Context<T> create (T item) { return new Context<>(item, new ArrayList<Runnable>()); } private final AtomicReference<T> item; private final List<Runnable> endTasks; private Context(T item, List<Runnable> endTasks) { this.item = new AtomicReference<>(item); this.endTasks = endTasks; } public T getItem() { return item.get(); } public void onEnd (Runnable run) { endTasks.add(run); } public void end () { for (Runnable task : endTasks) { task.run(); } } public void set(T item) { this.item.set(item); } }