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

89 lines
3.0 KiB
Java

package de.wwwu.awolf.presenter.data.io;
import com.opencsv.CSVReader;
import de.wwwu.awolf.model.Line;
import de.wwwu.awolf.presenter.util.Logging;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
/**
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
*
* @Author: Armin Wolf
* @Email: a_wolf28@uni-muenster.de
* @Date: 21.06.2017.
*/
public class DataImporter implements Callable<Set<Line>> {
private CSVReader reader;
/**
* Konstruktor
*
* @param file Datei aus der die Informationen imortiert werden sollen.
*/
public DataImporter(File file) {
try {
this.reader = new CSVReader(new FileReader(file));
} catch (FileNotFoundException e) {
Logging.logError(e.getMessage(), e);
}
}
/**
* Diese Methode importiert liest zeile für zeile die Daten aus der Datei und baut eine Liste von Geraden auf. Dabei wird auf die richtige Form geachtet. Falls die Datei nicht, mindestens zwei
* Spalten enthält wird ein Fehler signalisiert und der Import wird abgebrochen.
*
* @return Liste der Geraden
*/
@Override
public Set<Line> call() throws Exception {
Set<Line> list = new HashSet<>();
try {
List<String[]> lines = reader.readAll();
int counter = 0;
String[] result = {"import", lines.size() + "", ""};
for (String[] nextLine : lines) {
if (nextLine.length == 3) {
double x = Double.parseDouble(nextLine[1]);
double y = Double.parseDouble(nextLine[2]) * (-1);
Line line = new Line(x, y);
line.setId(nextLine[0] + "");
list.add(line);
counter++;
result[2] = counter + "";
Thread.sleep(10);
} else if (nextLine.length == 2) {
double x = Double.parseDouble(nextLine[1]);
double y = Double.parseDouble(nextLine[2]) * (-1);
Line line = new Line(x, y);
line.setId(counter + "");
list.add(line);
counter++;
result[2] = counter + "";
Thread.sleep(10);
} else {
Logging.logWarning(
"Diese Datei kann nicht importiert werden. Es müssen mindestens zwei Spalten enthalten sein (x,y). Fehler bei der Eingabe");
return null;
}
}
} catch (IOException e) {
Logging.logError(e.getMessage(), e);
} catch (InterruptedException e) {
Logging.logError(e.getMessage(), e);
Thread.currentThread().interrupt();
}
return list;
}
}