Skip to content

Commit

Permalink
Merge branch 'v2_14_0'
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins committed Feb 26, 2023
2 parents b5554c9 + 197332e commit 25f26f1
Show file tree
Hide file tree
Showing 96 changed files with 5,114 additions and 366 deletions.
29 changes: 21 additions & 8 deletions BudgetMasterServer/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>BudgetMaster</artifactId>
<groupId>de.deadlocker8</groupId>
<version>2.13.0</version>
<version>2.14.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand All @@ -29,18 +29,20 @@
<webjars-locator.version>0.46</webjars-locator.version>
<jquery.version>3.6.3</jquery.version>
<materializecss.version>1.0.0</materializecss.version>
<fontawesome.version>6.2.1</fontawesome.version>
<fontawesome.version>6.3.0</fontawesome.version>
<sortablejs.version>1.15.0</sortablejs.version>
<mousetrap.version>1.6.5</mousetrap.version>
<codemirror.version>5.62.2</codemirror.version>
<selenium.version>4.7.2</selenium.version>
<selenium.version>4.8.1</selenium.version>
<jgit.version>6.4.0.202211300538-r</jgit.version>
<natorder.version>1.1.3</natorder.version>
<itextpdf.version>5.5.13.3</itextpdf.version>
<vanilla-picker.version>2.12.1</vanilla-picker.version>
<jacoco-maven-plugin.version>0.8.8</jacoco-maven-plugin.version>
<opencsv.version>5.7.1</opencsv.version>
<datatables.version>1.13.1</datatables.version>
<datatables.version>1.13.2</datatables.version>
<jakarta.xml.bind-api.version>4.0.0</jakarta.xml.bind-api.version>
<junit-jupiter-engine.version>5.9.2</junit-jupiter-engine.version>

<project.outputDirectory>${project.build.directory}/../build/${project.version}</project.outputDirectory>
<project.artifactName>${project.artifactId}-v${project.version}</project.artifactName>
Expand Down Expand Up @@ -68,10 +70,15 @@
</dependency>

<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jakarta.xml.bind-api.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -258,11 +265,17 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M6</version>
<version>3.0.0-M9</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter-engine.version}</version>
</dependency>
</dependencies>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<!--suppress MavenModelInspection -->
<argLine>${surefireArgLine} -Dfile.encoding=UTF-8</argLine>

<systemPropertyVariables>
<testProfile>true</testProfile>
</systemPropertyVariables>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import de.deadlocker8.budgetmaster.transactions.Transaction;
import de.deadlocker8.budgetmaster.utils.ProvidesID;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.util.List;
import java.util.Objects;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.WebRequest;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.text.MessageFormat;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -78,7 +78,7 @@ public String selectAccount(HttpServletRequest request, @PathVariable("ID") Inte
{
final StringBuffer requestURL = request.getRequestURL();
final String baseUrl = requestURL.substring(0, requestURL.length() - request.getRequestURI().length());
referer = baseUrl + "/transactions/";
referer = baseUrl + "/transactions";
}

if(referer.contains(ACCOUNT_SELECTED_INDICATOR))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Map;

@Controller
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import de.deadlocker8.budgetmaster.accounts.Account;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

@Entity
@Table(name = "login_user")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
.csrf()
.and()

.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**", "/webjars/**", "/favicon.ico", "/touch_icon.png").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/**").authenticated()
.authorizeHttpRequests()
.requestMatchers("/css/**", "/js/**", "/images/**", "/webjars/**", "/favicon.ico", "/touch_icon.png").permitAll()
.requestMatchers("/login").permitAll()
.requestMatchers("/**").authenticated()
.and()
.formLogin()
.loginPage("/login")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import de.thecodelabs.utils.util.Color;
import de.thecodelabs.utils.util.ColorUtilsNonJavaFX;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.util.List;
import java.util.Objects;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.WebRequest;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import com.google.gson.annotations.Expose;
import de.deadlocker8.budgetmaster.utils.ProvidesID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.util.Objects;

@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.WebRequest;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.text.MessageFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -47,9 +47,9 @@ public String index(Model model)
public String whatsNewModal(Model model)
{
final List<NewsEntry> newsEntries = new ArrayList<>();
newsEntries.add(NewsEntry.createWithLocalizationKey("csvImport"));
newsEntries.add(NewsEntry.createWithLocalizationKey("recurringTransactionsOverview"));
newsEntries.add(NewsEntry.createWithLocalizationKey("improvedRestCalculation"));
newsEntries.add(NewsEntry.createWithLocalizationKey("csvImportSave"));
newsEntries.add(NewsEntry.createWithLocalizationKey("csvImportSuggestions"));
newsEntries.add(NewsEntry.createWithLocalizationKey("csvImportAmountSeparators"));

model.addAttribute(ModelAttributes.NEWS_ENTRIES, newsEntries);
return ReturnValues.WHATS_NEW;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;


@Controller
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public IndexController(StatisticsService statisticsService)
this.statisticsService = statisticsService;
}

@GetMapping
@GetMapping("/")
public String index()
{
return ReturnValues.INDEX;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import de.deadlocker8.budgetmaster.database.model.BackupDatabase;
import de.deadlocker8.budgetmaster.database.model.v10.BackupDatabase_v10;
import de.deadlocker8.budgetmaster.database.model.v4.BackupDatabase_v4;
import de.deadlocker8.budgetmaster.database.model.v5.BackupDatabase_v5;
import de.deadlocker8.budgetmaster.database.model.v6.BackupDatabase_v6;
Expand All @@ -20,7 +21,7 @@ public class DatabaseParser
final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

private static final int MINIMUM_VERSION = 4;
public static final int LATEST_VERSION = 9;
public static final int LATEST_VERSION = 10;

private final String jsonString;

Expand Down Expand Up @@ -82,6 +83,13 @@ public InternalDatabase parseDatabaseFromJSON() throws IllegalArgumentException
importedDatabase = parsedDatabase;
}

if(version == 10)
{
BackupDatabase_v10 parsedDatabase = new DatabaseParser_v10(jsonString).parseDatabaseFromJSON();
LOGGER.debug(MessageFormat.format("Parsed database with {0} transactions, {1} categories, {2} accounts, {3} templates {4} charts {5} images {6} icons and {7} transaction name keywords", parsedDatabase.getTransactions().size(), parsedDatabase.getCategories().size(), parsedDatabase.getAccounts().size(), parsedDatabase.getTemplates().size(), parsedDatabase.getCharts().size(), parsedDatabase.getImages().size(), parsedDatabase.getIcons().size(), parsedDatabase.getTransactionNameKeywords().size()));
importedDatabase = parsedDatabase;
}

if(importedDatabase == null)
{
throw new IllegalArgumentException(Localization.getString("error.database.import.unknown.version"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package de.deadlocker8.budgetmaster.database;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import de.deadlocker8.budgetmaster.database.model.v10.BackupCsvImportSettings_v10;
import de.deadlocker8.budgetmaster.database.model.v10.BackupDatabase_v10;
import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5;
import de.deadlocker8.budgetmaster.database.model.v5.BackupImage_v5;
import de.deadlocker8.budgetmaster.database.model.v6.BackupTransaction_v6;
import de.deadlocker8.budgetmaster.database.model.v7.BackupAccount_v7;
import de.deadlocker8.budgetmaster.database.model.v7.BackupCategory_v7;
import de.deadlocker8.budgetmaster.database.model.v8.BackupIcon_v8;
import de.deadlocker8.budgetmaster.database.model.v8.BackupTemplateGroup_v8;
import de.deadlocker8.budgetmaster.database.model.v8.BackupTemplate_v8;
import de.deadlocker8.budgetmaster.database.model.v9.BackupTransactionNameKeyword_v9;

public class DatabaseParser_v10
{
private final String jsonString;

private BackupDatabase_v10 database;

public DatabaseParser_v10(String json)
{
this.jsonString = json;
this.database = new BackupDatabase_v10();
}

public BackupDatabase_v10 parseDatabaseFromJSON() throws IllegalArgumentException
{
database = new BackupDatabase_v10();

final JsonObject root = JsonParser.parseString(jsonString).getAsJsonObject();
database.setImages(BackupItemParser.parseItems(root.get("images").getAsJsonArray(), BackupImage_v5.class));
database.setIcons(BackupItemParser.parseItems(root.get("icons").getAsJsonArray(), BackupIcon_v8.class));
database.setAccounts(BackupItemParser.parseItems(root.get("accounts").getAsJsonArray(), BackupAccount_v7.class));
database.setCategories(BackupItemParser.parseItems(root.get("categories").getAsJsonArray(), BackupCategory_v7.class));
database.setTransactions(BackupItemParser.parseItems(root.get("transactions").getAsJsonArray(), BackupTransaction_v6.class));
database.setTemplateGroups(BackupItemParser.parseItems(root.get("templateGroups").getAsJsonArray(), BackupTemplateGroup_v8.class));
database.setTemplates(BackupItemParser.parseItems(root.get("templates").getAsJsonArray(), BackupTemplate_v8.class));
database.setCharts(BackupItemParser.parseItems(root.get("charts").getAsJsonArray(), BackupChart_v5.class));
database.setTransactionNameKeywords(BackupItemParser.parseItems(root.get("transactionNameKeywords").getAsJsonArray(), BackupTransactionNameKeyword_v9.class));
database.setCsvImportSettings(BackupItemParser.parseItems(root.get("csvImportSettings").getAsJsonArray(), BackupCsvImportSettings_v10.class));

return database;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import de.deadlocker8.budgetmaster.charts.ChartService;
import de.deadlocker8.budgetmaster.charts.ChartType;
import de.deadlocker8.budgetmaster.database.model.BackupDatabase;
import de.deadlocker8.budgetmaster.database.model.v9.BackupDatabase_v9;
import de.deadlocker8.budgetmaster.database.model.v10.BackupDatabase_v10;
import de.deadlocker8.budgetmaster.hints.HintService;
import de.deadlocker8.budgetmaster.icon.Icon;
import de.deadlocker8.budgetmaster.icon.IconService;
Expand All @@ -26,6 +26,8 @@
import de.deadlocker8.budgetmaster.templates.TemplateService;
import de.deadlocker8.budgetmaster.transactions.Transaction;
import de.deadlocker8.budgetmaster.transactions.TransactionService;
import de.deadlocker8.budgetmaster.transactions.csvimport.CsvImportSettings;
import de.deadlocker8.budgetmaster.transactions.csvimport.CsvImportSettingsService;
import de.deadlocker8.budgetmaster.transactions.keywords.TransactionNameKeyword;
import de.deadlocker8.budgetmaster.transactions.keywords.TransactionNameKeywordService;
import de.deadlocker8.budgetmaster.utils.DateHelper;
Expand Down Expand Up @@ -69,11 +71,12 @@ public class DatabaseService
private final IconService iconService;
private final HintService hintService;
private final TransactionNameKeywordService transactionNameKeywordService;
private final CsvImportSettingsService csvImportSettingsService;

private final List<Resettable> services;

@Autowired
public DatabaseService(AccountService accountService, CategoryService categoryService, TransactionService transactionService, TagService tagService, TemplateService templateService, TemplateGroupService templateGroupService, ChartService chartService, SettingsService settingsService, ImageService imageService, IconService iconService, HintService hintService, TransactionNameKeywordService transactionNameKeywordService)
public DatabaseService(AccountService accountService, CategoryService categoryService, TransactionService transactionService, TagService tagService, TemplateService templateService, TemplateGroupService templateGroupService, ChartService chartService, SettingsService settingsService, ImageService imageService, IconService iconService, HintService hintService, TransactionNameKeywordService transactionNameKeywordService, CsvImportSettingsService csvImportSettingsService)
{
this.accountService = accountService;
this.categoryService = categoryService;
Expand All @@ -87,6 +90,7 @@ public DatabaseService(AccountService accountService, CategoryService categorySe
this.iconService = iconService;
this.hintService = hintService;
this.transactionNameKeywordService = transactionNameKeywordService;
this.csvImportSettingsService = csvImportSettingsService;
this.services = List.of(transactionService, templateService, templateGroupService, categoryService, accountService, tagService, chartService, iconService, imageService, tagService, hintService, transactionNameKeywordService);
}

Expand Down Expand Up @@ -213,22 +217,24 @@ public static String getExportFileName()

public BackupDatabase getDatabaseForJsonSerialization()
{
List<Category> categories = categoryService.getAllEntitiesAsc();
List<Account> accounts = accountService.getRepository().findAll();
List<Transaction> transactions = transactionService.getRepository().findAll();
List<Transaction> filteredTransactions = filterRepeatingTransactions(transactions);
List<TemplateGroup> templateGroups = templateGroupService.getRepository().findAll();
List<Template> templates = templateService.getRepository().findAll();
List<Chart> charts = chartService.getRepository().findAllByType(ChartType.CUSTOM);
List<Image> images = imageService.getRepository().findAll();
List<Icon> icons = iconService.getRepository().findAll();
List<TransactionNameKeyword> transactionNameKeywords = transactionNameKeywordService.getRepository().findAll();
final List<Category> categories = categoryService.getAllEntitiesAsc();
final List<Account> accounts = accountService.getRepository().findAll();
final List<Transaction> transactions = transactionService.getRepository().findAll();
final List<Transaction> filteredTransactions = filterRepeatingTransactions(transactions);
final List<TemplateGroup> templateGroups = templateGroupService.getRepository().findAll();
final List<Template> templates = templateService.getRepository().findAll();
final List<Chart> charts = chartService.getRepository().findAllByType(ChartType.CUSTOM);
final List<Image> images = imageService.getRepository().findAll();
final List<Icon> icons = iconService.getRepository().findAll();
final List<TransactionNameKeyword> transactionNameKeywords = transactionNameKeywordService.getRepository().findAll();
final CsvImportSettings csvImportSettings = csvImportSettingsService.getCsvImportSettings();

LOGGER.debug(MessageFormat.format("Reduced {0} transactions to {1}", transactions.size(), filteredTransactions.size()));

InternalDatabase database = new InternalDatabase(categories, accounts, filteredTransactions, templateGroups, templates, charts, images, icons, transactionNameKeywords);
InternalDatabase database = new InternalDatabase(categories, accounts, filteredTransactions, templateGroups, templates, charts, images, icons, transactionNameKeywords, List.of(csvImportSettings));
LOGGER.debug(MessageFormat.format("Created database for JSON with {0} transactions, {1} categories, {2} accounts, {3} templates groups, {4} templates, {5} charts {6} images {7} icons and {8} transaction name keywords", database.getTransactions().size(), database.getCategories().size(), database.getAccounts().size(), database.getTemplateGroups().size(), database.getTemplates().size(), database.getCharts().size(), database.getImages().size(), database.getIcons().size(), database.getTransactionNameKeywords().size()));

BackupDatabase_v9 databaseInExternalForm = BackupDatabase_v9.createFromInternalEntities(database);
BackupDatabase_v10 databaseInExternalForm = BackupDatabase_v10.createFromInternalEntities(database);
LOGGER.debug("Converted database to external form");
return databaseInExternalForm;
}
Expand Down
Loading

0 comments on commit 25f26f1

Please sign in to comment.