private static <T> ContextAwareAction _context(Map map, Class<T> dataType, Lookup context) { ContextSelection sel = readSelection(map.get("selectionType")); // NOI18N Performer<T> perf = new Performer<T>(map); boolean survive = Boolean.TRUE.equals(map.get("surviveFocusChange")); // NOI18N return new ContextAction<T>( perf, sel, context, dataType, survive ); }
@SuppressWarnings("unchecked") public void actionPerformed( ActionEvent ev, List<? extends Data> data, Lookup.Provider everything ) { Object obj = delegate.get("delegate"); // NOI18N if (obj instanceof ContextActionPerformer) { ContextActionPerformer<Data> perf = (ContextActionPerformer<Data>)obj; perf.actionPerformed(ev, data); return; } if (obj instanceof Performer) { Performer<Data> perf = (Performer<Data>)obj; perf.actionPerformed(ev, data, everything); return; } if (obj instanceof ContextAwareAction) { Action a = ((ContextAwareAction)obj).createContextAwareInstance(everything.getLookup()); a.actionPerformed(ev); return; } GeneralAction.LOG.warning("No 'delegate' for " + delegate); // NOI18N } @SuppressWarnings("unchecked")
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ContextAction) { ContextAction c = (ContextAction)obj; return type.equals(c.type) && selectMode.equals(c.selectMode) && performer.equals(c.performer); } return false; }
public <T> void actionPerformed(final ActionEvent e, ContextAction.Performer<? super T> perf, final Class<T> type, ContextSelection selectMode) { Lookup.Result<T> result = findResult(type); final List<? extends T> all = listFromResult(result); class LkpAE implements Lookup.Provider { private Lookup lookup; public Lookup getLookup() { if (lookup == null) { lookup = new ProxyLookup( Lookups.fixed(all.toArray()), Lookups.exclude(ContextManager.this.lookup, type) ); } return lookup; } } perf.actionPerformed(e, Collections.unmodifiableList(all), new LkpAE()); }
@Override public int hashCode() { int t = type.hashCode(); int m = selectMode.hashCode(); int p = performer.hashCode(); return (t << 2) + (m << 1) + p; }
/** Checks whether a type is enabled. */ public <T> boolean isEnabled(Class<T> type, ContextSelection selectMode, ContextAction.Performer<? super T> enabler) { Lookup.Result<T> result = findResult(type); boolean e = isEnabledOnData(result, type, selectMode); if (e && enabler != null) { e = enabler.enabled(listFromResult(result)); } return e; }