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

#235 - added shutdown hook; added auto start for local server;

parent 60e09462
No related branches found
No related tags found
No related merge requests found
Showing
with 221 additions and 175 deletions
...@@ -146,6 +146,15 @@ public class Controller extends BaseController ...@@ -146,6 +146,15 @@ public class Controller extends BaseController
System.exit(0); System.exit(0);
}); });
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Logger.debug("Received shutdown hook");
if(localServerProcess != null)
{
Logger.debug("Stopping local BudgetMasterServer...");
localServerProcess.destroy();
}
}));
if(settings.getServerType() == null) if(settings.getServerType() == null)
{ {
settings.setServerType(ServerType.ONLINE); settings.setServerType(ServerType.ONLINE);
......
...@@ -3,7 +3,9 @@ package de.deadlocker8.budgetmasterclient.ui.controller; ...@@ -3,7 +3,9 @@ package de.deadlocker8.budgetmasterclient.ui.controller;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import de.deadlocker8.budgetmaster.logic.LocalServerException;
import de.deadlocker8.budgetmaster.logic.LocalServerHandler; import de.deadlocker8.budgetmaster.logic.LocalServerHandler;
import de.deadlocker8.budgetmaster.logic.LocalServerStatus;
import de.deadlocker8.budgetmaster.logic.ServerType; import de.deadlocker8.budgetmaster.logic.ServerType;
import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.Settings;
import de.deadlocker8.budgetmaster.logic.updater.Updater; import de.deadlocker8.budgetmaster.logic.updater.Updater;
...@@ -132,23 +134,23 @@ public class LocalServerSettingsController extends SettingsController ...@@ -132,23 +134,23 @@ public class LocalServerSettingsController extends SettingsController
private void checkServerStatus() private void checkServerStatus()
{ {
LocalServerHandler serverHandler = new LocalServerHandler(); LocalServerHandler serverHandler = new LocalServerHandler();
if(serverHandler.isServerPresent()) switch(serverHandler.getServerStatus())
{
if(serverHandler.isServerRunning())
{ {
case ACTIVE:
labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK)); labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK));
buttonLocalServerAction.setVisible(false); buttonLocalServerAction.setVisible(false);
}
else RestartHandler restartHandler = new RestartHandler(controller);
{ restartHandler.handleRestart(controller.getSettings().getLanguage());
refreshLabelsUpdate();
break;
case INACTIVE:
labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_STARTED)); labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_STARTED));
buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_STARTED)); buttonLocalServerAction.setVisible(false);
buttonLocalServerAction.setVisible(true);
buttonLocalServerAction.setDisable(false);
buttonLocalServerAction.setOnAction((event)->{
buttonLocalServerAction.setDisable(true);
try try
{ {
Logger.debug("Starting local Server...");
serverHandler.createServerSettingsIfNotExists();
controller.setLocalServerProcess(serverHandler.startServer()); controller.setLocalServerProcess(serverHandler.startServer());
try try
{ {
...@@ -157,27 +159,29 @@ public class LocalServerSettingsController extends SettingsController ...@@ -157,27 +159,29 @@ public class LocalServerSettingsController extends SettingsController
catch(InterruptedException e) catch(InterruptedException e)
{ {
} }
checkServerStatus();
//TODO refresh all data if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE))
{
throw new LocalServerException("");
}
// TODO modals for download and start of server // TODO modals for download and start of server
//TODO autostart server on startup if serverType = local and server is present // TODO what happens after update of client?
// --> TODO check compatibility of server and client
} }
catch(IOException e) catch(IOException e)
{ {
Logger.debug("Error while starting local server");
Logger.error(e); Logger.error(e);
AlertGenerator.showAlert(AlertType.ERROR, AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
Localization.getString(Strings.TITLE_ERROR),
"",
Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()),
controller.getIcon(), controller.getStage(), null, false);
buttonLocalServerAction.setDisable(false);
} }
}); catch(LocalServerException ex)
}
}
else
{ {
Logger.debug("Error while starting local server");
AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, ""), controller.getIcon(), controller.getStage(), null, false);
}
break;
case MISSING:
labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT)); labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT));
buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT)); buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT));
buttonLocalServerAction.setVisible(true); buttonLocalServerAction.setVisible(true);
...@@ -188,20 +192,17 @@ public class LocalServerSettingsController extends SettingsController ...@@ -188,20 +192,17 @@ public class LocalServerSettingsController extends SettingsController
{ {
buttonLocalServerAction.setDisable(true); buttonLocalServerAction.setDisable(true);
serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME)); serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME));
serverHandler.createServerSettings(); serverHandler.createServerSettingsIfNotExists();
checkServerStatus(); checkServerStatus();
} }
catch(Exception e) catch(Exception e)
{ {
Logger.error(e); Logger.error(e);
AlertGenerator.showAlert(AlertType.ERROR, AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()), controller.getIcon(), controller.getStage(), null, false);
Localization.getString(Strings.TITLE_ERROR),
"",
Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()),
controller.getIcon(), controller.getStage(), null, false);
buttonLocalServerAction.setDisable(false); buttonLocalServerAction.setDisable(false);
} }
}); });
break;
} }
} }
...@@ -221,27 +222,13 @@ public class LocalServerSettingsController extends SettingsController ...@@ -221,27 +222,13 @@ public class LocalServerSettingsController extends SettingsController
if(clientSecret == null || clientSecret.equals("")) if(clientSecret == null || clientSecret.equals(""))
{ {
AlertGenerator.showAlert(AlertType.WARNING, AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT), controller.getIcon(), controller.getStage(), null, false);
Localization.getString(Strings.TITLE_WARNING),
"",
Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT),
controller.getIcon(),
controller.getStage(),
null,
false);
return; return;
} }
if(currency == null || currency.equals("")) if(currency == null || currency.equals(""))
{ {
AlertGenerator.showAlert(AlertType.WARNING, AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_CURRENCY), controller.getIcon(), controller.getStage(), null, false);
Localization.getString(Strings.TITLE_WARNING),
"",
Localization.getString(Strings.WARNING_EMPTY_CURRENCY),
controller.getIcon(),
controller.getStage(),
null,
false);
return; return;
} }
...@@ -290,14 +277,7 @@ public class LocalServerSettingsController extends SettingsController ...@@ -290,14 +277,7 @@ public class LocalServerSettingsController extends SettingsController
catch(IOException e) catch(IOException e)
{ {
Logger.error(e); Logger.error(e);
AlertGenerator.showAlert(AlertType.ERROR, AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_SETTINGS_SAVE), controller.getIcon(), controller.getStage(), null, false);
Localization.getString(Strings.TITLE_ERROR),
"",
Localization.getString(Strings.ERROR_SETTINGS_SAVE),
controller.getIcon(),
controller.getStage(),
null,
false);
} }
textFieldClientSecret.setText("******"); textFieldClientSecret.setText("******");
......
# DEFAULT # DEFAULT
app.name=BudgetMaster app.name=BudgetMaster
version.code=13 version.code=13
version.name=1.7.0 version.name=1.6.0
version.date=07.11.17 version.date=07.11.17
author=Robert Goldmann author=Robert Goldmann
credits=Länderflaggen von Freepik auf https://www.flaticon.com\nVerwendete Schriftarten: OpenSans\nVerwendete Bibliotheken:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0 credits=Länderflaggen von Freepik auf https://www.flaticon.com\nVerwendete Schriftarten: OpenSans\nVerwendete Bibliotheken:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0
...@@ -68,8 +68,7 @@ undefined=unbekannt ...@@ -68,8 +68,7 @@ undefined=unbekannt
tagfield.placeholder=Neuen Tag hier eingeben tagfield.placeholder=Neuen Tag hier eingeben
shortcut.dev.console=F12 shortcut.dev.console=F12
local.server.status.ok=Server ist gestartet. local.server.status.ok=Server ist gestartet.
local.server.status.not.started=Server is nicht gestartet. local.server.status.not.started=Server konnte nicht gestartet werden.
local.server.action.not.started=Starten
local.server.status.not.present=Server nicht gefunden. local.server.status.not.present=Server nicht gefunden.
local.server.action.not.present=Herunterladen local.server.action.not.present=Herunterladen
......
...@@ -68,8 +68,7 @@ undefined=undefined ...@@ -68,8 +68,7 @@ undefined=undefined
tagfield.placeholder=Enter new Tag here tagfield.placeholder=Enter new Tag here
shortcut.dev.console=F12 shortcut.dev.console=F12
local.server.status.ok=Server is running. local.server.status.ok=Server is running.
local.server.status.not.started=Server is not running. local.server.status.not.started=Server couldn't be started.
local.server.action.not.started=Start
local.server.status.not.present=Server not found. local.server.status.not.present=Server not found.
local.server.action.not.present=Download local.server.action.not.present=Download
......
package de.deadlocker8.budgetmaster.logic;
public class LocalServerException extends Exception
{
private static final long serialVersionUID = 3925464782915168752L;
public LocalServerException(String message)
{
super(message);
}
}
\ No newline at end of file
...@@ -52,16 +52,23 @@ public class LocalServerHandler ...@@ -52,16 +52,23 @@ public class LocalServerHandler
} }
catch(Exception e) catch(Exception e)
{ {
Logger.error(e); Logger.debug(e);
return false; return false;
} }
} }
public void createServerSettings() throws FileNotFoundException public void createServerSettingsIfNotExists() throws FileNotFoundException
{ {
File settingsFile = new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json");
if(settingsFile.exists())
{
return;
}
Logger.debug("Creating settings file for local server...");
String databasePath = PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMaster.db"; String databasePath = PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMaster.db";
String settings = "{\"databaseType\": \"sqlite\"," + String settings = "{\"databaseType\": \"sqlite\"," +
"\"databaseUrl\": \"" + databasePath + "\"," + "\"databaseUrl\": \"" + databasePath.replace("\\", "/") + "\"," +
"\"databaseName\": \"budgetmaster\"," + "\"databaseName\": \"budgetmaster\"," +
"\"databaseUsername\": \"root\"," + "\"databaseUsername\": \"root\"," +
"\"databasePassword\": \"\"," + "\"databasePassword\": \"\"," +
...@@ -69,13 +76,14 @@ public class LocalServerHandler ...@@ -69,13 +76,14 @@ public class LocalServerHandler
"\"serverSecret\": \"BudgetMaster\"," + "\"serverSecret\": \"BudgetMaster\"," +
"\"keystorePath\": \"default\"," + "\"keystorePath\": \"default\"," +
"\"keystorePassword\": \"BudgetMaster\"}"; "\"keystorePassword\": \"BudgetMaster\"}";
PrintWriter writer = new PrintWriter(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json"); PrintWriter writer = new PrintWriter(settingsFile);
writer.println(settings); writer.println(settings);
writer.close(); writer.close();
} }
public void downloadServer(String versionName) throws Exception public void downloadServer(String versionName) throws Exception
{ {
Logger.debug("Downloading BudgetMasterServer from " + BUILD_FOLDER.replace("{}", "v" + versionName));
PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer")); PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer"));
//download into temp directory and file //download into temp directory and file
...@@ -96,4 +104,28 @@ public class LocalServerHandler ...@@ -96,4 +104,28 @@ public class LocalServerHandler
ProcessBuilder pb = new ProcessBuilder("java", "-jar", Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMasterServer.jar").toString()); ProcessBuilder pb = new ProcessBuilder("java", "-jar", Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMasterServer.jar").toString());
return pb.start(); return pb.start();
} }
public LocalServerStatus getServerStatus()
{
LocalServerHandler serverHandler = new LocalServerHandler();
if(serverHandler.isServerPresent())
{
Logger.debug("Local server found");
if(serverHandler.isServerRunning())
{
Logger.debug("Local server is running");
return LocalServerStatus.ACTIVE;
}
else
{
Logger.debug("Local server is NOT running");
return LocalServerStatus.INACTIVE;
}
}
else
{
Logger.debug("Local server NOT found");
return LocalServerStatus.MISSING;
}
}
} }
\ No newline at end of file
package de.deadlocker8.budgetmaster.logic;
public enum LocalServerStatus
{
ACTIVE, INACTIVE, MISSING;
}
\ No newline at end of file
...@@ -73,7 +73,6 @@ public class Strings ...@@ -73,7 +73,6 @@ public class Strings
public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok"; public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok";
public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started"; public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started";
public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present"; public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present";
public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started";
public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present"; public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present";
//REPORT //REPORT
......
...@@ -71,8 +71,10 @@ public class Utils ...@@ -71,8 +71,10 @@ public class Utils
} }
} }
public static DatabaseHandler getDatabaseHandler(Settings settings) public static DatabaseHandler getDatabaseHandler(Settings settings) throws ClassNotFoundException
{ {
Class.forName("org.sqlite.JDBC");
if(settings.getDatabaseType().equals("mysql")) if(settings.getDatabaseType().equals("mysql"))
{ {
return new MysqlDatabaseHandler(settings); return new MysqlDatabaseHandler(settings);
...@@ -83,8 +85,10 @@ public class Utils ...@@ -83,8 +85,10 @@ public class Utils
} }
} }
public static DatabaseTagHandler getDatabaseTagHandler(Settings settings) public static DatabaseTagHandler getDatabaseTagHandler(Settings settings) throws ClassNotFoundException
{ {
Class.forName("org.sqlite.JDBC");
if(settings.getDatabaseType().equals("mysql")) if(settings.getDatabaseType().equals("mysql"))
{ {
return new MysqlDatabaseTagHandler(settings); return new MysqlDatabaseTagHandler(settings);
......
...@@ -139,6 +139,8 @@ public class SparkServer ...@@ -139,6 +139,8 @@ public class SparkServer
handler.closeConnection(); handler.closeConnection();
}); });
try
{
// Category // Category
get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson)); get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson));
get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson)); get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson));
...@@ -196,6 +198,11 @@ public class SparkServer ...@@ -196,6 +198,11 @@ public class SparkServer
get("/info", new InformationGet(gson, versionInfo, settings)); get("/info", new InformationGet(gson, versionInfo, settings));
get("/version", new VersionGet(gson, versionInfo)); get("/version", new VersionGet(gson, versionInfo));
delete("/log", new LogDelete()); delete("/log", new LogDelete());
}
catch(ClassNotFoundException e)
{
Logger.error(e);
}
after((request, response) -> { after((request, response) -> {
DatabaseHandler handler = Utils.getDatabaseHandler(settings); DatabaseHandler handler = Utils.getDatabaseHandler(settings);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment