Skip to content

Commit f6dba31

Browse files
gselzerctrueden
authored andcommitted
Clean up Matcher/MatchingRoutines
1 parent 4c7278c commit f6dba31

13 files changed

Lines changed: 950 additions & 381 deletions

File tree

scijava/scijava-ops-api/src/main/java/org/scijava/ops/api/OpEnvironment.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ InfoChain infoChain(final String opName, final Nil<?> specialType,
144144

145145
InfoChain chainFromInfo(final OpInfo info, final Nil<?> specialType);
146146

147+
InfoChain chainFromInfo(final OpInfo info, final Nil<?> specialType, final Hints hints);
148+
147149
default OpBuilder op(final String opName) {
148150
return new OpBuilder(this, opName);
149151
}
Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,60 @@
1+
12
package org.scijava.ops.api.features;
23

4+
import org.scijava.ops.api.OpCandidate;
5+
import org.scijava.ops.api.OpEnvironment;
6+
import org.scijava.plugin.Plugin;
7+
import org.scijava.plugin.SciJavaPlugin;
8+
9+
/**
10+
* A plugin type employing a particular strategy to generate an
11+
* {@link OpCandidate}.
12+
*
13+
* @author Gabriel Selzer
14+
*/
15+
public interface MatchingRoutine extends SciJavaPlugin,
16+
Comparable<MatchingRoutine>
17+
{
18+
19+
void checkSuitability(MatchingConditions conditions)
20+
throws OpMatchingException;
21+
22+
@Override
23+
default int compareTo(MatchingRoutine o) {
24+
return (int) (priority() - o.priority());
25+
}
26+
27+
OpCandidate findMatch(MatchingConditions conditions, OpMatcher matcher,
28+
OpEnvironment env) throws OpMatchingException;
329

4-
public interface MatchingRoutine {
30+
/**
31+
* Generates an {@link OpCandidate} from the Ops in the provided
32+
* {@link OpEnvironment}, conforming to the provided
33+
* {@link MatchingConditions}
34+
*
35+
* @param conditions the {@link MatchingConditions} the returned Op must
36+
* conform to
37+
* @param matcher the {@link OpMatcher} responsible for matching
38+
* @param env the {@link OpEnvironment} containing the Ops able to be matched
39+
* @return an {@OpCandidate}
40+
*/
41+
default OpCandidate match(MatchingConditions conditions, OpMatcher matcher,
42+
OpEnvironment env)
43+
{
44+
checkSuitability(conditions);
45+
return findMatch(conditions, matcher, env);
46+
}
547

6-
MatchingResult match(MatchingConditions conditions);
48+
/**
49+
* Since {@link MatchingRoutine}s should be {@link Plugin}s, we should be able
50+
* to scrape the priority off of the plugin annotation.
51+
*
52+
* @return the priority
53+
*/
54+
default double priority() {
55+
Plugin annotation = this.getClass().getAnnotation(Plugin.class);
56+
if (annotation == null) return 0.;
57+
return annotation.priority();
58+
}
759

860
}

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/OpMatcher.java renamed to scijava/scijava-ops-api/src/main/java/org/scijava/ops/api/features/OpMatcher.java

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,11 @@
2727
* #L%
2828
*/
2929

30-
package org.scijava.ops.engine.matcher;
30+
package org.scijava.ops.api.features;
3131

32-
import java.util.List;
33-
34-
import org.scijava.ops.api.Hints;
3532
import org.scijava.ops.api.OpCandidate;
3633
import org.scijava.ops.api.OpEnvironment;
3734
import org.scijava.ops.api.OpRef;
38-
import org.scijava.ops.api.features.MatchingResult;
3935

4036
/**
4137
* Finds Ops which match an {@link OpRef}.
@@ -45,27 +41,7 @@
4541
//TODO javadoc
4642
public interface OpMatcher {
4743

48-
OpCandidate findSingleMatch(OpEnvironment env, OpRef ref);
49-
50-
OpCandidate findSingleMatch(OpEnvironment env, OpRef ref, Hints hints);
51-
52-
MatchingResult findMatch(OpEnvironment env, OpRef ref);
53-
54-
MatchingResult findMatch(OpEnvironment env, OpRef ref, Hints hints);
55-
56-
MatchingResult findMatch(OpEnvironment env, List<OpRef> refs);
57-
58-
MatchingResult findMatch(OpEnvironment env, List<OpRef> refs, Hints hints);
59-
60-
List<OpCandidate> findCandidates(OpEnvironment env, OpRef ref);
61-
62-
List<OpCandidate> findCandidates(OpEnvironment env, OpRef ref, Hints hints);
63-
64-
List<OpCandidate> findCandidates(OpEnvironment env, List<OpRef> refs);
65-
66-
List<OpCandidate> findCandidates(OpEnvironment env, List<OpRef> refs, Hints hints);
67-
68-
List<OpCandidate> filterMatches(List<OpCandidate> candidates);
44+
OpCandidate match(MatchingConditions conditions, OpEnvironment env);
6945

7046
boolean typesMatch(OpCandidate candidate);
7147
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
opens org.scijava.ops.engine.conversionLoss to therapi.runtime.javadoc;
1919
opens org.scijava.ops.engine.copy to therapi.runtime.javadoc;
2020
opens org.scijava.ops.engine.log to therapi.runtime.javadoc;
21-
opens org.scijava.ops.engine.matcher to therapi.runtime.javadoc;
2221
opens org.scijava.ops.engine.simplify to therapi.runtime.javadoc;
2322
opens org.scijava.ops.engine.impl to therapi.runtime.javadoc, org.scijava;
2423
opens org.scijava.ops.engine.conversionLoss.impl to therapi.runtime.javadoc, org.scijava;
@@ -31,6 +30,8 @@
3130
opens org.scijava.ops.engine.util to therapi.runtime.javadoc;
3231
opens org.scijava.ops.engine.math to therapi.runtime.javadoc;
3332

33+
requires java.desktop;
34+
3435
requires org.scijava;
3536
requires org.scijava.discovery;
3637
requires org.scijava.function;

0 commit comments

Comments
 (0)