From 119b4f80c24c6add1bdaee0c7e648dee6ca8b809 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 17 Oct 2018 21:18:18 +0200
Subject: [PATCH] Fixed #335 - build.properties filled by maven; udpated pom;
 updated dependencies

---
 pom.xml                                       | 57 +++++++++++--
 .../de/deadlocker8/budgetmaster/Build.java    | 85 +++++++++++++++++++
 .../de/deadlocker8/budgetmaster/Main.java     | 12 +--
 .../budgetmaster/advices/BuildAdvice.java     | 15 ++++
 .../authentication/UserService.java           |  2 +-
 .../controller/SettingsController.java        |  2 +-
 .../budgetmaster/database/DatabaseParser.java |  2 +-
 .../budgetmaster/services/AccountService.java |  2 +-
 .../services/CategoryService.java             |  2 +-
 .../services/DatabaseService.java             |  2 +-
 .../services/SettingsService.java             |  2 +-
 .../budgetmaster/utils/Strings.java           |  6 --
 src/main/resources/build.properties           |  5 ++
 src/main/resources/languages/_de.properties   |  5 --
 src/main/resources/languages/_en.properties   |  5 --
 src/main/resources/templates/about.ftl        |  6 +-
 src/main/resources/templates/settings.ftl     |  2 +-
 .../database/DatabaseParser_v3Test.java       |  2 +-
 .../database/LegacyParserTest.java            |  2 +-
 19 files changed, 173 insertions(+), 43 deletions(-)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/Build.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/advices/BuildAdvice.java
 create mode 100644 src/main/resources/build.properties

diff --git a/pom.xml b/pom.xml
index 1c8494f0c..5bcb117fd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,17 +32,37 @@
         </repository>
     </repositories>
 
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.13.RELEASE</version>
-        <relativePath/>
-    </parent>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot-dependencies.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>de.thecodelabs</groupId>
+                <artifactId>jlibs</artifactId>
+                <version>${jlibs.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
+
+        <spring-boot-dependencies.version>1.5.13.RELEASE</spring-boot-dependencies.version>
+        <jlibs.version>2.0.1</jlibs.version>
+
+        <app.versionDate>${maven.build.timestamp}</app.versionDate>
+        <maven.build.timestamp.format>dd.MM.yy</maven.build.timestamp.format>
+        <app.versionCode>14</app.versionCode>
+        <app.author>Robert Goldmann</app.author>
     </properties>
 
     <dependencies>
@@ -102,15 +122,18 @@
         </dependency>
 
         <dependency>
-            <groupId>de.tobias</groupId>
+            <groupId>de.thecodelabs</groupId>
             <artifactId>libLogger-slf4j</artifactId>
-            <version>1.0.6</version>
         </dependency>
 
         <dependency>
             <groupId>de.tobias</groupId>
             <artifactId>libUtils</artifactId>
-            <version>1.7.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>de.thecodelabs</groupId>
+            <artifactId>libStorage</artifactId>
         </dependency>
 
         <dependency>
@@ -120,7 +143,23 @@
     </dependencies>
 
     <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
diff --git a/src/main/java/de/deadlocker8/budgetmaster/Build.java b/src/main/java/de/deadlocker8/budgetmaster/Build.java
new file mode 100644
index 000000000..379986553
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/Build.java
@@ -0,0 +1,85 @@
+package de.deadlocker8.budgetmaster;
+
+
+import de.thecodelabs.storage.settings.Storage;
+import de.thecodelabs.storage.settings.StorageTypes;
+import de.thecodelabs.storage.settings.annotation.Key;
+
+public class Build
+{
+	@Key("app.name")
+	private String appName;
+
+	@Key("app.version.name")
+	private String versionName;
+
+	@Key("app.version.code")
+	private String versionCode;
+
+	@Key("app.version.date")
+	private String versionDate;
+
+	@Key("app.author")
+	private String author;
+
+	private static Build instance;
+
+	public static Build getInstance()
+	{
+		if(instance == null)
+		{
+			instance = Storage.load(Build.class.getClassLoader().getResourceAsStream("build.properties"), StorageTypes.PROPERTIES, Build.class);
+		}
+		return instance;
+	}
+
+	public Build(String appName, String versionName, String versionCode, String versionDate, String author)
+	{
+		this.appName = appName;
+		this.versionName = versionName;
+		this.versionCode = versionCode;
+		this.versionDate = versionDate;
+		this.author = author;
+	}
+
+	public Build()
+	{
+	}
+
+	public String getAppName()
+	{
+		return appName;
+	}
+
+	public String getVersionName()
+	{
+		return versionName;
+	}
+
+	public String getVersionCode()
+	{
+		return versionCode;
+	}
+
+	public String getVersionDate()
+	{
+		return versionDate;
+	}
+
+	public String getAuthor()
+	{
+		return author;
+	}
+
+	@Override
+	public String toString()
+	{
+		return "Build{" +
+				"appName='" + appName + '\'' +
+				", versionName='" + versionName + '\'' +
+				", versionCode='" + versionCode + '\'' +
+				", versionDate='" + versionDate + '\'' +
+				", author='" + author + '\'' +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java
index 8a1b661d5..48c8f630a 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/Main.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java
@@ -1,10 +1,10 @@
 package de.deadlocker8.budgetmaster;
 
 import de.deadlocker8.budgetmaster.utils.Strings;
-import de.tobias.logger.FileOutputOption;
-import de.tobias.logger.LogLevel;
-import de.tobias.logger.LogLevelFilter;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.FileOutputOption;
+import de.thecodelabs.logger.LogLevel;
+import de.thecodelabs.logger.LogLevelFilter;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.io.PathUtils;
 import de.tobias.utils.util.Localization;
 import de.tobias.utils.util.SystemUtils;
@@ -53,7 +53,9 @@ public class Main implements ApplicationRunner
 
 		Logger.init(applicationSupportFolder);
 		Logger.setFileOutput(FileOutputOption.COMBINED);
-		Logger.appInfo(Localization.getString(Strings.APP_NAME), Localization.getString(Strings.VERSION_NAME), Localization.getString(Strings.VERSION_CODE), Localization.getString(Strings.VERSION_DATE));
+
+		Build build = Build.getInstance();
+		Logger.appInfo(build.getAppName(), build.getVersionName(), build.getVersionCode(), build.getVersionDate());
 
 		ProgramArgs.setArgs(Arrays.asList(args));
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/advices/BuildAdvice.java b/src/main/java/de/deadlocker8/budgetmaster/advices/BuildAdvice.java
new file mode 100644
index 000000000..9c2fc9770
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/advices/BuildAdvice.java
@@ -0,0 +1,15 @@
+package de.deadlocker8.budgetmaster.advices;
+
+import de.deadlocker8.budgetmaster.Build;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
+@ControllerAdvice
+public class BuildAdvice
+{
+	@ModelAttribute("build")
+	public Build getBuild()
+	{
+		return Build.getInstance();
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/UserService.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/UserService.java
index 933d877fc..27979476c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/authentication/UserService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/UserService.java
@@ -2,7 +2,7 @@ package de.deadlocker8.budgetmaster.authentication;
 
 import de.deadlocker8.budgetmaster.ProgramArgs;
 import de.deadlocker8.budgetmaster.services.AccountService;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java
index b711835a4..d7f53db7c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java
@@ -13,7 +13,7 @@ import de.deadlocker8.budgetmaster.services.HelpersService;
 import de.deadlocker8.budgetmaster.services.ImportService;
 import de.deadlocker8.budgetmaster.utils.LanguageType;
 import de.deadlocker8.budgetmaster.utils.Strings;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.util.Localization;
 import de.tobias.utils.util.RandomUtils;
 import org.joda.time.DateTime;
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
index 94cfdb1e8..b1f4df260 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java
@@ -3,7 +3,7 @@ package de.deadlocker8.budgetmaster.database;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import de.deadlocker8.budgetmaster.database.legacy.LegacyParser;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.util.Localization;
 
 public class DatabaseParser
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java
index dab639fd1..b1472a4c3 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/AccountService.java
@@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.entities.Account;
 import de.deadlocker8.budgetmaster.repositories.AccountRepository;
 import de.deadlocker8.budgetmaster.repositories.TransactionRepository;
 import de.deadlocker8.budgetmaster.utils.Strings;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.util.Localization;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java
index d1ab51e13..2ce8a67db 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/CategoryService.java
@@ -5,7 +5,7 @@ import de.deadlocker8.budgetmaster.entities.CategoryType;
 import de.deadlocker8.budgetmaster.entities.Transaction;
 import de.deadlocker8.budgetmaster.repositories.CategoryRepository;
 import de.deadlocker8.budgetmaster.utils.Strings;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.util.Localization;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java
index c699f5c2b..cd448af1c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java
@@ -5,7 +5,7 @@ import de.deadlocker8.budgetmaster.database.Database;
 import de.deadlocker8.budgetmaster.entities.Account;
 import de.deadlocker8.budgetmaster.entities.Category;
 import de.deadlocker8.budgetmaster.entities.Transaction;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import org.joda.time.DateTime;
 import org.joda.time.format.ISODateTimeFormat;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java
index a0d05e15d..622ff4616 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/SettingsService.java
@@ -2,7 +2,7 @@ package de.deadlocker8.budgetmaster.services;
 
 import de.deadlocker8.budgetmaster.entities.Settings;
 import de.deadlocker8.budgetmaster.repositories.SettingsRepository;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
index d9a2d4d27..21a2cc568 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
@@ -2,12 +2,6 @@ package de.deadlocker8.budgetmaster.utils;
 
 public class Strings 
 {    
-    //APP_INFO
-    public static final String APP_NAME = "app.name";
-    public static final String VERSION_CODE = "version.code";
-    public static final String VERSION_NAME = "version.name";
-    public static final String VERSION_DATE = "version.date";
-
     //MISC
     public static final String CATEGORY_NONE = "category.none";
     public static final String CATEGORY_REST = "category.rest";
diff --git a/src/main/resources/build.properties b/src/main/resources/build.properties
new file mode 100644
index 000000000..6f0fcb711
--- /dev/null
+++ b/src/main/resources/build.properties
@@ -0,0 +1,5 @@
+app.name=${pom.artifactId}
+app.version.code=${app.versionCode}
+app.version.name=${pom.version}
+app.version.date=${app.versionDate}
+app.author=${app.author}
\ No newline at end of file
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index 15725236a..01d4603a5 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -1,9 +1,4 @@
 # DEFAULT
-app.name=BudgetMaster
-version.code=14
-version.name=2.0.0
-version.date=23.07.18
-author=Robert Goldmann
 credits=Verwendete Schriftarten: Roboto<br>Verwendete Bibliotheken:<br>spring-boot-starter-parent 1.5.13<br>spring-boot-devtools 1.5.13<br>spring-boot-starter-web 1.5.13<br>spring-boot-starter-test 1.5.13<br>spring-boot-starter-data-jpa 1.5.13<br>spring-boot-starter-security 1.5.13<br>tools 1.0.0<br>h2 1.4.197<br>joda-time 2.9.9<br>usertype.core 5.0.0.GA<br>maven-surefire-plugin 2.12<br>launch4j-maven-plugin 1.7.21<br>gson 2.8.1<br>jquery 2.1.1<br>materialize 0.100.2<br>fontawesome 5.0.10<br>Google Material Icons<br>Spectrum Colorpicker 1.8.0
 folder=Deadlocker/BudgetMaster
 roadmap.url=https://roadmaps.thecodelabs.de/php/index.php?id=1
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index f2f6532d3..aa7eb67c5 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -1,9 +1,4 @@
 # DEFAULT
-app.name=BudgetMaster
-version.code=14
-version.name=2.0.0
-version.date=23.07.18
-author=Robert Goldmann
 credits=Fonts used: Roboto<br>Libraries used:<br>spring-boot-starter-parent 1.5.13<br>spring-boot-devtools 1.5.13<br>spring-boot-starter-web 1.5.13<br>spring-boot-starter-test 1.5.13<br>spring-boot-starter-data-jpa 1.5.13<br>spring-boot-starter-security 1.5.13<br>tools 1.0.0<br>h2 1.4.197<br>joda-time 2.9.9<br>usertype.core 5.0.0.GA<br>maven-surefire-plugin 2.12<br>launch4j-maven-plugin 1.7.21<br>gson 2.8.1<br>jquery 2.1.1<br>materialize 0.100.2<br>fontawesome 5.0.10<br>Google Material Icons<br>Spectrum Colorpicker 1.8.0
 folder=Deadlocker/BudgetMaster
 roadmap.url=https://roadmaps.thecodelabs.de/php/index.php?id=2
diff --git a/src/main/resources/templates/about.ftl b/src/main/resources/templates/about.ftl
index 657d884d4..2cc43cad3 100644
--- a/src/main/resources/templates/about.ftl
+++ b/src/main/resources/templates/about.ftl
@@ -18,15 +18,15 @@
                     <div class="hide-on-small-only"><br><br></div>
                     <div class="row">
                         <div class="col s4 m3 offset-m2 l2 offset-l3 bold">${locale.getString("about.version")}</div>
-                        <div class="col s8 m5 l4">${locale.getString("version.name")} (${locale.getString("version.code")})</div>
+                        <div class="col s8 m5 l4">${build.getVersionName()} (${build.getVersionCode()})</div>
                     </div>
                     <div class="row">
                         <div class="col s4 m3 offset-m2 l2 offset-l3 bold">${locale.getString("about.date")}</div>
-                        <div class="col s8 m5 l4">${locale.getString("version.date")}</div>
+                        <div class="col s8 m5 l4">${build.getVersionDate()}</div>
                     </div>
                     <div class="row">
                         <div class="col s4 m3 offset-m2 l2 offset-l3 bold">${locale.getString("about.author")}</div>
-                        <div class="col s8 m5 l4">${locale.getString("author")}</div>
+                        <div class="col s8 m5 l4">${build.getAuthor()}</div>
                     </div>
                     <div class="row">
                         <div class="col s4 m3 offset-m2 l2 offset-l3 bold">${locale.getString("about.roadmap")}</div>
diff --git a/src/main/resources/templates/settings.ftl b/src/main/resources/templates/settings.ftl
index 606388cb9..caf735bac 100644
--- a/src/main/resources/templates/settings.ftl
+++ b/src/main/resources/templates/settings.ftl
@@ -108,7 +108,7 @@
                                             </div>
                                         </td>
                                         <td>${locale.getString("settings.updates.current.version")}</td>
-                                        <td>v${locale.getString("version.name")} (${locale.getString("version.code")})</td>
+                                        <td>v${build.getVersionName()} (${build.getVersionCode()})</td>
                                     </tr>
                                     <tr>
                                         <td>${locale.getString("settings.updates.latest.version")}</td>
diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java
index 9673448ee..4ffccc79a 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v3Test.java
@@ -4,7 +4,7 @@ import de.deadlocker8.budgetmaster.entities.*;
 import de.deadlocker8.budgetmaster.repeating.RepeatingOption;
 import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes;
 import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import de.tobias.utils.util.Localization;
 import de.tobias.utils.util.Localization.LocalizationDelegate;
 import org.joda.time.DateTime;
diff --git a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java
index 5f549b0a8..6b082834a 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/database/LegacyParserTest.java
@@ -7,7 +7,7 @@ import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndDate;
 import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever;
 import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays;
 import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierMonths;
-import de.tobias.logger.Logger;
+import de.thecodelabs.logger.Logger;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.junit.Test;
-- 
GitLab