package de.wwwu.awolf.presenter.data; import de.wwwu.awolf.model.Line; import de.wwwu.awolf.presenter.AbstractPresenter; import de.wwwu.awolf.presenter.data.generator.CircleDatasetGenerator; import de.wwwu.awolf.presenter.data.generator.CloudDatasetGenerator; import de.wwwu.awolf.presenter.data.generator.LineDatasetGenerator; import de.wwwu.awolf.presenter.data.io.DataExporter; import de.wwwu.awolf.presenter.data.io.DataImporter; import de.wwwu.awolf.presenter.util.Logging; import java.io.File; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; public class DataProvider { private final AbstractPresenter presenter; public DataProvider(AbstractPresenter presenter) { this.presenter = presenter; } public List getData(final File file) { //Presenter soll die Klasse überwachen ExecutorCompletionService> completionService = new ExecutorCompletionService<>(this.presenter.getExecutor()); completionService.submit(new DataImporter(file)); //wait until future is ready try { return completionService.take().get(); } catch (InterruptedException | ExecutionException e) { Logging.logError("Interrupted while importing... ", e); Thread.currentThread().interrupt(); return Collections.emptyList(); } } public List getData(final DataType type, final int dataSize) { //Presenter soll die Klasse überwachen ExecutorCompletionService> completionService = new ExecutorCompletionService<>(this.presenter.getExecutor()); switch (type) { case CIRCLE: completionService.submit(new CircleDatasetGenerator(dataSize)); break; case LINE: completionService.submit(new LineDatasetGenerator(dataSize)); break; case CLOUD: completionService.submit(new CloudDatasetGenerator(dataSize)); break; default: return Collections.emptyList(); } try { return completionService.take().get(); } catch (InterruptedException | ExecutionException e) { Logging.logError("Interrupted while generating... ", e); Thread.currentThread().interrupt(); return Collections.emptyList(); } } public void exportData(File file, List lines) { this.presenter.getExecutor().submit(new DataExporter(lines, file)); } public enum DataType { CLOUD, LINE, CIRCLE } }