de.pewpewproject.lasertag.lasertaggame.state.management.server.implementation.SettingsPresetsManager   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 79
rs 10
c 0
b 0
f 0
wmc 12

6 Methods

Rating   Name   Duplication   Size   Complexity  
A loadPreset(String) 0 10 2
A persist() 0 6 2
A getPresets() 0 3 1
A savePreset(String) 0 4 1
A SettingsPresetsManager(SettingsPresetsState,ISettingsPresetsNameManager,ISettingsManager) 0 23 4
A deletePreset(String) 0 10 2
1
package de.pewpewproject.lasertag.lasertaggame.state.management.server.implementation;
2
3
import de.pewpewproject.lasertag.LasertagMod;
4
import de.pewpewproject.lasertag.lasertaggame.state.management.server.ISettingsPresetsManager;
5
import de.pewpewproject.lasertag.lasertaggame.state.management.server.synced.ISettingsManager;
6
import de.pewpewproject.lasertag.lasertaggame.state.management.server.synced.ISettingsPresetsNameManager;
7
import de.pewpewproject.lasertag.lasertaggame.state.server.implementation.SettingsPresetsState;
8
9
import java.io.IOException;
10
import java.nio.file.Files;
11
import java.nio.file.Path;
12
import java.nio.file.StandardOpenOption;
13
14
/**
15
 * Implementation of ISettingsPresetsManager for the server lasertag game
16
 *
17
 * @author Étienne Muser
18
 */
19
public class SettingsPresetsManager implements ISettingsPresetsManager {
20
21
    //region Private fields
22
    private final SettingsPresetsState state;
23
24
    // Get path to lasertag settings file
25
    private static final Path lasertagSettingsPresetsFilePath = LasertagMod.configFolderPath.resolve("lasertagSettingsPresets.json");
26
27
    private final ISettingsManager settingsManager;
28
29
    //endregion
30
31
    public SettingsPresetsManager(SettingsPresetsState state,
32
                                  ISettingsPresetsNameManager settingsPresetsNamesManager,
33
                                  ISettingsManager settingsManager) {
34
35
        this.state = state;
36
        this.settingsManager = settingsManager;
37
38
        if (Files.exists(lasertagSettingsPresetsFilePath)) {
39
40
            try {
41
                var presetsFileContents = Files.readString(lasertagSettingsPresetsFilePath);
42
43
                state = SettingsPresetsState.fromJson(presetsFileContents);
44
            } catch (IOException e) {
45
                LasertagMod.LOGGER.warn("Reading of lasertag settings presets file failed: " + e.getMessage());
46
            }
47
        } else {
48
            state = SettingsPresetsState.createNewPresetsMap();
49
            persist();
50
        }
51
52
        if (state != null) {
53
            state.keySet().forEach(settingsPresetsNamesManager::addPresetName);
54
        }
55
    }
56
57
    @Override
58
    public SettingsPresetsState getPresets() {
59
        return state;
60
    }
61
62
    @Override
63
    public void savePreset(String name) {
64
        state.put(name, settingsManager.cloneSettings());
65
        persist();
66
    }
67
68
    @Override
69
    public boolean loadPreset(String name) {
70
71
        if (!state.containsKey(name)) {
72
            return false;
73
        }
74
75
        var preset = state.get(name);
76
        settingsManager.set(preset);
77
        return true;
78
    }
79
80
    @Override
81
    public boolean deletePreset(String name) {
82
83
        if (!state.containsKey(name)) {
84
            return false;
85
        }
86
87
        state.remove(name);
88
        persist();
89
        return true;
90
    }
91
92
    private void persist() {
93
        try {
94
            Files.createDirectories(lasertagSettingsPresetsFilePath.getParent());
95
            Files.writeString(lasertagSettingsPresetsFilePath, state.toJson(), StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE);
96
        } catch (IOException ex) {
97
            LasertagMod.LOGGER.error("Could not persist preset: " + ex.getMessage());
98
        }
99
    }
100
}
101