Skip to content
Snippets Groups Projects
Commit 2c8fae1e authored by Harry Linrui XU's avatar Harry Linrui XU
Browse files

src/main/java/no/ntnu/idatt1002/demo/data/Budget/FileHandlingSelectedBudget.java

parent 9d99a3be
No related branches found
No related tags found
1 merge request!43Merging frontend-testing into master
Showing
with 144 additions and 88 deletions
package no.ntnu.idatt1002.demo.controller;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
......@@ -17,20 +13,18 @@ import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.*;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Stage;
import no.ntnu.idatt1002.demo.data.Budget.BudgetItem;
import no.ntnu.idatt1002.demo.data.Budget.BudgetRegister;
import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudget;
import no.ntnu.idatt1002.demo.data.Budget.GeneralBudget;
import no.ntnu.idatt1002.demo.data.Economics.Expense;
import no.ntnu.idatt1002.demo.data.Economics.ExpenseCategory;
import java.io.IOException;
import java.util.Optional;
import org.apache.commons.compress.compressors.zstandard.ZstdUtils;
/**
* Controller for budget scene in the application. This controller manages all actions that relates to the budget tableview (add, edit and delete), the switching
......@@ -88,6 +82,8 @@ public class BudgetController extends FinanceController {
@FXML
private Label daysLeftLbl;
BudgetRegister budgetRegister = new BudgetRegister();
/**
* Initializes the budget register, the observable budget list and the tableview, along with the values of the dropbox used for filtering the tableview.
......@@ -108,6 +104,13 @@ public class BudgetController extends FinanceController {
budgetList = FXCollections.observableArrayList(general.getBudgetItems());
budgetTableView.setItems(budgetList);
System.out.println("After loading general");
if (FileHandlingBudget.isBudgetRegisterEmpty()) {
budgetRegister = new BudgetRegister();
} else {
budgetRegister = FileHandlingBudget.readBudgetArchive("");
}
if (FileHandlingBudget.isNewBudget("Budget")) {
returnBtn.setOpacity(0);
returnBtn.setDisable(true);
......@@ -277,6 +280,16 @@ public class BudgetController extends FinanceController {
FileHandlingBudget.writeGeneralBudgetToFile("Budget", general);
}
public void updateBudgetRegister(String budgetFolderName) {
try {
budgetRegister.addBudgetName(budgetFolderName);
FileHandlingBudget.writeBudgetRegisterToArchive(budgetRegister);
} catch(IOException ioe) {
showErrorDialogBox(ioe.getMessage(), ioe.getMessage(), ioe.getMessage());
}
}
/**
* Switches scene, by loading a new FXML file and setting the scene to this location.
* @param event A button click on the return to main menu button
......@@ -291,6 +304,7 @@ public class BudgetController extends FinanceController {
general.addUnusedCategories();
System.out.println(general.getBudgetItems().size());
//Always saving the data when switching scenes
updateBudgetRegister(FileHandlingBudget.readSelectedBudget());
loader.setLocation(getClass().getResource("/view/MainMenuNew.fxml"));
} else if (event.getSource() == backBtn) {
loader.setLocation(getClass().getResource("/view/dualList.fxml"));
......
......@@ -125,7 +125,7 @@ public class CreateBudgetController {
public void updateCurrentFile(String currentMonth, String budgetName) {
try {
FileHandlingBudget.updateCurrentFile(currentMonth + budgetName);
FileHandlingBudget.updateSelectedBudget(currentMonth + budgetName);
} catch (IOException ioe) {
showErrorMsgBox(ioe.getMessage(), ioe.getMessage(), ioe.getMessage());
}
......
......@@ -13,8 +13,6 @@ import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
......@@ -22,7 +20,6 @@ import javafx.scene.control.DatePicker;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
......@@ -478,7 +475,7 @@ public class IncomeExpenseController extends FinanceController {
public void saveDisposableIncomeToFile() throws IOException {
String disposableIncomeAsString = String.valueOf(incomeRegister.getTotalSum() - expenseRegister.getTotalSum());
FileHandlingBudget.writeMaxAmountToFile(FileHandlingBudget.readCurrentFile(), disposableIncomeAsString);
FileHandlingBudget.writeMaxAmountToFile(FileHandlingBudget.readSelectedBudget(), disposableIncomeAsString);
}
/**
* Switches scenes back to main menu, by loading a new FXML file and setting the scene to this location.
......@@ -495,8 +492,9 @@ public class IncomeExpenseController extends FinanceController {
loader.setLocation(getClass().getResource("/view/newBudgetBudgert.fxml"));
saveDisposableIncomeToFile();
} else if (event.getSource() == null) {
FileHandlingBudget.deleteBudgetDirectory(FileHandlingBudget.readCurrentFile());
FileHandlingBudget.updateCurrentFile("");
FileHandlingBudget.deleteBudgetDirectory(FileHandlingBudget.readSelectedBudget());
//removeBudgetNameFromArchive
FileHandlingBudget.updateSelectedBudget("");
}
Parent root = loader.load();
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
......
......@@ -150,6 +150,9 @@ public class MainMenu {
*/
private void refreshProgressBars() {
mainBar.setProgress(expenseRegister.getTotalSum()/generalBudget.getMaxAmount());
if (mainBar.getProgress() == 1) {
mainBar.setStyle("-fx-accent: #fa5959;");
}
foodBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.FOOD).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.FOOD))/generalBudget.getBudgetItem(ExpenseCategory.FOOD).getBudgetAmount());
clothesBar.setProgress((generalBudget.getBudgetItem(ExpenseCategory.CLOTHES).getBudgetAmount() - overview.getBudgetItemMinusExpense(ExpenseCategory.CLOTHES))/generalBudget.getBudgetItem(ExpenseCategory.CLOTHES).getBudgetAmount());
......
package no.ntnu.idatt1002.demo.controller;
import static com.sun.javafx.scene.control.skin.Utils.getResource;
import java.io.IOException;
import java.time.LocalDate;
import java.util.Optional;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
......@@ -14,12 +10,10 @@ import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.stage.Modality;
import javafx.stage.Stage;
import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudget;
import no.ntnu.idatt1002.demo.data.Economics.Expense;
import no.ntnu.idatt1002.demo.data.Economics.Income;
public class SceneController {
......@@ -70,7 +64,7 @@ public class SceneController {
dialog.showAndWait();
try {
if (FileHandlingBudget.readCurrentFile() != null) {
if (FileHandlingBudget.readSelectedBudget() != null) {
switchNext(event);
}
} catch (IOException ioe) {
......@@ -118,7 +112,7 @@ public class SceneController {
dialog.showAndWait();
try {
if (FileHandlingBudget.readCurrentFile() != null) {
if (FileHandlingBudget.readSelectedBudget() != null) {
switchChosenBudget(event);
}
} catch(IOException ioe) {
......
package no.ntnu.idatt1002.demo.controller;
import java.io.IOException;
import java.util.Collection;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
import no.ntnu.idatt1002.demo.data.Budget.BudgetRegister;
import no.ntnu.idatt1002.demo.data.Budget.FileHandlingBudget;
import no.ntnu.idatt1002.demo.data.Budget.GeneralBudget;
public class SelectBudgetController {
......@@ -27,10 +23,16 @@ public class SelectBudgetController {
@FXML
public void initialize() throws IOException {
budgetRegister = FileHandlingBudget.readBudgetArchive("");
System.out.println(budgetRegister);
System.out.println(budgetRegister.getBudgetNames().size());
System.out.println("this is budgetRegisr: " + budgetRegister);
try {
if (FileHandlingBudget.isBudgetRegisterEmpty()) {
budgetRegister = new BudgetRegister();
} else {
budgetRegister = FileHandlingBudget.readBudgetArchive("");
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
System.out.println("budget register is: " + budgetRegister);
budgetList = FXCollections.observableList(budgetRegister.getBudgetNames());
budgetListView.setItems(budgetList);
......@@ -47,7 +49,7 @@ public class SelectBudgetController {
public void selectBudget(ActionEvent event) throws IOException {
String name = budgetListView.getSelectionModel().getSelectedItem();
System.out.println(name);
FileHandlingBudget.updateCurrentFile(name);
FileHandlingBudget.updateSelectedBudget(name);
final Node source = (Node) event.getSource();
((Stage) source.getScene().getWindow()).close();
......@@ -55,7 +57,7 @@ public class SelectBudgetController {
@FXML
public void exitWindow(ActionEvent event) throws IOException {
FileHandlingBudget.updateCurrentFile("");
FileHandlingBudget.updateSelectedBudget("");
final Node source = (Node) event.getSource();
((Stage) source.getScene().getWindow()).close();
}
......
......@@ -11,24 +11,8 @@ import java.io.*;
* @author andreas
*/
//Få fikset ny return knapp i dualList
//Disable next i dualList før income har blitt lagt til. Kanksje filter som prevneter negativ max amount
//La next button save dataene i to nye filer for persisterign i tilfelle "back" trykkes i newBudgetbudgetr
//Gjøre user.dir path static + Fikse nye klasser for filehandling
//Fikse vindu for old budget + FIKSE TRY CATCHES I ALLE METODENE!!!!!!!!!!
//add menuitems i income og expense slik at
//Gjøre slik at når du completer et budget (next button i budget window)
//skal dette legges til i budgetreigsteret
//System.out.println(System.getProperty("user.dir") + path); =
//C:\Users\xulr0\IdeaProjects\skoleProsjekter\idatt1002\idatt1002_2023_9src/main/resources/
//(System.getProperty("user.dir") + "/" + path) =
//(path) =
//(src/main/resources)
public class FileHandlingBudget {
private static final String filePath = "src/main/resources/Budget"; //TODO CHANGE BACK to /resources/Budget/
private static final String filePath = "src/main/resources/Budget";
private static final String fileType = ".budget";
private static final String path = "src/main/resources/";
......@@ -47,7 +31,7 @@ public class FileHandlingBudget {
* @throws IOException if an input or output exception occurred.
*/
public static void writeGeneralBudgetToFile(String fileTitle, GeneralBudget generalBudget) throws IOException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path + readCurrentFile() + "/" + fileTitle + fileType))) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path + readSelectedBudget() + "/" + fileTitle + fileType))) {
//try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath + fileTitle + fileType))) {
bw.write(generalBudget.toString());
} catch (IOException ex) {
......@@ -66,8 +50,8 @@ public class FileHandlingBudget {
/*try (BufferedReader br = new BufferedReader(new FileReader(filePath + fileTitle + fileType))) {
return br.readLine() == null;
}*/
BufferedReader br = new BufferedReader(new FileReader(path + readCurrentFile() + "/" + fileTitle + fileType));
System.out.println("Trying budget isEmpty in: " + path + readCurrentFile() + "/" + fileTitle + fileType);
BufferedReader br = new BufferedReader(new FileReader(path + readSelectedBudget() + "/" + fileTitle + fileType));
System.out.println("Trying budget isEmpty in: " + path + readSelectedBudget() + "/" + fileTitle + fileType);
return br.readLine() == null;
}
......@@ -81,7 +65,7 @@ public class FileHandlingBudget {
*/
public static boolean isNewBudget(String fileTitle) throws IOException {
try (BufferedReader br = new BufferedReader(
new FileReader(path + readCurrentFile() + "/" + fileTitle + fileType))) {
new FileReader(path + readSelectedBudget() + "/" + fileTitle + fileType))) {
//new FileReader(filePath + fileTitle + fileType))) {
for (int i = 0; i < 2; ++i) {
......@@ -98,16 +82,21 @@ public class FileHandlingBudget {
}
public static void writeBudgetRegisterToArchive(BudgetRegister budgetNames) throws IOException {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/" + path + "Archive.txt"));
try (BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/" + path + "Archive.txt"))) {
System.out.println(System.getProperty("user.dir") + "/" + path + "Archive.txt");
bw.write("motherfucer");
bw.write(budgetNames.toString());
} catch (IOException ioe) {
ioe.printStackTrace();
throw new IOException("Could not write to file: Archive.txt");
}
}
public static boolean isBudgetRegisterEmpty() throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/src/main/resources/"
+ "Archive.txt"))) {
return br.readLine() == null;
}
}
public static BudgetRegister readBudgetArchive(String fileTitle) throws IOException {
BufferedReader br;
BudgetRegister budgetRegister = null;
......@@ -135,7 +124,7 @@ public class FileHandlingBudget {
}
return budgetRegister;
}
public static boolean isCurrentFileEmpty(String fileTitle) throws IOException {
public static boolean isSelectedBudgetEmpty(String fileTitle) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(System.getProperty("user.dir") + "src/main/resources/"
+ "CurrentFile.txt"))) {
return br.readLine() == null;
......@@ -155,7 +144,7 @@ public class FileHandlingBudget {
}
}
public static String readCurrentFile() throws IOException {
public static String readSelectedBudget() throws IOException {
BufferedReader br;
try {
System.out.print("Reading current file...");
......@@ -168,7 +157,7 @@ public class FileHandlingBudget {
return br.readLine();
}
public static void updateCurrentFile(String budgetName) throws IOException {
public static void updateSelectedBudget(String budgetName) throws IOException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/src/main/resources/CurrentFile.txt"))) {
bw.write(budgetName);
System.out.println("Current file is: " + budgetName);
......@@ -227,7 +216,7 @@ public class FileHandlingBudget {
ExpenseCategory expenseCategory = null;
String budgetDescription = null;
try (BufferedReader br = new BufferedReader(new FileReader( System.getProperty("user.dir") + "/" + path + readCurrentFile() + "/" + fileTitle + fileType))) {
try (BufferedReader br = new BufferedReader(new FileReader( System.getProperty("user.dir") + "/" + path + readSelectedBudget() + "/" + fileTitle + fileType))) {
String line;
String nextLine = br.readLine();
while ((line = nextLine) != null) {
......
package no.ntnu.idatt1002.demo.data.Budget;public class FileHandlingBudgetArchive {
package no.ntnu.idatt1002.demo.data.Budget;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileHandlingBudgetArchive {
private static final String path = System.getProperty("user.dir") + "/src/main/resources/";
private static final String archiveFileType = ".arc";
public static void writeBudgetRegisterToArchive(BudgetRegister budgetNames) throws IOException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir") + "/" + path + "Archive.txt"))) {
System.out.println(System.getProperty("user.dir") + "/" + path + "Archive.txt");
bw.write(budgetNames.toString());
} catch (IOException ioe) {
ioe.printStackTrace();
throw new IOException("Could not write to file: Archive.txt");
}
}
public static boolean isBudgetRegisterEmpty() throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/src/main/resources/"
+ "Archive.txt"))) {
return br.readLine() == null;
}
}
public static BudgetRegister readBudgetArchive(String fileTitle) throws IOException {
BufferedReader br;
BudgetRegister budgetRegister = null;
String budgetName;
try {
br = new BufferedReader(
new FileReader(System.getProperty("user.dir") + "/" + path
+ "Archive.txt"));
} catch (IOException ioe) {
throw new IOException("File does not exist", ioe);
}
String line;
String nextLine = br.readLine();
while ((line = nextLine) != null) {
System.out.println(line);
nextLine = br.readLine();
budgetName = line;
if(budgetRegister == null){
budgetRegister = new BudgetRegister();
}
budgetRegister.addBudgetName(budgetName);
}
return budgetRegister;
}
public static void writeSavingsToFile() {
}
public static boolean deleteBudgetDirectory(String budgetID) {
File targetDirectory = new File(System.getProperty("user.dir") + "/src/main/resources/" + budgetID);
System.out.println("Deleting directory:" + targetDirectory.getPath());
String[]entries = targetDirectory.list();
assert entries != null;
for(String file : entries){
File currentFile = new File(targetDirectory.getPath(),file);
System.out.println("Deleting file:" + currentFile.delete());
}
return targetDirectory.delete();
}
}
......@@ -34,7 +34,7 @@ public class FileHandling{
*/
public static <T extends Item>void writeItemRegisterToFile(final ItemRegister<T> itemRegister, String fileTitle) throws IOException {
//try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath + fileTitle + fileType))) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path + FileHandlingBudget.readCurrentFile() + "/" + fileTitle + fileType))) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path + FileHandlingBudget.readSelectedBudget() + "/" + fileTitle + fileType))) {
if (itemRegister.isEmpty()){
bw.write("");
} else{
......@@ -60,8 +60,8 @@ public class FileHandling{
return false;
}
}*/
BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readCurrentFile() + "/" + fileTitle + fileType));
System.out.println("Checking if income is empty in: " + path + FileHandlingBudget.readCurrentFile() + "/" + fileTitle + fileType);
BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readSelectedBudget() + "/" + fileTitle + fileType));
System.out.println("Checking if income is empty in: " + path + FileHandlingBudget.readSelectedBudget() + "/" + fileTitle + fileType);
return br.readLine() == null;
}
......@@ -79,7 +79,7 @@ public class FileHandling{
double amount = 0;
boolean reoccuring = false;
IncomeCategory incomeCategory = null;
try (BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readCurrentFile() + "/" + fileTitle + fileType))) {
try (BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readSelectedBudget() + "/" + fileTitle + fileType))) {
//try (BufferedReader br = new BufferedReader(new FileReader(filePath + fileTitle + fileType))) {
String line;
String nextLine = br.readLine();
......@@ -127,7 +127,7 @@ public class FileHandling{
double amount = 0;
boolean reoccuring = false;
ExpenseCategory expenseCategory = null;
try (BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readCurrentFile() + "/" + fileTitle + fileType))) {
try (BufferedReader br = new BufferedReader(new FileReader(path + FileHandlingBudget.readSelectedBudget() + "/" + fileTitle + fileType))) {
//try (BufferedReader br = new BufferedReader(new FileReader(filePath + fileTitle + fileType))) {
String line;
String nextLine = br.readLine();
......
APRIL1
APRIL2
APRIL3
APRILnew
\ No newline at end of file
APRIL1
\ No newline at end of file
APRILyes
\ No newline at end of file
date=2023-04-17
amount=50.0
date=2023-04-18
amount=5.0
isRecurring=Not recurring
category=FOOD
date=2023-04-17
amount=100.0
isRecurring=Not recurring
category=GIFT
......@@ -80,7 +80,7 @@
</ProgressBar>
<Label fx:id="usageLbl" text="You have used xxx out of xxx this month">
<font>
<Font name="Lucida Console" size="12.0" />
<Font name="Lucida Console" size="14.0" />
</font>
<StackPane.margin>
<Insets top="5.0" />
......
......@@ -5,10 +5,8 @@
<?import javafx.scene.chart.PieChart?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.ContextMenu?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.image.Image?>
......@@ -176,13 +174,6 @@
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
<contextMenu>
<ContextMenu>
<items>
<MenuItem mnemonicParsing="false" text="Unspecified Action" />
</items>
</ContextMenu>
</contextMenu>
</TableView>
</children>
<padding>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment