| /******************************************************************************* |
| * Copyright (c) 2004, 2005 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - Initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.browser; |
| |
| import java.net.URL; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IElementFactory; |
| import org.eclipse.ui.IMemento; |
| import org.eclipse.ui.IPersistableElement; |
| import org.eclipse.ui.browser.IWorkbenchBrowserSupport; |
| |
| /** |
| * The editor input for the integrated web browser. |
| */ |
| public class WebBrowserEditorInput implements IEditorInput, |
| IPersistableElement, IElementFactory { |
| // --- constants to pass into constructor --- |
| |
| // if used, the toolbar will be available |
| // public static final int SHOW_TOOLBAR = 1 << 1; |
| |
| // public static final int SHOW_GLOBAL_TOOLBAR = 1 << 2; |
| |
| // if used, the status bar will be available |
| // public static final int SHOW_STATUSBAR = 1 << 2; |
| |
| // if used, the original URL will be saved and |
| // the page can reopen to the same URL after |
| // shutting down |
| // public static final int SAVE_URL = 1 << 5; |
| |
| // if used, the browser will be transient and will not appear |
| // in the most recently used file list, nor will it reopen after |
| // restarting Eclipse |
| // public static final int TRANSIENT = 1 << 6; |
| |
| private static final String ELEMENT_FACTORY_ID = "org.eclipse.ui.browser.elementFactory"; //$NON-NLS-1$ |
| |
| private static final String MEMENTO_URL = "url"; //$NON-NLS-1$ |
| |
| private static final String MEMENTO_STYLE = "style"; //$NON-NLS-1$ |
| |
| private static final String MEMENTO_ID = "id"; //$NON-NLS-1$ |
| |
| private URL url; |
| |
| private int style; |
| |
| private String id = null; |
| |
| private String name; |
| |
| private String tooltip; |
| |
| /** |
| * ExternalBrowserInstance editor input for the homepage. |
| */ |
| public WebBrowserEditorInput() { |
| this(null); |
| } |
| |
| /** |
| * WebBrowserEditorInput constructor comment. |
| */ |
| public WebBrowserEditorInput(URL url) { |
| this(url, 0); |
| } |
| |
| /** |
| * WebBrowserEditorInput constructor comment. |
| */ |
| public WebBrowserEditorInput(URL url, int style) { |
| super(); |
| this.url = url; |
| this.style = style; |
| } |
| |
| /** |
| * WebBrowserEditorInput constructor comment. |
| */ |
| public WebBrowserEditorInput(URL url, int style, String browserId) { |
| super(); |
| this.url = url; |
| this.style = style; |
| this.id = browserId; |
| } |
| |
| /** |
| * WebBrowserEditorInput constructor comment. |
| */ |
| public WebBrowserEditorInput(URL url, boolean b) { |
| this(url); |
| } |
| |
| public void setName(String n) { |
| name = n; |
| } |
| |
| public void setToolTipText(String t) { |
| tooltip = t; |
| } |
| |
| /** |
| * Returns true if this page can reuse the browser that the given input is |
| * being displayed in, or false if it should open up in a new page. |
| * |
| * @param input |
| * org.eclipse.ui.internal.browser.IWebBrowserEditorInput |
| * @return boolean |
| */ |
| public boolean canReplaceInput(WebBrowserEditorInput input) { |
| Trace.trace(Trace.FINEST, "canReplaceInput " + this + " " + input); //$NON-NLS-1$ //$NON-NLS-2$ |
| // if ((style & FORCE_NEW_PAGE) != 0) |
| // return false; |
| // if (input.isToolbarVisible() != isToolbarVisible()) |
| // return false; |
| // else |
| if (input.isStatusbarVisible() != isStatusbarVisible()) |
| return false; |
| else if (id != null) { |
| String bid = input.getBrowserId(); |
| return id.equals(bid); |
| } else |
| return false; |
| } |
| |
| /** |
| * Creates an <code>IElement</code> from the state captured within an |
| * <code>IMemento</code>. |
| * |
| * @param memento |
| * a memento containing the state for an element |
| * @return an element, or <code>null</code> if the element could not be |
| * created |
| */ |
| public IAdaptable createElement(IMemento memento) { |
| URL url2 = null; |
| int newStyle = 0; |
| |
| try { |
| newStyle = memento.getInteger(MEMENTO_STYLE).intValue(); |
| |
| if (newStyle != 0) |
| url = new URL(memento.getString(MEMENTO_URL)); |
| } catch (Exception e) { |
| // could not determine the style |
| } |
| |
| String id2 = null; |
| try { |
| id2 = memento.getString(MEMENTO_ID); |
| if (id2 != null && id2.length() < 1) |
| id2 = null; |
| } catch (Exception e) { |
| // ignore |
| } |
| |
| return new WebBrowserEditorInput(url2, newStyle, id2); |
| } |
| |
| /** |
| * Indicates whether some other object is "equal to" this one. In this case |
| * it means that the underlying IFolders are equal. |
| */ |
| public boolean equals(Object obj) { |
| if (this == obj) |
| return true; |
| if (!(obj instanceof WebBrowserEditorInput)) |
| return false; |
| WebBrowserEditorInput other = (WebBrowserEditorInput) obj; |
| |
| if (url != null && !url.equals(obj)) |
| return false; |
| |
| return canReplaceInput(other); |
| } |
| |
| /* |
| * Returns whether the editor input exists. |
| */ |
| public boolean exists() { |
| if ((style & IWorkbenchBrowserSupport.PERSISTENT) != 0) |
| return false; |
| |
| return true; |
| } |
| |
| /** |
| * Returns an object which is an instance of the given class associated with |
| * this object. Returns <code>null</code> if no such object can be found. |
| * |
| * @param adapter |
| * the adapter class to look up |
| * @return a object castable to the given class, or <code>null</code> if |
| * this object does not have an adapter for the given class |
| */ |
| public Object getAdapter(Class adapter) { |
| return null; |
| } |
| |
| /** |
| * Returns the ID of an element factory which can be used to recreate this |
| * object. An element factory extension with this ID must exist within the |
| * workbench registry. |
| * |
| * @return the element factory ID |
| */ |
| public String getFactoryId() { |
| return ELEMENT_FACTORY_ID; |
| } |
| |
| public ImageDescriptor getImageDescriptor() { |
| return ImageResource |
| .getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER); |
| } |
| |
| /** |
| * Returns true if the name is locked and cannot be changed. |
| * |
| * @return <code>true</code> if the name of the browser should not change |
| */ |
| protected boolean isNameLocked() { |
| return (name != null); |
| } |
| |
| /** |
| * Returns the name of this editor input for display purposes. |
| * <p> |
| * For instance, if the fully qualified input name is |
| * <code>"a\b\MyFile.gif"</code>, the return value would be just |
| * <code>"MyFile.gif"</code>. |
| * |
| * @return the file name string |
| */ |
| public String getName() { |
| if (name != null) |
| return name; |
| |
| return Messages.viewWebBrowserTitle; |
| } |
| |
| /* |
| * Returns an object that can be used to save the state of this editor |
| * input. @return the persistable element, or <code>null</code> if this |
| * editor input cannot be persisted |
| */ |
| public IPersistableElement getPersistable() { |
| if ((style & IWorkbenchBrowserSupport.PERSISTENT) == 0) |
| return null; |
| |
| return this; |
| } |
| |
| public String getToolTipText() { |
| if (tooltip != null) |
| return tooltip; |
| |
| if (url != null) |
| return url.toExternalForm(); |
| |
| return Messages.viewWebBrowserTitle; |
| } |
| |
| /** |
| * Returns the url. |
| * |
| * @return java.net.URL |
| */ |
| public URL getURL() { |
| return url; |
| } |
| |
| /** |
| * Returns the browser id. Browsers with a set id will always & only be |
| * replaced by browsers with the same id. |
| * |
| * @return String |
| */ |
| public String getBrowserId() { |
| return id; |
| } |
| |
| /** |
| * Returns true if the status bar should be shown. |
| * |
| * @return boolean |
| */ |
| public boolean isStatusbarVisible() { |
| return (style & IWorkbenchBrowserSupport.STATUS) != 0; |
| } |
| |
| /** |
| * Returns true if the toolbar should be shown. |
| * |
| * @return boolean |
| */ |
| public boolean isLocationBarLocal() { |
| return (style & BrowserViewer.LOCATION_BAR) != 0; |
| } |
| |
| /* |
| * public boolean isLocationBarGlobal() { return (style & |
| * ExternalBrowserInstance.LOCATION_TOOLBAR) != 0; } |
| */ |
| |
| public boolean isToolbarLocal() { |
| return (style & BrowserViewer.BUTTON_BAR) != 0; |
| } |
| |
| /* |
| * public boolean isToolbarGlobal() { return (style & |
| * ExternalBrowserInstance.BUTTON_TOOLBAR) != 0; } |
| */ |
| |
| /** |
| * Saves the state of an element within a memento. |
| * |
| * @param memento |
| * the storage area for element state |
| */ |
| public void saveState(IMemento memento) { |
| if ((style & IWorkbenchBrowserSupport.PERSISTENT) != 0 && url != null) |
| memento.putString(MEMENTO_URL, url.toExternalForm()); |
| |
| memento.putInteger(MEMENTO_STYLE, style); |
| |
| if (id != null) |
| memento.putString(MEMENTO_ID, id); |
| } |
| |
| /** |
| * Converts this object to a string. |
| * |
| * @return java.lang.String |
| */ |
| public String toString() { |
| return "WebBrowserEditorInput[" + url + " " + style + " " + id + "]"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
| } |
| } |