Compare commits

...

6 Commits
1.1.2 ... 1.4.1

20 changed files with 524 additions and 230 deletions

View File

@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="org.apache.pdfbox:pdfbox:1.8.9" type="repository">
<properties maven-id="org.apache.pdfbox:pdfbox:1.8.9" />
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/pdfbox/1.8.9/pdfbox-1.8.9.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/fontbox/1.8.9/fontbox-1.8.9.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/jempbox/1.8.9/jempbox-1.8.9.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -107,3 +107,6 @@ bewertung = Bewertung
bewertungmsg = Bitte die Bewertung zwischen 0 und 5 eingeben bewertungmsg = Bitte die Bewertung zwischen 0 und 5 eingeben
bewertungeror = Bitte nur Bewertungen von 0 und 5 eingeben bewertungeror = Bitte nur Bewertungen von 0 und 5 eingeben
bewertungerror2 = Bitte nur Zahlen zum Bewerten bewertungerror2 = Bitte nur Zahlen zum Bewerten
copybtn = Kopieren
rating = Bewertung

View File

@ -108,3 +108,6 @@ bewertung = Rating
bewertungmsg = Please enter a rating from 0 to 5 bewertungmsg = Please enter a rating from 0 to 5
bewertungeror = Please enter only a rating from 0 to 5 bewertungeror = Please enter only a rating from 0 to 5
bewertungerror2 = Please only enter numbers for rating bewertungerror2 = Please only enter numbers for rating
copybtn = Copy
rating = Rating

View File

@ -56,7 +56,6 @@ public class DirectionMap {
* @throws IOException Fehler beim Get der Map * @throws IOException Fehler beim Get der Map
*/ */
private Image getMap(String size) throws IOException { private Image getMap(String size) throws IOException {
System.out.println("URL: " + "https://www.mapquestapi.com/staticmap/v5/map?session="+this.sessionId+"&size="+size+"&key="+ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "map", "key"));
return HttpHelper.httpGetImage("https://www.mapquestapi.com/staticmap/v5/map?session="+this.sessionId+"&size="+size+"&key="+ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "map", "key")); return HttpHelper.httpGetImage("https://www.mapquestapi.com/staticmap/v5/map?session="+this.sessionId+"&size="+size+"&key="+ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "map", "key"));
} }

View File

@ -29,9 +29,9 @@ public class Exporter {
*/ */
public void doExport() throws IOException { public void doExport() throws IOException {
ProgressBar progressBar = new ProgressBar("Export..."); ProgressBar progressBar = new ProgressBar("Export...");
int step = progressBar.getProgressSize(4, 100);
ArrayList<Tour> data = new DbConnect().getAllTouren();
ArrayList<Tour> data = new DbConnect().getAllTouren(progressBar, 15);
int step = progressBar.getProgressSize(4, 100);
progressBar.addProgress(step); progressBar.addProgress(step);
FileWriter fileWriter = new FileWriter(EinheitenAdder.addJson(this.path)); FileWriter fileWriter = new FileWriter(EinheitenAdder.addJson(this.path));
progressBar.addProgress(step); progressBar.addProgress(step);
@ -45,20 +45,18 @@ public class Exporter {
/** /**
* Führt den Imput aus: File holen, Daten in db erstellen * Führt den Imput aus: File holen, Daten in db erstellen
*/ */
public void doImport() { public void doImport(ProgressBar progressBar, int progressMax) {
ProgressBar progressBar = new ProgressBar("Import...");
try { try {
ArrayList<Tour> touren = JsonHelper.getTourenFromJson(new FileReader(EinheitenAdder.addJson(this.path))); ArrayList<Tour> touren = JsonHelper.getTourenFromJson(new FileReader(EinheitenAdder.addJson(this.path)));
DbConnect dbConnect = new DbConnect(); DbConnect dbConnect = new DbConnect();
ArrayList<Tour> allTours = dbConnect.getAllTouren(); ArrayList<Tour> allTours = dbConnect.getAllTouren(progressBar, 15);
progressBar.addProgress(2); int size = progressBar.getProgressSize(allTours.size(), 35);
int size = progressBar.getProgressSize(allTours.size(), 25);
allTours.forEach(t -> { allTours.forEach(t -> {
TourPlaner.delTour(t.getName()); TourPlaner.delTour(t.getName());
progressBar.addProgress(size); progressBar.addProgress(size);
}); });
int finalSize = progressBar.getProgressSize(touren.size() * 3, 100); int finalSize = progressBar.getProgressSize(touren.size() * 3, progressMax);
for (Tour tour: touren) { for (Tour tour: touren) {
new DirectionMap(tour.getStart(), tour.getZiel(), tour.getName()); new DirectionMap(tour.getStart(), tour.getZiel(), tour.getName());
progressBar.addProgress(finalSize); progressBar.addProgress(finalSize);
@ -72,8 +70,8 @@ public class Exporter {
} }
} catch (IOException e) { } catch (IOException e) {
LogHelper.error(e); LogHelper.error(e);
progressBar.setProgress(100); progressBar.setProgress(progressMax);
} }
progressBar.setProgress(100); progressBar.setProgress(progressMax);
} }
} }

View File

@ -24,6 +24,7 @@ public class LogHelper{
getLog(name).error(msg); getLog(name).error(msg);
} }
/** /**
* Log info in file und Console * Log info in file und Console
* @param e Exception * @param e Exception

View File

@ -7,6 +7,7 @@ import tourplaner.object.Log;
import tourplaner.object.Tour; import tourplaner.object.Tour;
import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.PdfWriter;
import tourplaner.ui.ProgressBar;
import java.awt.*; import java.awt.*;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -22,6 +23,8 @@ import java.util.Date;
* *
* iText 4 ist gratis verfügbar, siehe: * iText 4 ist gratis verfügbar, siehe:
* https://github.com/ymasory/iText-4.2.0 * https://github.com/ymasory/iText-4.2.0
*
* https://www.vogella.com/tutorials/JavaPDF/article.html
*/ */
public class Reporter { public class Reporter {
@ -33,8 +36,8 @@ public class Reporter {
/** /**
* Erstellt den Summary Report * Erstellt den Summary Report
*/ */
public static void sumReport(){ public static void sumReport(ProgressBar progressBar, int maxLevel){
ArrayList<Tour> tours = TourPlaner.getAllTours(); ArrayList<Tour> tours = TourPlaner.getAllTours(progressBar, maxLevel);
String file = ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "report", "path") + "summary.pdf"; String file = ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "report", "path") + "summary.pdf";
try { try {
Document document = new Document(); Document document = new Document();

View File

@ -1,5 +1,6 @@
package tourplaner.business; package tourplaner.business;
import javafx.collections.ObservableList;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import tourplaner.data.DbConnect; import tourplaner.data.DbConnect;
import tourplaner.object.Log; import tourplaner.object.Log;
@ -11,6 +12,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* Haupt Logik des Tourplaners * Haupt Logik des Tourplaners
@ -28,8 +31,8 @@ public class TourPlaner{
* Holt alle touren aus der DB * Holt alle touren aus der DB
* @return Alle touren als ArrayList * @return Alle touren als ArrayList
*/ */
public static ArrayList<Tour> getAllTours(){ public static ArrayList<Tour> getAllTours(ProgressBar progressBar, int maxLevel){
return new DbConnect().getAllTouren(); return new DbConnect().getAllTouren(progressBar, maxLevel);
} }
/** /**
@ -69,20 +72,32 @@ public class TourPlaner{
* Fügt eine Tour hinzu * Fügt eine Tour hinzu
* @param newTour Neue Tour * @param newTour Neue Tour
* @param progressBar Aktuelle Progressbar * @param progressBar Aktuelle Progressbar
* @param progressMax Maximale anzeige der Progress bar
* @return false bei error * @return false bei error
* @throws IOException Fehler beim hinzufügen der Tour * @throws IOException Fehler beim hinzufügen der Tour
*/ */
public static boolean addTour(Tour newTour, ProgressBar progressBar) throws IOException { public static boolean addTourMax(Tour newTour, ProgressBar progressBar, int progressMax) throws IOException {
int step = progressBar.getProgressSize(2, 100); int step = progressBar.getProgressSize(2, progressMax);
DirectionMap directionMap = new DirectionMap(newTour.getStart(), newTour.getZiel(), newTour.getName()); DirectionMap directionMap = new DirectionMap(newTour.getStart(), newTour.getZiel(), newTour.getName());
progressBar.addProgress(step); progressBar.addProgress(step);
newTour.setDauer(directionMap.getDauer()+""); newTour.setDauer(directionMap.getDauer()+"");
newTour.setStrecke(directionMap.getStrecke()); newTour.setStrecke(directionMap.getStrecke());
boolean ret = new DbConnect().addTour(newTour); boolean ret = new DbConnect().addTour(newTour);
progressBar.setProgress(100); progressBar.setProgress(progressMax);
return ret; return ret;
} }
/**
* Fügt eine Tour hinzu
* @param newTour Neue Tour
* @param progressBar Aktuelle Progressbar
* @return false bei error
* @throws IOException Fehler beim hinzufügen der Tour
*/
public static boolean addTour(Tour newTour, ProgressBar progressBar) throws IOException {
return addTourMax(newTour, progressBar, 100);
}
/** /**
* Path zu dem Bild für die GUI * Path zu dem Bild für die GUI
* @param tourname Name der Tour * @param tourname Name der Tour
@ -165,14 +180,42 @@ public class TourPlaner{
* @param tourname Name der zu suchen ist * @param tourname Name der zu suchen ist
* @return Alle touren die auf den Suchterm passen * @return Alle touren die auf den Suchterm passen
*/ */
public static ArrayList<Tour> sucheTour(String tourname){ public static ArrayList<Tour> sucheTour(String tourname, ProgressBar progressBar, int maxProgress){
ArrayList<Tour> touren = new ArrayList<>(); ArrayList<Tour> touren = new ArrayList<>();
getAllTours().forEach(t ->{ getAllTours(progressBar, maxProgress).forEach(t ->{
if(t.getName().toLowerCase(Locale.ROOT).contains(tourname.toLowerCase())){ ArrayList<Log> logs = t.getLogs();
ArrayList<String> bemerkungen = new ArrayList<>();
for (Log l:logs) {
bemerkungen.add(l.getBemerkung().toLowerCase(Locale.ROOT));
}
bemerkungen.forEach(b -> {
if(b.contains(tourname.toLowerCase(Locale.ROOT))){
touren.add(t); touren.add(t);
} }
}); });
if(bemerkungen.contains(tourname.toLowerCase()) || t.getZiel().toLowerCase(Locale.ROOT).contains(tourname.toLowerCase()) || t.getName().toLowerCase(Locale.ROOT).contains(tourname.toLowerCase()) || t.getStart().toLowerCase(Locale.ROOT).contains(tourname.toLowerCase())){
if(!touren.contains(t)) {
touren.add(t);
}
}
});
return touren; return touren;
} }
/**
* Erzeugt eine Neue Log id
* @param logData Alle log daten
* @return Neue log id
*/
public static String newLogId(ObservableList<Log> logData){
AtomicReference<String> newId = new AtomicReference<>();
newId.set(UUID.randomUUID().toString());
logData.forEach(ss -> {
if (ss.getId().equals(newId.get())) {
newId.set(UUID.randomUUID().toString());
} }
});
return newId.get();
}
}

View File

@ -27,15 +27,12 @@ public class DbConnect {
/** /**
* Erstellt alle Tabellen die für den Betrieb der Software bennötigt werden * Erstellt alle Tabellen die für den Betrieb der Software bennötigt werden
* @return True bei erfolg, sonst error
*/ */
public boolean init() { public void init() {
ArrayList<Boolean> errors = new ArrayList<>(); PostgresHelper.executeUpdateNoLog("create table tour ( tourname varchar not null, dauer decimal, mapjson varchar, start varchar, ziel varchar, strecke decimal);");
errors.add(PostgresHelper.executeUpdateMessage("create table tour ( tourname varchar not null, dauer decimal, mapjson varchar, start varchar, ziel varchar, strecke decimal);", "Tour Table created")); PostgresHelper.executeUpdateNoLog("create unique index tour_tourname_uindex on tour (tourname);");
errors.add(PostgresHelper.executeUpdateMessage("create unique index tour_tourname_uindex on tour (tourname);", "Tour Table unique created")); PostgresHelper.executeUpdateNoLog("alter table tour add constraint tour_pk primary key (tourname);");
errors.add(PostgresHelper.executeUpdateMessage("alter table tour add constraint tour_pk primary key (tourname);", "Tour Table primary created")); PostgresHelper.executeUpdateNoLog("create table log(tourname varchar constraint log_tour_tourname_fk references tour,id varchar,bemerkung varchar,datum date,strecke decimal,avg decimal,hightmeter decimal,pause decimal,gegangen decimal,dauer decimal,rating varchar);");
errors.add(PostgresHelper.executeUpdateMessage("create table log(tourname varchar constraint log_tour_tourname_fk references tour,id varchar,bemerkung varchar,datum date,strecke decimal,avg decimal,hightmeter decimal,pause decimal,gegangen decimal,dauer decimal,rating varchar);", "Log Table created"));
return !errors.contains(false);
} }
@ -125,7 +122,7 @@ public class DbConnect {
this.c.close(); this.c.close();
return logs; return logs;
} catch (Exception e) { } catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage()); LogHelper.error(e);
return null; return null;
} }
} }
@ -139,8 +136,6 @@ public class DbConnect {
*/ */
public boolean addLog(String tourname, Log log){ public boolean addLog(String tourname, Log log){
if(Double.isInfinite(log.getAvgspeed())) log.setAvgspeed(-1.0); if(Double.isInfinite(log.getAvgspeed())) log.setAvgspeed(-1.0);
System.out.println("INSERT INTO public.log (tourname, id, bemerkung, datum, strecke, avg, hightmeter, pause, gegangen, dauer, rating) VALUES ('"+tourname+"', '"+log.getId()+"', '"+log.getBemerkung()+"', '"+log.getDatum()+"', "
+log.getStrecke()+", "+log.getAvgspeed()+", "+log.getHightmeter()+", "+log.getPause()+", "+log.getGegangen()+", "+log.getDauer()+",'"+log.getRating()+"')");
return PostgresHelper.executeUpdate("INSERT INTO public.log (tourname, id, bemerkung, datum, strecke, avg, hightmeter, pause, gegangen, dauer, rating) VALUES ('"+tourname+"', '"+log.getId()+"', '"+log.getBemerkung()+"', '"+log.getDatum()+"', " return PostgresHelper.executeUpdate("INSERT INTO public.log (tourname, id, bemerkung, datum, strecke, avg, hightmeter, pause, gegangen, dauer, rating) VALUES ('"+tourname+"', '"+log.getId()+"', '"+log.getBemerkung()+"', '"+log.getDatum()+"', "
+log.getStrecke()+", "+log.getAvgspeed()+", "+log.getHightmeter()+", "+log.getPause()+", "+log.getGegangen()+", "+log.getDauer()+",'"+log.getRating()+"')"); +log.getStrecke()+", "+log.getAvgspeed()+", "+log.getHightmeter()+", "+log.getPause()+", "+log.getGegangen()+", "+log.getDauer()+",'"+log.getRating()+"')");
} }
@ -172,17 +167,18 @@ public class DbConnect {
/** /**
* Holt alle Touren aus der Datenbank * Holt alle Touren aus der Datenbank
* @param progressBar Aktuelle Progress bar
* @param maxLevel Maximales level der progress bar
* @return Null bei fehler, sonst eine List aus den IDs * @return Null bei fehler, sonst eine List aus den IDs
*/ */
public ArrayList<Tour> getAllTouren() { public ArrayList<Tour> getAllTouren(ProgressBar progressBar, int maxLevel) {
this.c = PostgresHelper.con(); this.c = PostgresHelper.con();
String tourname, mapjson, start, ziel; String tourname, mapjson, start, ziel;
double dauer, strecke; double dauer, strecke;
ArrayList<Tour> touren = new ArrayList<>(); ArrayList<Tour> touren = new ArrayList<>();
ProgressBar progressBar = new ProgressBar("Get...");
try { try {
int tourSize = getTourSize(); int tourSize = getTourSize();
int step = progressBar.getProgressSize(tourSize, 100); int step = progressBar.getProgressSize(tourSize, maxLevel);
stmt = this.c.createStatement(); stmt = this.c.createStatement();
ResultSet rs = stmt.executeQuery("select * from tour;"); ResultSet rs = stmt.executeQuery("select * from tour;");
while (rs.next()) { while (rs.next()) {
@ -196,18 +192,18 @@ public class DbConnect {
touren.add(new Tour(tourname, dauer + "", mapjson, strecke, start, ziel, getLogs(tourname))); touren.add(new Tour(tourname, dauer + "", mapjson, strecke, start, ziel, getLogs(tourname)));
progressBar.addProgress(step); progressBar.addProgress(step);
}else { }else {
progressBar.setProgress(100); progressBar.setProgress(maxLevel);
return null; return null;
} }
} }
progressBar.setProgress(100); progressBar.setProgress(maxLevel);
rs.close(); rs.close();
stmt.close(); stmt.close();
this.c.close(); this.c.close();
return touren; return touren;
} catch (Exception e) { } catch (Exception e) {
LogHelper.error(e); LogHelper.error(e);
progressBar.setProgress(100); progressBar.setProgress(maxLevel);
return null; return null;
} }
} }
@ -244,7 +240,7 @@ public class DbConnect {
this.c.close(); this.c.close();
return touren; return touren;
} catch (Exception e) { } catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage()); LogHelper.error(e);
return null; return null;
} }
} }

View File

@ -6,6 +6,7 @@ import tourplaner.business.LogHelper;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
/** /**
@ -20,8 +21,6 @@ public class PostgresHelper {
Connection c = null; Connection c = null;
try { try {
Class.forName("org.postgresql.Driver"); Class.forName("org.postgresql.Driver");
System.out.println("jdbc:postgresql://" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "url") + ":" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "port") + "/" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "dbname")+
ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "user")+ ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "pw"));
c = DriverManager c = DriverManager
.getConnection("jdbc:postgresql://" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "url") + ":" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "port") + "/" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "dbname"), .getConnection("jdbc:postgresql://" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "url") + ":" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "port") + "/" + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "dbname"),
ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "user"), ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "pw")); ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "user"), ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "db", "pw"));
@ -48,17 +47,38 @@ public class PostgresHelper {
* @return True bei erfolg, sonst false * @return True bei erfolg, sonst false
*/ */
public static boolean executeUpdate(String sql){ public static boolean executeUpdate(String sql){
Connection c = con();
Statement stmt;
try { try {
stmt = c.createStatement(); exUpdate(sql);
stmt.executeUpdate(sql); } catch (SQLException e) {
stmt.close();
c.close();
} catch (Exception e) {
LogHelper.error(e.getMessage(), e.getClass().getName()); LogHelper.error(e.getMessage(), e.getClass().getName());
return false; return false;
} }
return true; return true;
} }
/**
* Führt ein Sql statement ohne rückgabe aus
* @param sql Sql command
* @return True bei erfolg, sonst false
* @throws SQLException Fehler beim ausführen
*/
private static boolean exUpdate(String sql) throws SQLException {
Connection c = con();
Statement stmt;
stmt = c.createStatement();
stmt.executeUpdate(sql);
stmt.close();
c.close();
return true;
}
public static boolean executeUpdateNoLog(String sql){
try {
exUpdate(sql);
return true;
}catch (Exception e){
return false;
}
}
} }

View File

@ -23,6 +23,10 @@ public class Log {
} }
} }
public void setId(String id){
this.id = id;
}
public String getRating() { public String getRating() {
return rating; return rating;
} }

View File

@ -9,26 +9,41 @@ import static org.junit.jupiter.api.Assertions.*;
class EinheitenAdderTest { class EinheitenAdderTest {
/**
* Fügt die Einheit für Meter an
*/
@Test @Test
void addMeter() { void addMeter() {
assertEquals(EinheitenAdder.addMeter("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "meter")); assertEquals(EinheitenAdder.addMeter("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "meter"));
} }
/**
* Fügt die Einheit für die Geschwindigkeit an
*/
@Test @Test
void addSpeed() { void addSpeed() {
assertEquals(EinheitenAdder.addSpeed("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "speed")); assertEquals(EinheitenAdder.addSpeed("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "speed"));
} }
/**
* Fügt die Einheit für KM an
*/
@Test @Test
void addKm() { void addKm() {
assertEquals(EinheitenAdder.addKm("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "strecke")); assertEquals(EinheitenAdder.addKm("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "strecke"));
} }
/**
* Fügt die Einheit für die Minuten an
*/
@Test @Test
void addMinuten() { void addMinuten() {
assertEquals(EinheitenAdder.addMinuten("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "zeit")); assertEquals(EinheitenAdder.addMinuten("1"), "1"+ " " + ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "einheiten", "zeit"));
} }
/**
* Fügt am ende .json hinzu
*/
@Test @Test
void addJson() { void addJson() {
assertEquals(EinheitenAdder.addJson("1"), "1" + ".json"); assertEquals(EinheitenAdder.addJson("1"), "1" + ".json");

View File

@ -19,16 +19,25 @@ class LogTest {
this.log = new Log("1", 2, this.date, 3, "4", 5, 6, "7"); this.log = new Log("1", 2, this.date, 3, "4", 5, 6, "7");
} }
/**
* Versucht das Rating zu holen
*/
@Test @Test
void getRating() { void getRating() {
assertEquals(this.log.getRating(), "7"); assertEquals(this.log.getRating(), "7");
} }
/**
* Versucht die Bemerkung zu holen
*/
@Test @Test
void getBemerkung() { void getBemerkung() {
assertEquals(this.log.getBemerkung(), "4"); assertEquals(this.log.getBemerkung(), "4");
} }
/**
* Versucht die Durchschnitts Geschwindigkeit zu holen
*/
@Test @Test
void getAvgspeed() { void getAvgspeed() {
double act = -45; double act = -45;
@ -36,36 +45,57 @@ class LogTest {
} }
/**
* Versucht die Höhenmeter zu holen
*/
@Test @Test
void getHightmeter() { void getHightmeter() {
assertEquals(this.log.getHightmeter(), 5); assertEquals(this.log.getHightmeter(), 5);
} }
/**
* Versucht die Dauer der Pause zu holen
*/
@Test @Test
void getPause() { void getPause() {
assertEquals(this.log.getPause(), 6); assertEquals(this.log.getPause(), 6);
} }
/**
* Versucht die gegangenen Meter zu holen
*/
@Test @Test
void getGegangen() { void getGegangen() {
assertEquals(this.log.getGegangen(), 2-6); assertEquals(this.log.getGegangen(), 2-6);
} }
/**
* Versucht die Log ID zu holen
*/
@Test @Test
void getId() { void getId() {
assertEquals(this.log.getId(), "1"); assertEquals(this.log.getId(), "1");
} }
/**
* Versucht die Dauer des Eintrages zu holen
*/
@Test @Test
void getDauer() { void getDauer() {
assertEquals(this.log.getDauer(), 2); assertEquals(this.log.getDauer(), 2);
} }
/**
* Versucht das Datum des Eintrages zu holen
*/
@Test @Test
void getDatum() { void getDatum() {
assertEquals(this.log.getDatum(), this.date); assertEquals(this.log.getDatum(), this.date);
} }
/**
* Versucht die Strecke zu holen
*/
@Test @Test
void getStrecke() { void getStrecke() {
assertEquals(this.log.getStrecke(), 3); assertEquals(this.log.getStrecke(), 3);

View File

@ -54,21 +54,33 @@ class TourTest {
assertEquals(this.tour.getDauer(), "String dauer"); assertEquals(this.tour.getDauer(), "String dauer");
} }
/**
* Versucht die Startposition zu holen
*/
@Test @Test
void getStrecke() { void getStrecke() {
assertEquals(this.tour.getStrecke(), 2); assertEquals(this.tour.getStrecke(), 2);
} }
/**
* Versucht die Startposition zu holen
*/
@Test @Test
void getName() { void getName() {
assertEquals(this.tour.getName(), "String name"); assertEquals(this.tour.getName(), "String name");
} }
/**
* Versucht die Startposition zu holen
*/
@Test @Test
void getStart() { void getStart() {
assertEquals(this.tour.getStart(), "String start"); assertEquals(this.tour.getStart(), "String start");
} }
/**
* Versucht die Startposition zu holen
*/
@Test @Test
void getZiel() { void getZiel() {
assertEquals(this.tour.getZiel(), "String ziel"); assertEquals(this.tour.getZiel(), "String ziel");

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tourplaner.ui.TourDetailsTabController">
<children>
<TableView fx:id="beschreibungTableView" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<columns>
<TableColumn fx:id="nameCol" minWidth="100.0" prefWidth="-1.0" text="Tourname" />
<TableColumn fx:id="dauerCol" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" text="Dauer" />
<TableColumn fx:id="streckeCol" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" text="Strecke" />
<TableColumn fx:id="startCol" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" text="Startpunk" />
<TableColumn fx:id="zielCol" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" text="Zielpunkt" />
</columns>
</TableView>
</children>
</AnchorPane>

View File

@ -39,8 +39,7 @@
<?import javafx.scene.paint.*?> <?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<VBox prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" <VBox prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tourplaner.ui.TourplanerController">
fx:controller="tourplaner.ui.TourplanerController">
<MenuBar VBox.vgrow="NEVER"> <MenuBar VBox.vgrow="NEVER">
<Menu fx:id="menueFile" mnemonicParsing="false" text="Datei"> <Menu fx:id="menueFile" mnemonicParsing="false" text="Datei">
<MenuItem fx:id="reportsummary" mnemonicParsing="false" onAction="#reportSum" text="Report Summary" /> <MenuItem fx:id="reportsummary" mnemonicParsing="false" onAction="#reportSum" text="Report Summary" />
@ -52,15 +51,11 @@
<MenuItem fx:id="menueexport" mnemonicParsing="false" onAction="#exportBtn" text="Export" /> <MenuItem fx:id="menueexport" mnemonicParsing="false" onAction="#exportBtn" text="Export" />
</Menu> </Menu>
<Menu fx:id="menueoptionen" mnemonicParsing="false" text="Optionen"> <Menu fx:id="menueoptionen" mnemonicParsing="false" text="Optionen">
<CheckMenuItem fx:id="openmap" mnemonicParsing="false" onAction="#openmapaction" <CheckMenuItem fx:id="openmap" mnemonicParsing="false" onAction="#openmapaction" text="Map automatisch öffnen" />
text="Map automatisch öffnen"/> <CheckMenuItem fx:id="openpdf" mnemonicParsing="false" onAction="#openpdfaction" text="Report automatisch öffnen" />
<CheckMenuItem fx:id="openpdf" mnemonicParsing="false" onAction="#openpdfaction"
text="Report automatisch öffnen"/>
<Menu fx:id="menuesprachen" mnemonicParsing="false" text="Sprache"> <Menu fx:id="menuesprachen" mnemonicParsing="false" text="Sprache">
<RadioMenuItem fx:id="langdeutsch" mnemonicParsing="false" onAction="#onlangdeutsch" <RadioMenuItem fx:id="langdeutsch" mnemonicParsing="false" onAction="#onlangdeutsch" text="Deutsch" />
text="Deutsch"/> <RadioMenuItem fx:id="langenglisch" mnemonicParsing="false" onAction="#onlangenglisch" text="Englisch" />
<RadioMenuItem fx:id="langenglisch" mnemonicParsing="false" onAction="#onlangenglisch"
text="Englisch"/>
</Menu> </Menu>
</Menu> </Menu>
<Menu fx:id="menuehilfe" mnemonicParsing="false" text="Hilfe"> <Menu fx:id="menuehilfe" mnemonicParsing="false" text="Hilfe">
@ -73,29 +68,47 @@
<padding> <padding>
<Insets bottom="3.0" left="3.0" right="3.0" top="3.0" /> <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
</padding> </padding>
<AnchorPane HBox.hgrow="ALWAYS"> <HBox>
<Button fx:id="tourAdd" layoutX="58.0" mnemonicParsing="false" onAction="#addTour" text="+"/> <children>
<Label layoutX="14.0" layoutY="4.0" text="Tours"/> <Label text="Tours:">
<Button fx:id="tourDel" layoutX="89.0" mnemonicParsing="false" onAction="#delTour" text="-"/> <HBox.margin>
<Button fx:id="editTourBtn" layoutX="117.0" mnemonicParsing="false" onAction="#editTourBtn" <Insets bottom="10.0" left="10.0" right="6.0" top="10.0" />
text="Edit"/> </HBox.margin>
</AnchorPane> </Label>
<TextField fx:id="sucheInput" promptText="Suche..."/> <Button fx:id="tourAdd" mnemonicParsing="false" onAction="#addTour" text="+">
<HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin>
</Button>
<Button fx:id="tourDel" mnemonicParsing="false" onAction="#delTour" text="-">
<HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin>
</Button>
<Button fx:id="editTourBtn" mnemonicParsing="false" onAction="#editTourBtn" text="Edit">
<HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin>
</Button>
<Button fx:id="copyTourBtn" mnemonicParsing="false" onAction="#copyTour" text="Copy">
<HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin>
</Button>
</children>
</HBox>
<AnchorPane HBox.hgrow="ALWAYS" />
<TextField fx:id="sucheInput" onKeyPressed="#sucheEnter" promptText="Suche..." />
<Button fx:id="sucheButton" mnemonicParsing="false" onAction="#suche" text="Suchen" /> <Button fx:id="sucheButton" mnemonicParsing="false" onAction="#suche" text="Suchen" />
</HBox> </HBox>
<SplitPane dividerPositions="0.060133630289532294" focusTraversable="true" prefHeight="522.0" prefWidth="300.0" <SplitPane dividerPositions="0.060133630289532294" focusTraversable="true" prefHeight="522.0" prefWidth="300.0" VBox.vgrow="ALWAYS">
VBox.vgrow="ALWAYS">
<AnchorPane prefWidth="239.0"> <AnchorPane prefWidth="239.0">
<ListView fx:id="TourListView" layoutX="-1.0" onMouseClicked="#tourListSelectedItem" prefHeight="520.0" <ListView fx:id="TourListView" layoutX="-1.0" onMouseClicked="#tourListSelectedItem" prefHeight="520.0" prefWidth="190.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
prefWidth="190.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"/>
</AnchorPane> </AnchorPane>
<SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="496.0" prefWidth="620.0"> <SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="496.0" prefWidth="620.0">
<VBox prefWidth="100.0"> <VBox prefWidth="100.0">
<AnchorPane prefWidth="676.0"> <AnchorPane prefWidth="676.0">
<HBox id="HBox" alignment="CENTER_LEFT" prefHeight="7.0" prefWidth="44.0" spacing="5.0" <HBox id="HBox" alignment="CENTER_LEFT" prefHeight="7.0" prefWidth="44.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="Title:"> <Label text="Title:">
<HBox.margin> <HBox.margin>
<Insets left="10.0" /> <Insets left="10.0" />
@ -105,96 +118,64 @@
</HBox> </HBox>
</AnchorPane> </AnchorPane>
<AnchorPane prefWidth="200.0"> <AnchorPane prefWidth="200.0">
<TabPane fx:id="viewTabPane" layoutX="1.0" layoutY="69.0" prefWidth="702.0" <TabPane fx:id="viewTabPane" layoutX="1.0" layoutY="69.0" prefWidth="702.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="-67.0" AnchorPane.leftAnchor="1.0" AnchorPane.rightAnchor="1.0" AnchorPane.topAnchor="0.0">
tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="-67.0"
AnchorPane.leftAnchor="1.0" AnchorPane.rightAnchor="1.0"
AnchorPane.topAnchor="0.0">
<Tab fx:id="kartenTab" text="Karte"> <Tab fx:id="kartenTab" text="Karte">
<AnchorPane> <AnchorPane>
<ImageView fx:id="mapImageView" pickOnBounds="true" preserveRatio="true" <ImageView fx:id="mapImageView" pickOnBounds="true" preserveRatio="true" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"/>
</AnchorPane> </AnchorPane>
</Tab> </Tab>
<Tab fx:id="beschreibungTab" text="Beschreibung"> <Tab fx:id="beschreibungTab" text="Beschreibung">
<AnchorPane> <AnchorPane>
<TableView fx:id="beschreibungTableView"
maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308"
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn fx:id="nameCol" minWidth="100.0" prefWidth="-1.0"
text="Tourname"/>
<TableColumn fx:id="dauerCol" maxWidth="1.7976931348623157E308"
minWidth="100.0" prefWidth="-1.0" text="Dauer"/>
<TableColumn fx:id="streckeCol" maxWidth="1.7976931348623157E308"
minWidth="100.0" prefWidth="-1.0" text="Strecke"/>
<TableColumn fx:id="startCol" maxWidth="1.7976931348623157E308"
minWidth="100.0" prefWidth="-1.0" text="Startpunk"/>
<TableColumn fx:id="zielCol" maxWidth="1.7976931348623157E308"
minWidth="100.0" prefWidth="-1.0" text="Zielpunkt"/>
</columns>
</TableView>
</AnchorPane> </AnchorPane>
</Tab> </Tab>
</TabPane> </TabPane>
</AnchorPane> </AnchorPane>
</VBox> </VBox>
<AnchorPane prefWidth="200.0"> <AnchorPane prefWidth="200.0">
<VBox prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" <VBox prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<AnchorPane> <AnchorPane>
<HBox id="HBox" alignment="CENTER_LEFT" layoutY="2.0" prefWidth="702.0" <HBox id="HBox" alignment="CENTER_LEFT" layoutY="2.0" prefWidth="702.0" spacing="5.0" AnchorPane.bottomAnchor="-2.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="2.0">
spacing="5.0" AnchorPane.bottomAnchor="-2.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="2.0">
<padding> <padding>
<Insets bottom="3.0" left="3.0" right="3.0" top="3.0" /> <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
</padding> </padding>
<Label text="Logs:"> <Label text="Logs:">
<HBox.margin> <HBox.margin>
<Insets left="10.0"/> <Insets bottom="10.0" left="10.0" right="6.0" top="10.0" />
</HBox.margin> </HBox.margin>
</Label> </Label>
<Button mnemonicParsing="false" onAction="#addLog" text="+" <Button mnemonicParsing="false" onAction="#addLog" text="+" textAlignment="CENTER">
textAlignment="CENTER">
<HBox.margin> <HBox.margin>
<Insets/> <Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin> </HBox.margin>
</Button> </Button>
<Button fx:id="logDel" mnemonicParsing="false" onAction="#delLog" <Button fx:id="logDel" mnemonicParsing="false" onAction="#delLog" text="-" textAlignment="CENTER">
prefWidth="21.0" text="-" textAlignment="CENTER">
<HBox.margin> <HBox.margin>
<Insets/> <Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin> </HBox.margin>
</Button> </Button>
<Button fx:id="editBtn" mnemonicParsing="false" onAction="#editLogBtn" <Button fx:id="editBtn" mnemonicParsing="false" onAction="#editLogBtn" text="Edit">
text="Edit"/> <HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin></Button>
<Button fx:id="copyBtn" layoutX="112.0" layoutY="13.0" mnemonicParsing="false" onAction="#copyLogBtn" text="Copy">
<HBox.margin>
<Insets bottom="6.0" right="6.0" top="6.0" />
</HBox.margin></Button>
</HBox> </HBox>
</AnchorPane> </AnchorPane>
<AnchorPane> <AnchorPane>
<TableView fx:id="logTableView" onMouseClicked="#logItemSelected" <TableView fx:id="logTableView" onMouseClicked="#logItemSelected" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns> <columns>
<TableColumn fx:id="logDatumCol" minWidth="-1.0" prefWidth="-1.0" <TableColumn fx:id="logDatumCol" minWidth="-1.0" prefWidth="-1.0" text="Datum" />
text="Datum"/> <TableColumn fx:id="logDauerCol" minWidth="-1.0" prefWidth="-1.0" text="Dauer" />
<TableColumn fx:id="logDauerCol" minWidth="-1.0" prefWidth="-1.0" <TableColumn fx:id="logStreckeCol" minWidth="-1.0" prefWidth="-1.0" text="Entfernung" />
text="Dauer"/> <TableColumn fx:id="logAvgCol" minWidth="-1.0" prefWidth="-1.0" text="AVG Geschwindigkeit" />
<TableColumn fx:id="logStreckeCol" minWidth="-1.0" prefWidth="-1.0" <TableColumn fx:id="logHightCol" minWidth="-1.0" prefWidth="75.0" text="Höhenmeter" />
text="Entfernung"/> <TableColumn fx:id="logPauseCol" minWidth="-1.0" prefWidth="-1.0" text="Davon Pause" />
<TableColumn fx:id="logAvgCol" minWidth="-1.0" prefWidth="-1.0" <TableColumn fx:id="logGegangenCol" minWidth="-1.0" prefWidth="-1.0" text="Davon Unterwegs" />
text="AVG Geschwindigkeit"/> <TableColumn fx:id="logBemerkungCol" minWidth="-1.0" prefWidth="-1.0" text="Bemerkung" />
<TableColumn fx:id="logHightCol" minWidth="-1.0" prefWidth="75.0" <TableColumn fx:id="logRatingCol1" minWidth="-1.0" prefWidth="-1.0" text="Rating" />
text="Höhenmeter"/>
<TableColumn fx:id="logPauseCol" minWidth="-1.0" prefWidth="-1.0"
text="Davon Pause"/>
<TableColumn fx:id="logGegangenCol" minWidth="-1.0" prefWidth="-1.0"
text="Davon Unterwegs"/>
<TableColumn fx:id="logBemerkungCol" minWidth="-1.0" prefWidth="-1.0"
text="Bemerkung"/>
<TableColumn fx:id="logRatingCol1" minWidth="-1.0" prefWidth="-1.0"
text="Rating"/>
</columns> </columns>
<columnResizePolicy> <columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />

View File

@ -209,7 +209,6 @@ public class AlertHelper {
datePicker.setOnAction(event -> { datePicker.setOnAction(event -> {
LocalDate date = datePicker.getValue(); LocalDate date = datePicker.getValue();
System.out.println("Selected date: " + date);
selectedDate.set(date); selectedDate.set(date);
stage.close(); stage.close();
}); });

View File

@ -0,0 +1,73 @@
package tourplaner.ui;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import tourplaner.business.ConfigHelper;
import tourplaner.object.Tour;
import tourplaner.viewmodels.ViewModel;
import java.net.URL;
import java.util.ResourceBundle;
public class TourDetailsTabController implements Initializable {
public TableView<Tour> beschreibungTableView;
public TableColumn<Tour, String> startCol, zielCol, dauerCol, streckeCol, nameCol;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
/**
* Ladet die daten der ausgewählten tour
* @param viewModel Das aktuelle view Model
* @param selectedItem Das selected tour item
*/
public void syncTour(ViewModel viewModel, String selectedItem){
langToFxml();
try {
beschreibungTableView.getItems().clear(); //Leert die Table View komplett
}catch (NullPointerException e){
beschreibungTableView.setItems(viewModel.getTourData(new ProgressBar("Load"), 100));
}
beschreibungTableView.getItems().add(viewModel.getTour(selectedItem));
}
/**
* Löscht die Tour daten
*/
public void delTour(){
this.beschreibungTableView.getItems().clear(); //löscht alles aus der tabelle
}
/**
* Schreibt das keine Tour selected ist
*/
public void keineSelected(){
beschreibungTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
}
/**
* Setzt die Table view Cell Value Factory
*/
public void tourListSelectItem(){
this.startCol.setCellValueFactory(new PropertyValueFactory<>("start"));
zielCol.setCellValueFactory(new PropertyValueFactory<>("ziel"));
dauerCol.setCellValueFactory(new PropertyValueFactory<>("dauer"));
streckeCol.setCellValueFactory(new PropertyValueFactory<>("strecke"));
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
}
/**
* Setzt die aktuell gewählte sprache auf die Table view
*/
public void langToFxml(){
this.nameCol.setText(ConfigHelper.getLangIniString("fname"));
this.streckeCol.setText(ConfigHelper.getLangIniString("fstrecke"));
this.dauerCol.setText(ConfigHelper.getLangIniString("fdauer"));
this.zielCol.setText(ConfigHelper.getLangIniString("fziel"));
this.startCol .setText(ConfigHelper.getLangIniString("fstart"));
}
}

View File

@ -1,21 +1,25 @@
package tourplaner.ui; package tourplaner.ui;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.geometry.Orientation; import javafx.geometry.Orientation;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import tourplaner.Main;
import tourplaner.business.ConfigHelper; import tourplaner.business.ConfigHelper;
import tourplaner.business.LogHelper; import tourplaner.business.LogHelper;
import tourplaner.object.Log; import tourplaner.object.Log;
import tourplaner.object.Tour;
import tourplaner.viewmodels.ViewModel; import tourplaner.viewmodels.ViewModel;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicInteger;
public class TourplanerController implements Initializable { public class TourplanerController implements Initializable {
//VM //VM
@ -25,8 +29,7 @@ public class TourplanerController implements Initializable {
//Tabs zu Tour -> rechts oben //Tabs zu Tour -> rechts oben
public TabPane viewTabPane; public TabPane viewTabPane;
public Tab kartenTab, beschreibungTab; public Tab kartenTab, beschreibungTab;
public TableView<Tour> beschreibungTableView; private TourDetailsTabController tourDetailsTabController;
public TableColumn<Tour, String> startCol, zielCol, dauerCol, streckeCol, nameCol;
public TextField titleTextView, sucheInput; public TextField titleTextView, sucheInput;
public ImageView mapImageView; public ImageView mapImageView;
//Log -> rechts unten //Log -> rechts unten
@ -38,18 +41,40 @@ public class TourplanerController implements Initializable {
public Menu menueFile, menuebearbeiten, menueoptionen, menuesprachen, menuehilfe; public Menu menueFile, menuebearbeiten, menueoptionen, menuesprachen, menuehilfe;
public MenuItem reportsummary, tourreport, beendenButton; public MenuItem reportsummary, tourreport, beendenButton;
//Elemente //Elemente
public Button sucheButton, editBtn, editTourBtn; public Button sucheButton, editBtn, editTourBtn, copyTourBtn, copyBtn;
@FXML
private void copyTour(){
ProgressBar progressBar = new ProgressBar("Copy");
this.viewModel.copyTour(progressBar, 80);
syncTourNamen(progressBar, 90);
tourFocusOnSelected(progressBar, 100);
}
@FXML
private void copyLogBtn(){
this.viewModel.copyLog();
syncLogs();
}
@FXML @FXML
private void onlangenglisch(){ private void onlangenglisch(){
ConfigHelper.setIniString(ConfigHelper.getStandartConfig(), "lang", "lang", "langen"); ConfigHelper.setIniString(ConfigHelper.getStandartConfig(), "lang", "lang", "langen");
try {
langToFxml(); langToFxml();
} catch (IOException e) {
LogHelper.error(e);
}
} }
@FXML @FXML
private void onlangdeutsch(){ private void onlangdeutsch(){
ConfigHelper.setIniString(ConfigHelper.getStandartConfig(), "lang", "lang", "langde"); ConfigHelper.setIniString(ConfigHelper.getStandartConfig(), "lang", "lang", "langde");
try {
langToFxml(); langToFxml();
} catch (IOException e) {
LogHelper.error(e);
}
} }
@FXML @FXML
@ -101,14 +126,13 @@ public class TourplanerController implements Initializable {
} }
private void syncTour(String selectedItem){ private void syncTour(String selectedItem){
beschreibungTableView.getItems().clear(); //Leert die Table View komplett tourDetailsTabController.syncTour(this.viewModel, selectedItem);
beschreibungTableView.getItems().add(this.viewModel.getTour(selectedItem));
mapImageView.setImage(this.viewModel.getImage(selectedItem)); mapImageView.setImage(this.viewModel.getImage(selectedItem));
} }
private void syncTourNamen(){ private void syncTourNamen(ProgressBar progressBar, int maxLevel){
TourListView.getItems().clear(); TourListView.getItems().clear();
TourListView.setItems(this.viewModel.getTourNamen()); TourListView.setItems(this.viewModel.getTourNamen(progressBar, maxLevel));
} }
private void syncLogs(){ private void syncLogs(){
@ -123,25 +147,23 @@ public class TourplanerController implements Initializable {
*/ */
@FXML @FXML
private void tourListSelectedItem(MouseEvent mouseEvent){ private void tourListSelectedItem(MouseEvent mouseEvent){
//Beschreibung
ProgressBar progressBar = new ProgressBar("Tour auswählen..."); ProgressBar progressBar = new ProgressBar("Tour auswählen...");
int steps = progressBar.getProgressSize(7, 100);
String selectedItem = TourListView.getSelectionModel().getSelectedItem(); String selectedItem = TourListView.getSelectionModel().getSelectedItem();
this.viewModel.selectTour(selectedItem); this.viewModel.selectTour(selectedItem);
titleTextView.setText(selectedItem); titleTextView.setText(selectedItem);
progressBar.addProgress(10); progressBar.addProgress(steps);
syncTour(selectedItem); syncTour(selectedItem);
progressBar.addProgress(10); progressBar.addProgress(steps);
startCol.setCellValueFactory(new PropertyValueFactory<>("start")); this.tourDetailsTabController.tourListSelectItem();
zielCol.setCellValueFactory(new PropertyValueFactory<>("ziel"));
dauerCol.setCellValueFactory(new PropertyValueFactory<>("dauer"));
streckeCol.setCellValueFactory(new PropertyValueFactory<>("strecke"));
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
//Log anzeigen //Log anzeigen
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinelogsvorhanden"))); logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinelogsvorhanden")));
logTableView.getItems().clear(); logTableView.getItems().clear();
progressBar.addProgress(10); progressBar.addProgress(steps);
logTableView.setItems(this.viewModel.getLogData()); logTableView.setItems(this.viewModel.getLogData());
progressBar.addProgress(10); progressBar.addProgress(steps);
logDauerCol.setCellValueFactory(new PropertyValueFactory<>("dauer")); logDauerCol.setCellValueFactory(new PropertyValueFactory<>("dauer"));
logStreckeCol.setCellValueFactory(new PropertyValueFactory<>("strecke")); logStreckeCol.setCellValueFactory(new PropertyValueFactory<>("strecke"));
logDatumCol.setCellValueFactory(new PropertyValueFactory<>("datum")); logDatumCol.setCellValueFactory(new PropertyValueFactory<>("datum"));
@ -151,18 +173,33 @@ public class TourplanerController implements Initializable {
logGegangenCol.setCellValueFactory(new PropertyValueFactory<>("gegangen")); logGegangenCol.setCellValueFactory(new PropertyValueFactory<>("gegangen"));
logBemerkungCol.setCellValueFactory(new PropertyValueFactory<>("bemerkung")); logBemerkungCol.setCellValueFactory(new PropertyValueFactory<>("bemerkung"));
logRatingCol1.setCellValueFactory(new PropertyValueFactory<>("rating")); logRatingCol1.setCellValueFactory(new PropertyValueFactory<>("rating"));
progressBar.addProgress(10); progressBar.addProgress(steps);
mapImageView.setImage(this.viewModel.getImage(this.viewModel.getSelectedTour().getName())); mapImageView.setImage(this.viewModel.getImage(this.viewModel.getSelectedTour().getName()));
if(this.viewModel.isSucheAktiv()){ if(this.viewModel.isSucheAktiv()){
this.viewModel.setSucheAktiv(false); this.viewModel.setSucheAktiv(false);
progressBar.addProgress(10); syncTourNamen(progressBar, 100 - steps);
syncTourNamen();
progressBar.setProgress(100);
this.sucheInput.setText(""); this.sucheInput.setText("");
tourFocusOnSelected(progressBar, 100);
} }
progressBar.setProgress(100); progressBar.setProgress(100);
} }
/**
* Setzt den Focus auf die ausgewählte Tour
*/
private void tourFocusOnSelected(ProgressBar progressBar, int maxLevel){
//Tour namen select focus
AtomicInteger index = new AtomicInteger();
AtomicInteger indexF = new AtomicInteger();
this.viewModel.getTourNamen(progressBar, maxLevel).forEach(tn -> {
index.getAndIncrement();
if(tn.equals(this.viewModel.getSelectedTour().getName())){
indexF.set(index.get());
}
});
TourListView.getFocusModel().focus(indexF.intValue() - 1);
}
/** /**
* Beendet die App * Beendet die App
* Verbunden mit dem Menu -> Datei -> Beenden * Verbunden mit dem Menu -> Datei -> Beenden
@ -187,7 +224,7 @@ public class TourplanerController implements Initializable {
*/ */
@FXML @FXML
private void delTour(){ private void delTour(){
this.beschreibungTableView.getItems().clear(); //löscht alles aus der tabelle this.tourDetailsTabController.delTour();
this.titleTextView.setText(ConfigHelper.getLangIniString("keinetourselected")); this.titleTextView.setText(ConfigHelper.getLangIniString("keinetourselected"));
this.viewModel.delTour(); this.viewModel.delTour();
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected"))); logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
@ -201,11 +238,17 @@ public class TourplanerController implements Initializable {
@FXML @FXML
private void suche(){ private void suche(){
ProgressBar progressBar = new ProgressBar("Suche"); ProgressBar progressBar = new ProgressBar("Suche");
this.viewModel.suche(this.sucheInput.getText()); this.viewModel.suche(this.sucheInput.getText(), progressBar, 100);
progressBar.addProgress(100);
progressBar.closeProgress(); progressBar.closeProgress();
} }
@FXML
private void sucheEnter(KeyEvent event){
if(event.getCode().equals(KeyCode.ENTER)) {
suche();
}
}
/** /**
* Fügt einen Log eintrag zu einer Tour hinzu. * Fügt einen Log eintrag zu einer Tour hinzu.
* Ist keine Tour ausgewählt, dann kommt eine Warnung an den User! * Ist keine Tour ausgewählt, dann kommt eine Warnung an den User!
@ -241,8 +284,7 @@ public class TourplanerController implements Initializable {
//Tour list -> links //Tour list -> links
TourListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); TourListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
TourListView.setOrientation(Orientation.VERTICAL); TourListView.setOrientation(Orientation.VERTICAL);
syncTourNamen(); syncTourNamen(new ProgressBar("Start"), 100);
deselectAll();
if(ConfigHelper.getIniInt(ConfigHelper.getStandartConfig(), "settings", "openpdf") == 1){ if(ConfigHelper.getIniInt(ConfigHelper.getStandartConfig(), "settings", "openpdf") == 1){
this.openpdf.setSelected(true); this.openpdf.setSelected(true);
}else { }else {
@ -264,19 +306,29 @@ public class TourplanerController implements Initializable {
this.langenglisch.setSelected(true); this.langenglisch.setSelected(true);
} }
try {
// Child fxml load
FXMLLoader loader = new FXMLLoader(Main.class.getResource("tourDetails.fxml"));
this.beschreibungTab.setContent(loader.load());
this.tourDetailsTabController = loader.getController();
langToFxml(); langToFxml();
deselectAll();
} catch (IOException e) {
LogHelper.error(e);
}
} }
private void langToFxml(){ /**
* Setzt jedem Element den Text der gewählten Sprache
*/
private void langToFxml() throws IOException {
this.kartenTab.setText(ConfigHelper.getLangIniString("fkarte")); this.kartenTab.setText(ConfigHelper.getLangIniString("fkarte"));
this.beschreibungTab.setText(ConfigHelper.getLangIniString("fbeschreibung")); this.beschreibungTab.setText(ConfigHelper.getLangIniString("fbeschreibung"));
this.editBtn.setText(ConfigHelper.getLangIniString("fedit")); this.editBtn.setText(ConfigHelper.getLangIniString("fedit"));
this.editTourBtn.setText(ConfigHelper.getLangIniString("fedit")); this.editTourBtn.setText(ConfigHelper.getLangIniString("fedit"));
this.nameCol.setText(ConfigHelper.getLangIniString("fname")); this.tourDetailsTabController.langToFxml();
this.streckeCol.setText(ConfigHelper.getLangIniString("fstrecke"));
this.dauerCol.setText(ConfigHelper.getLangIniString("fdauer"));
this.zielCol.setText(ConfigHelper.getLangIniString("fziel"));
this.startCol .setText(ConfigHelper.getLangIniString("fstart"));
this.logAvgCol.setText(ConfigHelper.getLangIniString("favg")); this.logAvgCol.setText(ConfigHelper.getLangIniString("favg"));
this.logBemerkungCol.setText(ConfigHelper.getLangIniString("fbemerkung")); this.logBemerkungCol.setText(ConfigHelper.getLangIniString("fbemerkung"));
this.logDatumCol.setText(ConfigHelper.getLangIniString("fdatum")); this.logDatumCol.setText(ConfigHelper.getLangIniString("fdatum"));
@ -285,7 +337,6 @@ public class TourplanerController implements Initializable {
this.logHightCol.setText(ConfigHelper.getLangIniString("fhight")); this.logHightCol.setText(ConfigHelper.getLangIniString("fhight"));
this.logPauseCol.setText(ConfigHelper.getLangIniString("fpause")); this.logPauseCol.setText(ConfigHelper.getLangIniString("fpause"));
this.logStreckeCol.setText(ConfigHelper.getLangIniString("fstrecke")); this.logStreckeCol.setText(ConfigHelper.getLangIniString("fstrecke"));
this.sucheButton.setText(ConfigHelper.getLangIniString("fsuche")); this.sucheButton.setText(ConfigHelper.getLangIniString("fsuche"));
this.openmap.setText(ConfigHelper.getLangIniString("fopenmapsetting")); this.openmap.setText(ConfigHelper.getLangIniString("fopenmapsetting"));
this.openpdf.setText(ConfigHelper.getLangIniString("fopenpdfsetting")); this.openpdf.setText(ConfigHelper.getLangIniString("fopenpdfsetting"));
@ -300,8 +351,10 @@ public class TourplanerController implements Initializable {
this.tourreport.setText(ConfigHelper.getLangIniString("frepotour")); this.tourreport.setText(ConfigHelper.getLangIniString("frepotour"));
this.beendenButton.setText(ConfigHelper.getLangIniString("fbeenden")); this.beendenButton.setText(ConfigHelper.getLangIniString("fbeenden"));
this.sucheInput.setPromptText(ConfigHelper.getLangIniString("fsuche") + ConfigHelper.getLangIniString("fpunkte")); this.sucheInput.setPromptText(ConfigHelper.getLangIniString("fsuche") + ConfigHelper.getLangIniString("fpunkte"));
this.logRatingCol1.setText(ConfigHelper.getLangIniString("rating"));
this.logRatingCol1.setText("Rating"); this.copyBtn.setText(ConfigHelper.getLangIniString("copybtn"));
this.copyTourBtn.setText(ConfigHelper.getLangIniString("copybtn"));
} }
@FXML @FXML
@ -320,7 +373,8 @@ public class TourplanerController implements Initializable {
private void deselectAll(){ private void deselectAll(){
//Tabs zu Tour -> rechts oben //Tabs zu Tour -> rechts oben
beschreibungTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected"))); this.tourDetailsTabController.keineSelected();
this.beschreibungTab.setText(ConfigHelper.getLangIniString("fbeschreibung"));
titleTextView.setText( ConfigHelper.getLangIniString("keinetourselected")); titleTextView.setText( ConfigHelper.getLangIniString("keinetourselected"));
//Log -> rechts unten //Log -> rechts unten
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected"))); logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
@ -333,9 +387,10 @@ public class TourplanerController implements Initializable {
@FXML @FXML
private void importBtn(){ private void importBtn(){
ProgressBar progressBar = new ProgressBar("Import");
deselectAll(); deselectAll();
this.viewModel.importData(); this.viewModel.importData(progressBar, 90);
syncTourNamen(); syncTourNamen(progressBar, 100);
} }
@FXML @FXML

View File

@ -98,7 +98,6 @@ public class ViewModel {
this.neueTourName = AlertHelper.inputText(ConfigHelper.getLangIniString("tournametitle"), this.neueTourName = AlertHelper.inputText(ConfigHelper.getLangIniString("tournametitle"),
ConfigHelper.getLangIniString("tournameheader"), ConfigHelper.getLangIniString("tournameheader"),
ConfigHelper.getLangIniString("tournamemsg"), content); ConfigHelper.getLangIniString("tournamemsg"), content);
System.out.println(this.neueTourName);
if(this.neueTourName.isEmpty()){ if(this.neueTourName.isEmpty()){
return false; return false;
} }
@ -197,7 +196,6 @@ public class ViewModel {
* Bearbeitet einen gewählten Log eintrag * Bearbeitet einen gewählten Log eintrag
*/ */
public void editLog(){ public void editLog(){
System.out.println(this.selectedLog);
if(this.selectedTour != null) { if(this.selectedTour != null) {
if(this.selectedLog != null) { if(this.selectedLog != null) {
AtomicReference<Tour> tourAkt = new AtomicReference<>(); AtomicReference<Tour> tourAkt = new AtomicReference<>();
@ -299,7 +297,7 @@ public class ViewModel {
ConfigHelper.getLangIniString("bewertungmsg"), ConfigHelper.getLangIniString("bewertungmsg"),
ConfigHelper.getLangIniString("bewertung") + ConfigHelper.getLangIniString("bewertung") +
ConfigHelper.getLangIniString("doppelpunkt"), realcontent); ConfigHelper.getLangIniString("doppelpunkt"), realcontent);
if(input < 0 && input > 5){ if(input < 0 || input > 5){
input = -1; input = -1;
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"), ConfigHelper.getLangIniString("bewertungeror"), ConfigHelper.getLangIniString("bewertungeror2")); AlertHelper.warn(ConfigHelper.getLangIniString("achtung"), ConfigHelper.getLangIniString("bewertungeror"), ConfigHelper.getLangIniString("bewertungeror2"));
} }
@ -314,7 +312,6 @@ public class ViewModel {
private LocalDate dateInput(LocalDate date){ private LocalDate dateInput(LocalDate date){
LocalDate neuesDatum = null; LocalDate neuesDatum = null;
neuesDatum = AlertHelper.datePicker(date); neuesDatum = AlertHelper.datePicker(date);
System.out.println(neuesDatum);
return neuesDatum; return neuesDatum;
} }
@ -359,12 +356,7 @@ public class ViewModel {
this.tourData.forEach(s -> { this.tourData.forEach(s -> {
if (s.getName().equals(this.selectedTour.getName())) { if (s.getName().equals(this.selectedTour.getName())) {
AtomicReference<String> newId = new AtomicReference<>(); AtomicReference<String> newId = new AtomicReference<>();
newId.set(UUID.randomUUID().toString()); newId.set(TourPlaner.newLogId(this.logData));
this.logData.forEach(ss -> {
if (ss.getId().equals(newId.get())) {
newId.set(UUID.randomUUID().toString());
}
});
double dauer = dauerInput(-1.0); double dauer = dauerInput(-1.0);
double strecke, pause, hightmeter; double strecke, pause, hightmeter;
boolean bemerkung = false; boolean bemerkung = false;
@ -479,17 +471,17 @@ public class ViewModel {
return selectedTour; return selectedTour;
} }
public ObservableList<String> getTourNamen() { public ObservableList<String> getTourNamen(ProgressBar progressBar, int maxLevel) {
ArrayList<String> namen = new ArrayList<>(); ArrayList<String> namen = new ArrayList<>();
getTourData().forEach(s -> namen.add(s.getName())); getTourData(progressBar, maxLevel).forEach(s -> namen.add(s.getName()));
tourNamen.clear(); tourNamen.clear();
tourNamen.addAll(namen); tourNamen.addAll(namen);
return tourNamen; return tourNamen;
} }
public ObservableList<Tour> getTourData() { public ObservableList<Tour> getTourData(ProgressBar progressBar, int maxLevel) {
tourData.clear(); tourData.clear();
ArrayList<Tour> touren = TourPlaner.getAllTours(); ArrayList<Tour> touren = TourPlaner.getAllTours(progressBar, maxLevel);
if(touren != null) { if(touren != null) {
tourData.addAll(touren); tourData.addAll(touren);
} }
@ -524,18 +516,21 @@ public class ViewModel {
* Sucht eine Tour * Sucht eine Tour
* @param sucheInput Text nach dem gesucht werden soll * @param sucheInput Text nach dem gesucht werden soll
*/ */
public void suche(String sucheInput){ public void suche(String sucheInput, ProgressBar progressBar, int maxProgress){
if(sucheInput.isEmpty()){ if(sucheInput.isEmpty()){
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"), AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("suchfeldleer"), ConfigHelper.getLangIniString("suchfeldleer"),
ConfigHelper.getLangIniString("suchtextzuerst")); ConfigHelper.getLangIniString("suchtextzuerst"));
} }
ArrayList<Tour> result = TourPlaner.sucheTour(sucheInput); ArrayList<Tour> result = TourPlaner.sucheTour(sucheInput, progressBar, maxProgress/2);
int steps = progressBar.getProgressSize(result.size(), maxProgress);
tourNamen.clear(); tourNamen.clear();
for (Tour tour:result) { for (Tour tour:result) {
tourNamen.add(tour.getName()); tourNamen.add(tour.getName());
progressBar.addProgress(steps);
} }
this.sucheAktiv = true; this.sucheAktiv = true;
progressBar.setProgress(maxProgress);
} }
public boolean isSucheAktiv() { public boolean isSucheAktiv() {
@ -629,11 +624,11 @@ public class ViewModel {
/** /**
* Importiert alle daten von einem File das hier gewählt wird * Importiert alle daten von einem File das hier gewählt wird
*/ */
public void importData() { public void importData(ProgressBar progressBar, int maxProgress) {
String file = AlertHelper.fileChooser("Importiere"); String file = AlertHelper.fileChooser("Importiere");
if (file != null){ if (file != null){
this.tourNamen = FXCollections.observableArrayList(); this.tourNamen = FXCollections.observableArrayList();
new Exporter(file).doImport(); new Exporter(file).doImport(progressBar, maxProgress);
} }
} }
@ -641,6 +636,64 @@ public class ViewModel {
* Erstellt einen Summary Report * Erstellt einen Summary Report
*/ */
public void sumReport(){ public void sumReport(){
Reporter.sumReport(); Reporter.sumReport(new ProgressBar("Report"), 100);
}
/**
* Gibt das Selected Log zurück
* @return Null wenn nichts selected ist
*/
public Log getSelectedLog() {
return selectedLog;
}
/**
* Kopiert einen Log eintrag und erstellt dafür eine neue Id für das kopierte log
*/
public void copyLog() {
Log selectedLog = getSelectedLog();
Tour selectedTour = getSelectedTour();
if(selectedLog == null && selectedTour == null){
//TODO kein log & keine tour selected error alert
}else {
selectedLog.setId(TourPlaner.newLogId(this.logData));
TourPlaner.addLog(selectedTour.getName(), selectedLog);
}
}
/**
* Kopiert eie Tour und hängt dafür am ende des namens ein _copy an
* @return Der neue Tour name, bei error ""
*/
public String copyTour(ProgressBar progressBar, int maxLevel) {
Tour selectedTour = getSelectedTour();
String newName = "";
if (selectedTour == null){
//TODO keine tour selected
return "";
}else {
newName = selectedTour.getName() + "_copy";
try {
ArrayList<Log> logs = TourPlaner.getLogs(selectedTour.getName());
progressBar.addProgress(10);
TourPlaner.addTourMax(new Tour(newName, selectedTour.getDauer(), selectedTour.getMapJson(), selectedTour.getStrecke(), selectedTour.getStart(), selectedTour.getZiel(), logs), progressBar, 70);
String finalNewName = newName;
int steps = progressBar.getProgressSize(logs.size(), maxLevel-10);
logs.forEach(l -> {
TourPlaner.addLog(finalNewName, l);
progressBar.addProgress(steps);
});
getTourData(progressBar, maxLevel);
// getLogData();
selectTour(newName);
progressBar.setProgress(maxLevel);
return newName;
} catch (IOException e) {
LogHelper.error(e);
progressBar.setProgress(maxLevel);
return "";
}
}
} }
} }