// Path: src/main/java/de/idrinth/stellaris/modtools/gui/ProgressElementGroup.java
// public interface ProgressElementGroup {
// 
//     void addToStepLabels(String text);
// 
//     void update(int current, int maximum);
//     
// }
// 
// Path: src/main/java/de/idrinth/stellaris/modtools/persistence/PersistenceProvider.java
// public class PersistenceProvider {
// 
//     private final EntityManagerFactory entityManager;
// 
//     public EntityManager get() {
//         return entityManager.createEntityManager();
//     }
// 
//     public PersistenceProvider() {
//         entityManager = Persistence.createEntityManagerFactory("de.idrinth_Stellaris.ModTools");
//     }
// }


import de.idrinth.stellaris.modtools.gui.ProgressElementGroup;
import de.idrinth.stellaris.modtools.persistence.PersistenceProvider;
import java.util.ConcurrentModificationException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
 * Copyright (C) 2017 Björn Büttner
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.idrinth.stellaris.modtools.process;


public class Queue implements ProcessHandlingQueue {

    private final ExecutorService executor;
    private final List<Future<?>> futures = new LinkedList<>();
    private final List<String> known = new LinkedList<>();
    private final Callable callable;
    private final ProgressElementGroup progress;
    private final PersistenceProvider persistence;
    private final DataInitializer initialDataProvider;

// Path: src/main/java/de/idrinth/stellaris/modtools/gui/ProgressElementGroup.java
// public interface ProgressElementGroup {
// 
//     void addToStepLabels(String text);
// 
//     void update(int current, int maximum);
//     
// }
// 
// Path: src/main/java/de/idrinth/stellaris/modtools/persistence/PersistenceProvider.java
// public class PersistenceProvider {
// 
//     private final EntityManagerFactory entityManager;
// 
//     public EntityManager get() {
//         return entityManager.createEntityManager();
//     }
// 
//     public PersistenceProvider() {
//         entityManager = Persistence.createEntityManagerFactory("de.idrinth_Stellaris.ModTools");
//     }
// }


// Path: src/main/java/de/idrinth/stellaris/modtools/process/Queue.java
import de.idrinth.stellaris.modtools.gui.ProgressElementGroup;
import de.idrinth.stellaris.modtools.persistence.PersistenceProvider;
import java.util.ConcurrentModificationException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * Copyright (C) 2017 Björn Büttner
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.idrinth.stellaris.modtools.process;


public class Queue implements ProcessHandlingQueue {

    private final ExecutorService executor;
    private final List<Future<?>> futures = new LinkedList<>();
    private final List<String> known = new LinkedList<>();
    private final Callable callable;
    private final ProgressElementGroup progress;
    private final PersistenceProvider persistence;
    private final DataInitializer initialDataProvider;

    public Queue(DataInitializer initialDataProvider, Callable callable, ProgressElementGroup progress, String label, PersistenceProvider persistence) {