|
32 | 32 | package org.scijava.convert; |
33 | 33 |
|
34 | 34 | import java.lang.reflect.Type; |
| 35 | +import java.util.Collection; |
| 36 | +import java.util.HashSet; |
| 37 | +import java.util.Set; |
35 | 38 |
|
36 | 39 | import org.scijava.plugin.AbstractHandlerService; |
37 | 40 | import org.scijava.util.ConversionUtils; |
@@ -68,10 +71,41 @@ public Object convert(ConversionRequest request) { |
68 | 71 | return handler == null ? null : handler.convert(request); |
69 | 72 | } |
70 | 73 |
|
| 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 | + |
71 | 96 | // -- Service methods -- |
72 | 97 |
|
73 | 98 | @Override |
74 | 99 | public void initialize() { |
75 | 100 | ConversionUtils.setDelegateService(this, getPriority()); |
76 | 101 | } |
| 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 | + } |
77 | 111 | } |
0 commit comments