]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.api.register/src/org/argeo/api/register/ComponentRegister.java
Make directory content adaptable
[lgpl/argeo-commons.git] / org.argeo.api.register / src / org / argeo / api / register / ComponentRegister.java
1 package org.argeo.api.register;
2
3 import java.util.Map;
4 import java.util.SortedSet;
5 import java.util.function.Predicate;
6
7 /** A register of components which can coordinate their activation. */
8 public interface ComponentRegister {
9 long register(Component<?> component);
10
11 <T> SortedSet<Component<? extends T>> find(Class<T> clss, Predicate<Map<String, Object>> filter);
12
13 default <T> Component.PublishedType<T> getSingleton(Class<T> type) {
14 SortedSet<Component<? extends T>> found = find(type, null);
15 if (found.size() == 0)
16 throw new IllegalStateException("No component found for " + type);
17 return found.first().getType(type);
18 }
19
20 default <T> T getObject(Class<T> clss) {
21 SortedSet<Component<? extends T>> found = find(clss, null);
22 if (found.size() == 0)
23 return null;
24 return found.first().get();
25 }
26
27 Component<?> get(Object instance);
28
29 // default <T> PublishedType<T> getType(Class<T> clss) {
30 // SortedSet<Component<? extends T>> components = find(clss, null);
31 // if (components.size() == 0)
32 // return null;
33 // return components.first().getType(clss);
34 // }
35
36 void activate();
37
38 void deactivate();
39
40 boolean isActive();
41
42 void clear();
43 }