package eu.jucy.gui.texteditor.hub; import java.util.HashMap; import java.util.Map; import logger.LoggerFactory; import org.apache.log4j.Logger; import org.eclipse.ui.AbstractSourceProvider; import org.eclipse.ui.IPartListener; import org.eclipse.ui.ISources; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.services.ISourceProviderService; import uc.FavHub; import uc.HubListenerAdapter; import uc.IHub; import uc.protocols.hub.IHubListener; /** * * * http://www.vogella.de/articles/EclipseCommands/article.html * * * @author Quicksilver * */ public class RedirectReceivedProvider extends AbstractSourceProvider { private static final Logger logger = LoggerFactory.make(); public final static String REDIRECT_STATE = "eu.jucy.hub.sourceprovider.redirect"; public final static String ENABLED = "ENABLED"; public final static String DISENABLED = "DISENABLED"; private boolean enabled = false; private IHub current; private final IHubListener redirectReceived = new HubListenerAdapter() { @Override public void redirectReceived(FavHub target) { if (current != null) { setEnabled(current); } logger.debug("redirect receved: "+current); } }; public RedirectReceivedProvider() { } public void dispose() {} @SuppressWarnings("rawtypes") public Map getCurrentState() { Map<Object,Object> map = new HashMap<Object,Object>(1); String value = enabled ? ENABLED : DISENABLED; map.put(REDIRECT_STATE, value); return map; } public String[] getProvidedSourceNames() { return new String[]{REDIRECT_STATE}; } public void setEnabled(IHub hub) { if (current != null) { current.unregisterHubListener(redirectReceived); } current = hub; enabled = false; if (hub != null) { enabled = hub.pendingReconnect(); current.registerHubListener(redirectReceived); } String value = enabled ? ENABLED : DISENABLED; fireSourceChanged(ISources.WORKBENCH, REDIRECT_STATE, value); } public static void init(final IWorkbenchWindow window) { window.getActivePage().addPartListener(new IPartListener() { public void partOpened(IWorkbenchPart part) {} public void partDeactivated(IWorkbenchPart part) { redirectChanged(null,window); } public void partClosed(IWorkbenchPart part) {} public void partBroughtToTop(IWorkbenchPart part) { if (part instanceof HubEditor) { redirectChanged(((HubEditor)part).getHub(),window); } } public void partActivated(IWorkbenchPart part) { partBroughtToTop(part); } }); } public static void redirectChanged(IHub hub,IWorkbenchWindow window) { ISourceProviderService service = (ISourceProviderService)window.getService( ISourceProviderService.class); RedirectReceivedProvider commandStateService = (RedirectReceivedProvider) service .getSourceProvider(RedirectReceivedProvider.REDIRECT_STATE ); commandStateService.setEnabled(hub); } }