Compare commits

...

2 Commits
0.3.3 ... 0.2.6

Author SHA1 Message Date
bb8a796bd4 DB -> Tour add, edit, del 2021-04-14 22:11:53 +02:00
dd1357ec1d DB Table erstellt + Get All Tours 2021-04-14 00:37:00 +02:00
13 changed files with 247 additions and 29 deletions

12
.idea/dataSources.xml generated Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="postgres@postgres.dergeorg.at" uuid="304c5f90-6427-4696-beb2-a9a4e6b29a05">
<driver-ref>postgresql</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
<jdbc-url>jdbc:postgresql://postgres.dergeorg.at:5432/postgres</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="org.postgresql:postgresql:42.2.19" type="repository">
<properties maven-id="org.postgresql:postgresql:42.2.19" />
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/postgresql/postgresql/42.2.19/postgresql-42.2.19.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

7
.idea/sqldialects.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/src/tourplaner/data/PostgresHelper.java" dialect="GenericSQL" />
<file url="PROJECT" dialect="PostgreSQL" />
</component>
</project>

20
TourplanerTabellen.sql Normal file
View File

@ -0,0 +1,20 @@
// Tour Tabelle
create table tour
(
tourname varchar not null,
dauer decimal,
mapjson varchar,
start varchar,
ziel varchar,
strecke decimal
);
create unique index tour_tourname_uindex
on tour (tourname);
alter table tour add constraint tour_pk primary key (tourname);
#// Log Table
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);

View File

@ -1,15 +0,0 @@
2021-03-18 22:41:23 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:48:51 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:53:17 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:57:20 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:57:28 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:58:33 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 22:58:34 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 23:05:00 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 23:11:45 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-18 23:14:55 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-19 11:56:22 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-19 22:35:19 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-03-19 23:23:36 ERROR ViewModel -> DelTour:33 - Keine Tour ausgewählt!
2021-04-13 18:30:39 ERROR FileNotFoundException:33 - \report\test.pdf (Das System kann den angegebenen Pfad nicht finden)
2021-04-13 18:31:11 ERROR FileNotFoundException:33 - \reports\test.pdf (Das System kann den angegebenen Pfad nicht finden)

View File

@ -8,6 +8,7 @@ import javafx.scene.image.Image;
import javafx.stage.Stage;
import tourplaner.business.ConfigHelper;
import tourplaner.business.TourPlaner;
import java.io.IOException;
@ -23,6 +24,7 @@ public class Main extends Application {
Parent root = FXMLLoader.load(Main.class.getResource("tourplaner.fxml"));
primaryStage.setTitle(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "apptitle"));
primaryStage.getIcons().add(new Image("file:"+ ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "logo")));
TourPlaner.init();
primaryStage.setScene(new Scene(root, 1500, 1000));
primaryStage.show();
}

View File

@ -1,2 +1,34 @@
package tourplaner.business;public class Reporter {
package tourplaner.business;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class Reporter {
public static void createTourReport(String tourname) throws IOException, COSVisitorException {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDFont font = PDType1Font.HELVETICA;
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100,700);
contentStream.drawString(tourname);
// contentStream.drawString();
contentStream.endText();
contentStream.close();
document.save(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "report", "path") + "test.pdf");
document.close();
}
}

View File

@ -2,6 +2,10 @@ package tourplaner.business;
import org.apache.log4j.Logger;
import tourplaner.data.DbConnect;
import tourplaner.data.PostgresHelper;
import tourplaner.object.Tour;
import java.util.ArrayList;
/**
* Haupt Logik des Tourplaners
@ -9,14 +13,53 @@ import tourplaner.data.DbConnect;
public class TourPlaner{
private Logger logger;
public TourPlaner(){
LogHelper.info(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "message"),
ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "app"));
/**
* Erstellt alle DB Tabellen falls nötig
*/
public static void init(){
new DbConnect().init();
}
public String getMapJson(String start, String ziel){
/**
* Holt alle touren aus der DB
* @return Alle touren als ArrayList
*/
public static ArrayList<Tour> getAllTours(){
DbConnect dbConnect = new DbConnect();
ArrayList<Tour> touren = dbConnect.getAllTouren();
return touren;
}
/**
* Bearbeitet eine Tour
* @param oldname Alter Tourname
* @param tour Neuer Tourname
* @return false bei error
*/
public static boolean editTour(String oldname, Tour tour){
DbConnect dbConnect = new DbConnect();
return dbConnect.editTour(oldname, tour);
}
public static boolean delTour(String tourname){
DbConnect dbConnect = new DbConnect();
return dbConnect.delTour(tourname);
}
/**
* Fügt eine Tour hinzu
* @param newTour Neue Tour
* @return false bei error
*/
public static boolean addTour(Tour newTour){
DbConnect dbConnect = new DbConnect();
return dbConnect.addTour(newTour);
}
public static String getMapJson(String start, String ziel){
// TODO: 14.04.2021 Map Quest
return start + " " + ziel;
}
}

View File

@ -1,6 +1,9 @@
package tourplaner.data;
import tourplaner.object.Tour;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
@ -26,10 +29,77 @@ public class DbConnect {
* @return True bei erfolg, sonst error
*/
public boolean init() {
// TODO: 26.02.2021 Alle sql im init sind noch falsch
ArrayList<Boolean> errors = new ArrayList<>();
errors.add(PostgresHelper.executeUpdateMessage("CREATE TABLE IF NOT EXISTS USERS (username TEXT PRIMARY KEY NOT NULL, nachname TEXT NOT NULL, email TEXT NOT NULL, password TEXT NOT NULL, bio TEXT, image TEXT, coins integer default 20 not null)", "User Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create table tour ( tourname varchar not null, dauer decimal, mapjson varchar, start varchar, ziel varchar, strecke decimal);", "Tour Table created"));
errors.add(PostgresHelper.executeUpdateMessage("create unique index tour_tourname_uindex on tour (tourname);", "Tour Table unique created"));
errors.add(PostgresHelper.executeUpdateMessage("alter table tour add constraint tour_pk primary key (tourname);", "Tour Table primary created"));
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);", "Log Table created"));
return !errors.contains(false);
}
/**
* Bearbeitet eine Tour
* @param oldname Alter Tour name
* @param tour Neues Tour Object
* @return false bei error
*/
public boolean editTour(String oldname, Tour tour) {
return PostgresHelper.executeUpdate("UPDATE public.tour SET tourname = '"+tour.getName()+"', dauer = 1, mapjson = '"+tour.getMapJson()+"', start = '"+tour.getStart()+"', ziel = '"+tour.getZiel()+"', strecke = "+tour.getStrecke()+" WHERE tourname ='" + oldname + "';");
}
/**
* Fügt eine Tour hinzu
* @param tour Neue Tour
* @return false bei error
*/
public boolean addTour(Tour tour){
return PostgresHelper.executeUpdate("INSERT INTO public.tour (tourname, dauer, mapjson, start, ziel, strecke) VALUES ('"+tour.getName()+"', "+tour.getDauer()+", '"+tour.getMapJson()+"', '"+tour.getStart()+"', '"+tour.getZiel()+"', "+tour.getStrecke()+")");
}
/**
* Löscht eine Tour anhand des Tournamens
* @param tourname Tourname der zu löschen ist
* @return false bei error
*/
public boolean delTour(String tourname){
return PostgresHelper.executeUpdate("DELETE FROM public.tour WHERE tourname = '"+tourname+"'");
}
/**
* Holt alle Touren aus der Datenbank
* @return Null bei fehler, sonst eine List aus den IDs
*/
public ArrayList<Tour> getAllTouren(){
this.c = PostgresHelper.con();
String tourname, mapjson, start, ziel;
double dauer, strecke;
ArrayList<Tour> touren = new ArrayList<>();
try {
stmt = this.c.createStatement();
ResultSet rs = stmt.executeQuery("select * from tour;");
while (rs.next()) {
tourname = rs.getString("tourname");
mapjson = rs.getString("mapjson");
start = rs.getString("start");
ziel = rs.getString("ziel");
dauer = rs.getDouble("dauer");
strecke = rs.getDouble("strecke");
if (!tourname.isEmpty()) {
touren.add(new Tour(tourname, dauer + "", mapjson, strecke, start, ziel));
}else {
return null;
}
}
rs.close();
stmt.close();
this.c.close();
return touren;
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
return null;
}
}
}

View File

@ -3,16 +3,20 @@ package tourplaner.data;
import tourplaner.business.ConfigHelper;
import tourplaner.business.LogHelper;
import tourplaner.object.Tour;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
/**
* Hilfsfunktionen für die verwendung der Postgres DB
*/
public class PostgresHelper {
private Connection c;
private Statement stmt;
/**
* Verbindet mit der Datenbank
* @return Das Connection Objekt
@ -21,6 +25,8 @@ public class PostgresHelper {
Connection c = null;
try {
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
.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"));

View File

@ -21,6 +21,16 @@ public class Tour {
this.log = new ArrayList<>();
}
public void setTour(Tour tour){
this.dauer = tour.getDauer();
this.mapJson = tour.getMapJson();
this.strecke = tour.getStrecke();
this.name = tour.getName();
this.start = tour.getStart();
this.ziel = tour.getZiel();
this.log = tour.getLogs();
}
/**
* Holt einen einzigen Log Eintrag anhand der Id
* @param id Id des Eintrags der zu besorgen ist

View File

@ -49,6 +49,8 @@ public class TourplanerController implements Initializable {
@FXML
private void editTourBtn(){
this.viewModel.editTour();
beschreibungTableView.getItems().removeIf(s -> true); //Leert die Table View komplett
beschreibungTableView.getItems().add(this.viewModel.getTour(this.viewModel.getSelectedTour().getName()));
}
@FXML

View File

@ -4,6 +4,8 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.apache.pdfbox.exceptions.COSVisitorException;
import tourplaner.business.Reporter;
import tourplaner.business.TourPlaner;
import tourplaner.data.DbConnect;
import tourplaner.ui.AlertHelper;
import tourplaner.business.ConfigHelper;
import tourplaner.business.LogHelper;
@ -15,14 +17,15 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
public class ViewModel {
//Tour
private final ObservableList<Tour> tourData = FXCollections.observableArrayList(new Tour("Test 1", "120", "json dings", 22.3, "Wien", "Graz"),new Tour("Test 2", "210", "json dings", 42.3, "Da", "Dort"));
private final ObservableList<String> tourNamen = FXCollections.observableArrayList("Test 1", "Test 2");
private final ObservableList<Tour> tourData = FXCollections.observableArrayList();
private final ObservableList<String> tourNamen = FXCollections.observableArrayList();
private Tour selectedTour;
private String neueTourName, neueTourStart, neueTourZiel, neueBemerkung;
//Log
@ -57,8 +60,11 @@ public class ViewModel {
this.tourData.removeIf(tour -> tour.getName().equals(this.selectedTour.getName()));
this.tourNamen.removeIf(tour -> tour.equals(this.selectedTour.getName()));
this.tourData.add(new Tour(this.neueTourName, "TBD", "TBD", 0, this.neueTourStart, this.neueTourZiel));
Tour newTour = new Tour(this.neueTourName, "TBD", "TBD", 0, this.neueTourStart, this.neueTourZiel);
this.tourData.add(newTour);
this.tourNamen.add(this.neueTourName);
LogHelper.info("Edit Tour: " + this.neueTourName + " upload zu Postgres war: " + TourPlaner.editTour(this.selectedTour.getName(), newTour), "ViewModel - EditTour");
selectTour(this.neueTourName);
}
}
}
@ -137,7 +143,7 @@ public class ViewModel {
return false;
}
}
return false;
return true;
}
@ -149,8 +155,10 @@ public class ViewModel {
tourStartInput("");
tourZielInput("");
if (getTour(this.neueTourName) == null) {
tourData.add(new Tour(this.neueTourName, "TBD", "TBD", 0, this.neueTourStart, this.neueTourZiel));
Tour newTour = new Tour(this.neueTourName, "1", "1", 0, this.neueTourStart, this.neueTourZiel);
tourData.add(newTour);
tourNamen.add(this.neueTourName);
TourPlaner.addTour(newTour);
}
this.neueTourStart = null;
this.neueTourZiel = null;
@ -452,6 +460,12 @@ public class ViewModel {
}
public ObservableList<String> getTourNamen() {
ArrayList<String> namen = new ArrayList<>();
getTourData().forEach(s -> {
namen.add(s.getName());
});
tourNamen.removeAll();
tourNamen.addAll(namen);
return tourNamen;
}
@ -472,6 +486,9 @@ public class ViewModel {
}
public ObservableList<Tour> getTourData() {
tourData.removeAll();
// ObservableList<Tour> data = ;
tourData.addAll(TourPlaner.getAllTours());
return tourData;
}
@ -485,6 +502,7 @@ public class ViewModel {
tourNamen.removeIf(s -> s.equals(tourname));
logData.removeIf(s -> true);
setSelectedTour(null);
TourPlaner.delTour(tourname);
}catch (NullPointerException e){
LogHelper.error(ConfigHelper.getLangIniString("keinetourselected"),
ConfigHelper.getLangIniString("deltournoselect"));