In your ContextAwareAction, you could use a delegate to your
ActionListener. Something like:

       //Create an instance of your ActionListener, pass the URI
        MyActionListenerImpl al = new MyActionListenerImpl(uri);
       //Return a simple delegate
        AbstractAction ret =  new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                al.actionPerformed(e);
            }

        };
      ret.setEnabled(uri != null);

Boris

Am Mo., 3. Sep. 2018 um 16:18 Uhr schrieb Andreas Sewe <s...@cqse.eu>:

> Hi Boris.
>
> Andreas Sewe wrote:
> > Boris Heithecker wrote:
> >> I think you'll have to implement an action (extending Action or
> >> AbstractAction, not ActionListener) that implements
> >> "org.openide.util.ContextAwareAction".
> >> Its business method is expected to create a proxy action for the context
> >> passed to it. This context is the current user selection of nodes, or
> >> the content of these nodes.
> >> I guess you'd have to find various methods to extract your URI from this
> >> lookup and pass it to the proxy action created. For example look-up a
> >> Project and, if present, extract an URI.
> >> If no URI at all can be extracted, nevertheless return an action, but
> >> its state should be disabled.
>
> For other readers, org.netbeans.modules.html.editor.ViewAction is a nice
> example of this, but...
>
> >> Hope it helps,
> >
> > Thank you very much for this suggestion, Boris. That sounds like a good
> > direction to explore.
>
> ...I'm afraid I couldn't get this to work. Here's the problem I am facing:
>
> - My URI-taking action is a simple ActionListener and I would like to
> keep it that way.
>
> - If I now create a ContextAwareAction, I can convert whatever it finds
> in the lookup into a URI in createContextAwareInstance, but then I need
> to return an Action.
>
> - But I have only an ActionListener. I looked through
> org.openide.awt.Actions to see whether I can call one of the methods
> that are used under the hood for the ActionListener -> Action
> conversion, but they are either non-public or hardcoded to
> Utilities.actionsGlobalContext(), so I can really get my URI injected
> into the ActionListener.
>
> Any suggestions how to proceed?
>
> Best wishes,
>
> Andreas
>
> --
> Dr. Andreas Sewe | s...@cqse.eu | +49 152 56342856
> CQSE GmbH | Lichtenbergstrasse 8 | 85748 Garching | www.cqse.eu
> Amtsgericht Muenchen | HRB 177678 | GF: F. Deissenboeck, M. Feilkas
>
>

-- 
Boris Heithecker


Dr. Boris Heithecker
Lüneburger Str. 30
28870 Ottersberg
Tel.: 0 42 05/ 31 58 34

Reply via email to