36
36
37
37
import org .scijava .Named ;
38
38
import org .scijava .event .EventService ;
39
+ import org .scijava .object .event .ObjectsAddedEvent ;
40
+ import org .scijava .object .event .ObjectsRemovedEvent ;
39
41
import org .scijava .service .SciJavaService ;
40
42
41
43
/**
@@ -50,10 +52,15 @@ default EventService eventService() {
50
52
}
51
53
52
54
/** Gets the index of available objects. */
53
- ObjectIndex <Object > getIndex ();
55
+ NamedObjectIndex <Object > getIndex ();
54
56
55
57
/** Gets a list of all registered objects compatible with the given type. */
56
- <T > List <T > getObjects (Class <T > type );
58
+ default <T > List <T > getObjects (final Class <T > type ) {
59
+ final List <Object > list = getIndex ().get (type );
60
+ @ SuppressWarnings ("unchecked" )
61
+ final List <T > result = (List <T >) list ;
62
+ return result ;
63
+ }
57
64
58
65
/**
59
66
* Gets the name belonging to a given object.
@@ -63,17 +70,36 @@ default EventService eventService() {
63
70
* {@link Named}, or from the {@link Object#toString()} otherwise. It is
64
71
* guaranteed that this method will not return {@code null}.
65
72
* </p>
66
- */
67
- String getName (Object obj );
73
+ **/
74
+ default String getName (final Object obj ) {
75
+ if (obj == null ) throw new NullPointerException ();
76
+ final String name = getIndex ().getName (obj );
77
+ if (name != null ) return name ;
78
+ if (obj instanceof Named ) {
79
+ final String n = ((Named ) obj ).getName ();
80
+ if (n != null ) return n ;
81
+ }
82
+ final String s = obj .toString ();
83
+ if (s != null ) return s ;
84
+ return obj .getClass ().getName () + "@" + Integer .toHexString (obj .hashCode ());
85
+ }
68
86
69
87
/** Registers an object with the object service. */
70
- void addObject (Object obj );
88
+ default void addObject (Object obj ) {
89
+ addObject (obj , null );
90
+ }
71
91
72
92
/** Registers a named object with the object service. */
73
- void addObject (Object obj , String name );
93
+ default void addObject (final Object obj , final String name ) {
94
+ getIndex ().add (obj , name );
95
+ eventService ().publish (new ObjectsAddedEvent (obj ));
96
+ }
74
97
75
98
/** Deregisters an object with the object service. */
76
- void removeObject (Object obj );
99
+ default void removeObject (final Object obj ) {
100
+ getIndex ().remove (obj );
101
+ eventService ().publish (new ObjectsRemovedEvent (obj ));
102
+ }
77
103
78
104
// -- Deprecated methods --
79
105
0 commit comments