Skip to content

Commit 0fb4853

Browse files
committed
Add utilities for OpEnvironment injection
1 parent cac4104 commit 0fb4853

File tree

7 files changed

+184
-0
lines changed

7 files changed

+184
-0
lines changed

scijava-ops-legacy/pom.xml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,33 @@
9292
<!-- NB: Deploy releases to the SciJava Maven repository. -->
9393
<releaseProfiles>sign,deploy-to-scijava</releaseProfiles>
9494
</properties>
95+
<build>
96+
<plugins>
97+
<plugin>
98+
<artifactId>maven-compiler-plugin</artifactId>
99+
<configuration>
100+
<annotationProcessorPaths>
101+
<path>
102+
<groupId>org.scijava</groupId>
103+
<artifactId>scijava-ops-indexer</artifactId>
104+
<version>${project.version}</version>
105+
</path>
106+
<path>
107+
<groupId>org.scijava</groupId>
108+
<artifactId>scijava-common</artifactId>
109+
<version>${org.scijava.scijava-common.version}</version>
110+
</path>
111+
</annotationProcessorPaths>
112+
<fork>true</fork>
113+
<showWarnings>true</showWarnings>
114+
<compilerArgs>
115+
<arg>-Aparse.ops="${scijava.parse.ops}"</arg>
116+
<arg>-Aop.version="${project.version}"</arg>
117+
</compilerArgs>
118+
</configuration>
119+
</plugin>
120+
</plugins>
121+
</build>
95122

96123
<repositories>
97124
<repository>
@@ -112,6 +139,10 @@
112139
<artifactId>scijava-collections</artifactId>
113140
<version>${project.version}</version>
114141
</dependency>
142+
<dependency>
143+
<groupId>org.scijava</groupId>
144+
<artifactId>scijava-common</artifactId>
145+
</dependency>
115146
<dependency>
116147
<groupId>org.scijava</groupId>
117148
<artifactId>scijava-priority</artifactId>
@@ -156,5 +187,17 @@
156187
<version>${project.version}</version>
157188
<scope>test</scope>
158189
</dependency>
190+
<dependency>
191+
<groupId>org.scijava</groupId>
192+
<artifactId>scijava-ops-api</artifactId>
193+
<version>0-SNAPSHOT</version>
194+
<scope>compile</scope>
195+
</dependency>
196+
<dependency>
197+
<groupId>org.scijava</groupId>
198+
<artifactId>scijava-ops-engine</artifactId>
199+
<version>0-SNAPSHOT</version>
200+
<scope>test</scope>
201+
</dependency>
159202
</dependencies>
160203
</project>

scijava-ops-legacy/src/main/java/module-info.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,16 @@
2828
*/
2929
module org.scijava.legacy {
3030

31+
exports org.scijava.legacy.service to org.scijava;
32+
exports org.scijava.legacy.module.process to org.scijava;
33+
34+
opens org.scijava.legacy.module.process to org.scijava;
35+
3136
requires net.imagej;
37+
requires org.scijava;
3238
requires org.scijava.types;
3339
requires org.scijava.priority;
40+
requires org.scijava.ops.api;
3441

3542
provides org.scijava.types.TypeExtractor with org.scijava.legacy.types.DatasetTypeExtractor;
3643
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.scijava.legacy.module.process;
2+
3+
import org.scijava.Priority;
4+
import org.scijava.legacy.service.OpService;
5+
import org.scijava.module.Module;
6+
import org.scijava.module.ModuleItem;
7+
import org.scijava.module.process.AbstractPreprocessorPlugin;
8+
import org.scijava.module.process.PreprocessorPlugin;
9+
import org.scijava.ops.api.OpEnvironment;
10+
import org.scijava.plugin.Parameter;
11+
import org.scijava.plugin.Plugin;
12+
13+
@Plugin(type= PreprocessorPlugin.class, priority = Priority.HIGH)
14+
public class OpEnvironmentPreprocessorPlugin extends
15+
AbstractPreprocessorPlugin
16+
{
17+
18+
@Parameter
19+
private OpService opService;
20+
21+
@Override
22+
public void process(Module module) {
23+
for (final ModuleItem<?> input: module.getInfo().inputs()) {
24+
if (!input.isAutoFill()) continue;
25+
if (module.isInputResolved(input.getName())) continue;
26+
final Class<?> type = input.getType();
27+
if (OpEnvironment.class.equals(type)) {
28+
@SuppressWarnings("unchecked")
29+
final ModuleItem<OpEnvironment> envInput = (ModuleItem<OpEnvironment>) input;
30+
envInput.setValue(module, opService.env());
31+
module.resolveInput(input.getName());
32+
}
33+
}
34+
}
35+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.scijava.legacy.service;
2+
3+
import org.scijava.ops.api.OpEnvironment;
4+
import org.scijava.plugin.Plugin;
5+
import org.scijava.service.AbstractService;
6+
import org.scijava.service.Service;
7+
8+
@Plugin(type= Service.class)
9+
public class DefaultOpService extends AbstractService implements OpService{
10+
11+
private final OpEnvironment env = OpEnvironment.build();
12+
13+
@Override
14+
public OpEnvironment env() {
15+
return env;
16+
}
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.scijava.legacy.service;
2+
3+
import org.scijava.ops.api.OpEnvironment;
4+
import org.scijava.service.SciJavaService;
5+
6+
// TODO: Avoid name clash with ImageJ Ops
7+
public interface OpService extends SciJavaService {
8+
9+
OpEnvironment env();
10+
11+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.scijava.legacy.module.process;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
import org.scijava.Context;
6+
import org.scijava.command.Command;
7+
import org.scijava.command.CommandService;
8+
import org.scijava.legacy.service.OpService;
9+
import org.scijava.ops.api.OpEnvironment;
10+
import org.scijava.plugin.Parameter;
11+
12+
import java.util.concurrent.ExecutionException;
13+
14+
public class OpEnvironmentPreprocessorTest {
15+
16+
@Test
17+
public void testOpEnvironmentPreprocessor()
18+
throws ExecutionException, InterruptedException
19+
{
20+
final Context context = new Context(CommandService.class, OpService.class);
21+
final CommandService commandService = context.service(CommandService.class);
22+
var command = commandService.run(CommandWithOpEnvironment.class, true).get();
23+
Assertions.assertDoesNotThrow(command::run);
24+
}
25+
26+
public static class CommandWithOpEnvironment implements Command {
27+
28+
@Parameter
29+
public OpEnvironment env;
30+
31+
@Override
32+
public void run() {
33+
if (env == null) {
34+
throw new IllegalArgumentException("OpEnvironment not properly injected!");
35+
}
36+
}
37+
}
38+
39+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.scijava.legacy.service;
2+
3+
import org.junit.jupiter.api.AfterAll;
4+
import org.junit.jupiter.api.BeforeAll;
5+
import org.junit.jupiter.api.Test;
6+
import org.scijava.Context;
7+
8+
public class OpServiceTest {
9+
10+
protected static Context context;
11+
12+
protected static OpService ops;
13+
14+
@BeforeAll
15+
public static void setUp() {
16+
context = new Context(OpService.class);
17+
ops = context.getService(OpService.class);
18+
}
19+
20+
@AfterAll
21+
public static void tearDown() {
22+
context.dispose();
23+
}
24+
25+
@Test
26+
public void testOpService() {
27+
Double result = ops.env().binary("math.add").input(2., 3.).outType(Double.class).apply();
28+
}
29+
30+
31+
32+
}

0 commit comments

Comments
 (0)