Browse Source

Add json config support

Arnaud Vergnet 3 years ago
parent
commit
7596a2c627

+ 1
- 0
build.gradle View File

@@ -24,6 +24,7 @@ dependencies {
24 24
     implementation 'org.xerial:sqlite-jdbc:3.32.3'
25 25
     implementation 'org.kordamp.ikonli:ikonli-javafx:12.0.0'
26 26
     implementation 'org.kordamp.ikonli:ikonli-fontawesome5-pack:12.0.0'
27
+    implementation 'org.json:json:20201115'
27 28
     testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
28 29
     testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
29 30
     compile 'com.jfoenix:jfoenix:9.0.10'

+ 3
- 0
config.json View File

@@ -0,0 +1,3 @@
1
+{
2
+  "serveur" :"test"
3
+}

+ 25
- 17
src/main/java/fr/insa/clavardator/ui/MainController.java View File

@@ -9,6 +9,7 @@ import fr.insa.clavardator.ui.dialogs.SnackbarController;
9 9
 import fr.insa.clavardator.ui.users.UserListController;
10 10
 import fr.insa.clavardator.users.CurrentUser;
11 11
 import fr.insa.clavardator.users.UserList;
12
+import fr.insa.clavardator.util.ConfigLoader;
12 13
 import fr.insa.clavardator.util.Log;
13 14
 import javafx.application.Platform;
14 15
 import javafx.fxml.FXML;
@@ -67,15 +68,15 @@ public class MainController implements Initializable {
67 68
 	 * @param newState The new user state
68 69
 	 */
69 70
 	private void onCurrentUserStateChange(CurrentUser.State newState) {
70
-			if (newState == CurrentUser.State.VALID)
71
-				startChat();
72
-			else if (newState != CurrentUser.State.UNINITIALIZED) {
73
-				final boolean isError = newState == CurrentUser.State.INVALID;
74
-				if (isError) {
75
-					endChat();
76
-				}
77
-				Platform.runLater(() -> showLogin(isError));
71
+		if (newState == CurrentUser.State.VALID)
72
+			startChat();
73
+		else if (newState != CurrentUser.State.UNINITIALIZED) {
74
+			final boolean isError = newState == CurrentUser.State.INVALID;
75
+			if (isError) {
76
+				endChat();
78 77
 			}
78
+			Platform.runLater(() -> showLogin(isError));
79
+		}
79 80
 	}
80 81
 
81 82
 	/**
@@ -252,14 +253,21 @@ public class MainController implements Initializable {
252 253
 	/**
253 254
 	 * Creates database if needed, then init current user, and finally load user list
254 255
 	 */
255
-	private void initDb() {
256
-		final DatabaseController db = new DatabaseController();
257
-		db.initTables(() -> {
258
-			userList.retrievedPreviousUsers(
259
-					() -> currentUser.init(this::onInitError),
260
-					this::onInitError
261
-			);
262
-		}, this::onInitError);
256
+	private void initBackend() {
257
+		ConfigLoader.load((ConfigLoader.Config config) -> {
258
+			final String serverUri = config.getServerUri();
259
+			if (serverUri != null) {
260
+				Log.v("INIT", "Found server URI: " + serverUri);
261
+			} else {
262
+				Log.v("INIT", "Server URI not found. Proceeding without");
263
+			}
264
+			final DatabaseController db = new DatabaseController();
265
+			db.initTables(
266
+					() -> userList.retrievedPreviousUsers(
267
+							() -> currentUser.init(this::onInitError),
268
+							this::onInitError
269
+					), this::onInitError);
270
+		});
263 271
 	}
264 272
 
265 273
 	/**
@@ -273,6 +281,6 @@ public class MainController implements Initializable {
273 281
 		listController.setUserList(userList);
274 282
 		listController.setRefreshUserListener(this::discoverActiveUsers);
275 283
 		editUserDialogController.setUserList(userList);
276
-		initDb();
284
+		initBackend();
277 285
 	}
278 286
 }

+ 1
- 0
src/main/java/fr/insa/clavardator/ui/chat/MessageListItemController.java View File

@@ -9,6 +9,7 @@ import javafx.fxml.Initializable;
9 9
 import javafx.geometry.Pos;
10 10
 import javafx.scene.control.Label;
11 11
 import javafx.scene.layout.VBox;
12
+import netscape.javascript.JSObject;
12 13
 
13 14
 import java.awt.*;
14 15
 import java.io.File;

+ 59
- 0
src/main/java/fr/insa/clavardator/util/ConfigLoader.java View File

@@ -0,0 +1,59 @@
1
+package fr.insa.clavardator.util;
2
+
3
+import org.jetbrains.annotations.Nullable;
4
+import org.json.JSONException;
5
+import org.json.JSONObject;
6
+import org.json.JSONTokener;
7
+
8
+import java.io.FileInputStream;
9
+import java.io.FileNotFoundException;
10
+import java.io.InputStream;
11
+
12
+public class ConfigLoader {
13
+
14
+	public static final String PATH = "config.json";
15
+
16
+	public static void load(ConfigLoadedCallback callback) {
17
+		new Thread(() -> {
18
+			try {
19
+				InputStream is = new FileInputStream(PATH);
20
+				JSONTokener tokener = new JSONTokener(is);
21
+				JSONObject obj = new JSONObject(tokener);
22
+				callback.onLoaded(new Config(obj));
23
+			} catch (FileNotFoundException e) {
24
+				Log.v("CONFIG", "No config file found");
25
+				callback.onLoaded(new Config());
26
+			} catch (JSONException e) {
27
+				Log.v("CONFIG", "Could not read config file. Please make sure it is a valid JSON.");
28
+				callback.onLoaded(new Config());
29
+			}
30
+		}).start();
31
+	}
32
+
33
+	public interface ConfigLoadedCallback {
34
+		void onLoaded(Config config);
35
+	}
36
+
37
+	public static class Config {
38
+		@Nullable
39
+		private String serverUri;
40
+		private final String SERVER_URI_KEY = "serveur";
41
+
42
+		public Config() {
43
+			serverUri = null;
44
+		}
45
+
46
+		public Config(JSONObject obj) {
47
+			this();
48
+			System.out.println(obj);
49
+			if (obj.has(SERVER_URI_KEY)) {
50
+				serverUri = obj.getString(SERVER_URI_KEY);
51
+			}
52
+		}
53
+
54
+		public @Nullable String getServerUri() {
55
+			return serverUri;
56
+		}
57
+	}
58
+
59
+}

Loading…
Cancel
Save