Skip to content

Commit 026fc02

Browse files
committed
Merge pull request #117 from nimirum/core_integration
Pathy Strings refactored to Paths, closes #111
2 parents a3b9454 + d6b95ed commit 026fc02

File tree

11 files changed

+80
-58
lines changed

11 files changed

+80
-58
lines changed

tmc-plugin/src/fi/helsinki/cs/tmc/layergen/UpdateCenterLayerGen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.io.UnsupportedEncodingException;
1515
import java.net.MalformedURLException;
1616
import java.net.URL;
17+
import java.nio.file.Paths;
1718
import java.util.Collection;
1819

1920
/**
@@ -44,7 +45,7 @@ public InputStream openInputStream() {
4445
public UpdateCenterLayerGen() {
4546
synchronized (UpdateCenterLayerGen.class) {
4647
if (!callbackRegistered) {
47-
CallbackURLStreamHandler.registerCallback(CALLBACK_NAME, callback);
48+
CallbackURLStreamHandler.registerCallback(Paths.get(CALLBACK_NAME), callback);
4849
}
4950
callbackRegistered = true;
5051
}

tmc-plugin/src/fi/helsinki/cs/tmc/model/NbTmcSettings.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import fi.helsinki.cs.tmc.tailoring.Tailoring;
88
import fi.helsinki.cs.tmc.core.configuration.TmcSettings;
99
import fi.helsinki.cs.tmc.core.domain.Course;
10+
11+
import java.nio.file.Path;
12+
import java.nio.file.Paths;
1013
import java.util.Locale;
1114

1215
/**
@@ -153,9 +156,10 @@ public boolean isSavingPassword() {
153156

154157
@Override
155158
public String getTmcMainDirectory() {
156-
String path = settings.get(PREF_PROJECT_ROOT_DIR, null);
157-
if (path != null) {
158-
return path;
159+
String target = settings.get(PREF_PROJECT_ROOT_DIR, null);
160+
//TODO: Change String to Path in TmcSettings
161+
if (target != null) {
162+
return target;
159163
} else {
160164
// Can sometimes take a while. That's why we don't pass it as a default above.
161165
return ProjectMediator.getDefaultProjectRootDir();

tmc-plugin/src/fi/helsinki/cs/tmc/model/ProjectMediator.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import fi.helsinki.cs.tmc.core.domain.Exercise;
44
import fi.helsinki.cs.tmc.utilities.ExceptionUtils;
5+
56
import java.io.File;
67
import java.io.IOException;
8+
import java.nio.file.Path;
9+
import java.nio.file.Paths;
710
import java.util.ArrayList;
811
import java.util.Arrays;
912
import java.util.Collection;
@@ -113,13 +116,13 @@ public File getCourseRootDir(String courseName) {
113116
* The exercise must have a course name set.
114117
*/
115118
public File getProjectDirForExercise(Exercise ex) {
116-
String path =
119+
Path path = Paths.get(
117120
getProjectRootDir()
118121
+ File.separator
119122
+ ex.getCourseName()
120123
+ File.separator
121-
+ ex.getName().replaceAll("-", "/");
122-
File file = new File(path);
124+
+ ex.getName().replaceAll("-", "/"));
125+
File file = path.toFile();
123126
return FileUtil.normalizeFile(file);
124127
}
125128

tmc-plugin/src/fi/helsinki/cs/tmc/model/PushEventListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.TimerTask;
1212
import java.util.logging.Level;
1313
import java.util.logging.Logger;
14+
1415
import org.cometd.bayeux.Channel;
1516
import org.cometd.bayeux.Message;
1617
import org.cometd.bayeux.client.ClientSession;

tmc-plugin/src/fi/helsinki/cs/tmc/model/SourceFileLookup.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import fi.helsinki.cs.tmc.core.domain.Exercise;
44

5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
7+
58
import org.netbeans.api.java.classpath.GlobalPathRegistry;
69
import org.openide.filesystems.FileObject;
710

@@ -24,20 +27,20 @@ private SourceFileLookup(
2427

2528
public FileObject findSourceFileFor(Exercise exercise, String className) {
2629
String outerClassName = className.replaceAll("\\$.*$", "");
27-
String path = outerClassName.replace('.', '/') + ".java";
30+
Path path = Paths.get(outerClassName.replace('.', '/') + ".java");
2831

2932
TmcProjectInfo correctProject = projectMediator.tryGetProjectForExercise(exercise);
3033
for (FileObject sr : globalPathRegistry.getSourceRoots()) {
3134
TmcProjectInfo p = projectMediator.tryGetProjectOwningFile(sr);
3235
if (p != null && p.equals(correctProject)) {
33-
FileObject result = sr.getFileObject(path);
36+
FileObject result = sr.getFileObject(path.toString());
3437
if (result != null) {
3538
return result;
3639
}
3740
}
3841
}
3942

4043
// Fall back to findResource picking a source root from any project.
41-
return GlobalPathRegistry.getDefault().findResource(path);
44+
return GlobalPathRegistry.getDefault().findResource(path.toString());
4245
}
4346
}

tmc-plugin/src/fi/helsinki/cs/tmc/spyware/eventsources/SourceSnapshotEventSource.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.io.Closeable;
2424
import java.io.File;
2525
import java.io.IOException;
26+
import java.nio.file.Path;
2627
import java.util.logging.Level;
2728
import java.util.logging.Logger;
2829
import javax.swing.SwingUtilities;
@@ -102,27 +103,27 @@ public void fileRenamed(FileRenameEvent fre) {
102103
public void fileAttributeChanged(FileAttributeEvent fae) {}
103104

104105
private void reactToChange(final ChangeType changeType, final FileObject fileObject) {
105-
String filePath = TmcFileUtils.tryGetPathRelativeToProject(fileObject);
106+
Path filePath = TmcFileUtils.tryGetPathRelativeToProject(fileObject);
106107
if (filePath == null) {
107108
return;
108109
}
109110
String metadata =
110111
JsonMaker.create()
111112
.add("cause", changeType.name().toLowerCase())
112-
.add("file", filePath)
113+
.add("file", filePath.toString())
113114
.toString();
114115
invokeSnapshotThreadViaEdt(fileObject, metadata);
115116
}
116117

117118
private void reactToRename(final ChangeType changeType, final FileRenameEvent renameEvent) {
118-
String filePath = TmcFileUtils.tryGetPathRelativeToProject(renameEvent.getFile());
119+
Path filePath = TmcFileUtils.tryGetPathRelativeToProject(renameEvent.getFile());
119120
if (filePath == null) {
120121
return;
121122
}
122123
String metadata =
123124
JsonMaker.create()
124125
.add("cause", changeType.name().toLowerCase())
125-
.add("file", filePath)
126+
.add("file", filePath.toString())
126127
.add("previous_name", renameEvent.getName() + "." + renameEvent.getExt())
127128
.toString();
128129
invokeSnapshotThreadViaEdt(renameEvent.getFile(), metadata);

tmc-plugin/src/fi/helsinki/cs/tmc/spyware/eventsources/TextInsertEventSource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.beans.PropertyChangeListener;
2626
import java.io.Closeable;
2727
import java.nio.charset.Charset;
28+
import java.nio.file.Path;
2829
import java.util.HashMap;
2930
import java.util.List;
3031
import java.util.Map;
@@ -168,10 +169,10 @@ private void sendEvent(Exercise ex, String eventType, String text) {
168169

169170
private String generatePatchDescription(
170171
FileObject fo, List<Patch> patches, boolean patchContainsFullDocument) {
171-
String filePath = TmcFileUtils.tryGetPathRelativeToProject(fo);
172+
Path filePath = TmcFileUtils.tryGetPathRelativeToProject(fo);
172173
if (filePath != null) {
173174
return JsonMaker.create()
174-
.add("file", filePath)
175+
.add("file", filePath.toString())
175176
.add("patches", PATCH_GENERATOR.patch_toText(patches))
176177
.add("full_document", patchContainsFullDocument)
177178
.toString();

tmc-plugin/src/fi/helsinki/cs/tmc/utilities/TmcFileUtils.java

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

3+
import java.nio.file.Path;
4+
import java.nio.file.Paths;
35
import org.netbeans.api.project.FileOwnerQuery;
46
import org.netbeans.api.project.Project;
57

@@ -12,16 +14,16 @@ public class TmcFileUtils {
1214
*
1315
* Otherwise returns null.
1416
*/
15-
public static String tryGetPathRelativeToProject(FileObject fileObject) {
16-
String filePath = fileObject.getPath();
17+
public static Path tryGetPathRelativeToProject(FileObject fileObject) {
18+
Path filePath = Paths.get(fileObject.getPath());
1719

1820
try {
1921
Project p = FileOwnerQuery.getOwner(fileObject);
2022
String projectDirectory = p.getProjectDirectory().getPath();
21-
if (filePath.contains(projectDirectory)) {
23+
if (filePath.toString().contains(projectDirectory)) {
2224
filePath =
23-
filePath.substring(
24-
filePath.indexOf(projectDirectory) + projectDirectory.length());
25+
Paths.get(filePath.toString().substring(
26+
filePath.toString().indexOf(projectDirectory) + projectDirectory.length()));
2527
}
2628
} catch (Exception e) {
2729
return null;

tmc-plugin/src/fi/helsinki/cs/tmc/utilities/urlcallback/CallbackURLStreamHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.net.URL;
1010
import java.net.URLConnection;
1111
import java.net.URLStreamHandler;
12+
import java.nio.file.Path;
1213
import java.util.Map;
1314

1415
/**
@@ -21,9 +22,9 @@
2122
@URLStreamHandlerRegistration(protocol = "callback")
2223
public class CallbackURLStreamHandler extends URLStreamHandler {
2324

24-
private static final Map<String, URLCallback> callbacks = Maps.newHashMap();
25+
private static final Map<Path, URLCallback> callbacks = Maps.newHashMap();
2526

26-
public static void registerCallback(String path, URLCallback callback) {
27+
public static void registerCallback(Path path, URLCallback callback) {
2728
if (callback == null) {
2829
callbacks.remove(path);
2930
} else {

tmc-plugin/src/fi/helsinki/cs/tmc/utilities/zip/NbProjectUnzipper.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import java.io.IOException;
1313
import java.io.InputStream;
1414
import java.io.OutputStream;
15+
import java.nio.file.Path;
16+
import java.nio.file.Paths;
1517
import java.util.ArrayList;
1618
import java.util.HashSet;
1719
import java.util.List;
@@ -148,11 +150,11 @@ public Result unzipProject(byte[] data, File projectDir, boolean reallyWriteFile
148150
ZipEntry zent;
149151
while ((zent = zis.getNextEntry()) != null) {
150152
if (zent.getName().startsWith(projectDirInZip)) {
151-
String restOfPath = zent.getName().substring(projectDirInZip.length());
152-
restOfPath = trimSlashes(restOfPath);
153+
Path restOfPath = Paths.get(zent.getName().substring(projectDirInZip.length()));
154+
restOfPath = trimSlashes(restOfPath.toString());
153155

154-
String destFileRelativePath = trimSlashes(restOfPath.replace("/", File.separator));
155-
pathsInZip.add(destFileRelativePath);
156+
Path destFileRelativePath = trimSlashes(restOfPath.toString().replace("/", File.separator));
157+
pathsInZip.add(destFileRelativePath.toString());
156158
File destFile =
157159
new File(projectDir.toString() + File.separator + destFileRelativePath);
158160

@@ -167,17 +169,17 @@ public Result unzipProject(byte[] data, File projectDir, boolean reallyWriteFile
167169
if (destFile.exists()) {
168170
if (fileContentEquals(destFile, entryData)) {
169171
shouldWrite = false;
170-
result.unchangedFiles.add(destFileRelativePath);
171-
} else if (overwriting.mayOverwrite(destFileRelativePath)) {
172+
result.unchangedFiles.add(destFileRelativePath.toString());
173+
} else if (overwriting.mayOverwrite(destFileRelativePath.toString())) {
172174
shouldWrite = true;
173-
result.overwrittenFiles.add(destFileRelativePath);
175+
result.overwrittenFiles.add(destFileRelativePath.toString());
174176
} else {
175177
shouldWrite = false;
176-
result.skippedFiles.add(destFileRelativePath);
178+
result.skippedFiles.add(destFileRelativePath.toString());
177179
}
178180
} else {
179181
shouldWrite = true;
180-
result.newFiles.add(destFileRelativePath);
182+
result.newFiles.add(destFileRelativePath.toString());
181183
}
182184
if (shouldWrite && reallyWriteFiles) {
183185
FileUtils.forceMkdir(destFile.getParentFile());
@@ -204,40 +206,40 @@ private void deleteFilesNotInZip(
204206
boolean reallyWriteFiles)
205207
throws IOException {
206208
for (File file : curDir.listFiles()) {
207-
String relPath = file.getPath().substring(projectDir.getPath().length());
208-
relPath = trimSlashes(relPath);
209+
Path relPath = Paths.get(file.getPath().substring(projectDir.getPath().length()));
210+
relPath = trimSlashes(relPath.toString());
209211

210212
if (file.isDirectory()) {
211213
deleteFilesNotInZip(
212214
projectDir, file, result, pathsInZip, overwriting, reallyWriteFiles);
213215
}
214216

215-
if (!pathsInZip.contains(relPath)) {
216-
if (overwriting.mayDelete(relPath)) {
217+
if (!pathsInZip.contains(relPath.toString())) {
218+
if (overwriting.mayDelete(relPath.toString())) {
217219
if (file.isDirectory() && file.listFiles().length > 0) {
218220
// Won't delete directories if they still have contents
219-
result.skippedDeletingFiles.add(relPath);
221+
result.skippedDeletingFiles.add(relPath.toString());
220222
} else {
221223
if (reallyWriteFiles) {
222224
file.delete();
223225
}
224-
result.deletedFiles.add(relPath);
226+
result.deletedFiles.add(relPath.toString());
225227
}
226228
} else {
227-
result.skippedDeletingFiles.add(relPath);
229+
result.skippedDeletingFiles.add(relPath.toString());
228230
}
229231
}
230232
}
231233
}
232234

233-
private String trimSlashes(String s) {
235+
private Path trimSlashes(String s) {
234236
while (s.startsWith("/") || s.startsWith(File.separator)) {
235237
s = s.substring(1);
236238
}
237239
while (s.endsWith("/") || s.startsWith(File.separator)) {
238240
s = s.substring(0, s.length() - 1);
239241
}
240-
return s;
242+
return Paths.get(s);
241243
}
242244

243245
private String findProjectDirInZip(byte[] data) throws IOException {

0 commit comments

Comments
 (0)