Skip to content
Snippets Groups Projects
Commit a9da562e authored by Robert Goldmann's avatar Robert Goldmann
Browse files

added option to delete database before import

parent a52b2953
No related branches found
No related tags found
1 merge request!104merge v_1_2_0 into master
...@@ -16,6 +16,7 @@ import javax.net.ssl.X509TrustManager; ...@@ -16,6 +16,7 @@ import javax.net.ssl.X509TrustManager;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import de.deadlocker8.budgetmasterserver.main.Database;
import tools.ConvertTo; import tools.ConvertTo;
import tools.Read; import tools.Read;
...@@ -197,12 +198,8 @@ public class ServerConnection ...@@ -197,12 +198,8 @@ public class ServerConnection
public void addNormalPayment(NormalPayment payment) throws Exception public void addNormalPayment(NormalPayment payment) throws Exception
{ {
URL url = new URL(settings.getUrl() + "/payment?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + URL url = new URL(settings.getUrl() + "/payment?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&amount=" + payment.getAmount() + "&date=" + payment.getDate() + "&categoryID=" + payment.getCategoryID() + "&name=" + Helpers.getURLEncodedString(payment.getName())
"&amount=" + payment.getAmount() + + "&description=" + Helpers.getURLEncodedString(payment.getDescription()));
"&date=" + payment.getDate() +
"&categoryID=" + payment.getCategoryID() +
"&name=" + Helpers.getURLEncodedString(payment.getName()) +
"&description=" + Helpers.getURLEncodedString(payment.getDescription()));
HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
httpsCon.setRequestMethod("POST"); httpsCon.setRequestMethod("POST");
httpsCon.setDoInput(true); httpsCon.setDoInput(true);
...@@ -213,13 +210,8 @@ public class ServerConnection ...@@ -213,13 +210,8 @@ public class ServerConnection
public void updateNormalPayment(NormalPayment payment) throws Exception public void updateNormalPayment(NormalPayment payment) throws Exception
{ {
URL url = new URL(settings.getUrl() + "/payment?secret=" + settings.getSecret() + URL url = new URL(settings.getUrl() + "/payment?secret=" + settings.getSecret() + "&id=" + payment.getID() + "&amount=" + payment.getAmount() + "&date=" + payment.getDate() + "&categoryID=" + payment.getCategoryID() + "&name=" + Helpers.getURLEncodedString(payment.getName())
"&id=" + payment.getID() + + "&description=" + Helpers.getURLEncodedString(payment.getDescription()));
"&amount=" + payment.getAmount() +
"&date=" + payment.getDate() +
"&categoryID=" + payment.getCategoryID() +
"&name=" + Helpers.getURLEncodedString(payment.getName()) +
"&description=" + Helpers.getURLEncodedString(payment.getDescription()));
HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
httpsCon.setRequestMethod("PUT"); httpsCon.setRequestMethod("PUT");
httpsCon.setDoInput(true); httpsCon.setDoInput(true);
...@@ -237,15 +229,8 @@ public class ServerConnection ...@@ -237,15 +229,8 @@ public class ServerConnection
repeatEndDate = "A"; repeatEndDate = "A";
} }
URL url = new URL(settings.getUrl() + "/repeatingpayment?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + URL url = new URL(settings.getUrl() + "/repeatingpayment?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&amount=" + payment.getAmount() + "&date=" + payment.getDate() + "&categoryID=" + payment.getCategoryID() + "&name=" + Helpers.getURLEncodedString(payment.getName())
"&amount=" + payment.getAmount() + + "&repeatInterval=" + payment.getRepeatInterval() + "&repeatEndDate=" + repeatEndDate + "&repeatMonthDay=" + payment.getRepeatMonthDay() + "&description=" + Helpers.getURLEncodedString(payment.getDescription()));
"&date=" + payment.getDate() +
"&categoryID=" + payment.getCategoryID() +
"&name=" + Helpers.getURLEncodedString(payment.getName()) +
"&repeatInterval=" + payment.getRepeatInterval() +
"&repeatEndDate=" + repeatEndDate +
"&repeatMonthDay=" + payment.getRepeatMonthDay() +
"&description=" + Helpers.getURLEncodedString(payment.getDescription()));
HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
httpsCon.setRequestMethod("POST"); httpsCon.setRequestMethod("POST");
httpsCon.setDoInput(true); httpsCon.setDoInput(true);
...@@ -352,4 +337,18 @@ public class ServerConnection ...@@ -352,4 +337,18 @@ public class ServerConnection
return null; return null;
} }
} }
public void importDatabase(Database database) throws Exception
{
//TODO
// String databaseJSON = new Gson().toJson(database);
//
// URL url = new URL(settings.getUrl() + "/database?secret=" + Helpers.getURLEncodedString(settings.getSecret()));
// HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection();
// httpsCon.setRequestMethod("POST");
// httpsCon.setDoInput(true);
// InputStream stream = httpsCon.getInputStream();
// BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
// reader.close();
}
} }
\ No newline at end of file
...@@ -25,7 +25,6 @@ public class Utils ...@@ -25,7 +25,6 @@ public class Utils
try try
{ {
Gson gson = new Gson(); Gson gson = new Gson();
PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + bundle.getString("folder")));
Reader reader = Files.newBufferedReader(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder") + "/settings.json"), Charset.forName("UTF-8")); Reader reader = Files.newBufferedReader(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder") + "/settings.json"), Charset.forName("UTF-8"));
settings = gson.fromJson(reader, Settings.class); settings = gson.fromJson(reader, Settings.class);
reader.close(); reader.close();
...@@ -41,29 +40,20 @@ public class Utils ...@@ -41,29 +40,20 @@ public class Utils
{ {
Gson gson = new Gson(); Gson gson = new Gson();
String jsonString = gson.toJson(settings); String jsonString = gson.toJson(settings);
PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + bundle.getString("folder")));
Writer writer = Files.newBufferedWriter(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder") + "/settings.json"), Charset.forName("UTF-8")); Writer writer = Files.newBufferedWriter(Paths.get(PathUtils.getOSindependentPath() + bundle.getString("folder") + "/settings.json"), Charset.forName("UTF-8"));
writer.write(jsonString); writer.write(jsonString);
writer.close(); writer.close();
} }
public static Database loadDatabaseJSON(File file) public static Database loadDatabaseJSON(File file) throws IOException
{
Database database;
try
{ {
Gson gson = new Gson(); Gson gson = new Gson();
PathUtils.checkFolder(file.getParentFile());
Reader reader = Files.newBufferedReader(Paths.get(file.getAbsolutePath()), Charset.forName("UTF-8")); Reader reader = Files.newBufferedReader(Paths.get(file.getAbsolutePath()), Charset.forName("UTF-8"));
database = gson.fromJson(reader, Database.class); Database database = gson.fromJson(reader, Database.class);
reader.close(); reader.close();
return database; return database;
} }
catch(IOException e)
{
return null;
}
}
public static void saveDatabaseJSON(File file, String databaseJSON) throws IOException public static void saveDatabaseJSON(File file, String databaseJSON) throws IOException
{ {
......
...@@ -27,13 +27,13 @@ public class Main extends Application ...@@ -27,13 +27,13 @@ public class Main extends Application
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/deadlocker8/budgetmaster/ui/GUI.fxml")); FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/deadlocker8/budgetmaster/ui/GUI.fxml"));
Parent root = (Parent)loader.load(); Parent root = (Parent)loader.load();
Scene scene = new Scene(root, 600, 650); Scene scene = new Scene(root, 610, 650);
((Controller)loader.getController()).init(stage); ((Controller)loader.getController()).init(stage);
stage.setResizable(true); stage.setResizable(true);
stage.setMinHeight(600); stage.setMinHeight(650);
stage.setMinWidth(600); stage.setMinWidth(610);
stage.getIcons().add(new Image("/de/deadlocker8/budgetmaster/resources/icon.png")); stage.getIcons().add(new Image("/de/deadlocker8/budgetmaster/resources/icon.png"));
stage.setTitle(bundle.getString("app.name")); stage.setTitle(bundle.getString("app.name"));
stage.setScene(scene); stage.setScene(scene);
......
...@@ -9,13 +9,17 @@ import de.deadlocker8.budgetmaster.logic.Helpers; ...@@ -9,13 +9,17 @@ import de.deadlocker8.budgetmaster.logic.Helpers;
import de.deadlocker8.budgetmaster.logic.ServerConnection; import de.deadlocker8.budgetmaster.logic.ServerConnection;
import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.Settings;
import de.deadlocker8.budgetmaster.logic.Utils; import de.deadlocker8.budgetmaster.logic.Utils;
import de.deadlocker8.budgetmasterserver.main.Database;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.RadioButton; import javafx.scene.control.RadioButton;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
...@@ -44,7 +48,8 @@ public class SettingsController ...@@ -44,7 +48,8 @@ public class SettingsController
@FXML private TextField textFieldCurrency; @FXML private TextField textFieldCurrency;
@FXML private Label labelCurrency; @FXML private Label labelCurrency;
@FXML private Button buttonSave; @FXML private Button buttonSave;
@FXML private Button buttonBackupDB; @FXML private Button buttonExportDB;
@FXML private Button buttonImportDB;
@FXML private Button buttonDeleteDB; @FXML private Button buttonDeleteDB;
@FXML private RadioButton radioButtonRestActivated; @FXML private RadioButton radioButtonRestActivated;
@FXML private RadioButton radioButtonRestDeactivated; @FXML private RadioButton radioButtonRestDeactivated;
...@@ -76,8 +81,9 @@ public class SettingsController ...@@ -76,8 +81,9 @@ public class SettingsController
labelURL.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); labelURL.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
labelCurrency.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); labelCurrency.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text"));
buttonSave.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); buttonSave.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;");
buttonBackupDB.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); buttonExportDB.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 14;");
buttonDeleteDB.setStyle("-fx-background-color: #FF5047; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); buttonImportDB.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 14;");
buttonDeleteDB.setStyle("-fx-background-color: #FF5047; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 14;");
textFieldURL.setPromptText("z.B. https://yourdomain.de"); textFieldURL.setPromptText("z.B. https://yourdomain.de");
textFieldCurrency.setPromptText("z.B. €, CHF, $"); textFieldCurrency.setPromptText("z.B. €, CHF, $");
textAreaTrustedHosts.setPromptText("z.B. localhost"); textAreaTrustedHosts.setPromptText("z.B. localhost");
...@@ -179,7 +185,7 @@ public class SettingsController ...@@ -179,7 +185,7 @@ public class SettingsController
controller.showNotification("Erfolgreich gespeichert"); controller.showNotification("Erfolgreich gespeichert");
} }
public void backupDB() public void exportDB()
{ {
FileChooser fileChooser = new FileChooser(); FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Datenbank exportieren"); fileChooser.setTitle("Datenbank exportieren");
...@@ -216,7 +222,91 @@ public class SettingsController ...@@ -216,7 +222,91 @@ public class SettingsController
} }
} }
private void importDatabase()
{
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Datenbank importieren");
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("JSON (*.json)", "*.json");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(controller.getStage());
if(file != null)
{
Database database;
try
{
database = Utils.loadDatabaseJSON(file);
if(database.getCategories() == null || database.getNormalPayments() == null || database.getRepeatingPayments() == null)
{
AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Die angegebene Datei enthält kein gültiges BudgetMaster-Datenformat und kann daher nicht importiert werden.", controller.getIcon(), controller.getStage(), null, false);
return;
}
}
catch(IOException e1)
{
Logger.error(e1);
AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Einlesen der Datei ist ein Fehler aufgetreten.", controller.getIcon(), controller.getStage(), null, false);
return;
}
Stage modalStage = showModal("Vorgang läuft", "Die Datenbank wird importiert, bitte warten...");
Worker.runLater(() -> {
try
{
ServerConnection connection = new ServerConnection(controller.getSettings());
connection.importDatabase(database);
Platform.runLater(() -> {
if(modalStage != null)
{
modalStage.close();
}
AlertGenerator.showAlert(AlertType.INFORMATION, "Erfolgreich exportiert", "", "Die Datenbank wurder erfolgreich importiert.", controller.getIcon(), controller.getStage(), null, false);
});
}
catch(Exception e)
{
Logger.error(e);
Platform.runLater(() -> {
controller.showConnectionErrorAlert(e.getMessage());
});
}
});
}
}
public void importDB()
{
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Datenbank importieren");
alert.setHeaderText("");
alert.setContentText("Soll die Datenbank vor dem Importieren gelöscht werden?");
Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow();
dialogStage.getIcons().add(controller.getIcon());
dialogStage.initOwner(controller.getStage());
ButtonType buttonTypeDelete = new ButtonType("Ja, Datenbank löschen");
ButtonType buttonTypeAppend = new ButtonType("Nein, Daten hinzufügen");
ButtonType buttonTypeCancel = new ButtonType("Abbrechen", ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeDelete, buttonTypeAppend, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();
if(result.get() == buttonTypeDelete)
{
deleteDatabase(true);
}
else if(result.get() == buttonTypeAppend)
{
importDatabase();
}
}
public void deleteDB() public void deleteDB()
{
deleteDatabase(false);
}
public void deleteDatabase(boolean importPending)
{ {
String verificationCode = ConvertTo.toBase58(RandomCreations.generateRandomMixedCaseString(4, true), true, BASE58Type.UPPER); String verificationCode = ConvertTo.toBase58(RandomCreations.generateRandomMixedCaseString(4, true), true, BASE58Type.UPPER);
...@@ -244,6 +334,10 @@ public class SettingsController ...@@ -244,6 +334,10 @@ public class SettingsController
if(modalStage != null) if(modalStage != null)
{ {
modalStage.close(); modalStage.close();
if(importPending)
{
importDatabase();
}
} }
}); });
} }
......
...@@ -67,6 +67,14 @@ ...@@ -67,6 +67,14 @@
<Insets top="35.0" /> <Insets top="35.0" />
</VBox.margin> </VBox.margin>
</Label> </Label>
<Label fx:id="labelSecret11121" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" textAlignment="RIGHT" wrapText="true">
<font>
<Font name="System Bold" size="16.0" />
</font>
<VBox.margin>
<Insets top="15.0" />
</VBox.margin>
</Label>
<Region prefHeight="19.0" prefWidth="158.0" VBox.vgrow="ALWAYS" /> <Region prefHeight="19.0" prefWidth="158.0" VBox.vgrow="ALWAYS" />
</children> </children>
<HBox.margin> <HBox.margin>
...@@ -95,13 +103,18 @@ ...@@ -95,13 +103,18 @@
</RadioButton> </RadioButton>
</children> </children>
</HBox> </HBox>
<TextArea fx:id="textAreaTrustedHosts" prefWidth="539.0" VBox.vgrow="ALWAYS"> <TextArea fx:id="textAreaTrustedHosts" minHeight="110.0" prefHeight="148.0" prefWidth="539.0" VBox.vgrow="ALWAYS">
<VBox.margin> <VBox.margin>
<Insets /> <Insets />
</VBox.margin></TextArea> </VBox.margin></TextArea>
<HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="539.0" spacing="30.0"> <HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="539.0" spacing="30.0">
<children> <children>
<Button fx:id="buttonBackupDB" mnemonicParsing="false" onAction="#backupDB" text="Backup"> <Button fx:id="buttonExportDB" mnemonicParsing="false" onAction="#exportDB" text="Exportieren">
<font>
<Font name="System Bold" size="14.0" />
</font>
</Button>
<Button fx:id="buttonImportDB" mnemonicParsing="false" onAction="#importDB" text="Importieren">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
...@@ -112,17 +125,23 @@ ...@@ -112,17 +125,23 @@
</font> </font>
</Button> </Button>
</children> </children>
</HBox> <VBox.margin>
<Region prefHeight="19.0" prefWidth="158.0" VBox.vgrow="ALWAYS" /> <Insets />
</children> </VBox.margin>
</VBox>
</children>
</HBox> </HBox>
<Button fx:id="buttonSave" mnemonicParsing="false" onAction="#save" text="Speichern"> <Button fx:id="buttonSave" mnemonicParsing="false" onAction="#save" text="Speichern">
<font> <font>
<Font name="System Bold" size="14.0" /> <Font name="System Bold" size="14.0" />
</font> </font>
<VBox.margin>
<Insets top="15.0" />
</VBox.margin>
</Button> </Button>
<Region prefWidth="158.0" VBox.vgrow="ALWAYS" />
</children>
</VBox>
</children>
</HBox>
</children> </children>
<padding> <padding>
<Insets right="50.0" /> <Insets right="50.0" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment