package de.wwwu.awolf.presenter.io; import com.opencsv.CSVWriter; import de.wwwu.awolf.model.Line; import de.wwwu.awolf.model.communication.Data; import de.wwwu.awolf.model.communication.ExportData; import de.wwwu.awolf.model.communication.SubscriberType; import de.wwwu.awolf.presenter.util.Logging; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.concurrent.Flow; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. * * @Author: Armin Wolf * @Email: a_wolf28@uni-muenster.de * @Date: 03.08.2017. */ public class DataExporter implements Flow.Publisher { private List lines; private File file; private Flow.Subscriber subscriber; /** * Konstruktor * * @param lines Liste der Geraden * @param file Datei in die, die Informationen exportiert werden sollen */ public DataExporter(List lines, File file, Flow.Subscriber subscriber) { this.file = file; this.lines = lines; subscribe(subscriber); } /** * Diese Methode schreibt die Geraden der Form: y = mx + b, in eine Komma-Separierte Datei (CSV). * Der Aufbau der Datei ist: id, m, b. Wenn der Export beendet wurde wird die Beobachter-Klasse informiert. * In diesem Fall ist dies die Presenter Klasse. */ public void export() { CSVWriter writer = null; try { writer = new CSVWriter(new FileWriter(file), ','); String[] entries = new String[3]; for (Line line : lines) { entries[0] = line.getId(); entries[1] = line.getM().toString(); double tmp = (-1) * line.getB(); entries[2] = Double.toString(tmp); writer.writeNext(entries); } writer.close(); String[] ret = {"export", "Das aktuelle Modell wurde erfolgreich unter: " + file.getAbsolutePath() + " gespeichert."}; ExportData data = new ExportData(); data.setType(SubscriberType.EXPORT); data.setMessage("Das aktuelle Modell wurde erfolgreich unter: " + file.getAbsolutePath() + " gespeichert."); this.subscriber.onNext(data); } catch (IOException e) { Logging.logError(e.getMessage(), e); } } @Override public void subscribe(Flow.Subscriber subscriber) { this.subscriber = subscriber; } }