Skip to content

Commit 72577f0

Browse files
committed
Add pattern argument to mastermap command. Refs #374
1 parent c42e822 commit 72577f0

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/MastermapCommandTask.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.baderlab.csplugins.enrichmentmap.commands;
22

33
import java.io.File;
4+
import java.nio.file.FileSystems;
5+
import java.nio.file.PathMatcher;
46
import java.util.Arrays;
57
import java.util.List;
68

@@ -40,6 +42,9 @@ public class MastermapCommandTask extends AbstractTask implements ObservableTask
4042
@Inject
4143
public FilterTunables filterArgs;
4244

45+
@Tunable(description="A glob-style path filter. Sub-folders inside the root folder that do not match the pattern will be ignored. "
46+
+ "For more details on syntax see https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getPathMatcher-java.lang.String-")
47+
public String pattern;
4348

4449
@Inject private SynchronousTaskManager<?> taskManager;
4550
@Inject private CreateEnrichmentMapTaskFactory.Factory taskFactoryFactory;
@@ -60,6 +65,12 @@ public void run(TaskMonitor tm) throws Exception {
6065

6166
// Scan root folder (note: throws exception if no data sets were found)
6267
ResolverTask resolverTask = new ResolverTask(rootFolder);
68+
69+
if(pattern != null) {
70+
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
71+
resolverTask.setPathMatcher(matcher);
72+
}
73+
6374
taskManager.execute(new TaskIterator(resolverTask)); // blocks
6475
List<DataSetParameters> dataSets = resolverTask.getDataSetResults();
6576

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/MastermapListCommandTask.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.baderlab.csplugins.enrichmentmap.commands;
22

33
import java.io.File;
4+
import java.nio.file.FileSystems;
5+
import java.nio.file.PathMatcher;
46
import java.util.Arrays;
57
import java.util.List;
68

@@ -25,6 +27,10 @@ public class MastermapListCommandTask extends AbstractTask implements Observable
2527
+ "The files will be scanned and automatically grouped into data sets. Sub-folders will be scanned up to one level deep.")
2628
public File rootFolder;
2729

30+
@Tunable(description="A glob-style path filter. Sub-folders inside the root folder that do not match the pattern will be ignored. "
31+
+ "For more details on syntax see https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getPathMatcher-java.lang.String-")
32+
public String pattern;
33+
2834
@Inject private SynchronousTaskManager<?> taskManager;
2935

3036
private List<DataSetParameters> results;
@@ -40,8 +46,13 @@ public void run(TaskMonitor tm) throws Exception {
4046
throw new IllegalArgumentException("rootFolder is invalid: " + rootFolder);
4147
}
4248

43-
// Scan root folder (note: throws exception if no data sets were found)
4449
ResolverTask resolverTask = new ResolverTask(rootFolder);
50+
51+
if(pattern != null) {
52+
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
53+
resolverTask.setPathMatcher(matcher);
54+
}
55+
4556
taskManager.execute(new TaskIterator(resolverTask)); // blocks
4657
results = resolverTask.getDataSetResults();
4758

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package org.baderlab.csplugins.enrichmentmap.resolver;
22

3+
@FunctionalInterface
34
public interface CancelStatus {
45

5-
public void cancel();
6-
76
public boolean isCancelled();
87

9-
108
public static CancelStatus notCancelable() {
119
return new CancelStatus() {
1210
@Override public boolean isCancelled() { return false; }
13-
@Override public void cancel() { }
1411
};
1512
}
1613
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/resolver/ResolverTask.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.File;
44
import java.nio.file.Files;
55
import java.nio.file.Path;
6+
import java.nio.file.PathMatcher;
67
import java.util.ArrayList;
78
import java.util.List;
89

@@ -11,11 +12,14 @@
1112
import org.cytoscape.work.ObservableTask;
1213
import org.cytoscape.work.TaskMonitor;
1314

14-
public class ResolverTask extends AbstractTask implements ObservableTask, CancelStatus {
15+
public class ResolverTask extends AbstractTask implements ObservableTask {
1516

1617
private final List<Path> paths = new ArrayList<>();
1718
private final List<DataSetParameters> results = new ArrayList<>();
1819

20+
private PathMatcher matcher = null;
21+
22+
1923
public ResolverTask(Path root) {
2024
paths.add(root);
2125
}
@@ -29,6 +33,11 @@ public ResolverTask(List<File> files) {
2933
paths.add(file.toPath());
3034
}
3135

36+
public void setPathMatcher(PathMatcher matcher) {
37+
this.matcher = matcher;
38+
}
39+
40+
3241
@Override
3342
public void run(TaskMonitor tm) {
3443
tm.setTitle("EnrichmentMap");
@@ -39,19 +48,24 @@ public void run(TaskMonitor tm) {
3948
Path path = paths.get(0);
4049
if(Files.isDirectory(path)) {
4150
for(File subdirectory : path.toFile().listFiles(File::isDirectory)) {
42-
paths.add(subdirectory.toPath());
51+
Path subDirPath = subdirectory.toPath();
52+
if(matcher == null || matcher.matches(subDirPath.getFileName())) {
53+
paths.add(subDirPath);
54+
}
4355
}
4456
}
4557
}
4658

4759
List<Path> miscFiles = new ArrayList<>();
4860

4961
for(Path path : paths) {
50-
if(cancelled)
51-
break;
62+
if(cancelled) {
63+
results.clear();
64+
return;
65+
}
5266
try {
5367
if(Files.isDirectory(path)) {
54-
List<DataSetParameters> dataSets = DataSetResolver.guessDataSets(path, this);
68+
List<DataSetParameters> dataSets = DataSetResolver.guessDataSets(path, () -> cancelled);
5569
results.addAll(dataSets);
5670
} else {
5771
miscFiles.add(path);
@@ -62,8 +76,12 @@ public void run(TaskMonitor tm) {
6276
}
6377

6478
try {
79+
if(cancelled) {
80+
results.clear();
81+
return;
82+
}
6583
if(!miscFiles.isEmpty()) {
66-
List<DataSetParameters> dataSets = DataSetResolver.guessDataSets(miscFiles, this);
84+
List<DataSetParameters> dataSets = DataSetResolver.guessDataSets(miscFiles, () -> cancelled);
6785
results.addAll(dataSets);
6886
}
6987
} catch(Exception e) {
@@ -83,9 +101,4 @@ public List<DataSetParameters> getDataSetResults() {
83101
return results;
84102
}
85103

86-
@Override
87-
public boolean isCancelled() {
88-
return cancelled;
89-
}
90-
91104
}

0 commit comments

Comments
 (0)