Initial version from the webtools project; sligthly modified for phpeclipse
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / org / eclipse / webbrowser / WebBrowserEditorInput.java
1 /**
2  * Copyright (c) 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  *
8  * Contributors:
9  *    IBM - Initial API and implementation
10  */
11 package org.eclipse.webbrowser;
12
13 import java.net.URL;
14 import org.eclipse.jface.resource.ImageDescriptor;
15 import org.eclipse.ui.*;
16 import org.eclipse.webbrowser.internal.ImageResource;
17 import org.eclipse.webbrowser.internal.Trace;
18 import org.eclipse.webbrowser.internal.WebBrowserPreference;
19 import org.eclipse.webbrowser.internal.WebBrowserUIPlugin;
20 import org.eclipse.core.runtime.IAdaptable;
21 /**
22  * The editor input for the integrated web browser.
23  */
24 public class WebBrowserEditorInput implements IWebBrowserEditorInput, IPersistableElement, IElementFactory {
25         // --- constants to pass into constructor ---
26
27         // if used, the toolbar will be available
28         public static final int SHOW_TOOLBAR = 1 << 1;
29
30         // if used, the status bar will be available
31         public static final int SHOW_STATUSBAR = 1 << 2;
32
33         // if used, this input will always force a new page
34         // and will never reuse an open Web browser
35         public static final int FORCE_NEW_PAGE = 1 << 3;
36
37         // if used, the original URL will be saved and
38         // the page can reopen to the same URL after
39         // shutting down
40         public static final int SAVE_URL = 1 << 5;
41         
42         // if used, the browser will be transient and will not appear
43         // in the most recently used file list, nor will it reopen after
44         // restarting Eclipse
45         public static final int TRANSIENT = 1 << 6;
46
47         public static final int SHOW_ALL = SHOW_TOOLBAR | SHOW_STATUSBAR;
48
49         private static final String ELEMENT_FACTORY_ID = "org.eclipse.webbrowser.elementFactory";
50         private static final String MEMENTO_URL = "url";
51         private static final String MEMENTO_STYLE = "style";
52         private static final String MEMENTO_ID = "id";
53
54         private URL url;
55         private int style;
56         private String id = null;
57
58         /**
59          * WebBrowser editor input for the homepage.
60          */
61         public WebBrowserEditorInput() {
62                 this(null);
63         }
64
65         /**
66          * WebBrowserEditorInput constructor comment.
67          */
68         public WebBrowserEditorInput(URL url) {
69                 this(url, SHOW_ALL | SAVE_URL);
70         }
71
72         /**
73          * WebBrowserEditorInput constructor comment.
74          */
75         public WebBrowserEditorInput(URL url, int style) {
76                 super();
77                 this.url = url;
78                 this.style = style;
79         }
80
81         /**
82          * WebBrowserEditorInput constructor comment.
83          */
84         public WebBrowserEditorInput(URL url, int style, String browserId) {
85                 super();
86                 this.url = url;
87                 this.style = style;
88                 this.id = browserId;
89         }
90
91         /**
92          * WebBrowserEditorInput constructor comment.
93          */
94         public WebBrowserEditorInput(URL url, boolean b) {
95                 this(url);
96         }
97         
98         /**
99          * Returns true if this page can reuse the browser that the
100          * given input is being displayed in, or false if it should
101          * open up in a new page.
102          *
103          * @param input org.eclipse.webbrowser.IWebBrowserEditorInput
104          * @return boolean
105          */
106         public boolean canReplaceInput(IWebBrowserEditorInput input) {
107                 Trace.trace(Trace.FINEST, "canReplaceInput " + this + " " + input);
108                 if ((style & FORCE_NEW_PAGE) != 0)
109                         return false;
110                 else if (input.isToolbarVisible() != isToolbarVisible())
111                         return false;
112                 else if (input.isStatusbarVisible() != isStatusbarVisible())
113                         return false;
114                 else if (id != null) {
115                         if (!(input instanceof WebBrowserEditorInput))
116                                 return false;
117                         String bid = ((WebBrowserEditorInput) input).getBrowserId();
118                         return id.equals(bid);
119                 } else
120                         return false;
121         }
122         
123         /**
124          * Creates an <code>IElement</code> from the state captured within 
125          * an <code>IMemento</code>.
126          *
127          * @param memento a memento containing the state for an element
128          * @return an element, or <code>null</code> if the element could not be created
129          */
130         public IAdaptable createElement(IMemento memento) {
131                 URL url2 = null;
132                 try {
133                         url2 = new URL(WebBrowserPreference.getHomePageURL());
134                 } catch (Exception e) {
135                         // could not determine the URL
136                 }
137
138                 int newStyle = SHOW_TOOLBAR | SHOW_STATUSBAR;
139                 try {
140                         newStyle = memento.getInteger(MEMENTO_STYLE).intValue();
141         
142                         if ((newStyle & SAVE_URL) != 0)
143                                 url = new URL(memento.getString(MEMENTO_URL));
144                 } catch (Exception e) {
145                         // could not determine the style
146                 }
147                 
148                 String id2 = null;
149                 try {
150                         id2 = memento.getString(MEMENTO_ID);
151                         if (id2 != null && id2.length() < 1)
152                                 id2 = null;
153                 } catch (Exception e) { }
154                 
155                 return new WebBrowserEditorInput(url2, newStyle, id2);
156         }
157         
158         /**
159          * Indicates whether some other object is "equal to" this one.
160          * In this case it means that the underlying IFolders are equal.
161          */
162         public boolean equals(Object obj) {
163                 if (this == obj)
164                         return true;
165                 if (!(obj instanceof WebBrowserEditorInput))
166                         return false;
167                 WebBrowserEditorInput other = (WebBrowserEditorInput) obj;
168         
169                 if (url != null && !url.equals(obj))
170                         return false;
171         
172                 return canReplaceInput(other);
173         }
174         
175         /**
176          * Returns whether the editor input exists.  
177          * <p>
178          * This method is primarily used to determine if an editor input should 
179          * appear in the "File Most Recently Used" menu.  An editor input will appear 
180          * in the list until the return value of <code>exists</code> becomes 
181          * <code>false</code> or it drops off the bottom of the list.
182          *
183          * @return <code>true</code> if the editor input exists; <code>false</code>
184          *              otherwise
185          */
186         public boolean exists() {
187                 if ((style & TRANSIENT) != 0)
188                         return false;
189                 else
190                         return true;
191         }
192         
193         /**
194          * Returns an object which is an instance of the given class
195          * associated with this object. Returns <code>null</code> if
196          * no such object can be found.
197          *
198          * @param adapter the adapter class to look up
199          * @return a object castable to the given class, 
200          *    or <code>null</code> if this object does not
201          *    have an adapter for the given class
202          */
203         public Object getAdapter(Class adapter) {
204                 return null;
205         }
206         
207         /**
208          * Returns the ID of an element factory which can be used to recreate 
209          * this object.  An element factory extension with this ID must exist
210          * within the workbench registry.
211          * 
212          * @return the element factory ID
213          */
214         public String getFactoryId() {
215                 return ELEMENT_FACTORY_ID;
216         }
217         
218         public ImageDescriptor getImageDescriptor() {
219                 return ImageResource.getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER);
220         }
221         
222         /**
223          * Returns the name of this editor input for display purposes.
224          * <p>
225          * For instance, if the fully qualified input name is
226          * <code>"a\b\MyFile.gif"</code>, the return value would be just
227          * <code>"MyFile.gif"</code>.
228          *
229          * @return the file name string
230          */
231         public String getName() {
232                 return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle");
233         }
234         
235         /*
236          * Returns an object that can be used to save the state of this editor input.
237          *
238          * @return the persistable element, or <code>null</code> if this editor input
239          *   cannot be persisted
240          */
241         public IPersistableElement getPersistable() {
242                 if ((style & TRANSIENT) != 0)
243                         return null;
244                 else
245                         return this;
246         }
247         
248         public String getToolTipText() {
249                 if (url != null)
250                         return url.toExternalForm();
251                 else
252                         return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle");
253         }
254         
255         /**
256          * Returns the url.
257          *
258          * @return java.net.URL
259          */
260         public URL getURL() {
261                 return url;
262         }
263         
264         /**
265          * Returns the browser id. Browsers with a set id will always & only be
266          * replaced by browsers with the same id.
267          * 
268          * @return String
269          */
270         public String getBrowserId() {
271                 return id;
272         }
273         
274         /**
275          * Returns true if the status bar should be shown.
276          *
277          * @return boolean
278          */
279         public boolean isStatusbarVisible() {
280                 return (style & SHOW_STATUSBAR) != 0;
281         }
282         
283         /**
284          * Returns true if the toolbar should be shown.
285          *
286          * @return boolean
287          */
288         public boolean isToolbarVisible() {
289                 return (style & SHOW_TOOLBAR) != 0;
290         }
291         
292         /**
293          * Saves the state of an element within a memento.
294          *
295          * @param memento the storage area for element state
296          */
297         public void saveState(IMemento memento) {
298                 if ((style & SAVE_URL) != 0 && url != null)
299                         memento.putString(MEMENTO_URL, url.toExternalForm());
300
301                 memento.putInteger(MEMENTO_STYLE, style);
302                 
303                 if (id != null)
304                         memento.putString(MEMENTO_ID, id);
305         }
306
307         /**
308          * Converts this object to a string.
309          *
310          * @return java.lang.String
311          */
312         public String toString() {
313                 return "WebBrowserEditorInput[" + url + " " + style + " " + id + "]";
314         }
315 }