Skip to content

Commit abd601e

Browse files
committed
Update|
1 parent 5e35ab6 commit abd601e

File tree

4 files changed

+269
-57
lines changed

4 files changed

+269
-57
lines changed

maven-wrapper/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<dependency>
4747
<groupId>${project.groupId}</groupId>
4848
<artifactId>core</artifactId>
49-
<version>0.5.0-SNAPSHOT</version>
49+
<version>0.5.3-SNAPSHOT</version>
5050
</dependency>
5151
<dependency>
5252
<groupId>${project.groupId}</groupId>

tmc-plugin/src/fi/helsinki/cs/tmc/actions/DownloadSolutionAction.java

Lines changed: 5 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package fi.helsinki.cs.tmc.actions;
22

3-
import fi.helsinki.cs.tmc.core.communication.TmcServerCommunicationTaskFactory;
3+
import fi.helsinki.cs.tmc.core.TmcCore;
44
import fi.helsinki.cs.tmc.core.domain.Exercise;
5-
import fi.helsinki.cs.tmc.core.holders.TmcSettingsHolder;
5+
import fi.helsinki.cs.tmc.core.domain.ProgressObserver;
66
import fi.helsinki.cs.tmc.core.utilities.ServerErrorHelper;
7-
import fi.helsinki.cs.tmc.coreimpl.TmcCoreSettingsImpl;
87
import fi.helsinki.cs.tmc.events.TmcEvent;
98
import fi.helsinki.cs.tmc.events.TmcEventBus;
109
import fi.helsinki.cs.tmc.model.CourseDb;
@@ -13,9 +12,6 @@
1312
import fi.helsinki.cs.tmc.ui.ConvenientDialogDisplayer;
1413
import fi.helsinki.cs.tmc.utilities.BgTask;
1514
import fi.helsinki.cs.tmc.utilities.BgTaskListener;
16-
import fi.helsinki.cs.tmc.utilities.CancellableCallable;
17-
import fi.helsinki.cs.tmc.utilities.zip.NbProjectUnzipper;
18-
import fi.helsinki.cs.tmc.utilities.zip.NbProjectUnzipper.OverwritingDecider;
1915

2016
import com.google.common.base.Function;
2117

@@ -133,44 +129,9 @@ public Void apply(Boolean yes) {
133129
}
134130

135131
private void downloadSolution(final Exercise ex, final TmcProjectInfo proj) {
136-
Callable<byte[]> downloadTask =
137-
new TmcServerCommunicationTaskFactory().getDownloadingExerciseSolutionZipTask(ex);
138-
BgTask.start(
139-
"Downloading solution for " + ex.getName(),
140-
downloadTask,
141-
new BgTaskListener<byte[]>() {
142-
@Override
143-
public void bgTaskReady(byte[] result) {
144-
unzipSolution(ex, proj, result);
145-
}
146-
147-
@Override
148-
public void bgTaskCancelled() {}
149-
150-
@Override
151-
public void bgTaskFailed(Throwable ex) {
152-
logger.log(Level.INFO, "Failed to download solution.", ex);
153-
dialogs.displayError(
154-
"Failed to download solution.\n"
155-
+ ServerErrorHelper.getServerExceptionMsg(ex));
156-
}
157-
});
158-
}
159-
160-
private void unzipSolution(final Exercise ex, final TmcProjectInfo proj, final byte[] data) {
161-
Callable<Object> task =
162-
new Callable<Object>() {
163-
@Override
164-
public Object call() throws Exception {
165-
NbProjectUnzipper unzipper = new NbProjectUnzipper(solutionOverwriting);
166-
unzipper.unzipProject(data, proj.getProjectDirAsFile());
167-
return null;
168-
}
169-
};
170-
171-
BgTask.start(
172-
"Extracting solution",
173-
task,
132+
Exercise exercise = exerciseForProject(proj.getProject());
133+
Callable<Exercise> dlModelSolutionTask = TmcCore.get().downloadModelSolution(ProgressObserver.NULL_OBSERVER, exercise);
134+
BgTask.start("Downloading modelsolution", dlModelSolutionTask,
174135
new BgTaskListener<Object>() {
175136
@Override
176137
public void bgTaskReady(Object result) {
@@ -190,18 +151,6 @@ public void bgTaskFailed(Throwable ex) {
190151
});
191152
}
192153

193-
private OverwritingDecider solutionOverwriting =
194-
new OverwritingDecider() {
195-
@Override
196-
public boolean mayOverwrite(String relPath) {
197-
return true;
198-
}
199-
200-
@Override
201-
public boolean mayDelete(String relPath) {
202-
return false;
203-
}
204-
};
205154

206155
private class ActionMenuItem extends JMenuItem implements DynamicMenuContent {
207156

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
package fi.helsinki.cs.tmc.coreimpl;
2+
3+
import fi.helsinki.cs.tmc.core.configuration.TmcSettings;
4+
import fi.helsinki.cs.tmc.core.domain.Course;
5+
import fi.helsinki.cs.tmc.events.TmcEvent;
6+
import fi.helsinki.cs.tmc.events.TmcEventBus;
7+
import fi.helsinki.cs.tmc.model.PersistableSettings;
8+
import fi.helsinki.cs.tmc.model.ProjectMediator;
9+
import fi.helsinki.cs.tmc.tailoring.SelectedTailoring;
10+
import fi.helsinki.cs.tmc.tailoring.Tailoring;
11+
12+
import com.google.common.base.Optional;
13+
import java.net.ProxySelector;
14+
import java.nio.file.Path;
15+
import java.nio.file.Paths;
16+
import java.util.Locale;
17+
import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
18+
import org.openide.util.Lookup;
19+
import org.openide.util.NbPreferences;
20+
21+
public class TmcCoreSettingsImpl implements TmcSettings {
22+
23+
24+
private static final String PREF_BASE_URL = "baseUrl";
25+
private static final String PREF_USERNAME = "username";
26+
private static final String PREF_PASSWORD = "password";
27+
private static final String PREF_PROJECT_ROOT_DIR = "projectRootDir";
28+
private static final String PREF_CHECK_FOR_UPDATES_IN_BACKGROUND = "checkForUpdatesInBackground";
29+
private static final String PREF_CHECK_FOR_UNOPENED_AT_STARTUP = "checkForUnopenedAtStartup";
30+
private static final String PREF_SPYWARE_ENABLED = "spywareEnabled";
31+
private static final String PREF_DETAILED_SPYWARE_ENABLED = "detailedSpywareEnabled";
32+
private static final String PREF_ERROR_MSG_LOCALE = "errorMsgLocale";
33+
34+
private static final PersistableSettings settings = PersistableSettings.forModule(TmcSettings.class);
35+
36+
private Tailoring tailoring = SelectedTailoring.get();
37+
private TmcEventBus eventBus = TmcEventBus.getDefault();
38+
39+
private String unsavedPassword = settings.get(PREF_PASSWORD, "");
40+
41+
@Override
42+
public String getServerAddress() {
43+
return settings.get(PREF_BASE_URL, tailoring.getDefaultServerUrl());
44+
}
45+
46+
@Override
47+
public boolean userDataExists() {
48+
return true;
49+
}
50+
51+
@Override
52+
// TODO: replace this with courseDbs
53+
public Optional<Course> getCurrentCourse() {
54+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
55+
}
56+
57+
@Override
58+
public String apiVersion() {
59+
return "7";
60+
}
61+
62+
@Override
63+
public String clientName() {
64+
return "netbeans_plugin";
65+
}
66+
67+
@Override
68+
// TODO
69+
public String clientVersion() {
70+
return "0.9.2";
71+
}
72+
73+
@Override
74+
// TODO what is this even
75+
public String getFormattedUserData() {
76+
return "";
77+
}
78+
79+
@Override
80+
// TODO
81+
public Path getTmcProjectDirectory() {
82+
return Paths.get(getProjectRootDir());
83+
}
84+
85+
@Override
86+
public Locale getLocale() {
87+
return getErrorMsgLocale();
88+
}
89+
90+
@Override
91+
public SystemDefaultRoutePlanner proxy() {
92+
ProxySelector proxys = Lookup.getDefault().lookup((ProxySelector.class));
93+
return new SystemDefaultRoutePlanner(proxys);
94+
}
95+
96+
@Override
97+
public void setCourse(Course course) {
98+
// TODO use this instead of coursedb
99+
}
100+
101+
@Override
102+
public void setConfigRoot(Path path) {
103+
// NOP
104+
}
105+
106+
@Override
107+
public Path getConfigRoot() {
108+
return Paths.get(NbPreferences.forModule(TmcCoreSettingsImpl.class).absolutePath());
109+
}
110+
111+
public static class SavedEvent implements TmcEvent {}
112+
113+
// PersistableSettings.forModule(TmcSettings.class),
114+
// SelectedTailoring.get(),
115+
// TmcEventBus.getDefault()
116+
117+
// /*package*/ TmcSettings(PersistableSettings settings, Tailoring tailoring, TmcEventBus eventBus) {
118+
// this.settings = settings;
119+
// this.tailoring = tailoring;
120+
// this.eventBus = eventBus;
121+
//
122+
// this.unsavedPassword = settings.get(PREF_PASSWORD, "");
123+
// }
124+
125+
public void save() {
126+
settings.saveAll();
127+
eventBus.post(new SavedEvent());
128+
}
129+
130+
public String getServerBaseUrl() {
131+
return settings.get(PREF_BASE_URL, tailoring.getDefaultServerUrl());
132+
}
133+
134+
public void setServerBaseUrl(String baseUrl) {
135+
baseUrl = stripTrailingSlashes(baseUrl);
136+
settings.put(PREF_BASE_URL, baseUrl);
137+
}
138+
139+
private String stripTrailingSlashes(String s) {
140+
while (s.endsWith("/")) {
141+
s = s.substring(0, s.length() - 1);
142+
}
143+
return s;
144+
}
145+
146+
@Override
147+
public String getUsername() {
148+
return settings.get(PREF_USERNAME, tailoring.getDefaultUsername());
149+
}
150+
151+
public void setUsername(String username) {
152+
settings.put(PREF_USERNAME, username);
153+
}
154+
155+
@Override
156+
// TODO: make char array not to leave it in memory (String pool)
157+
public String getPassword() {
158+
return unsavedPassword;
159+
}
160+
161+
public void setPassword(String password) {
162+
unsavedPassword = password;
163+
if (isSavingPassword()) {
164+
settings.put(PREF_PASSWORD, password);
165+
}
166+
}
167+
168+
public void setSavingPassword(boolean shouldSave) {
169+
if (shouldSave) {
170+
settings.put(PREF_PASSWORD, unsavedPassword);
171+
} else {
172+
settings.remove(PREF_PASSWORD);
173+
}
174+
}
175+
176+
public boolean isSavingPassword() {
177+
return settings.get(PREF_PASSWORD, null) != null;
178+
}
179+
180+
public String getProjectRootDir() {
181+
String path = settings.get(PREF_PROJECT_ROOT_DIR, null);
182+
if (path != null) {
183+
return path;
184+
} else {
185+
// Can sometimes take a while. That's why we don't pass it as a default above.
186+
return ProjectMediator.getDefaultProjectRootDir();
187+
}
188+
}
189+
190+
public void setProjectRootDir(String value) {
191+
settings.put(PREF_PROJECT_ROOT_DIR, value);
192+
}
193+
194+
public boolean isCheckingForUpdatesInTheBackground() {
195+
return settings.get(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, "1").equals("1");
196+
}
197+
198+
public void setCheckingForUpdatesInTheBackground(boolean value) {
199+
settings.put(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, value ? "1" : "0");
200+
}
201+
202+
public boolean isCheckingForUnopenedAtStartup() {
203+
return settings.get(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, "1").equals("1");
204+
}
205+
206+
public void setCheckingForUnopenedAtStartup(boolean value) {
207+
settings.put(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, value ? "1" : "0");
208+
}
209+
210+
public boolean isSpywareEnabled() {
211+
String defaultValue = tailoring.isSpywareEnabledByDefault() ? "1" : "0";
212+
return settings.get(PREF_SPYWARE_ENABLED, defaultValue).equals("1");
213+
}
214+
215+
public void setIsSpywareEnabled(boolean value) {
216+
settings.put(PREF_SPYWARE_ENABLED, value ? "1" : "0");
217+
}
218+
219+
public boolean isDetailedSpywareEnabled() {
220+
String defaultValue = tailoring.isDetailedSpywareEnabledByDefault() ? "1" : "0";
221+
return settings.get(PREF_DETAILED_SPYWARE_ENABLED, defaultValue).equals("1");
222+
}
223+
224+
public Locale getErrorMsgLocale() {
225+
Locale dflt = tailoring.getDefaultErrorMsgLocale();
226+
return parseLocale(settings.get(PREF_ERROR_MSG_LOCALE, ""), dflt);
227+
}
228+
229+
public void setErrorMsgLocale(Locale locale) {
230+
settings.put(PREF_ERROR_MSG_LOCALE, locale.toString());
231+
}
232+
233+
private Locale parseLocale(String s, Locale dflt) {
234+
if (s.isEmpty()) {
235+
return dflt;
236+
}
237+
String[] parts = s.split("_");
238+
switch (parts.length) {
239+
case 1:
240+
return new Locale(parts[0]);
241+
case 2:
242+
return new Locale(parts[0], parts[1]);
243+
case 3:
244+
return new Locale(parts[0], parts[1], parts[2]);
245+
default:
246+
return dflt;
247+
}
248+
}
249+
250+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package fi.helsinki.cs.tmc.data;
7+
8+
/**
9+
*
10+
* @author jamo
11+
*/
12+
public class TestCaseResult {
13+

0 commit comments

Comments
 (0)