X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2Fregister%2FComponentRegister.java;h=d78b6badbeb2dea14b6ea9103dc1760b71a0ea50;hb=3c1cdc594d954520b14646102b366290bdad58c7;hp=eb8acba02bcaeb97314b7f8872b43c2a20e63419;hpb=7974745f1de448353bf47012b5df36b451dce2fa;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/register/ComponentRegister.java b/org.argeo.util/src/org/argeo/util/register/ComponentRegister.java index eb8acba02..d78b6badb 100644 --- a/org.argeo.util/src/org/argeo/util/register/ComponentRegister.java +++ b/org.argeo.util/src/org/argeo/util/register/ComponentRegister.java @@ -1,14 +1,38 @@ package org.argeo.util.register; import java.util.Map; -import java.util.function.Consumer; +import java.util.SortedSet; import java.util.function.Predicate; -public interface ComponentRegister extends Consumer> { - Component find(Class clss, Predicate> filter); +/** A register of components which can coordinate their activation. */ +public interface ComponentRegister { + long register(Component component); + + SortedSet> find(Class clss, Predicate> filter); + + default Component.PublishedType getSingleton(Class type) { + SortedSet> found = find(type, null); + if (found.size() == 0) + throw new IllegalStateException("No component found for " + type); + return found.first().getType(type); + } + + default T getObject(Class clss) { + SortedSet> found = find(clss, null); + if (found.size() == 0) + return null; + return found.first().get(); + } Component get(Object instance); +// default PublishedType getType(Class clss) { +// SortedSet> components = find(clss, null); +// if (components.size() == 0) +// return null; +// return components.first().getType(clss); +// } + void activate(); void deactivate();