Or get hold of leanpub.com/nbp4beginners

It hasn’t been updated for some time, but I’ve not yet seen anything in it
that needs updating.

Gj

On Sun, 13 Oct 2019 at 19:17, Marco Rossi <ma...@markreds.it> wrote:

> Hello Patrick,
>
> you should create your own Lookup where to put what you want. I called
> this “MutableLookup” (I’ve found it on the web). You can use the put method
> to add the instances or your objects to lookup.
>
> You could keep an instance of MutableLookup inside a TopComponent and call
> TopComponent.associateLookup(myMutableLookup) to expose your objects in the
> Lookup subsystem (via Utilities.actionsGlobalContext.lookup(...)) and
> retrieve them when the TopComponent is the active one.
>
> Since the “mutable” nature of this Lookup, you can add and remove your
> objects at runtime.
>
> Here follow the code of MutableLookup class:
>
> public class MutableLookup extends AbstractLookup {
>     private static final Logger LOGGER =
> Logger.getLogger(MutableLookup.class.getName());
>     private final Object lock = new Object();
>     private final InstanceContent content;
>
>     static {
>         LOGGER.setLevel(Level.SEVERE);
>     }
>
>     /**
>      * Create a new DynamicLookup
>      */
>     public MutableLookup() {
>         this(new InstanceContent());
>     }
>
>     /**
>      * Create a new DynamicLookup with the specific content
>      * @param content
>      */
>     public MutableLookup(InstanceContent content) {
>         super(content);
>         this.content = content;
>     }
>
>     /**
>      * Add a new object to this lookup.
>      *
>      * @param instance
>      */
>     public void add(Object instance) {
>         synchronized (lock) {
>             content.add(instance);
>         }
>     }
>
>     /**
>      * Put the instance in this lookup. This method ensures that there is
> only
>      * one instance of that type class.
>      * If there are other instances of the that class they will be removed.
>      * If instance parameter is null than all instances of that type will
> be
>      * removed from the lookup.
>      *
>      * @param <T>
>      * @param type
>      * @param instance
>      */
>     public <T> void put(Class<T> type, T instance) {
>         synchronized (lock) {
>             Collection<? extends T> all = lookupAll(type);
>             if (instance == null) {
>                 remove(all);
>             } else if (!all.contains(instance)) {
>                 remove(all);
>                 content.add(instance);
>                 LOGGER.log(Level.FINER, "added [{0}] to the lookup",
> instance);
>             } else {
>                 List<T> instances = new LinkedList<T>(all);
>                 instances.remove(instance);
>                 remove(instances);
>             }
>         }
>     }
>
>     /**
>      * Put collection in this lookup.
>      * If there are other instances of the that class they will be
> replaced.
>      *
>      * @param <T>
>      * @param type
>      * @param items
>      */
>     public <T> void putAll(Class<T> type, Collection<? extends T> items) {
>         synchronized (lock) {
>             Collection<? extends T> all = lookupAll(type);
>             remove(all);
>             for (T item : items) {
>                 content.add(item);
>             }
>         }
>     }
>
>     /**
>      * Remove instance from the lookup.
>      *
>      * @param instance
>      */
>     public void remove(Object instance) {
>         synchronized (lock) {
>             content.remove(instance);
>         }
>     }
>
>     private <T> void remove(Collection<? extends T> items) {
>         for (T item : items) {
>             content.remove(item);
>             LOGGER.log(Level.FINER, "removed [{0}] from the lookup.",
> item);
>         }
>     }
> }
>
> Marco Rossi
>
> > Il giorno 13 ott 2019, alle ore 18:13, Patrik Karlström <
> pat...@trixon.se> ha scritto:
> >
> > I feel somewhat stupid asking this one, but I just can't grip how to
> "publish" a "dynamically created" object so it will show up in lookupAll().
> >
> > This is a really small library I'm working on and the only NetBeans
> dependency I have is org-openide-util-lookup, if that matters at all.
> >
> > The following declared class:
> > @ServiceProvider(service = Window.class)
> > public class Left1bWindow extends Window {}
> >
> > shows up as expected when I do:
> > var windows = new
> ArrayList<>(Lookup.getDefault().lookupAll(Window.class));
> >
> > but a simple object creation will not.
> > Window someOtherWindow=new Window();
> >
> > What can I do to get the desired result?
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@netbeans.apache.org
> For additional commands, e-mail: users-h...@netbeans.apache.org
>
> For further information about the NetBeans mailing lists, visit:
> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
>
>

Reply via email to