/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package com.vmware.vfabric.ide.eclipse.tcserver.insight.internal.ui.link; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.InetAddress; import java.net.UnknownHostException; import org.eclipse.swt.browser.Browser; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.internal.browser.BrowserViewer; import org.eclipse.ui.internal.browser.WebBrowserEditor; import org.springsource.ide.eclipse.commons.core.SpringCoreUtils; import com.vmware.vfabric.ide.eclipse.tcserver.insight.internal.ui.Activator; /** * {@link IPartListener} that registers the STS embedded cookie and the * {@link StsProtocolLocationListener}. * @author Christian Dupuis * @author Steffen Pingel * @since 2.2.0 */ @SuppressWarnings("restriction") public class StsProtocolPartListener implements IPartListener { private final StsProtocolLocationListener locationListener = new StsProtocolLocationListener(); /** * {@inheritDoc} */ public void partActivated(IWorkbenchPart part) { } /** * {@inheritDoc} */ public void partBroughtToTop(IWorkbenchPart part) { } /** * {@inheritDoc} */ public void partClosed(IWorkbenchPart part) { if (part instanceof WebBrowserEditor) { // Remove Link Handler Browser browser = getBrowser((WebBrowserEditor) part); if (browser != null) { browser.removeLocationListener(locationListener); } } } /** * {@inheritDoc} */ public void partDeactivated(IWorkbenchPart part) { } /** * {@inheritDoc} */ public void partOpened(IWorkbenchPart part) { if (part instanceof WebBrowserEditor) { if (SpringCoreUtils.isEclipseSameOrNewer(3, 5)) { // Add Cookies first; this is Eclipse 3.5 API and therefore we // can't do it on < 3.5 installCookies(); } // Add Link Handler Browser browser = getBrowser((WebBrowserEditor) part); if (browser != null) { browser.addLocationListener(locationListener); } } } // TODO e3.5 replace by Browser.setCookie(); private void setCookie(String value, String url) { try { Method method = Browser.class.getMethod("setCookie", String.class, String.class); method.invoke(null, value, url); } catch (Exception e) { // ignore } } private void installCookies() { setCookie(Activator.COOKIE, "http://localhost" + Activator.CONTEXT); setCookie(Activator.COOKIE, "https://localhost" + Activator.CONTEXT); setCookie(Activator.COOKIE, "http://127.0.0.1" + Activator.CONTEXT); setCookie(Activator.COOKIE, "https://127.0.0.1" + Activator.CONTEXT); try { InetAddress adr = InetAddress.getLocalHost(); setCookie(Activator.COOKIE, "http://" + adr.getHostName() + Activator.CONTEXT); setCookie(Activator.COOKIE, "https://" + adr.getHostName() + Activator.CONTEXT); setCookie(Activator.COOKIE, "http://" + adr.getHostAddress() + Activator.CONTEXT); setCookie(Activator.COOKIE, "https://" + adr.getHostAddress() + Activator.CONTEXT); } catch (UnknownHostException e) { Activator.log(e); } } private Browser getBrowser(final WebBrowserEditor browserEditor) { try { // HACK: using reflection to gain accessibility Class<?> browserClass = browserEditor.getClass(); Field browserField = browserClass.getDeclaredField("webBrowser"); browserField.setAccessible(true); Object browserObject = browserField.get(browserEditor); if (browserObject != null && browserObject instanceof BrowserViewer) { return ((BrowserViewer) browserObject).getBrowser(); } } catch (Exception e) { Activator.log(e); } return null; } }