-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathNbTmcSettings.java
More file actions
228 lines (189 loc) · 7.04 KB
/
Copy pathNbTmcSettings.java
File metadata and controls
228 lines (189 loc) · 7.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
package fi.helsinki.cs.tmc.model;
import com.google.common.base.Optional;
import fi.helsinki.cs.tmc.events.TmcEvent;
import fi.helsinki.cs.tmc.events.TmcEventBus;
import fi.helsinki.cs.tmc.tailoring.SelectedTailoring;
import fi.helsinki.cs.tmc.tailoring.Tailoring;
import fi.helsinki.cs.tmc.core.configuration.TmcSettings;
import fi.helsinki.cs.tmc.core.domain.Course;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Locale;
/**
* A transient saveable collection of all settings of the TMC plugin.
*/
public class NbTmcSettings implements TmcSettings {
private static final String PREF_BASE_URL = "baseUrl";
private static final String PREF_USERNAME = "username";
private static final String PREF_PASSWORD = "password";
private static final String PREF_PROJECT_ROOT_DIR = "projectRootDir";
private static final String PREF_CHECK_FOR_UPDATES_IN_BACKGROUND =
"checkForUpdatesInBackground";
private static final String PREF_CHECK_FOR_UNOPENED_AT_STARTUP = "checkForUnopenedAtStartup";
private static final String PREF_SPYWARE_ENABLED = "spywareEnabled";
private static final String PREF_DETAILED_SPYWARE_ENABLED = "detailedSpywareEnabled";
private static final String PREF_ERROR_MSG_LOCALE = "errorMsgLocale";
private static final NbTmcSettings defaultInstance =
new NbTmcSettings(
PersistableSettings.forModule(NbTmcSettings.class),
SelectedTailoring.get(),
TmcEventBus.getDefault());
private PersistableSettings settings;
private Tailoring tailoring;
private TmcEventBus eventBus;
private final String api_version = "7";
private String unsavedPassword;
@Override
public boolean userDataExists() {
return !(this.getUsername().isEmpty() || this.getPassword().isEmpty());
}
@Override
public Optional<Course> getCurrentCourse() {
if (CourseDb.getInstance().getCurrentCourse() == null) {
return Optional.absent();
} else {
return Optional.of(CourseDb.getInstance().getCurrentCourse());
}
}
@Override
public String apiVersion() {
return this.api_version;
}
@Override
public String getFormattedUserData() {
return this.getUsername() + ":" + this.getPassword();
}
@Override
public String clientName() {
return "netbeans_plugin";
}
@Override
public String clientVersion() {
return "0.8.8";
}
public static class SavedEvent implements TmcEvent {}
public static NbTmcSettings getDefault() {
return defaultInstance;
}
public static NbTmcSettings getTransient() {
return new NbTmcSettings(
PersistableSettings.forModule(NbTmcSettings.class),
SelectedTailoring.get(),
TmcEventBus.getDefault());
}
/*package*/ NbTmcSettings(
PersistableSettings settings, Tailoring tailoring, TmcEventBus eventBus) {
this.settings = settings;
this.tailoring = tailoring;
this.eventBus = eventBus;
this.unsavedPassword = settings.get(PREF_PASSWORD, "");
}
public void save() {
if (this != defaultInstance) {
throw new IllegalStateException("May only save the default instance of TmcSettings.");
}
settings.saveAll();
eventBus.post(new SavedEvent());
}
@Override
public String getServerAddress() {
return settings.get(PREF_BASE_URL, tailoring.getDefaultServerUrl());
}
public void setServerBaseUrl(String baseUrl) {
baseUrl = stripTrailingSlashes(baseUrl);
settings.put(PREF_BASE_URL, baseUrl);
}
private String stripTrailingSlashes(String s) {
while (s.endsWith("/")) {
s = s.substring(0, s.length() - 1);
}
return s;
}
@Override
public String getUsername() {
return settings.get(PREF_USERNAME, tailoring.getDefaultUsername());
}
public void setUsername(String username) {
settings.put(PREF_USERNAME, username);
}
@Override
public String getPassword() {
return unsavedPassword;
}
public void setPassword(String password) {
unsavedPassword = password;
if (isSavingPassword()) {
settings.put(PREF_PASSWORD, password);
}
}
public void setSavingPassword(boolean shouldSave) {
if (shouldSave) {
settings.put(PREF_PASSWORD, unsavedPassword);
} else {
settings.remove(PREF_PASSWORD);
}
}
public boolean isSavingPassword() {
return settings.get(PREF_PASSWORD, null) != null;
}
@Override
public String getTmcMainDirectory() {
String target = settings.get(PREF_PROJECT_ROOT_DIR, null);
//TODO: Change String to Path in TmcSettings
if (target != null) {
return target;
} else {
// Can sometimes take a while. That's why we don't pass it as a default above.
return ProjectMediator.getDefaultProjectRootDir();
}
}
public void setProjectRootDir(String value) {
settings.put(PREF_PROJECT_ROOT_DIR, value);
}
public boolean isCheckingForUpdatesInTheBackground() {
return settings.get(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, "1").equals("1");
}
public void setCheckingForUpdatesInTheBackground(boolean value) {
settings.put(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, value ? "1" : "0");
}
public boolean isCheckingForUnopenedAtStartup() {
return settings.get(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, "1").equals("1");
}
public void setCheckingForUnopenedAtStartup(boolean value) {
settings.put(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, value ? "1" : "0");
}
public boolean isSpywareEnabled() {
String defaultValue = tailoring.isSpywareEnabledByDefault() ? "1" : "0";
return settings.get(PREF_SPYWARE_ENABLED, defaultValue).equals("1");
}
public void setIsSpywareEnabled(boolean value) {
settings.put(PREF_SPYWARE_ENABLED, value ? "1" : "0");
}
public boolean isDetailedSpywareEnabled() {
String defaultValue = tailoring.isDetailedSpywareEnabledByDefault() ? "1" : "0";
return settings.get(PREF_DETAILED_SPYWARE_ENABLED, defaultValue).equals("1");
}
public Locale getErrorMsgLocale() {
Locale dflt = tailoring.getDefaultErrorMsgLocale();
return parseLocale(settings.get(PREF_ERROR_MSG_LOCALE, ""), dflt);
}
public void setErrorMsgLocale(Locale locale) {
settings.put(PREF_ERROR_MSG_LOCALE, locale.toString());
}
private Locale parseLocale(String s, Locale dflt) {
if (s.isEmpty()) {
return dflt;
}
String[] parts = s.split("_");
switch (parts.length) {
case 1:
return new Locale(parts[0]);
case 2:
return new Locale(parts[0], parts[1]);
case 3:
return new Locale(parts[0], parts[1], parts[2]);
default:
return dflt;
}
}
}