100 lines
3.4 KiB
Java
100 lines
3.4 KiB
Java
package presenter.io;
|
|
|
|
import com.opencsv.CSVReader;
|
|
import model.Line;
|
|
|
|
import javax.swing.*;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileReader;
|
|
import java.io.IOException;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Observable;
|
|
|
|
|
|
/**
|
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
|
*
|
|
* @Author: Armin Wolf
|
|
* @Email: a_wolf28@uni-muenster.de
|
|
* @Date: 21.06.2017.
|
|
*/
|
|
public class DataImporter extends Observable {
|
|
|
|
private File file;
|
|
private CSVReader reader;
|
|
|
|
/**
|
|
* Konstruktor
|
|
*
|
|
* @param file Datei aus der die Informationen imortiert werden sollen.
|
|
*/
|
|
public DataImporter(File file) {
|
|
//System.out.println(this.model.getLines().size()+ " die Anzahl der aktuellen Lines.");
|
|
this.file = file;
|
|
try {
|
|
|
|
this.reader = new CSVReader(new FileReader(file));
|
|
} catch (FileNotFoundException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
*/
|
|
public LinkedList<Line> run() {
|
|
LinkedList<Line> list = new LinkedList<>();
|
|
try {
|
|
List<String[]> lines = reader.readAll();
|
|
int counter = 0;
|
|
String[] result = {"import", lines.size() + "", ""};
|
|
//System.out.println("+-------------------------------------------------------------------------------+");
|
|
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] + "");
|
|
if (!list.contains(line)) {
|
|
list.add(line);
|
|
}
|
|
setChanged();
|
|
counter++;
|
|
result[2] = counter + "";
|
|
Thread.sleep(10);
|
|
notifyObservers(result);
|
|
} 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 + "");
|
|
if (!list.contains(line)) {
|
|
list.add(line);
|
|
}
|
|
setChanged();
|
|
counter++;
|
|
result[2] = counter + "";
|
|
Thread.sleep(10);
|
|
notifyObservers(result);
|
|
} else {
|
|
JOptionPane.showMessageDialog(null, "Diese Datei kann nicht importiert werden." +
|
|
"Es müssen mindestens zwei Spalten enthalten sein (x,y).", "Fehler bei der Eingabe", JOptionPane.ERROR_MESSAGE);
|
|
return null;
|
|
}
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return list;
|
|
}
|
|
|
|
}
|