Compare commits

...

7 Commits
0.0.5 ... 0.2.1

Author SHA1 Message Date
5d860eed3c Logo fix +
lang.ini fix+
alert fix
2021-03-18 23:38:52 +01:00
c31728a92b langde von conf.ini -> langde.ini verschoben +
fixed alert -> del log, del tour, input errors (nurZahlen, nurPositive, keinText, zuerstTourDannLog) +
Logo
2021-03-18 23:37:43 +01:00
e5c9e8dbf0 Merge Branch 'vmcontrol' Version 0.2.0 in Branch 'master' 2021-03-17 20:43:57 +01:00
a2164dc303 . 2021-03-17 20:40:52 +01:00
1ff4a2cd6c Init auf git.dergeorg.at 2021-03-06 04:13:58 +01:00
c5d51edf57 Update README.md 2021-02-26 22:48:56 +01:00
526c47a643 Del Dir out/ 2021-02-26 22:47:06 +01:00
55 changed files with 1139 additions and 252 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
.idea/
out/
conf.ini

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../:\FH_OFFLINE\Tourplaner\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

11
.idea/libraries/javadoc.xml generated Normal file
View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="javadoc">
<CLASSES>
<root url="jar://$PROJECT_DIR$/javadoc/type-search-index.zip!/" />
<root url="jar://$PROJECT_DIR$/javadoc/member-search-index.zip!/" />
<root url="jar://$PROJECT_DIR$/javadoc/package-search-index.zip!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

17
.idea/libraries/lib.xml generated Normal file
View File

@ -0,0 +1,17 @@
<component name="libraryTable">
<library name="lib">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.fxml.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.swing.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx-swt.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.controls.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.graphics.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.web.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.media.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/src.zip!/" />
<root url="jar://$PROJECT_DIR$/lib/javafx-sdk-11.0.2/lib/javafx.base.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

10
.idea/libraries/log4j_log4j_1_2_17.xml generated Normal file
View File

@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="log4j:log4j:1.2.17" type="repository">
<properties maven-id="log4j:log4j:1.2.17" />
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/log4j/log4j/1.2.17/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="org.ini4j:ini4j:0.5.4" type="repository">
<properties maven-id="org.ini4j:ini4j:0.5.4" />
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/ini4j/ini4j/0.5.4/ini4j-0.5.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

6
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/tourplaner.iml" filepath="$PROJECT_DIR$/tourplaner.iml" />
</modules>
</component>
</project>

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

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -0,0 +1,8 @@
# Tourplaner
# Config
* DB informationen müssen in das config.ini.sample unter [db] eingetragen werden
* Datei muss in config.ini umbenannt werden
* [langde] beinhaltet alle Deutschen Texte der Gui
* [start] beinhaltet den Title und infos die beim start verabeitet werden
* [hilfe] beinhaltet die Links zu den Hilfeseiten

View File

@ -1,25 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration>
<fileset id="fileset" name="ConfigHelper" removed="false">
<file>file://$MODULE_DIR$/src/tourplaner/business/ConfigHelper.java</file>
</fileset>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="11" jdkType="JavaSDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="lib" level="project" />
<orderEntry type="library" name="junit:junit:4.13.2" level="project" />
<orderEntry type="library" name="org.slf4j:slf4j-log4j12:1.7.12" level="project" />
<orderEntry type="library" name="org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="org.postgresql:postgresql:42.2.19" level="project" />
<orderEntry type="library" name="log4j:log4j:1.2.17" level="project" />
</component>
</module>

View File

@ -1,9 +0,0 @@
[start]
message = Tour Planer App gestartet
[db]
dbname = tourplaner
url = 192.168.1.116
port = 5432
user = user
pw = user

19
conf.ini.sample Normal file
View File

@ -0,0 +1,19 @@
[start]
message = Tour Planer App gestartet
apptitle = Tour Planer
logo = logo.png
[lang]
lang = langde
[db]
dbname = tourplaner
url =
port = 5432
user =
pw =
[hilfe]
gitrepo = https://git.dergeorg.at/dergeorg/tourplaner
doxygendoc = https://git.dergeorg.at/dergeorg/tourplaner
javadoc = https://git.dergeorg.at/dergeorg/tourplaner

View File

@ -5,14 +5,14 @@
<simplesect>
<title>Classes </title>
<itemizedlist>
<listitem><para>class <link linkend="_classtourplaner_1_1model_1_1_tour">tourplaner.model.Tour</link></para>
<listitem><para>class <link linkend="_classtourplaner_1_1model_1_1_tour">tourplaner.object.Tour</link></para>
</listitem>
</itemizedlist>
</simplesect>
<simplesect>
<title>Packages </title>
<itemizedlist>
<listitem><para>package <link linkend="_namespacetourplaner_1_1model">tourplaner.model</link></para>
<listitem><para>package <link linkend="_namespacetourplaner_1_1model">tourplaner.object</link></para>
</listitem>
</itemizedlist>
</simplesect>

View File

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_annotated" xml:lang="en-US">
<title>Class List</title>
Here are the classes, structs, unions and interfaces with brief descriptions:<link linkend="_classtourplaner_1_1data_1_1_db_connect">tourplaner.data.DbConnect</link><link linkend="_classtourplaner_1_1business_1_1_log_helper">tourplaner.business.LogHelper</link><link linkend="_classtourplaner_1_1_main">tourplaner.Main</link><link linkend="_classtourplaner_1_1ui_1_1_presenter_main">tourplaner.ui.PresenterMain</link><link linkend="_classtourplaner_1_1model_1_1_tour">tourplaner.model.Tour</link><link linkend="_classtourplaner_1_1business_1_1_tour_planer">tourplaner.business.TourPlaner</link></section>
Here are the classes, structs, unions and interfaces with brief descriptions:<link linkend="_classtourplaner_1_1data_1_1_db_connect">tourplaner.data.DbConnect</link><link linkend="_classtourplaner_1_1business_1_1_log_helper">tourplaner.business.LogHelper</link><link linkend="_classtourplaner_1_1_main">tourplaner.Main</link><link linkend="_classtourplaner_1_1ui_1_1_presenter_main">tourplaner.ui.PresenterMain</link><link linkend="_classtourplaner_1_1model_1_1_tour">tourplaner.object.Tour</link><link linkend="_classtourplaner_1_1business_1_1_tour_planer">tourplaner.business.TourPlaner</link></section>

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_classtourplaner_1_1model_1_1_tour" xml:lang="en-US">
<title>tourplaner.model.Tour Class Reference</title>
<indexterm><primary>tourplaner.model.Tour</primary></indexterm>
<title>tourplaner.object.Tour Class Reference</title>
<indexterm><primary>tourplaner.object.Tour</primary></indexterm>
<section>
<title>Detailed Description</title>

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<section xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="_namespacetourplaner_1_1model" xml:lang="en-US">
<title>Package tourplaner.model</title>
<indexterm><primary>tourplaner.model</primary></indexterm>
<title>Package tourplaner.object</title>
<indexterm><primary>tourplaner.object</primary></indexterm>
<simplesect>
<title>Classes </title>
<itemizedlist>

View File

@ -93,12 +93,12 @@ $(document).ready(function(){initNavTree('_tour_8java.html',''); initResizable()
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtourplaner_1_1model_1_1_tour.html">tourplaner.model.Tour</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtourplaner_1_1model_1_1_tour.html">tourplaner.object.Tour</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Packages</h2></td></tr>
<tr class="memitem:namespacetourplaner_1_1model"><td class="memItemLeft" align="right" valign="top">package &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacetourplaner_1_1model.html">tourplaner.model</a></td></tr>
<tr class="memitem:namespacetourplaner_1_1model"><td class="memItemLeft" align="right" valign="top">package &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacetourplaner_1_1model.html">tourplaner.object</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->

View File

@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
<dd><a class="el" href="classtourplaner_1_1ui_1_1_presenter_main.html">PresenterMain</a> (<a class="el" href="namespacetourplaner_1_1ui.html">tourplaner.ui</a>)</dd></dl>
<dl class="classindex even">
<dt class="alphachar"><a name="letter_T">T</a></dt>
<dd><a class="el" href="classtourplaner_1_1model_1_1_tour.html">Tour</a> (<a class="el" href="namespacetourplaner_1_1model.html">tourplaner.model</a>)</dd><dd><a class="el" href="classtourplaner_1_1business_1_1_tour_planer.html">TourPlaner</a> (<a class="el" href="namespacetourplaner_1_1business.html">tourplaner.business</a>)</dd></dl>
<dd><a class="el" href="classtourplaner_1_1model_1_1_tour.html">Tour</a> (<a class="el" href="namespacetourplaner_1_1model.html">tourplaner.object</a>)</dd><dd><a class="el" href="classtourplaner_1_1business_1_1_tour_planer.html">TourPlaner</a> (<a class="el" href="namespacetourplaner_1_1business.html">tourplaner.business</a>)</dd></dl>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

View File

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Tourplaner: tourplaner.model.Tour Class Reference</title>
<title>Tourplaner: tourplaner.object.Tour Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@ -84,7 +84,7 @@ $(document).ready(function(){initNavTree('classtourplaner_1_1model_1_1_tour.html
<div class="header">
<div class="headertitle">
<div class="title">tourplaner.model.Tour Class Reference</div> </div>
<div class="title">tourplaner.object.Tour Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>

View File

@ -92,7 +92,7 @@ $(document).ready(function(){initNavTree('hierarchy.html',''); initResizable();
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1data_1_1_db_connect.html" target="_self">tourplaner.data.DbConnect</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1business_1_1_log_helper.html" target="_self">tourplaner.business.LogHelper</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1ui_1_1_presenter_main.html" target="_self">tourplaner.ui.PresenterMain</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1model_1_1_tour.html" target="_self">tourplaner.model.Tour</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1model_1_1_tour.html" target="_self">tourplaner.object.Tour</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1business_1_1_tour_planer.html" target="_self">tourplaner.business.TourPlaner</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>Application</b></td><td class="desc"></td></tr>
<tr id="row_5_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtourplaner_1_1_main.html" target="_self">tourplaner.Main</a></td><td class="desc"></td></tr>

View File

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Tourplaner: Package tourplaner.model</title>
<title>Tourplaner: Package tourplaner.object</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('namespacetourplaner_1_1model.html','')
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">Package tourplaner.model</div> </div>
<div class="title">Package tourplaner.object</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">

View File

@ -1,5 +1,5 @@
\hypertarget{classtourplaner_1_1model_1_1_tour}{}\doxysection{tourplaner.\+model.\+Tour Class Reference}
\label{classtourplaner_1_1model_1_1_tour}\index{tourplaner.model.Tour@{tourplaner.model.Tour}}
\label{classtourplaner_1_1model_1_1_tour}\index{tourplaner.object.Tour@{tourplaner.object.Tour}}
\doxysubsection{Detailed Description}

View File

@ -1,5 +1,5 @@
\hypertarget{namespacetourplaner_1_1model}{}\doxysection{Package tourplaner.\+model}
\label{namespacetourplaner_1_1model}\index{tourplaner.model@{tourplaner.model}}
\label{namespacetourplaner_1_1model}\index{tourplaner.object@{tourplaner.object}}
\doxysubsection*{Classes}
\begin{DoxyCompactItemize}
\item

View File

@ -1,8 +1,8 @@
.TH "tourplaner.model" 3 "Thu Feb 25 2021" "Version 0.0.2" "Tourplaner" \" -*- nroff -*-
.TH "tourplaner.object" 3 "Thu Feb 25 2021" "Version 0.0.2" "Tourplaner" \" -*- nroff -*-
.ad l
.nh
.SH NAME
tourplaner.model
tourplaner.object
.SH SYNOPSIS
.br
.PP

View File

@ -1,8 +1,8 @@
.TH "tourplaner.model.Tour" 3 "Thu Feb 25 2021" "Version 0.0.2" "Tourplaner" \" -*- nroff -*-
.TH "tourplaner.object.Tour" 3 "Thu Feb 25 2021" "Version 0.0.2" "Tourplaner" \" -*- nroff -*-
.ad l
.nh
.SH NAME
tourplaner.model.Tour
tourplaner.object.Tour
.SH SYNOPSIS
.br
.PP

View File

@ -127,7 +127,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</th>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><a href="tourplaner/model/Tour.html" title="class in tourplaner.model">Tour</a></td>
<td class="colFirst"><a href="tourplaner/model/Tour.html" title="class in tourplaner.object">Tour</a></td>
<th class="colLast" scope="row">
<div class="block">Model einer Tour</div>
</th>

View File

@ -25,7 +25,7 @@
<li><a href="tourplaner/business/LogHelper.html" title="class in tourplaner.business">LogHelper</a></li>
<li><a href="tourplaner/Main.html" title="class in tourplaner">Main</a></li>
<li><a href="tourplaner/ui/PresenterMain.html" title="class in tourplaner.ui">PresenterMain</a></li>
<li><a href="tourplaner/model/Tour.html" title="class in tourplaner.model">Tour</a></li>
<li><a href="tourplaner/model/Tour.html" title="class in tourplaner.object">Tour</a></li>
<li><a href="tourplaner/business/TourPlaner.html" title="class in tourplaner.business">TourPlaner</a></li>
</ul>
</main>

View File

@ -118,7 +118,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="tourplaner/model/package-summary.html">tourplaner.model</a></th>
<th class="colFirst" scope="row"><a href="tourplaner/model/package-summary.html">tourplaner.object</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">

View File

@ -1,5 +1,5 @@
tourplaner
tourplaner.business
tourplaner.data
tourplaner.model
tourplaner.object
tourplaner.ui

View File

@ -97,11 +97,11 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</a>
<h2 class="title">T</h2>
<dl>
<dt><a href="../tourplaner/model/Tour.html" title="class in tourplaner.model"><span class="typeNameLink">Tour</span></a> - Class in <a href="../tourplaner/model/package-summary.html">tourplaner.model</a></dt>
<dt><a href="../tourplaner/model/Tour.html" title="class in tourplaner.object"><span class="typeNameLink">Tour</span></a> - Class in <a href="../tourplaner/model/package-summary.html">tourplaner.object</a></dt>
<dd>
<div class="block">Model einer Tour</div>
</dd>
<dt><span class="memberNameLink"><a href="../tourplaner/model/Tour.html#%3Cinit%3E()">Tour()</a></span> - Constructor for class tourplaner.model.<a href="../tourplaner/model/Tour.html" title="class in tourplaner.model">Tour</a></dt>
<dt><span class="memberNameLink"><a href="../tourplaner/model/Tour.html#%3Cinit%3E()">Tour()</a></span> - Constructor for class tourplaner.object.<a href="../tourplaner/model/Tour.html" title="class in tourplaner.object">Tour</a></dt>
<dd>&nbsp;</dd>
<dt><a href="../tourplaner/package-summary.html">tourplaner</a> - package tourplaner</dt>
<dd>&nbsp;</dd>
@ -117,7 +117,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<dd>&nbsp;</dd>
<dt><a href="../tourplaner/data/package-summary.html">tourplaner.data</a> - package tourplaner.data</dt>
<dd>&nbsp;</dd>
<dt><a href="../tourplaner/model/package-summary.html">tourplaner.model</a> - package tourplaner.model</dt>
<dt><a href="../tourplaner/model/package-summary.html">tourplaner.object</a> - package tourplaner.object</dt>
<dd>&nbsp;</dd>
<dt><a href="../tourplaner/ui/package-summary.html">tourplaner.ui</a> - package tourplaner.ui</dt>
<dd>&nbsp;</dd>

View File

@ -113,7 +113,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor" id="i3">
<th class="colFirst" scope="row"><a href="tourplaner/model/package-summary.html">tourplaner.model</a></th>
<th class="colFirst" scope="row"><a href="tourplaner/model/package-summary.html">tourplaner.object</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor" id="i4">

View File

@ -99,7 +99,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<li><a href="tourplaner/package-tree.html">tourplaner</a>, </li>
<li><a href="tourplaner/business/package-tree.html">tourplaner.business</a>, </li>
<li><a href="tourplaner/data/package-tree.html">tourplaner.data</a>, </li>
<li><a href="tourplaner/model/package-tree.html">tourplaner.model</a>, </li>
<li><a href="tourplaner/model/package-tree.html">tourplaner.object</a>, </li>
<li><a href="tourplaner/ui/package-tree.html">tourplaner.ui</a></li>
</ul>
</div>
@ -117,7 +117,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<li class="circle">tourplaner.data.<a href="tourplaner/data/DbConnect.html" title="class in tourplaner.data"><span class="typeNameLink">DbConnect</span></a></li>
<li class="circle">tourplaner.business.<a href="tourplaner/business/LogHelper.html" title="class in tourplaner.business"><span class="typeNameLink">LogHelper</span></a></li>
<li class="circle">tourplaner.ui.<a href="tourplaner/ui/PresenterMain.html" title="class in tourplaner.ui"><span class="typeNameLink">PresenterMain</span></a></li>
<li class="circle">tourplaner.model.<a href="tourplaner/model/Tour.html" title="class in tourplaner.model"><span class="typeNameLink">Tour</span></a></li>
<li class="circle">tourplaner.object.<a href="tourplaner/model/Tour.html" title="class in tourplaner.object"><span class="typeNameLink">Tour</span></a></li>
<li class="circle">tourplaner.business.<a href="tourplaner/business/TourPlaner.html" title="class in tourplaner.business"><span class="typeNameLink">TourPlaner</span></a></li>
</ul>
</li>

View File

@ -109,7 +109,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">tourplaner.model</a></div>
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">tourplaner.object</a></div>
<h2 title="Class Tour" class="title">Class Tour</h2>
</div>
<div class="contentContainer">
@ -117,7 +117,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>tourplaner.model.Tour</li>
<li>tourplaner.object.Tour</li>
</ul>
</li>
</ul>

View File

@ -3,7 +3,7 @@
<html lang="de">
<head>
<!-- Generated by javadoc (11.0.9) on Thu Feb 25 13:07:23 CET 2021 -->
<title>tourplaner.model</title>
<title>tourplaner.object</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-02-25">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
@ -93,7 +93,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</header>
<main role="main">
<div class="header">
<h1 title="Package" class="title">Package&nbsp;tourplaner.model</h1>
<h1 title="Package" class="title">Package&nbsp;tourplaner.object</h1>
</div>
<div class="contentContainer">
<ul class="blockList">
@ -106,7 +106,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</tr>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="Tour.html" title="class in tourplaner.model">Tour</a></th>
<th class="colFirst" scope="row"><a href="Tour.html" title="class in tourplaner.object">Tour</a></th>
<td class="colLast">
<div class="block">Model einer Tour</div>
</td>

View File

@ -3,7 +3,7 @@
<html lang="de">
<head>
<!-- Generated by javadoc (11.0.9) on Thu Feb 25 13:07:23 CET 2021 -->
<title>tourplaner.model Class Hierarchy</title>
<title>tourplaner.object Class Hierarchy</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-02-25">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
@ -93,7 +93,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</header>
<main role="main">
<div class="header">
<h1 class="title">Hierarchy For Package tourplaner.model</h1>
<h1 class="title">Hierarchy For Package tourplaner.object</h1>
<span class="packageHierarchyLabel">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="../../overview-tree.html">All Packages</a></li>
@ -105,7 +105,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<ul>
<li class="circle">java.lang.Object
<ul>
<li class="circle">tourplaner.model.<a href="Tour.html" title="class in tourplaner.model"><span class="typeNameLink">Tour</span></a></li>
<li class="circle">tourplaner.object.<a href="Tour.html" title="class in tourplaner.object"><span class="typeNameLink">Tour</span></a></li>
</ul>
</li>
</ul>

36
langde.ini Normal file
View File

@ -0,0 +1,36 @@
[langde]
achtung = ACHTUNG
openbrowsererror = TourplanerController -> Browser:
browserexception = Browser Exception
browserexceptionmsg = Error beim öffnen des Browsers
suchfeldleer = Suchfeld ist leer!
suchtextzuerst = Bitte zuerst den Suchtext in das Suchfeld eingeben!
keinetourselected = Keine Tour ausgewählt!
tournametitle = Tourname
tournameheader = Bitte geben Sie den Namen der Tour an!
tournamemsg = Name:
namevergebenheader = Name bereits vergeben!
namevergebenmsg1 = Der Name '
namevergebenmsg2 = ' ist bereits vergeben, bitte verwenden Sie einen andern!
startpunkttitle = Tour Startpunkt
startpunktheader = Bitte geben Sie den Startpunkt der Tour an!
startpunktmsg = Startpunkt:
zielpunkttitle = Tour zielpunkt
zielpunktheader = Bitte geben Sie den Zielpunkt der Tour an!
zielpunktmsg = Zielpunkt:
deltournoselect = ViewModel -> DelTour
deltournoselectmsg = Bitte wählen Sie zuerst eine Tour aus, bevor Sie auf löschen klicken!
exceptionstackheader = Exception stacktrace:
keinelogsvorhanden = Fügen Sie erst ein Log hinzu um es anzuzeigen!
datum = Datum
dauer = Dauer
strecke = Strecke
streckemsg = Strecke des Logeintrages
dauermsg = Dauer des Logeintrages
doppelpunkt = :
fktnichtimplementiert = Diese Funktion ist noch nicht Implementiert
vergessenodernochnichtsoweit = Entweder hat DerGeorg darauf vergessen oder ist noch nicht so weit gekommen um das zu machen!
logtournotselectedmsg = Bitte wählen Sie zuerst eine Tour aus, bevor sie einen log Eintrag erstellen!
keintextimfeld = Bitte tragen Sie einen Text in das Feld ein!
nurzahlen = Bitte geben Sie nur Zahlen an!
nurpositivezahlen = Bitte geben Sie nur positive Zahlen an!

View File

@ -1,41 +1,10 @@
Tour planer Startet!
Tour planer Startet!
App started
2021-02-26 15:59:44 INFO TourPlaner:15 - App started
2021-02-26 16:06:01 FATAL TourPlanerConfig:27 - C:\Users\georg\OneDrive\FH\Swe\Tourplaner\conf.ini (Das System kann die angegebene Datei nicht finden)
2021-02-26 16:08:31 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:27:46 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:27:46 ERROR PresenterMain:33 -
/C:/Users/georg/OneDrive/FH/Swe/Tourplaner/out/production/Tourplaner/tourplaner/ui/tourplaner.fxml:56
2021-02-26 21:27:46 INFO PostgresHelper:15 - User Table created
2021-02-26 21:27:46 ERROR ClassNotFoundException:33 - org.postgresql.Driver
2021-02-26 21:27:46 ERROR NullPointerException:33 -
2021-02-26 21:30:59 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:30:59 ERROR PresenterMain:33 -
/C:/Users/georg/OneDrive/FH/Swe/Tourplaner/out/production/Tourplaner/tourplaner/ui/tourplaner.fxml:56
2021-02-26 21:30:59 INFO PostgresHelper:15 - User Table created
2021-02-26 21:31:01 ERROR PSQLException:33 - Connection to postgres.dergeorg.at:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
2021-02-26 21:31:01 ERROR NullPointerException:33 -
2021-02-26 21:32:19 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:32:19 ERROR PresenterMain:33 -
/C:/Users/georg/OneDrive/FH/Swe/Tourplaner/out/production/Tourplaner/tourplaner/ui/tourplaner.fxml:56
2021-02-26 21:32:19 INFO PostgresHelper:15 - User Table created
2021-02-26 21:32:21 ERROR PSQLException:33 - Connection to postgres.dergeorg.at:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
2021-02-26 21:32:21 ERROR NullPointerException:33 -
2021-02-26 21:33:05 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:33:05 ERROR PresenterMain:33 -
/C:/Users/georg/OneDrive/FH/Swe/Tourplaner/out/production/Tourplaner/tourplaner/ui/tourplaner.fxml:56
2021-02-26 21:33:05 INFO PostgresHelper:15 - User Table created
2021-02-26 21:33:07 ERROR PSQLException:33 - Connection to postgres.dergeorg.at:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
2021-02-26 21:33:07 ERROR NullPointerException:33 -
2021-02-26 21:35:08 INFO TourPlaner:15 - Tour Planer App gestartet
2021-02-26 21:35:08 ERROR PresenterMain:33 -
/C:/Users/georg/OneDrive/FH/Swe/Tourplaner/out/production/Tourplaner/tourplaner/ui/tourplaner.fxml:56
2021-02-26 21:35:08 INFO PostgresHelper:15 - User Table created
2021-02-26 21:35:10 ERROR PSQLException:33 - Connection to postgres.dergeorg.at:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
2021-02-26 21:35:10 ERROR NullPointerException:33 -
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!

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

View File

@ -1,16 +0,0 @@
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log/log4j/log.out
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

View File

@ -1,19 +1,29 @@
package tourplaner;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import tourplaner.business.TourPlaner;
import tourplaner.business.ConfigHelper;
import java.io.IOException;
public class Main extends Application {
public static void main(String[] args) throws Exception {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception{
TourPlaner tourplaner = new TourPlaner(primaryStage);
public void start(Stage primaryStage) throws IOException {
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")));
primaryStage.setScene(new Scene(root, 600, 600));
primaryStage.show();
}
}

View File

@ -0,0 +1,208 @@
package tourplaner.business;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDate;
import java.util.Date;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
public class AlertHelper {
/**
* Warning Dialog
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
*/
public static void warn(String title, String header, String msg){
alertType(Alert.AlertType.WARNING, title, header, msg);
}
/**
* Info Dialog
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
*/
public static void inform(String title, String header, String msg){
alertType(Alert.AlertType.INFORMATION, title, header, msg);
}
/**
* Info Dialog ohne Header
* @param title Title des Dialogs
* @param msg Nachricht des Dialogs
*/
public static void informNoHeader(String title, String msg){
inform(title, null, msg);
}
/**
* Error Dialog
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
*/
public static void error(String title, String header, String msg){
alertType(Alert.AlertType.ERROR, title, header, msg);
}
/**
* Ausgabe einer Exception in einem Dialog
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
* @param ex Die exception die ausgegeben werden soll
*/
public static void exerror(String title, String header, String msg, Exception ex){
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle(title);
alert.setHeaderText(header);
alert.setContentText(msg);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
String exceptionText = sw.toString();
Label label = new Label(ConfigHelper.getLangIniString("exceptionstackheader"));
TextArea textArea = new TextArea(exceptionText);
textArea.setEditable(false);
textArea.setWrapText(true);
textArea.setMaxWidth(Double.MAX_VALUE);
textArea.setMaxHeight(Double.MAX_VALUE);
GridPane.setVgrow(textArea, Priority.ALWAYS);
GridPane.setHgrow(textArea, Priority.ALWAYS);
GridPane expContent = new GridPane();
expContent.setMaxWidth(Double.MAX_VALUE);
expContent.add(label, 0, 0);
expContent.add(textArea, 0, 1);
alert.getDialogPane().setExpandableContent(expContent);
alert.showAndWait();
}
/**
*
* @param alertly Typ des Dialogs
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
*/
private static void alertType(Alert.AlertType alertly, String title, String header, String msg){
Alert alert = new Alert(alertly);
alert.setTitle(title);
alert.setHeaderText(header);
alert.setContentText(msg);
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
stage.getIcons().add(
new Image("file:"+ ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "logo")));
alert.showAndWait();
}
/**
* Texteingabe
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
* @return Null bei keiner eingabe
*/
public static String inputText(String title, String header, String msg) {
String returnStr = "";
while (returnStr.isEmpty()) {
Optional<String> result = inputHelper(title, header, msg);
AtomicReference<String> returnText = new AtomicReference<>("");
result.ifPresent(returnText::set);
returnStr = returnText.get();
if (returnStr.isEmpty()) {
AlertHelper.warn(ConfigHelper.getLangIniString("tournametitle"),
ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("keintextimfeld"));
}
}
return returnStr;
}
/**
* Erstellt einen Text Input Dialog
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
* @return Result des Inputs
*/
private static Optional<String> inputHelper(String title, String header, String msg){
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle(title);
dialog.setHeaderText(header);
dialog.setContentText(msg);
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
stage.getIcons().add(
new Image("file:"+ ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "logo")));
return dialog.showAndWait();
}
/**
* Positive Nummer eingabe. Wenn Convertierung zu int nicht klappt -> -1
* @param title Title des Dialogs
* @param header Header des Dialogs
* @param msg Nachricht des Dialogs
* @return -1 bei error sonst ein Int
*/
public static int inputNumber(String title, String header, String msg) {
int returnInt = -2;
while (returnInt <= 0 ) {
Optional<String> result = inputHelper(title, header, msg);
AtomicReference<Integer> returnText = new AtomicReference<Integer>(-1);
result.ifPresent(s -> {
try {
int resultInt = Integer.parseInt(result.get());
returnText.set(resultInt);
if (resultInt < 0){
AlertHelper.warn(title, ConfigHelper.getLangIniString("achtung"), ConfigHelper.getLangIniString("nurpositivezahlen"));
}
} catch (NumberFormatException e) {
AlertHelper.warn(title, ConfigHelper.getLangIniString("achtung"), ConfigHelper.getLangIniString("nurzahlen"));
returnText.set(-1);
}
});
returnInt = returnText.get();
}
return returnInt;
}
/**
* Date Picker Dialog, sobald ein Datum ausgewählt wurde, wird es automatisch bestätigt und der dialog geschlossen
* @param title Name des Dialogs
* @return Gewähltes datum
*/
public static LocalDate datePicker(String title){
final DatePicker datePicker = new DatePicker(LocalDate.now());
final Stage stage = new Stage();
stage.getIcons().add(
new Image("file:"+ ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "logo")));
AtomicReference<LocalDate> selectedDate = new AtomicReference<>();
datePicker.setOnAction(event -> {
LocalDate date = datePicker.getValue();
System.out.println("Selected date: " + date);
selectedDate.set(date);
stage.close();
});
stage.setScene(
new Scene(datePicker)
);
stage.showAndWait();
return selectedDate.get();
}
}

View File

@ -11,6 +11,7 @@ import java.io.IOException;
public class ConfigHelper {
public static String standartConfig = "conf.ini"; // Config.ini befindet sich im Root Verzeichnis
public static String standartLangDe = "langde.ini"; // langde.ini befindet sich im Root Verzeichnis
/**
* Liest einen Int aus der Config aus
@ -48,6 +49,16 @@ public class ConfigHelper {
return ini.get(sectionName, optionName, String.class);
}
/**
* Liest einen String aus der Lang datei aus
* Die Sprache wird im config file umgestellt
* @param optionName Options Name
* @return Den angeforderten String
*/
public static String getLangIniString(String optionName){
return ConfigHelper.getIniString(ConfigHelper.getStandartLangde(), ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "lang", "lang"),optionName);
}
/**
* Setzt ein String in der Config
* @param filename Speicherort
@ -92,4 +103,12 @@ public class ConfigHelper {
public static String getStandartConfig() {
return standartConfig;
}
/**
* Gibt den namen des standard langde file zurück
* @return Name des standard langde files
*/
public static String getStandartLangde() {
return standartLangDe;
}
}

View File

@ -1,11 +1,7 @@
package tourplaner.business;
import javafx.stage.Stage;
import org.apache.log4j.Logger;
import tourplaner.data.DbConnect;
import tourplaner.ui.PresenterMain;
import java.io.IOException;
/**
* Haupt Logik des Tourplaners
@ -13,15 +9,14 @@ import java.io.IOException;
public class TourPlaner{
private Logger logger;
/**
* Startet alle bennötigten Komponenten
* @param primaryStage Stage für den Presenter
*/
public TourPlaner(Stage primaryStage){
String startText = ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "message");
LogHelper.info(startText, "TourPlaner");
PresenterMain presenterMain = new PresenterMain(primaryStage); // Start Presenter/GUI
public TourPlaner(){
LogHelper.info(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "message"),
ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "start", "app"));
new DbConnect().init();
}
public String getMapJson(String start, String ziel){
return start + " " + ziel;
}
}

View File

@ -1,7 +0,0 @@
package tourplaner.model;
/**
* Model einer Tour
*/
public class Tour {
}

View File

@ -0,0 +1,51 @@
package tourplaner.object;
import jdk.jshell.spi.ExecutionControl;
import java.time.LocalDate;
import java.util.Date;
public class Log {
private String id, dauer;
private LocalDate datum;
private double strecke;
public Log(String id, String dauer, LocalDate datum, double strecke) {
this.id = id;
this.dauer = dauer;
this.datum = datum;
this.strecke = strecke;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDauer() {
return dauer;
}
public void setDauer(String dauer) {
this.dauer = dauer;
}
public LocalDate getDatum() {
return datum;
}
public void setDatum(LocalDate datum) {
this.datum = datum;
}
public double getStrecke() {
return strecke;
}
public void setStrecke(double strecke) {
this.strecke = strecke;
}
}

View File

@ -0,0 +1,110 @@
package tourplaner.object;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicReference;
/**
* Model einer Tour
*/
public class Tour {
private String dauer, mapJson, name, start, ziel;
private double strecke;
private ArrayList<Log> log;
public Tour(String name, String dauer, String mapJson, double strecke, String start, String ziel) {
this.dauer = dauer;
this.mapJson = mapJson;
this.strecke = strecke;
this.name = name;
this.start = start;
this.ziel = ziel;
this.log = new ArrayList<>();
}
/**
* Holt einen einzigen Log Eintrag anhand der Id
* @param id Id des Eintrags der zu besorgen ist
* @return Der gefundene Log Eintrag
*/
public Log getLog(String id){
AtomicReference<Log> returnLog = new AtomicReference<>();
this.log.forEach(s -> {
if(s.getId().equals(id)){
returnLog.set(s);
}
});
return returnLog.get();
}
/**
* Fügt ein Log Eintrag hinzu
* @param newLog Der neue Log Eintrag
*/
public void addLog(Log newLog){
this.log.add(newLog);
}
/**
* Gibt alle log Einträge zurück
* @return Alle log Einträge in einer Arraylist
*/
public ArrayList<Log> getLogs(){
return this.log;
}
/**
* Löscht einen Log eintrag anhand der ID
* @param id Id die zum löschen ist
*/
public void delLog(String id){
this.log.removeIf(s -> s.getId().equals(id));
}
public String getDauer() {
return dauer;
}
public void setDauer(String dauer) {
this.dauer = dauer;
}
public String getMapJson() {
return mapJson;
}
public void setMapJson(String mapJson) {
this.mapJson = mapJson;
}
public double getStrecke() {
return strecke;
}
public void setStrecke(double strecke) {
this.strecke = strecke;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getZiel() {
return ziel;
}
public void setZiel(String ziel) {
this.ziel = ziel;
}
}

View File

@ -39,7 +39,6 @@
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
@ -52,71 +51,44 @@
<?import javafx.scene.paint.Color?>
<?import javafx.scene.text.Font?>
<VBox prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/11.0.2" xmlns:fx="http://javafx.com/fxml/1">
<VBox prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/11.0.2" xmlns:fx="http://javafx.com/fxml/1" fx:controller="tourplaner.ui.TourplanerController">
<children>
<MenuBar VBox.vgrow="NEVER">
<menus>
<Menu mnemonicParsing="false" text="File">
<Menu fx:id="menueFile" mnemonicParsing="false" text="Datei">
<items>
<MenuItem mnemonicParsing="false" text="New" />
<MenuItem mnemonicParsing="false" text="Open…" />
<Menu mnemonicParsing="false" text="Open Recent" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Close" />
<MenuItem mnemonicParsing="false" text="Save" />
<MenuItem mnemonicParsing="false" text="Save As…" />
<MenuItem mnemonicParsing="false" text="Revert" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Preferences…" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Quit" />
<MenuItem fx:id="beendenButton" mnemonicParsing="false" onAction="#quitApp" text="Beenden" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<Menu mnemonicParsing="false" text="Bearbeiten">
<items>
<MenuItem mnemonicParsing="false" text="Undo" />
<MenuItem mnemonicParsing="false" text="Redo" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Cut" />
<MenuItem mnemonicParsing="false" text="Copy" />
<MenuItem mnemonicParsing="false" text="Paste" />
<MenuItem mnemonicParsing="false" text="Delete" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Select All" />
<MenuItem mnemonicParsing="false" text="Unselect All" />
<MenuItem mnemonicParsing="false" onAction="#nimpButton" text="Keine Funktion" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Options">
<Menu mnemonicParsing="false" text="Optionen">
<items>
<MenuItem mnemonicParsing="false" text="Undo" />
<MenuItem mnemonicParsing="false" text="Redo" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Cut" />
<MenuItem mnemonicParsing="false" text="Copy" />
<MenuItem mnemonicParsing="false" text="Paste" />
<MenuItem mnemonicParsing="false" text="Delete" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" text="Select All" />
<MenuItem mnemonicParsing="false" text="Unselect All" />
<MenuItem mnemonicParsing="false" onAction="#nimpButton" text="Keine Funktion" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<Menu mnemonicParsing="false" text="Hilfe">
<items>
<MenuItem mnemonicParsing="false" text="About MyHelloApp" />
<MenuItem mnemonicParsing="false" onAction="#gitWebBrowser" text="Git Repo" />
<MenuItem mnemonicParsing="false" onAction="#javaDocBrowser" text="JavaDoc" />
<MenuItem mnemonicParsing="false" onAction="#doxygenDocBrowser" text="Doxygen Doc" />
</items>
</Menu>
</menus>
</MenuBar>
<HBox id="HBox" alignment="CENTER_LEFT" layoutX="10.0" layoutY="588.0" spacing="5.0">
<children>
<AnchorPane prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS">
<AnchorPane prefWidth="-1.0" HBox.hgrow="ALWAYS">
<children>
<Button layoutX="58.0" mnemonicParsing="false" text="+" />
<Button fx:id="tourAdd" layoutX="58.0" mnemonicParsing="false" onAction="#addTour" text="+" />
<Label layoutX="14.0" layoutY="4.0" text="Tours" />
<Button layoutX="89.0" mnemonicParsing="false" text="-" />
<Button fx:id="tourDel" layoutX="89.0" mnemonicParsing="false" onAction="#delTour" text="-" />
</children></AnchorPane>
<TextField text="Suche...." />
<Button mnemonicParsing="false" text="Suchen" />
<TextField fx:id="sucheInput" promptText="Suche..." />
<Button fx:id="sucheButton" mnemonicParsing="false" onAction="#suche" text="Suchen" />
</children>
<padding>
<Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
@ -124,20 +96,16 @@
</HBox>
<SplitPane dividerPositions="0.21492204899777284" focusTraversable="true" prefHeight="522.0" prefWidth="900.0" VBox.vgrow="ALWAYS">
<items>
<AnchorPane prefHeight="520.0" prefWidth="239.0">
<AnchorPane prefWidth="239.0">
<children>
<ListView layoutX="-1.0" prefHeight="520.0" prefWidth="190.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</ListView>
<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" />
</children>
</AnchorPane>
<SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="496.0" prefWidth="620.0">
<items>
<VBox prefHeight="200.0" prefWidth="100.0">
<VBox prefWidth="100.0">
<children>
<AnchorPane prefHeight="51.0" prefWidth="676.0">
<AnchorPane prefWidth="676.0">
<children>
<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">
<children>
@ -146,19 +114,34 @@
<Insets left="10.0" />
</HBox.margin>
</Label>
<TextField />
<TextField fx:id="titleTextView" editable="false" />
</children>
</HBox>
</children>
</AnchorPane>
<AnchorPane prefHeight="200.0" prefWidth="200.0">
<AnchorPane prefWidth="200.0">
<children>
<TabPane layoutX="1.0" layoutY="69.0" prefHeight="225.0" prefWidth="702.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="-67.0" AnchorPane.leftAnchor="1.0" AnchorPane.rightAnchor="1.0" AnchorPane.topAnchor="0.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">
<tabs>
<Tab text="Route" />
<Tab text="Description">
<Tab fx:id="kartenTab" text="Karte">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
<AnchorPane />
</content></Tab>
<Tab fx:id="beschreibungTab" text="Beschreibung">
<content>
<AnchorPane>
<children>
<TableView fx:id="beschreibungTableView" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn fx:id="nameCol" maxWidth="1.7976931348623157E308" minWidth="70.0" prefWidth="-1.0" text="Tourname" />
<TableColumn fx:id="dauerCol" maxWidth="1.7976931348623157E308" minWidth="40.0" prefWidth="-1.0" text="Dauer" />
<TableColumn fx:id="streckeCol" maxWidth="1.7976931348623157E308" minWidth="50.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>
</content>
</Tab>
</tabs>
@ -167,25 +150,25 @@
</AnchorPane>
</children>
</VBox>
<AnchorPane prefHeight="200.0" prefWidth="200.0">
<AnchorPane prefWidth="200.0">
<children>
<VBox prefHeight="200.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<VBox prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<AnchorPane prefHeight="51.0" prefWidth="676.0">
<AnchorPane prefWidth="676.0">
<children>
<HBox id="HBox" alignment="CENTER_LEFT" prefHeight="38.0" prefWidth="702.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<HBox id="HBox" alignment="CENTER_LEFT" prefWidth="702.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<Label text="Logs:">
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Label>
<Button mnemonicParsing="false" text="+" textAlignment="CENTER">
<Button mnemonicParsing="false" onAction="#addLog" text="+" textAlignment="CENTER">
<HBox.margin>
<Insets />
</HBox.margin>
</Button>
<Button mnemonicParsing="false" prefWidth="21.0" text="-" textAlignment="CENTER">
<Button fx:id="logDel" mnemonicParsing="false" onAction="#delLog" prefWidth="21.0" text="-" textAlignment="CENTER">
<HBox.margin>
<Insets right="10.0" />
</HBox.margin>
@ -197,14 +180,17 @@
</HBox>
</children>
</AnchorPane>
<AnchorPane prefHeight="200.0" prefWidth="200.0">
<AnchorPane prefWidth="200.0">
<children>
<TableView prefHeight="209.0" prefWidth="702.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<TableView fx:id="logTableView" onMouseClicked="#logItemSelected" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn prefWidth="238.0" text="Date" />
<TableColumn prefWidth="223.0" text="Duration" />
<TableColumn prefWidth="240.0" text="Distance" />
<TableColumn fx:id="logDatumCol" prefWidth="238.0" text="Datum" />
<TableColumn fx:id="logDauerCol" prefWidth="223.0" text="Dauer" />
<TableColumn fx:id="logStreckeCol" prefWidth="240.0" text="Entfernung" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>

View File

@ -1,35 +0,0 @@
package tourplaner.ui;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.apache.log4j.Logger;
import tourplaner.business.LogHelper;
import java.io.IOException;
/**
* Presenter des Tourplaners
*/
public class PresenterMain {
/**
* Startet die Gui
* @param primaryStage Stage der GUI
*
*/
public PresenterMain(Stage primaryStage){
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("tourplaner.fxml"));
primaryStage.setTitle("DerGeorg Touren Planer");
primaryStage.setScene(new Scene(root, 600, 600));
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
LogHelper.error(e.getMessage(), "PresenterMain");
}
}
}

View File

@ -0,0 +1,258 @@
package tourplaner.ui;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Orientation;
import javafx.scene.control.*;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import tourplaner.business.AlertHelper;
import tourplaner.business.ConfigHelper;
import tourplaner.business.LogHelper;
import tourplaner.object.Log;
import tourplaner.object.Tour;
import tourplaner.viewmodels.ViewModel;
import java.awt.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.time.LocalDate;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
public class TourplanerController implements Initializable {
//VM
public ViewModel viewModel = new ViewModel();
//Tour list -> links
public ListView<String> TourListView = new ListView<>();
//Tabs zu Tour -> rechts oben
public TabPane viewTabPane;
public Tab kartenTab, beschreibungTab;
public TableView<Tour> beschreibungTableView;
public TableColumn<Tour, String> startCol, zielCol, dauerCol, streckeCol, nameCol;
public TextField titleTextView, sucheInput;
//Log -> rechts unten
public TableView<Log> logTableView;
public TableColumn<Log, String> logDauerCol, logStreckeCol, logDatumCol;
/**
* Öffnet github im standart browser
*
*/
@FXML
private void gitWebBrowser(){
openBrowser(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "hilfe", "gitrepo"), "Git");
}
/**
* Öffnet Java Doc im standart browser
*
*/
@FXML
private void javaDocBrowser(){
openBrowser(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "hilfe", "javadoc"), "JavaDoc");
}
/**
* Öffnet Doxygen Doc im standart browser
*
*/
@FXML
private void doxygenDocBrowser(){
openBrowser(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "hilfe", "doxygendoc"), "Doxygen");
}
/**
* Öffnet einen link im Standart Browser
* @param uriString
* @param appname
*/
private void openBrowser(String uriString, String appname){
Desktop desktop = java.awt.Desktop.getDesktop();
try {
URI oURL = new URI(
uriString);
desktop.browse(oURL);
} catch (URISyntaxException | IOException e) {
LogHelper.error(e.getMessage(), ConfigHelper.getLangIniString("openbrowsererror") + appname);
AlertHelper.exerror(ConfigHelper.getLangIniString("browserexception"),
ConfigHelper.getLangIniString("openbrowsererror") + appname,
ConfigHelper.getLangIniString("browserexceptionmsg"), e);
}
}
/**
* Wird gestartet wenn eine Tour in der Tour listView ausgewählt wird
* @param mouseEvent Triggered Event
*/
@FXML
private void tourListSelectedItem(MouseEvent mouseEvent){
String selectedItem = TourListView.getSelectionModel().getSelectedItem();
this.viewModel.selectTour(selectedItem);
titleTextView.setText(selectedItem);
beschreibungTableView.getItems().removeIf(s -> true); //Leert die Table View komplett
beschreibungTableView.getItems().add(this.viewModel.getTour(selectedItem));
startCol.setCellValueFactory(new PropertyValueFactory<Tour, String>("start"));
zielCol.setCellValueFactory(new PropertyValueFactory<Tour, String>("ziel"));
dauerCol.setCellValueFactory(new PropertyValueFactory<Tour, String>("dauer"));
streckeCol.setCellValueFactory(new PropertyValueFactory<Tour, String>("strecke"));
nameCol.setCellValueFactory(new PropertyValueFactory<Tour, String>("name"));
//Log anzeigen
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinelogsvorhanden")));
logTableView.setItems(this.viewModel.getLogData());
logDauerCol.setCellValueFactory(new PropertyValueFactory<Log, String>("dauer"));
logStreckeCol.setCellValueFactory(new PropertyValueFactory<Log, String>("strecke"));
logDatumCol.setCellValueFactory(new PropertyValueFactory<Log, String>("datum"));
}
/**
* Beendet die App
* Verbunden mit dem Menu -> Datei -> Beenden
*/
@FXML
private void quitApp(){
System.exit(0);
}
/**
* Fügt eine Tour hinzu
* Verbunden mit Button -> Tour -> +
*/
@FXML
private void addTour(){
this.viewModel.addTour();
}
/**
* Entfernt eine ausgewählte Tour
* Verbunden mit Button -> Tour -> -
*/
@FXML
private void delTour(){
this.beschreibungTableView.getItems().removeIf(s -> true); //löscht alles aus der tabelle
this.titleTextView.setText(ConfigHelper.getLangIniString("keinetourselected"));
this.viewModel.delTour();
this.viewModel.setSelectedTour(null);
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
}
/**
* Sucht eine Tour
* Verbunden mit Button -> Suche
*/
@FXML
private void suche(){
String sucheInput = this.sucheInput.getText();
if(sucheInput.isEmpty()){
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("suchfeldleer"),
ConfigHelper.getLangIniString("suchtextzuerst"));
}else {
this.viewModel.suche(sucheInput);
}
}
/**
* Fügt einen Log eintrag zu einer Tour hinzu.
* Ist keine Tour ausgewählt, dann kommt eine Warnung an den User!
*/
@FXML
private void addLog(){
Tour selectedTour = this.viewModel.getSelectedTour();
if (selectedTour == null){
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("keinetourselected"),
ConfigHelper.getLangIniString("logtournotselectedmsg"));
}else {
ObservableList<Tour> tourData = this.viewModel.getTourData();
tourData.forEach(s -> {
if (s.getName().equals(selectedTour.getName())) {
ObservableList<Log> logData = this.viewModel.getLogData();
AtomicReference<String> newId = new AtomicReference<>();
newId.set(UUID.randomUUID().toString());
logData.forEach(ss -> {
if (ss.getId().equals(newId.get())) {
newId.set(UUID.randomUUID().toString());
}
});
LocalDate neuesDatum = null;
while (neuesDatum == null) {
neuesDatum = AlertHelper.datePicker(ConfigHelper.getLangIniString("datum"));
}
double neueDauer = AlertHelper.inputNumber(ConfigHelper.getLangIniString("dauer"),
ConfigHelper.getLangIniString("dauermsg"),
ConfigHelper.getLangIniString("dauer") +
ConfigHelper.getLangIniString("doppelpunkt"));
double neueStrecke = AlertHelper.inputNumber(ConfigHelper.getLangIniString("strecke"),
ConfigHelper.getLangIniString("streckemsg"),
ConfigHelper.getLangIniString("strecke") +
ConfigHelper.getLangIniString("doppelpunkt"));
Log newLog = new Log(newId.get(), neueDauer + "", neuesDatum, neueStrecke);
logData.add(newLog);
s.addLog(newLog);
}
});
}
}
@FXML
private void delLog(){
Log selectedLog = this.viewModel.getSelectedLog();
if(selectedLog != null) {
this.viewModel.delLog(selectedLog.getId());
}else{
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("keinetourselected"),
ConfigHelper.getLangIniString("deltournoselectmsg"));
}
}
/**
* Ein Log eintrag wurde ausgewählt
* @param mouseEvent Aktuelles Mouse Event
*/
@FXML
private void logItemSelected(MouseEvent mouseEvent){
String selectedItem = logTableView.getSelectionModel().getSelectedItem().getId();
this.viewModel.selectLog(selectedItem);
System.out.println(selectedItem);
}
/**
* Wird beim Start ausgeführt
* @param url
* @param resourceBundle
*/
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
//Tour list -> links
TourListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
TourListView.setOrientation(Orientation.VERTICAL);
TourListView.setItems(this.viewModel.getTourNamen());
//Tabs zu Tour -> rechts oben
beschreibungTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
titleTextView.setText( ConfigHelper.getLangIniString("keinetourselected"));
//Log -> rechts unten
logTableView.setPlaceholder(new Label( ConfigHelper.getLangIniString("keinetourselected")));
}
/**
* Funktion für noch nicht implementierte sachen wie im Menu der 'Bearbeiten' und 'Optionen' Knopf
*/
@FXML
public void nimpButton(){
AlertHelper.inform(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("fktnichtimplementiert"),
ConfigHelper.getLangIniString("vergessenodernochnichtsoweit"));
}
}

View File

@ -0,0 +1,219 @@
package tourplaner.viewmodels;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import tourplaner.business.AlertHelper;
import tourplaner.business.ConfigHelper;
import tourplaner.business.LogHelper;
import tourplaner.object.Log;
import tourplaner.object.Tour;
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 Tour selectedTour;
private String neueTourName, neueTourStart, neueTourZiel;
//Log
private final ObservableList<Log> logData = FXCollections.observableArrayList();
private Log selectedLog;
/**
* Fügt eine neue Tour hinzu
*/
public void addTour(){
while(this.neueTourName == null) {
this.neueTourName = AlertHelper.inputText(ConfigHelper.getLangIniString("tournametitle"),
ConfigHelper.getLangIniString("tournameheader"),
ConfigHelper.getLangIniString("tournamemsg"));
if (getTour(this.neueTourName) != null) {
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("namevergebenheader"),
ConfigHelper.getLangIniString("namevergebenmsg1")
+ this.neueTourName +
ConfigHelper.getLangIniString("namevergebenmsg2"));
this.neueTourName = null;
}
}
while(this.neueTourStart == null){
this.neueTourStart = AlertHelper.inputText(ConfigHelper.getLangIniString("startpunkttitle"),
ConfigHelper.getLangIniString("startpunktheader"),
ConfigHelper.getLangIniString("startpunktmsg"));
}
while(this.neueTourZiel == null){
this.neueTourZiel = AlertHelper.inputText(ConfigHelper.getLangIniString("zielpunkttitle"),
ConfigHelper.getLangIniString("zielpunktheader"),
ConfigHelper.getLangIniString("zielpunktmsg"));
}
if (getTour(this.neueTourName) == null) {
tourData.add(new Tour(this.neueTourName, "TBD", "TBD", 0, this.neueTourStart, this.neueTourZiel));
tourNamen.add(this.neueTourName);
}
this.neueTourStart = null;
this.neueTourZiel = null;
this.neueTourName = null;
}
/**
* Entfernt ein Log anhand dessen Id
* @param id Id des Logs welches entfernt werden soll
*/
public void delLog(String id){
this.logData.removeIf(s -> s.getId().equals(id));
AtomicReference<Tour> tourToEdit = new AtomicReference<>();
this.tourData.forEach(s -> {
if (s.getLogs() != null) {
s.getLogs().forEach(ss -> {
if (ss.getId().equals(id)) {
tourToEdit.set(s);
}
});
}
});
if (tourToEdit.get() != null){
Tour toEdit = tourToEdit.get();
toEdit.delLog(id);
this.tourData.removeIf(s -> s.getName().equals(toEdit.getName()));
this.tourData.add(toEdit);
}
}
/**
* Selectiert ein Log anhand der Id
* @param id Id welche zu selectieren ist
*/
public void selectLog(String id){
this.selectedLog = getLog(id);
}
/**
* Holt das selectierte Log als Log Objekt
* @return Das selectierte Log Objekt
*/
public Log getSelectedLog(){
return this.selectedLog;
}
/**
* Holt ein Log anhand seiner ID
* @param id Id des Log Eintrags
* @return Das gefundene Log
*/
public Log getLog(String id){
AtomicReference<Log> returnLog = new AtomicReference<>();
this.logData.forEach(s -> {
if(s.getId().equals(id)){
returnLog.set(s);
}
});
return returnLog.get();
}
public ObservableList<Log> getLogData() {
return logData;
}
public void setSelectedTour(Tour selectedTour) {
this.selectedTour = selectedTour;
}
/**
* Holt das Tourobjekt anhand des Namens
* @param tourname Name der Tour
* @return Gefundene Tour
*/
public Tour getTour(String tourname){
AtomicReference<Tour> returnTour = new AtomicReference<>();
tourData.forEach(s -> {
if(s.getName().equals(tourname)){
returnTour.set(s);
}
});
return returnTour.get();
}
/**
* Selectiert eine Tour anhand des eindeutigen Namens
* @param tourname Der Name der Tour
*/
public void selectTour(String tourname){
this.selectedTour = getTour(tourname);
this.logData.removeIf(s -> true); // Löscht alles aus dem Array
this.logData.addAll(this.selectedTour.getLogs());
}
// /**
// * Selectiert eine Tour anhand des Tour Objects.
// * Kann z.b. verwerndet werden um das selectierte Tour Object zu bearbeiten
// * @param selected
// */
// public void setSelectedTour(Tour selected){
// this.selectedTour = selected;
// }
public Tour getSelectedTour() {
return selectedTour;
}
public String getNeueTourZiel() {
return neueTourZiel;
}
public void setNeueTourZiel(String neueTourZiel) {
this.neueTourZiel = neueTourZiel;
}
public ObservableList<String> getTourNamen() {
return tourNamen;
}
public String getNeueTourName() {
return neueTourName;
}
public void setNeueTourName(String neueTourName) {
this.neueTourName = neueTourName;
}
public String getNeueTourStart() {
return neueTourStart;
}
public void setNeueTourStart(String neueTourStart) {
this.neueTourStart = neueTourStart;
}
public ObservableList<Tour> getTourData() {
return tourData;
}
/**
* Entfernt eine Tour anhand der ausgewählten Tour
*/
public void delTour(){
try {
String tourname = this.selectedTour.getName();
tourData.removeIf(s -> s.getName().equals(tourname));
tourNamen.removeIf(s -> s.equals(tourname));
logData.removeIf(s -> true);
}catch (NullPointerException e){
LogHelper.error(ConfigHelper.getLangIniString("keinetourselected"),
ConfigHelper.getLangIniString("deltournoselect"));
AlertHelper.warn(ConfigHelper.getLangIniString("achtung"),
ConfigHelper.getLangIniString("keinetourselected"),
ConfigHelper.getLangIniString("deltournoselectmsg"));
}
}
/**
* Sucht eine Tour
*/
public void suche(String suchString){
}
}