Skip to content
This repository was archived by the owner on Nov 26, 2019. It is now read-only.

Commit f6953e0

Browse files
committed
# Minor refactorings for reduced nullability issues!
1 parent 886c605 commit f6953e0

File tree

11 files changed

+55
-79
lines changed

11 files changed

+55
-79
lines changed

src/main/kotlin/com/msc/serverbrowser/Client.kt

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import java.nio.file.Paths
4242
import java.nio.file.StandardCopyOption
4343
import java.util.Locale
4444
import java.util.MissingResourceException
45-
import java.util.Objects
4645
import java.util.ResourceBundle
4746

4847
/**
@@ -79,23 +78,19 @@ class Client : Application() {
7978
}
8079
}
8180

82-
private fun loadUIAndGetController(): MainController {
83-
mainController.initialize()
81+
private fun loadUIAndGetController(stage: Stage): MainController {
8482
val scene = Scene(mainController.mainView.rootPane)
85-
stage!!.scene = scene
83+
stage.scene = scene
8684

87-
applyTheme()
85+
applyTheme(scene)
8886
return mainController
8987
}
9088

9189
/**
9290
* Deletes the scenes current stylesheets and applies either the dark theme or the default
9391
* theme.
9492
*/
95-
fun applyTheme() {
96-
// Retrieving the current scene, assuring it ain't null.
97-
val scene = Objects.requireNonNull(stage!!.scene)
98-
93+
fun applyTheme(scene: Scene) {
9994
scene.stylesheets.clear()
10095
scene.stylesheets.add(PathConstants.STYLESHEET_PATH + "mainStyleGeneral.css")
10196

@@ -116,7 +111,7 @@ class Client : Application() {
116111
private fun loadUI(primaryStage: Stage) {
117112
stage = primaryStage
118113

119-
val controller = loadUIAndGetController()
114+
val controller = loadUIAndGetController(primaryStage)
120115

121116
TrayNotificationBuilder.setDefaultOwner(stage)
122117

@@ -226,15 +221,6 @@ class Client : Application() {
226221

227222
}
228223

229-
/**
230-
* Sets the Applications title.
231-
*
232-
* @param title the title to set
233-
*/
234-
fun setTitle(title: String) {
235-
stage!!.title = title
236-
}
237-
238224
/**
239225
* Loads a specific view.
240226
*
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.msc.serverbrowser
22

3-
import javafx.scene.control.Control
3+
import javafx.scene.layout.Region
44
import javafx.stage.Window
55

6-
fun Control.getWindow(): Window = this.scene.window
6+
fun Region.getWindow(): Window = this.scene.window

src/main/kotlin/com/msc/serverbrowser/data/FavouritesController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ object FavouritesController {
7575
})
7676

7777
query.serversRules.ifPresent({ rules ->
78-
server.website = rules["weburl"]
78+
server.website = rules["weburl"]!!
7979
server.version = rules["version"]!!
8080
})
8181
}
@@ -245,6 +245,5 @@ object FavouritesController {
245245
Logging.warn("Error loading legacy favourites.", exception)
246246
return legacyFavourites
247247
}
248-
249248
}
250249
}

src/main/kotlin/com/msc/serverbrowser/data/entites/Player.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,36 @@ import javafx.beans.property.SimpleStringProperty
66
import javafx.beans.property.StringProperty
77

88
/**
9-
*
10-
*
119
* Tablemodel for the Players of a server, only holds two properties:
1210
*
13-
*
1411
* * Name
1512
* * Score
1613
*
17-
*
1814
* @author marcel
1915
* @since Jan 10, 2018
16+
* @property playerName Ingame name of the player
17+
* @property playerScore Ingame score of the player
2018
*/
21-
class Player
22-
/**
23-
* @param playerName Ingame name of the player
24-
* @param playerScore Ingame score of the player
25-
*/
26-
(playerName: String, playerScore: Int?) {
19+
class Player(playerName: String, playerScore: Int) {
2720
/** Property for holding the players name */
2821
private val playerName = SimpleStringProperty()
2922
/** Property for holding the players score */
3023
private val playerScore = SimpleIntegerProperty()
3124

3225
init {
3326
this.playerName.set(playerName)
34-
this.playerScore.set(playerScore!!)
27+
this.playerScore.set(playerScore)
3528
}
3629

3730
/**
38-
* @return [.playerName]
31+
* @return [playerName]
3932
*/
4033
fun playerNameProperty(): StringProperty {
4134
return playerName
4235
}
4336

4437
/**
45-
* @return [.playerScore]
38+
* @return [playerScore]
4639
*/
4740
fun playerScoreProperty(): IntegerProperty {
4841
return playerScore

src/main/kotlin/com/msc/serverbrowser/data/entites/SampServer.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ class SampServer(address: String, port: Int) {
7474
get() = versionProperty.get()
7575
set(version) = versionProperty.set(version)
7676

77-
var website: String?
77+
var website: String
7878
get() = websiteProperty.get()
79-
set(website) = websiteProperty.set(website!!)
79+
set(website) = websiteProperty.set(website)
8080

8181
var map: String
8282
get() = mapProperty.get()
@@ -155,12 +155,12 @@ class SampServer(address: String, port: Int) {
155155
return "$address:$port"
156156
}
157157

158-
override fun equals(`object`: Any?): Boolean {
159-
if (`object` == null || `object`.javaClass != SampServer::class.java) {
158+
override fun equals(any: Any?): Boolean {
159+
if (any == null || any.javaClass != SampServer::class.java) {
160160
return false
161161
}
162162

163-
val compare = `object` as SampServer
163+
val compare = any as SampServer
164164
return compare === this || address == compare.address && port == compare.port
165165
}
166166

src/main/kotlin/com/msc/serverbrowser/data/insallationcandidates/InstallationCandidate.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ package com.msc.serverbrowser.data.insallationcandidates
1313
* @property isDownload true if the resource lies in the internet
1414
* @property urlTargetChecksum Checksum of files behind url
1515
*/
16-
data class InstallationCandidate(val sampDllChecksum: String, val name: String, val url: String, private val isCustom: Boolean, val isDownload: Boolean, val urlTargetChecksum: String)
16+
data class InstallationCandidate(val sampDllChecksum: String, val name: String, val url: String,
17+
private val isCustom: Boolean, val isDownload: Boolean, val urlTargetChecksum: String)

src/main/kotlin/com/msc/serverbrowser/gui/components/SampServerTable.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class SampServerTable(val client: Client) : TableView<SampServer>() {
105105
GTAController.tryToConnect(client, server.address, server.port, "")
106106
}
107107
}
108-
visitWebsiteMenuItem.setOnAction { _ -> firstIfAnythingSelected.ifPresent { server -> OSUtility.browse(server.website!!) } }
108+
visitWebsiteMenuItem.setOnAction { _ -> firstIfAnythingSelected.ifPresent { server -> OSUtility.browse(server.website) } }
109109
connectWithPasswordMenuItem.setOnAction { _ ->
110110
println(firstIfAnythingSelected)
111111
GTAController.promptUserForServerPassword(client)

src/main/kotlin/com/msc/serverbrowser/gui/controllers/implementations/MainController.kt

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.msc.serverbrowser.data.properties.ClientPropertiesController
55
import com.msc.serverbrowser.data.properties.LastViewProperty
66
import com.msc.serverbrowser.data.properties.SaveLastViewProperty
77
import com.msc.serverbrowser.data.properties.UseDarkThemeProperty
8+
import com.msc.serverbrowser.getWindow
89
import com.msc.serverbrowser.gui.View
910
import com.msc.serverbrowser.gui.controllers.interfaces.ViewController
1011
import com.msc.serverbrowser.gui.views.FilesView
@@ -22,8 +23,8 @@ import javafx.scene.control.ProgressBar
2223
import javafx.scene.input.KeyCode
2324
import javafx.scene.input.KeyEvent
2425
import javafx.scene.text.Font
26+
import javafx.stage.Stage
2527
import java.io.IOException
26-
import java.util.Optional
2728

2829
/**
2930
* Main [ViewController] for this application.
@@ -35,20 +36,18 @@ import java.util.Optional
3536
*/
3637
class MainController(val client: Client, val mainView: MainView) : ViewController {
3738

38-
3939
/**
4040
* @return the current view
4141
*/
42-
var activeView: View? = null
42+
var activeView: View
4343
private set
4444

4545
private var activeSubViewController: ViewController? = null
4646

4747
/**
48-
* Returns an [Optional] of the current [ViewController] and tries casting it into
49-
* [SettingsController].
48+
* Returns the current [activeSubViewController]
5049
*
51-
* @return [Optional] of [.activeSubViewController] or empty
50+
* @return [activeSubViewController]
5251
*/
5352
val settingsController: SettingsController?
5453
get() = activeSubViewController as? SettingsController
@@ -60,15 +59,22 @@ class MainController(val client: Client, val mainView: MainView) : ViewControlle
6059
if (Client.isDevelopmentModeActivated) {
6160
registerDevShortcuts()
6261
}
62+
63+
activeView = if (ClientPropertiesController.getProperty(SaveLastViewProperty)) {
64+
val view = View.valueOf(ClientPropertiesController.getProperty(LastViewProperty)).orElse(View.SERVERS)
65+
loadView(view)
66+
} else {
67+
loadView(View.valueOf(ClientPropertiesController.getDefaultProperty(LastViewProperty)).get())
68+
}
6369
}
6470

6571
private fun registerDevShortcuts() {
6672
mainView.rootPane.addEventHandler(KeyEvent.KEY_RELEASED) { event ->
6773
if (event.isControlDown && event.code == KeyCode.D) {
6874
val currentValue = ClientPropertiesController.getProperty(UseDarkThemeProperty)
6975
ClientPropertiesController.setProperty(UseDarkThemeProperty, !currentValue)
70-
client.applyTheme()
71-
client.reloadViewIfLoaded(activeView!!)
76+
client.applyTheme(mainView.rootPane.scene)
77+
client.reloadViewIfLoaded(activeView)
7278
}
7379
}
7480
}
@@ -81,15 +87,6 @@ class MainController(val client: Client, val mainView: MainView) : ViewControlle
8187
mainView.setMenuItemSettingsAction(EventHandler { onSettingsMenuItemClicked() })
8288
}
8389

84-
override fun initialize() {
85-
if (ClientPropertiesController.getProperty(SaveLastViewProperty)) {
86-
val view = View.valueOf(ClientPropertiesController.getProperty(LastViewProperty)).orElse(View.SERVERS)
87-
loadView(view)
88-
} else {
89-
loadView(View.valueOf(ClientPropertiesController.getDefaultProperty(LastViewProperty)).get())
90-
}
91-
}
92-
9390
private fun registerBottomBarHyperlinks() {
9491
mainView.setGitHubHyperlink("https://github.com/Bios-Marcel/ServerBrowser")
9592
mainView.setHelpHyperlink("https://github.com/Bios-Marcel/ServerBrowser/wiki")
@@ -123,31 +120,31 @@ class MainController(val client: Client, val mainView: MainView) : ViewControlle
123120
}
124121

125122
private fun onServersMenuItemClicked() {
126-
loadView(View.SERVERS)
123+
activeView = loadView(View.SERVERS)
127124
}
128125

129126
private fun onUsernameMenuItemClicked() {
130-
loadView(View.USERNAME_CHANGER)
127+
activeView = loadView(View.USERNAME_CHANGER)
131128
}
132129

133130
private fun onVersionMenuItemClicked() {
134-
loadView(View.VERSION_CHANGER)
131+
activeView = loadView(View.VERSION_CHANGER)
135132
}
136133

137134
private fun onFilesMenuItemClicked() {
138-
loadView(View.FILES)
135+
activeView = loadView(View.FILES)
139136
}
140137

141138
private fun onSettingsMenuItemClicked() {
142-
loadView(View.SETTINGS)
139+
activeView = loadView(View.SETTINGS)
143140
}
144141

145142
/**
146143
* Loads a specific view.
147144
*
148145
* @param view the view to be loaded
149146
*/
150-
fun loadView(view: View) {
147+
fun loadView(view: View): View {
151148
if (activeSubViewController != null) {
152149
activeSubViewController!!.onClose()
153150
}
@@ -163,7 +160,7 @@ class MainController(val client: Client, val mainView: MainView) : ViewControlle
163160
}
164161

165162
initViewData(view, loadedNode)
166-
activeView = view
163+
return view
167164
}
168165

169166
private fun loadFilesView(): Parent {
@@ -212,18 +209,21 @@ class MainController(val client: Client, val mainView: MainView) : ViewControlle
212209
loadedNode.stylesheets.setAll(view.stylesheetPath)
213210
mainView.selectMenuItemForView(view)
214211
mainView.setActiveViewNode(loadedNode)
215-
client.setTitle(Client.APPLICATION_NAME + " - " + view.title)
212+
val mainWindow = mainView.rootPane.getWindow()
213+
if (mainWindow is Stage){
214+
mainWindow.title = (Client.APPLICATION_NAME + " - " + view.title)
215+
}
216216
}
217217

218218
/**
219219
* Reloads the current view.
220220
*/
221221
fun reloadView() {
222-
loadView(activeView!!)
222+
loadView(activeView)
223223
}
224224

225225
override fun onClose() {
226-
ClientPropertiesController.setProperty(LastViewProperty, activeView!!.id)
226+
ClientPropertiesController.setProperty(LastViewProperty, activeView.id)
227227
Platform.exit() // Make sure that the application doesn't stay open for some reason
228228
}
229229
}

src/main/kotlin/com/msc/serverbrowser/gui/controllers/implementations/ServerListController.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ class ServerListController(private val client: Client, private val view: ServerV
369369
server.hostname = info[3]!!
370370
server.mode = info[4]!!
371371
server.language = info[5]!!
372-
server.website = serverRules["weburl"]
372+
server.website = serverRules["weburl"]!!
373373
server.version = serverRules["version"]!!
374374
server.lagcomp = serverRules["lagcomp"]!!
375375
server.map = serverRules["mapname"]!!
@@ -431,13 +431,13 @@ class ServerListController(private val client: Client, private val view: ServerV
431431
view.serverWebsiteLink.text = server.website
432432
view.playerTable.items = playerList
433433

434-
val websiteToLower = server.website!!.toLowerCase()
434+
val websiteToLower = server.website.toLowerCase()
435435
val websiteFixed = StringUtility.fixUrlIfNecessary(websiteToLower)
436436

437437
// drop validation since URL constructor does that anyways?
438438
if (StringUtility.isValidURL(websiteFixed)) {
439439
view.serverWebsiteLink.isUnderline = true
440-
view.serverWebsiteLink.setOnAction { OSUtility.browse(server.website!!) }
440+
view.serverWebsiteLink.setOnAction { OSUtility.browse(server.website) }
441441
}
442442

443443
if (playerList.isEmpty()) {

src/main/kotlin/com/msc/serverbrowser/gui/controllers/implementations/SettingsController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class SettingsController(val client: Client) : ViewController {
142142
ClientPropertiesController.setProperty(SaveLastViewProperty, true)
143143
ClientPropertiesController.setProperty(LastViewProperty, View.SETTINGS.id)
144144

145-
client.applyTheme()
145+
client.applyTheme(sampPathTextField.scene)
146146

147147
ClientPropertiesController.setProperty(SaveLastViewProperty, saveLastViewOld)
148148
})
@@ -312,7 +312,7 @@ class SettingsController(val client: Client) : ViewController {
312312
*/
313313
private fun reloadSettingsView() {
314314
// Reapply theme, since it might have been changed
315-
client.applyTheme()
315+
client.applyTheme(sampPathTextField.scene)
316316
// Assure the view that the displays the correct data.
317317
client.reloadViewIfLoaded(View.SETTINGS)
318318
}

0 commit comments

Comments
 (0)