Skip to content

Commit bccddf1

Browse files
committed
Improve error message for missing required inputs
Human-friendly names can be registered at runtime by calling ObjectService#addHumanFriendlyName(Class, String).
1 parent afe795a commit bccddf1

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

src/main/java/org/scijava/object/DefaultObjectService.java

+17
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929

3030
package org.scijava.object;
3131

32+
import java.util.HashMap;
33+
import java.util.Map;
34+
3235
import org.scijava.event.EventHandler;
3336
import org.scijava.event.EventService;
3437
import org.scijava.object.event.ObjectCreatedEvent;
@@ -56,13 +59,17 @@
5659
public final class DefaultObjectService extends AbstractService implements
5760
ObjectService
5861
{
62+
private static String DEFAULT_OBJECT_NAME = "an object";
5963

6064
@Parameter
6165
private EventService eventService;
6266

6367
/** Index of registered objects. */
6468
private NamedObjectIndex<Object> objectIndex;
6569

70+
/** Map of human-friendly names */
71+
private Map<Class<?>, String> aliasMap = new HashMap<>();
72+
6673
// -- ObjectService methods --
6774

6875
@Override
@@ -75,6 +82,16 @@ public NamedObjectIndex<Object> getIndex() {
7582
return objectIndex;
7683
}
7784

85+
@Override
86+
public String getHumanFriendlyName(Class<?> c) {
87+
return aliasMap.getOrDefault(c, DEFAULT_OBJECT_NAME);
88+
}
89+
90+
@Override
91+
public void addHumanFriendlyName(Class<?> c, String name) {
92+
aliasMap.put(c, name);
93+
}
94+
7895
// -- Service methods --
7996

8097
@Override

src/main/java/org/scijava/object/ObjectService.java

+4
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ default void removeObject(final Object obj) {
9898
eventService().publish(new ObjectsRemovedEvent(obj));
9999
}
100100

101+
String getHumanFriendlyName(Class<?> c);
102+
103+
void addHumanFriendlyName(Class<?> c, String name);
104+
101105
// -- Deprecated methods --
102106

103107
/** @deprecated Use {@link #eventService()} instead. */

src/main/java/org/scijava/widget/AbstractInputHarvester.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ private <T> WidgetModel addInput(final InputPanel<P, W> inputPanel,
119119
}
120120

121121
if (item.isRequired()) {
122-
throw new ModuleException("A " + type.getSimpleName() +
123-
" is required but none exist.");
122+
throw new ModuleException("This operation requires " + objectService.getHumanFriendlyName(type)
123+
+ " of type '" + type.getSimpleName() + "', but none was found.");
124124
}
125125

126126
// item is not required; we can skip it

0 commit comments

Comments
 (0)