Skip to content

Commit bee256f

Browse files
committed
ScriptService: allow menu prefix with a script dir
It may be the case that you want to set a menu path prefix to use for all scripts within the given directory. Let's support this, particularly for backwards compatibility with ImageJ 1.x.
1 parent 4930ac2 commit bee256f

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

src/main/java/org/scijava/script/DefaultScriptService.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.scijava.Context;
5353
import org.scijava.Gateway;
5454
import org.scijava.InstantiableException;
55+
import org.scijava.MenuPath;
5556
import org.scijava.Priority;
5657
import org.scijava.command.CommandService;
5758
import org.scijava.log.LogService;
@@ -98,6 +99,9 @@ public class DefaultScriptService extends
9899
/** List of directories to scan for scripts. */
99100
private ArrayList<File> scriptDirs;
100101

102+
/** Menu prefix to use for each script directory, if any. */
103+
private HashMap<File, MenuPath> menuPrefixes;
104+
101105
/** Index of available scripts, by script <em>file</em>. */
102106
private HashMap<File, ScriptInfo> scripts;
103107

@@ -133,11 +137,24 @@ public List<File> getScriptDirectories() {
133137
return Collections.unmodifiableList(scriptDirs());
134138
}
135139

140+
@Override
141+
public MenuPath getMenuPrefix(final File scriptDirectory) {
142+
return menuPrefixes().get(scriptDirectory);
143+
}
144+
136145
@Override
137146
public void addScriptDirectory(final File scriptDirectory) {
138147
scriptDirs().add(scriptDirectory);
139148
}
140149

150+
@Override
151+
public void addScriptDirectory(final File scriptDirectory,
152+
final MenuPath menuPrefix)
153+
{
154+
scriptDirs().add(scriptDirectory);
155+
menuPrefixes().put(scriptDirectory, menuPrefix);
156+
}
157+
141158
@Override
142159
public void removeScriptDirectory(final File scriptDirectory) {
143160
scriptDirs().remove(scriptDirectory);
@@ -283,6 +300,12 @@ private List<File> scriptDirs() {
283300
return scriptDirs;
284301
}
285302

303+
/** Gets {@link #menuPrefixes}, initializing if needed. */
304+
private HashMap<File, MenuPath> menuPrefixes() {
305+
if (menuPrefixes == null) initMenuPrefixes();
306+
return menuPrefixes;
307+
}
308+
286309
/** Gets {@link #scripts}, initializing if needed. */
287310
private HashMap<File, ScriptInfo> scripts() {
288311
if (scripts == null) initScripts();
@@ -338,6 +361,12 @@ private synchronized void initScriptDirs() {
338361
scriptDirs = dirs;
339362
}
340363

364+
/** Initializes {@link #menuPrefixes}. */
365+
private synchronized void initMenuPrefixes() {
366+
if (menuPrefixes != null) return;
367+
menuPrefixes = new HashMap<File, MenuPath>();
368+
}
369+
341370
/** Initializes {@link #scripts}. */
342371
private synchronized void initScripts() {
343372
if (scripts != null) return; // already initialized

src/main/java/org/scijava/script/ScriptFinder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ public void findScripts(final List<ScriptInfo> scripts) {
8484
directory.getAbsolutePath());
8585
continue;
8686
}
87-
scriptCount += discoverScripts(scripts, directory, new MenuPath());
87+
final MenuPath prefix = scriptService.getMenuPrefix(directory);
88+
final MenuPath menuPath = prefix == null ? new MenuPath() : prefix;
89+
scriptCount += discoverScripts(scripts, directory, menuPath);
8890
}
8991

9092
log.info("Found " + scriptCount + " scripts");

src/main/java/org/scijava/script/ScriptService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import javax.script.ScriptEngineFactory;
4444
import javax.script.ScriptException;
4545

46+
import org.scijava.MenuPath;
4647
import org.scijava.module.process.PostprocessorPlugin;
4748
import org.scijava.module.process.PreprocessorPlugin;
4849
import org.scijava.plugin.Plugin;
@@ -95,9 +96,20 @@ public interface ScriptService extends SingletonService<ScriptLanguage>,
9596
/** Gets the base directories to scan for scripts. */
9697
List<File> getScriptDirectories();
9798

99+
/**
100+
* Gets the menu path prefix for the given script directory, or null if none.
101+
*/
102+
MenuPath getMenuPrefix(File scriptDirectory);
103+
98104
/** Adds a base directory to scan for scripts. */
99105
void addScriptDirectory(File scriptDirectory);
100106

107+
/**
108+
* Adds a base directory to scan for scripts, placing discovered scripts
109+
* beneath the given menu path prefix.
110+
*/
111+
void addScriptDirectory(File scriptDirectory, final MenuPath menuPrefix);
112+
101113
/** Removes a base directory to scan for scripts. */
102114
void removeScriptDirectory(File scriptDirectory);
103115

0 commit comments

Comments
 (0)