algorithms-for-computing-li.../LinearRegressionTool/src/main/java/de/wwwu/awolf/presenter/io/DataExporter.java

77 lines
2.5 KiB
Java

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<Data> {
private List<Line> lines;
private File file;
private Flow.Subscriber<? super Data> subscriber;
/**
* Konstruktor
*
* @param lines Liste der Geraden
* @param file Datei in die, die Informationen exportiert werden sollen
*/
public DataExporter(List<Line> lines, File file, Flow.Subscriber<Data> 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<? super Data> subscriber) {
this.subscriber = subscriber;
}
}