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 run() { LinkedList list = new LinkedList<>(); try { List 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; } }