Skip to content

Commit

Permalink
Restliche MDV-Funktionalitäten + Clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
tpoerschke committed Jul 6, 2024
1 parent fdf70f3 commit 29293e2
Show file tree
Hide file tree
Showing 21 changed files with 184 additions and 305 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
import timkodiert.budgetBook.view.ImportView;
import timkodiert.budgetBook.view.MonthlyOverview;
import timkodiert.budgetBook.view.View;
import timkodiert.budgetBook.view.category.CategoriesManageView;
import timkodiert.budgetBook.view.category.CategoryDetailView;
import timkodiert.budgetBook.view.category.ManageCategoriesView;
import timkodiert.budgetBook.view.fixed_turnover.FixedTurnoverDetailView;
import timkodiert.budgetBook.view.fixed_turnover.FixedTurnoverManageView;
import timkodiert.budgetBook.view.unique_expense.UniqueExpenseDetailView;
Expand Down Expand Up @@ -39,7 +39,7 @@ private void registerController() {
viewControllerMap.put(FixedTurnoverDetailView.class, viewComponent::getFixedTurnoverDetailView);
viewControllerMap.put(UniqueExpensesManageView.class, viewComponent::getUniqueExpensesManageView);
viewControllerMap.put(UniqueExpenseDetailView.class, viewComponent::getUniqueExpenseDetailView);
viewControllerMap.put(ManageCategoriesView.class, viewComponent::getManageCategoriesView);
viewControllerMap.put(CategoriesManageView.class, viewComponent::getManageCategoriesView);
viewControllerMap.put(CategoryDetailView.class, viewComponent::getCategoryDetailView);
// Technische Ansichten
viewControllerMap.put(MigrationView.class, viewComponent::getMigrationView);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public interface ServiceModule {

@Binds @Singleton PropertiesService bindPropertiesService(PropertiesServiceImpl impl);

@Binds @Singleton FXMLLoader bindFXMLLoader(BbFxmlLoader impl);
@Binds FXMLLoader bindFXMLLoader(BbFxmlLoader impl);
}
// @formatter:on
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
import timkodiert.budgetBook.view.ImportView;
import timkodiert.budgetBook.view.MainViewImpl;
import timkodiert.budgetBook.view.MonthlyOverview;
import timkodiert.budgetBook.view.NewCategoryView;
import timkodiert.budgetBook.view.category.CategoriesManageView;
import timkodiert.budgetBook.view.category.CategoryDetailView;
import timkodiert.budgetBook.view.category.ManageCategoriesView;
import timkodiert.budgetBook.view.fixed_turnover.FixedTurnoverDetailView;
import timkodiert.budgetBook.view.fixed_turnover.FixedTurnoverManageView;
import timkodiert.budgetBook.view.unique_expense.UniqueExpenseDetailView;
Expand All @@ -35,9 +34,8 @@ public interface ViewComponent {
// -----------------------------------
// Kategorien Ausgaben
// -----------------------------------
ManageCategoriesView getManageCategoriesView();
CategoriesManageView getManageCategoriesView();
CategoryDetailView getCategoryDetailView();
NewCategoryView getNewCategoryView();

// -----------------------------------
// Regelmäßige Umsätze
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,12 @@
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.MenuBar;
import javafx.scene.control.RadioMenuItem;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.jetbrains.annotations.Nullable;

Expand All @@ -29,15 +26,13 @@
import timkodiert.budgetBook.injector.ControllerFactory;
import timkodiert.budgetBook.injector.ViewComponent;
import timkodiert.budgetBook.properties.PropertiesService;
import timkodiert.budgetBook.util.StageBuilder;

import static timkodiert.budgetBook.view.FxmlResource.ANNUAL_OVERVIEW;
import static timkodiert.budgetBook.view.FxmlResource.IMPORT_VIEW;
import static timkodiert.budgetBook.view.FxmlResource.MAIN_VIEW;
import static timkodiert.budgetBook.view.FxmlResource.MANAGE_REGULAR_TURNOVER_VIEW;
import static timkodiert.budgetBook.view.FxmlResource.MANAGE_UNIQUE_TURNOVER_VIEW;
import static timkodiert.budgetBook.view.FxmlResource.MONTHLY_OVERVIEW;
import static timkodiert.budgetBook.view.FxmlResource.NEW_CATEGORY_VIEW;

@Singleton
public class MainViewImpl implements Initializable, MainView {
Expand Down Expand Up @@ -147,34 +142,6 @@ public void openImportView(ActionEvent event) {
@FXML
private void openManageCategoriesView(ActionEvent event) {
loadViewPartial(FxmlResource.MANAGE_CATEGORY_VIEW);
// try {
// Stage stage = StageBuilder.create(languageManager)
// .withModality(Modality.APPLICATION_MODAL)
// .withOwner(this.primaryStage)
// .withFXMLResource(MANAGE_CATEGORIES_VIEW.toString())
// .withView(viewComponent.getManageCategoriesView())
// .build();
// stage.show();
// } catch (Exception e) {
// Alert alert = new Alert(AlertType.ERROR, languageManager.get("alert.viewCouldNotBeOpened"));
// alert.showAndWait();
// }
}

@FXML
private void openNewCategoryView(ActionEvent event) {
try {
Stage stage = StageBuilder.create(languageManager)
.withModality(Modality.APPLICATION_MODAL)
.withOwner(this.primaryStage)
.withFXMLResource(NEW_CATEGORY_VIEW.toString())
.withView(viewComponent.getNewCategoryView())
.build();
stage.show();
} catch (Exception e) {
Alert alert = new Alert(AlertType.ERROR, languageManager.get("alert.viewCouldNotBeOpened"));
alert.showAndWait();
}
}

@FXML
Expand Down
1 change: 0 additions & 1 deletion bb.application/src/main/resources/fxml/Main.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
<MenuItem mnemonicParsing="false" onAction="#openUniqueExpensesManageView" text="%menuItem.openUniqueExpensesView" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" onAction="#openManageCategoriesView" text="%menuItem.manageCategoriesView" />
<MenuItem mnemonicParsing="false" onAction="#openNewCategoryView" text="%menuItem.openNewCategoryView" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" onAction="#openSettingsView" text="%menuItem.openSettingsView" />
</items>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package timkodiert.budgetBook.domain.model;

import org.hibernate.annotations.GenericGenerator;

import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.hibernate.annotations.GenericGenerator;

@MappedSuperclass
@Getter
Expand All @@ -15,4 +14,8 @@ public abstract class BaseEntity implements ContentEquals {
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
protected int id;

public boolean isNew() {
return id <= 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,14 @@ public void initAdapter() {
}

public CheckBoxTreeItem<Category> asTreeItem() {
this.treeItem.setValue(this);
this.treeItem.getChildren().setAll(this.getChildren().stream().map(Category::asTreeItem).toList());
return this.treeItem;
CheckBoxTreeItem<Category> treeItem = new CheckBoxTreeItem<>();
treeItem.setValue(this);
treeItem.getChildren().setAll(this.getChildren().stream().map(Category::asTreeItem).toList());
return treeItem;
}

public boolean hasParent() {
return parent != null;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package timkodiert.budgetBook.ui.helper;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.control.TreeItem;
Expand All @@ -12,31 +14,40 @@

public class CategoryTreeHelper {

private List<CheckBoxTreeItem<Category>> allTreeItems;
private final List<CheckBoxTreeItem<Category>> allTreeItems;

private CategoryTreeHelper(TreeView<Category> categoriesTreeView, List<Category> categories) {
allTreeItems = categories.stream().map(Category::asTreeItem).toList();
List<? extends TreeItem<Category>> roots = allTreeItems.stream()
.filter(ti -> ti.getValue().getParent() == null)
.toList();
private CategoryTreeHelper(TreeView<Category> categoriesTreeView, List<Category> categories, boolean checkboxCells) {
List<CheckBoxTreeItem<Category>> roots = categories.stream().filter(Predicate.not(Category::hasParent)).map(Category::asTreeItem).toList();
allTreeItems = roots.stream().flatMap(root -> identifyAllTreeItems(root).stream()).toList();
TreeItem<Category> root = new TreeItem<>(new Category("ROOT"));
root.getChildren().addAll(roots);
categoriesTreeView.setCellFactory(CheckBoxTreeCell.forTreeView());
if (checkboxCells) {
categoriesTreeView.setCellFactory(CheckBoxTreeCell.forTreeView());
}
categoriesTreeView.setRoot(root);
categoriesTreeView.setShowRoot(false);
}

private List<CheckBoxTreeItem<Category>> identifyAllTreeItems(CheckBoxTreeItem<Category> root) {
List<CheckBoxTreeItem<Category>> items = new ArrayList<>();
items.add(root);
root.getChildren().forEach(child -> items.addAll(identifyAllTreeItems((CheckBoxTreeItem<Category>) child)));
return items;
}

public void selectCategories(Categorizable entity) {
allTreeItems.forEach(ti -> ti.setSelected(entity.getCategories().contains(ti.getValue())));
}

public List<Category> getSelectedCategories() {
return allTreeItems.stream()
.filter(CheckBoxTreeItem::isSelected).map(TreeItem::getValue)
.toList();
return allTreeItems.stream().filter(CheckBoxTreeItem::isSelected).map(TreeItem::getValue).toList();
}

public static CategoryTreeHelper from(TreeView<Category> treeView, List<Category> categories) {
return new CategoryTreeHelper(treeView, categories);
return new CategoryTreeHelper(treeView, categories, true);
}

public static CategoryTreeHelper from(TreeView<Category> treeView, List<Category> categories, boolean checkboxCells) {
return new CategoryTreeHelper(treeView, categories, checkboxCells);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import javafx.scene.control.ButtonType;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import org.jetbrains.annotations.Nullable;

import timkodiert.budgetBook.dialog.DialogFactory;
import timkodiert.budgetBook.domain.adapter.Adaptable;
Expand Down Expand Up @@ -68,7 +69,7 @@ public void initialize(URL location, ResourceBundle resources) {
}

@Override
protected void reloadTable() {
protected void reloadTable(@Nullable T updatedEntity) {
entityTable.getItems().setAll(repository.findAll().stream().map(T::getAdapter).toList());
entityTable.sort();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.layout.Pane;
import org.jetbrains.annotations.Nullable;

import timkodiert.budgetBook.dialog.StackTraceAlert;
import timkodiert.budgetBook.domain.adapter.Adaptable;
Expand Down Expand Up @@ -38,7 +39,7 @@ protected BaseManageView(FXMLLoader fxmlLoader, LanguageManager languageManager,

@Override
public void initialize(URL location, ResourceBundle resources) {
reloadTable();
reloadTable(null);

fxmlLoader.setLocation(getClass().getResource(getDetailViewFxmlLocation()));
try {
Expand All @@ -65,7 +66,7 @@ protected void displayNewEntity() {

protected abstract void initControls();

protected abstract void reloadTable();
protected abstract void reloadTable(@Nullable T updatedEntity);

protected abstract String getDetailViewFxmlLocation();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package timkodiert.budgetBook.view.mdv_base;

import java.util.function.Consumer;
import java.util.function.Supplier;

import javafx.event.ActionEvent;
Expand All @@ -13,7 +14,7 @@
public abstract class EntityBaseDetailView<T extends ContentEquals> extends BaseDetailView<T> {

@Setter
protected Runnable onUpdate;
protected Consumer<T> onUpdate;

protected final Repository<T> repository;
protected final EntityManager entityManager;
Expand Down Expand Up @@ -42,7 +43,7 @@ public boolean save() {
T exp = patchEntity(this.entity.get());
repository.persist(exp);
entityManager.refresh(exp);
onUpdate.run();
onUpdate.accept(exp);
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,6 @@ alert.mainViewCouldNotBeOpened=Hauptansicht konnte nicht geöffnet werden!
alert.viewCouldNotBeOpened=Ansicht konnte nicht geöffnet werden!
alert.widgetCouldNotBeOpened=Widget konnte nicht geöffnet werden!
alert.noTurnOversFoundInFile_maybeNotCompatible=Keine Umsätze in der Datei gefunden. Möglicherweise ist die Struktur der Datei nicht kompatibel.
alert.expenseAdded=Ausgabe \"%s\" hinzugefügt
alert.unimplementedMethod=Methode '%s' nicht implementiert

# ----------------------------------
Expand Down Expand Up @@ -215,6 +214,7 @@ imageView.label.file=Datei:
# ----------------------------------
# manageCategories
# ----------------------------------
manageCategories.label.manageCategories=Kategorien verwalten
manageCategories.column.name=Name
manageCategories.label.name=Name
manageCategories.label.description=Beschreibung
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ alert.mainViewCouldNotBeOpened=Main view could not be opened!
alert.viewCouldNotBeOpened=View could not be opened!
alert.widgetCouldNotBeOpened=Widget could not be opened!
alert.noTurnOversFoundInFile_maybeNotCompatible=No turnovers found. The file structure might not be compatible.
alert.expenseAdded=Expense \"%s\" added
alert.unimplementedMethod=Methode '%s' not implemented

# ----------------------------------
Expand Down Expand Up @@ -216,6 +215,7 @@ imageView.label.file=File:
# ----------------------------------
# manageCategories
# ----------------------------------
manageCategories.label.manageCategories=Manage categories
manageCategories.column.name=Name
manageCategories.label.name=Name
manageCategories.label.description=Description
Expand Down
Loading

0 comments on commit 29293e2

Please sign in to comment.