X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Futil%2Fregister%2FStaticRegister.java;h=c186aff08fdf49714ccc38584e739160a14a75de;hb=f9efbe5228615951dd8482a4582aa24e00c10ce5;hp=0c55bddb2dda02eab787fc822aec1345d7835102;hpb=df60db390a109c60ac76980ab918f4bdbec1364b;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.enterprise/src/org/argeo/util/register/StaticRegister.java b/org.argeo.enterprise/src/org/argeo/util/register/StaticRegister.java index 0c55bddb2..c186aff08 100644 --- a/org.argeo.enterprise/src/org/argeo/util/register/StaticRegister.java +++ b/org.argeo.enterprise/src/org/argeo/util/register/StaticRegister.java @@ -2,16 +2,44 @@ package org.argeo.util.register; import java.util.HashSet; import java.util.IdentityHashMap; +import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import java.util.function.Predicate; /** A minimal component register. */ public class StaticRegister { private final static AtomicBoolean started = new AtomicBoolean(false); private final static IdentityHashMap> components = new IdentityHashMap<>(); + public static Consumer> asConsumer() { + return (c) -> registerComponent(c); + } + +// public static BiFunction, Predicate>, Component> asProvider() { +// +// } + + static synchronized Component find(Class clss, Predicate> filter) { + Set> result = new HashSet<>(); + instances: for (Object instance : components.keySet()) { + if (!clss.isAssignableFrom(instance.getClass())) + continue instances; + Component component = (Component) components.get(instance); + + // TODO filter + if (component.isPublishedType(clss)) + result.add(component); + } + if (result.isEmpty()) + return null; + return result.iterator().next(); + + } + static synchronized void registerComponent(Component component) { if (started.get()) // TODO make it really dynamic throw new IllegalStateException("Already activated"); @@ -62,4 +90,8 @@ public class StaticRegister { } } + synchronized static void clear() { + components.clear(); + } + }