package com.babel17.netbeans; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import org.openide.util.ContextAwareAction; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; import org.openide.util.actions.Presenter; public abstract class ContextAction<T> extends AbstractAction implements LookupListener, ContextAwareAction { private Lookup context = null; private Lookup.Result<T> result = null; public ContextAction(Lookup context) { init(context); } private void init(Lookup context) { this.context = context; result = context.lookupResult(contextClass()); result.addLookupListener(this); resultChanged( null); } public void resultChanged(LookupEvent ev) { setEnabled(result.allItems().size() != 0); } public void actionPerformed(ActionEvent e) { performAction(result.allInstances().iterator().next()); } public abstract Class<T> contextClass(); public abstract void performAction(T context); }