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}