90 lines
2.9 KiB
Java
90 lines
2.9 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;
|
|
}
|
|
}
|