001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.spi.lifecycle;
003
004import java.util.Objects;
005import java.util.concurrent.Callable;
006
007/**
008 * Initialization task notifying the current lifecycle {@link InitStatusListener}.
009 * @since 14125
010 */
011public final class InitializationTask implements Callable<Void> {
012
013    private final String name;
014    private final Runnable task;
015
016    /**
017     * Constructs a new {@code InitializationTask}.
018     * @param name translated name to be displayed to user
019     * @param task runnable initialization task
020     */
021    public InitializationTask(String name, Runnable task) {
022        this.name = Objects.requireNonNull(name);
023        this.task = Objects.requireNonNull(task);
024    }
025
026    @Override
027    public Void call() {
028        Object status = null;
029        InitStatusListener initListener = Lifecycle.getInitStatusListener();
030        if (initListener != null) {
031            status = initListener.updateStatus(name);
032        }
033        task.run();
034        if (initListener != null) {
035            initListener.finish(status);
036        }
037        return null;
038    }
039}