Skip to content

Commit 60a9457

Browse files
committed
ConvertService: add getCompatibleClasses methods
For obtaining collections of compatible input and output classes.
1 parent 4e876d6 commit 60a9457

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/main/java/org/scijava/convert/AbstractConvertService.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
package org.scijava.convert;
3333

3434
import java.lang.reflect.Type;
35+
import java.util.Collection;
36+
import java.util.HashSet;
37+
import java.util.Set;
3538

3639
import org.scijava.plugin.AbstractHandlerService;
3740
import org.scijava.util.ConversionUtils;
@@ -68,10 +71,41 @@ public Object convert(ConversionRequest request) {
6871
return handler == null ? null : handler.convert(request);
6972
}
7073

74+
@Override
75+
public Collection<Class<?>> getCompatibleInputClasses(Class<?> dest) {
76+
Set<Class<?>> compatibleClasses = new HashSet<Class<?>>();
77+
78+
for (Converter<?, ?> converter : getInstances()) {
79+
addIfMatches(dest, converter.getOutputType(), converter.getInputType(), compatibleClasses);
80+
}
81+
82+
return compatibleClasses;
83+
}
84+
85+
@Override
86+
public Collection<Class<?>> getCompatibleOutputClasses(Class<?> source) {
87+
Set<Class<?>> compatibleClasses = new HashSet<Class<?>>();
88+
89+
for (Converter<?, ?> converter : getInstances()) {
90+
addIfMatches(source, converter.getInputType(), converter.getOutputType(), compatibleClasses);
91+
}
92+
93+
return compatibleClasses;
94+
}
95+
7196
// -- Service methods --
7297

7398
@Override
7499
public void initialize() {
75100
ConversionUtils.setDelegateService(this, getPriority());
76101
}
102+
103+
// -- Helper methods --
104+
105+
/**
106+
* Test two classes; if they match, a third class is added to the provided set of classes.
107+
*/
108+
private void addIfMatches(Class<?> c1, Class<?> c2, Class<?> toAdd, Set<Class<?>> classes) {
109+
if (c1 == c2) classes.add(toAdd);
110+
}
77111
}

src/main/java/org/scijava/convert/ConvertService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,18 @@ public interface ConvertService extends
8989
*/
9090
Collection<Object> getCompatibleInputs(Class<?> dest);
9191

92+
/**
93+
* @return A collection of all classes that could potentially be converted
94+
* <b>to</b> the specified class.
95+
*/
96+
Collection<Class<?>> getCompatibleInputClasses(Class<?> dest);
97+
98+
/**
99+
* @return A collection of all classes that could potentially be converted
100+
* <b>from</b> the specified class.
101+
*/
102+
Collection<Class<?>> getCompatibleOutputClasses(Class<?> dest);
103+
92104
// -- Deprecated API --
93105

94106
/**

0 commit comments

Comments
 (0)